-
1 # 帆軟軟體
-
2 # IT技術管理那些事兒
生活階梯(幸福指數)與人均GDP(金錢)正相關的正則圖
本文將探討三種用Python視覺化資料的不同方法。以視覺化《2019年世界幸福報告》的資料為例,本文用Gapminder和Wikipedia的資訊豐富了《世界幸福報告》資料,以探索新的資料關係和視覺化方法。
《世界幸福報告》試圖回答世界範圍內影響幸福的因素。
報告根據對“坎特里爾階梯問題”的回答來確定幸福指數,被調查者需對自己的生活狀況進行打分,10分為最佳狀態,0分為最差。
本文將使用Life Ladder作為目標變數。Life Ladder就是指幸福指數。
文章結構
本文旨在提供程式碼指南和參考點,以便在查詢特定型別的圖表時進行參考。為了節省空間,有時會將多個圖表合併到一張圖上。但是請放心,你可以在這個Repo或相應的Jupyter Notebook中找到所有基本程式碼。
目錄
· 我使用Python進行繪圖的經歷
· 分佈的重要性
· 載入資料和包匯入
· 迅速:使用Pandas進行基本繪圖
· 美觀:使用Seaborn進行高階繪圖
· 精彩:用plotly創造精彩的互動情節
1. 我使用Python進行繪圖的經歷大約兩年前,我開始更認真地學習Python。從那時起,Python幾乎每週都會給我一些驚喜,它不僅自身簡單易用,而且其生態系統中還有很多令人驚歎的開源庫。我對命令、模式和概念越熟悉,就越能充分利用其功能。
Matplotlib
與用Python繪圖正好相反。最初,我用matplotlib建立的幾乎每個圖表看起來都很過時。更糟糕的是,為了建立這些討厭的東西,我不得不在Stackoverflow上花費數小時。例如,研究改變x斜度的基本命令或者類似這些的蠢事。我一點也不想做多圖表。以程式設計的方式建立這些圖表是非常奇妙的,例如,一次生成50個不同變數的圖表,結果令人印象深刻。然而,其中涉及大量的工作,需要記住一大堆無用的指令。
Seaborn
學習Seaborn能夠節省很多精力。Seaborn可以抽象出大量的微調。毫無疑問,這使得圖表在美觀上得到巨大的改善。然而,它也是構建在matplotlib之上的。通常,對於非標準的調整,仍然有必要使用機器級的matplotlib程式碼。
Bokeh
一時間,我以為Bokeh會成為一個後援解決方案。我在做地理空間視覺化的時候發現了Bokeh。然而,我很快就意識到,雖然Bokeh有所不同,但還是和matplotlib一樣複雜。
Plotly
不久前我確實嘗試過 http://plot.ly (後面就直接用plotly來表示)同樣用於地理空間視覺化。那個時候,plotly比前面提到的庫還要麻煩。它必須透過筆記本賬戶登入,然後plotly可以線上呈現,接著下載最終圖表。我很快就放棄了。但是,我最近看到了一個關於plotlyexpress和plotly4.0的Youtube影片,重點是,他們把那些線上的廢話都刪掉了。我嘗試了一下,本篇文章就是嘗試的成果。我想,知道得晚總比不知道的好。
Kepler.gl (地理空間資料優秀獎)
Kepler.gl不是一個Python庫,而是一款強大的基於web的地理空間資料視覺化工具。只需要CSV檔案,就可以使用Python輕鬆地建立檔案。試試吧!
當前工作流程
最後,我決定使用Pandas本地繪圖進行快速檢查,並使用Seaborn繪製要在報告和演示中使用的圖表(視覺效果很重要)。
2. 分佈的重要性我在聖地亞哥從事研究期間,負責教授統計學(Stats119)。Stats119是統計學的入門課程,包括統計的基礎知識,如資料聚合(視覺化和定量)、機率的概念、迴歸、抽樣、以及最重要的分佈。這一次,我對數量和現象的理解幾乎完全轉變為基於分佈的理解(大多數時候是高斯分佈)。
直到今天,我仍然驚訝於這兩個量的作用,標準差能幫助人理解現象。只要知道這兩個量,就可以直接得出具體結果的機率,使用者馬上就知道大部分的結果的分佈情況。它提供了一個參考框架,無需進行過於複雜的計算,就可以快速找出有統計意義的事件。
一般來說,面對新資料時,我的第一步是嘗試視覺化其分佈,以便更好地理解資料。
3. 載入資料和包匯入先載入本文使用的資料。我已經對資料進行了預處理。並對它的意義進行了探究和推斷。
# Loadthe data data = pd.read_csv("https://raw.githubusercontent.com/FBosler/AdvancedPlotting/master/combined_set.csv")#this assigns labels per year data["Mean Log GDP per capita"] =data.groupby("Year")["Log GDP per capita"].transform( pd.qcut, q=5, labels=(["Lowest","Low","Medium","High","Highest"]) )
資料集包含以下值:
· 年份:計量年(2007 -2018)
· 生活階梯:受訪者根據坎特里爾階梯(CantrilLadder),用0~10分(最滿意的為10分)來衡量他們今天的生活
· 人均GDP:根據世界銀行2018年11月14日釋出的《世界發展指標》(WDI),將人均GDP調整為PPP(2011年不變價國際元)
· 社會支援:對下面問題的回答:“遇到困難時,是否可以隨時獲得親戚或朋友的幫助?”
· 出生時預期健康壽命:出生時預期健康壽命是根據世界衛生組織(WHO)全球衛生觀察站(GHO)資料庫構建的,資料分別來自2005年、2010年、2015年和2016年。
· 自由選擇權:回答下面這個問題:“你是否對自己生活的選擇自由感到滿意?”
· 慷慨:對“過去一個月是否給慈善機構捐過款?”與人均GDP相比
· 政治清廉:回答“腐敗現象在政府中是否普遍?”“腐敗在企業內部是否普遍?”
· 積極影響:包括前一天快樂、歡笑和享受的平均頻率。
· 負面影響:包括前一天焦慮、悲傷和憤怒的平均頻率。
· 對國家政府的信心:不言自明
· 民主質量:一個國家的民主程度
· 執行質量:一個國家的政策執行情況
· Gapminder預期壽命:Gapminder的預期壽命
· Gapminder人口: 國家人口匯入
4. 迅速:使用Pandas進行基本繪圖圖片來源:Marvin Meyer/UnsplashPandas有內建的繪圖功能,可以在Series或DataFrame上呼叫。之所以喜歡這些繪圖函式,是因為它們簡潔、使用合理的智慧預設值、很快就能給出進展程度。建立圖表,在資料中呼叫.plot(kind=<TYPE OF PLOT>),如下所示:
執行上述命令,生成以下圖表。
2018年:人均GDP直方圖。大多數國家都很窮,這一點也不奇怪!用Pandas繪圖時,有五個主要引數:· kind:Pandas必須知道需要建立什麼樣的圖,可選的有以下幾種:直方圖(hist),條形圖(bar),水平條圖(barh),散點圖(scatter),面積(area),核密度估計(kde),折線圖(line),方框(box),六邊形(hexbin),餅狀圖(pie)。· figsize:允許6英寸寬和4英寸高的預設輸出尺寸。需要一個元組(例如,我就經常使用figsize=(12,8))· title:為圖表新增一個標題。大多數情況下,可以用這個標題來標明圖表中所顯示的內容,這樣回過頭來看的時候,就能很快識別出表的內容。title需要一個字串。· bins:直方圖的bin寬度。bin需要一個值的列表或類似列表序列(例如, bins=np.arange(2,8,0.25))· xlim/ylim: 軸的最大和最小預設值。xlim和ylim都最好有一個元組(例如, xlim=(0,5))下面來快速瀏覽一下不同型別的圖。垂直條形圖
2018年:芬蘭位居15個最幸福國家之首
水平條形圖
澳洲和紐西蘭2011年人均GDP(美元)明顯領先盒型圖
人生階梯分佈的方框圖顯示平均值在5.5左右,範圍為3~8。散點圖
該散點圖顯示了《世界幸福報告》的預期壽命與Gapminder的預期壽命兩者之間的高度相關性
Hexbin圖
2018年:Hexbin圖,表示人的平均壽命與慷慨程度之間的關係。格子的顏色表示每個格子的平均壽命。餅狀圖
2018年:按大洲劃分的總人口數餅狀圖堆積面積圖
全球人口數量正在增長。折線圖
表示德國幸福指數發展的折線圖關於Pandas繪圖的總結用pandas繪圖很方便。易於訪問,速度也快。只是圖表外觀相當醜,幾乎不可能偏離預設值。不過這沒關係,因為有其他工具來製作更美觀的圖表。
5. 美觀:使用Seaborn進行高階繪圖繪製單變數分佈如前所述,我非常喜歡分佈。直方圖和核密度分佈都是視覺化特定變數關鍵特徵的有效方法。下面來看看如何在一個圖表中生成單個變數或多個變數分佈。
左圖:2018年亞洲國家人生階梯直方圖和核密度估算;右圖:五組人均GDP人生階梯的核心密度估算——體現了金錢與幸福指數的關係繪製二元分佈每當我想要直觀地探索兩個或多個變數之間的關係,總是用到某種形式的散點圖和分佈評估。在概念上相似的圖表有三種變體。在每個圖中,中心圖(散點圖,二元KDE,hexbin)有助於理解兩個變數之間的聯合頻率分佈。此外,在中心圖的右邊界和上邊界,描述了各自變數的邊際單變數分佈(用KDE或直方圖表示)。
Seaborn雙標圖,散點圖、二元KDE和Hexbin圖都在中心圖中,邊緣分佈在中心圖的左側和頂部。散點圖散點圖是一種視覺化兩個變數聯合密度分佈的方法。可以透過新增色度來新增第三個變數,透過新增尺寸引數來新增第四個變數。
人均GDP與生活階梯的關係,不同顏色表示不同大洲和人口規模小提琴圖小提琴圖結合了盒狀圖和核密度估計值。它的作用類似於盒狀圖,顯示了定量資料在分類變數之間的分佈,以便對這些分佈進行比較。
小提琴圖在繪製大洲與生活階梯的關係圖時,用人均GDP的平均值對資料進行分組。人均GDP越高,幸福指數就越高配對圖Seaborn配對圖是在一個大網格中繪製雙變數散點圖的所有組合。我通常覺得這有點資訊過載,但它有助於發現規律。
Seaborn散點圖網格中,所有選定的變數都分散在網格的下半部分和上半部分,對角線包含Kde圖。FacetGrids對我來說,Seaborn的FacetGrid是證明它好用最有說服力的證據之一,因為它能輕而易舉地建立多圖表。透過配對圖,我們已經看到了FacetGrid的一個示例。它可以建立多個按變數分組的圖表。例如,行可以是一個變數(人均GDP的類別),列是另一個變數(大洲)。它確實還需要適應客戶需求(即使用matplotlib),但是它仍然是令人信服。FacetGrid— 折線圖
y軸代表生活階梯,x軸代表年份。網格的列代表大洲,網格的行代表不同水平的人均GDP。總體而言,北美人均GDP平均值較低的國家和歐洲人均GDP平均值中等或較高的國家,情況似乎有所好轉FacetGrid— 直方圖
按大洲劃分的生活階梯直方圖FacetGrid— 帶註釋的KDE圖還可以向網格中的每個圖表新增特定的註釋。以下示例將平均值和標準偏差以及在平均值處繪製的垂直線相加(程式碼如下)。
基於大洲的生命階梯核密度估計值,註釋為均值和標準差
annotate_facet_grid.py hostedwith ❤ by GitHub
畫一條垂直的平均值線並添加註釋FacetGrid— 熱圖我最喜歡的一種繪圖型別就是FacetGrid的熱圖,即每一個網格都有熱圖。這種型別的繪圖有助於在一個圖中視覺化四維和度量。程式碼有點麻煩,但是可以根據使用者的需要快速調整。需要注意的是,這種圖表不能很好地處理缺失的值,所以需要大量的資料或適當的分段。
Facet熱圖,外層的行顯示在一年內,外層的列顯示人均GDP,內層的行顯示政治清廉,內層的列顯示大洲。我們看到幸福指數朝著右上方向增加(即,高人均GDP和高政治清廉)。時間的影響還不確定,一些大洲(歐洲和北美)似乎比其他大洲(非洲)更幸福。
heatmap_facetgrid.py hostedwith ❤ by GitHub
6. 精彩:用plotly創造精彩的互動情節圖片來源:Chris Leipelt / Unsplash最後, 無需使用matplotlib!Plotly有三個重要特徵:· 懸停:當滑鼠懸停在圖表上時,會彈出註釋· 互動性:不需要任何額外設定,圖表就可以進行互動(例如,一次穿越時間的旅程)· 漂亮的地理空間圖:Plotly已經內建了一些基本的對映功能,另外,還可以使用mapbox整合來製作令人驚歎的圖表。散點圖透過下列程式碼來執行plotly圖表:
Plotly散點圖,繪製人均 GDP與生活階梯的關係,其中顏色表示大洲和人口的大小
散點圖 — 穿越時間的漫步
視覺化數年來繪圖資料的變化
平行類別——一個能視覺化類別的有趣方式
並不是所有預期壽命高的國家的人民都很幸福!
條形圖—一個互動式濾波器的示例
過濾條形圖很容易。毫無疑問,南韓是亞洲富裕國家之一。
等值線圖— —幸福指數與時間的關係
視覺化不同地域的幸福指數是如何隨時間變化的。敘利亞和阿富汗正處於人生階梯的末端(這不足為奇)。
結束語本文展示瞭如何成為一名真正的Python視覺化專家、如何在快速探索時更有效率、以及如何在董事會會議前建立更漂亮的圖表、還有如何建立互動式繪圖圖表,尤其是在繪製地理空間資料時,十分有用。
-
3 # 小小猿愛嘻嘻
這裡推薦兩個視覺化包—pyecharts和seaborn,相對matplotlib來說,程式碼量更少,繪製出來的圖更美觀,使用起來更簡單也更快捷,實驗環境win10+python3.6+pycharm5.0,主要介紹如下:
pyecharts:這個是基於Echart圖表的一個類庫,主要基於web瀏覽器進行顯示,繪製的圖形比較多,包括折線圖、柱狀圖、餅圖、漏斗圖、地圖、極座標圖等,程式碼量很少,而且很靈活,繪製出來的圖形很美觀,如下:
1.柱狀圖
測試程式碼如下:
執行截圖:
2.漏斗圖
測試程式碼如下:
執行截圖:
3.地圖
測試程式碼如下:
執行截圖:
4.極座標系圖
測試程式碼如下:
執行截圖:
seaborn:seaborn是對matplotlib更高階的封裝,作圖更加容易,程式碼量更少,使用起來也很方便和快捷,涉及的圖形種類也挺多,包括折線圖、柱狀圖、小提琴圖、散點圖等,如下:
1.小提琴圖
測試程式碼:
執行截圖:
2.散點圖
測試程式碼:
執行截圖:
3.柱狀圖
測試程式碼:
執行截圖:
至此,這兩個視覺化包都介紹完畢,使用起來都挺方便的,只要你認真認真的學習學習,寫寫程式碼,很快就能舉一反三,繪製出美觀的圖形,當然你也可以使用matplotlib進行繪圖,只不過會相對麻煩一些,網上也有這兩個包的教程,官網也有相關文件,感興趣的話可以學習學習,對以後幫助一定會很大,希望以上分享的內容能對你有所幫助吧。
-
4 # 軟體測試開發技術棧
補充推薦一個Python 新資料視覺化模組——Plotly Express 。
Plotly ExpressPlotly Express是一個新的高階Python資料視覺化庫,它是Plotly.py的高階封裝,它為複雜的圖表提供了一個簡單的語法。只需一次匯入,大多數繪圖只要一個函式呼叫,接受一個整潔的Pandas dataframe,就可以建立豐富的互動式繪圖。
Plotly Express 安裝慣例,使用 pip進行安裝。
pip install plotly_expressPlotly Express支援構建圖表型別scatter:在散點圖中,每行data_frame由2D空間中的符號標記表示。scatter_3d:在3D散點圖中,每行data_frame由3D空間中的符號標記表示。scatter_polar:在極座標散點圖中,每行data_frame由極座標中的符號標記表示。scatter_ternary:在三元散點圖中,每行data_frame由三元座標中的符號標記表示。scatter_mapbox:在Mapbox散點圖中,每一行data_frame都由Mapbox地圖上的符號標記表示。scatter_geo:在地理散點圖中,每一行data_frame都由地圖上的符號標記表示。scatter_matrix:在散點圖矩陣(或SPLOM)中,每行data_frame由多個符號標記表示,在2D散點圖的網格的每個單元格中有一個,其將每對dimensions彼此相對繪製。density_contour:在密度等值線圖中,行data_frame被組合在一起成為輪廓標記,以視覺化該值的聚合函式histfunc(例如,計數或總和)的2D分佈z。density_heatmap:在密度熱圖中,行data_frame被組合在一起成為彩色矩形瓦片,以視覺化該值的聚合函式histfunc(例如,計數或總和)的2D分佈 z。line:在2D線圖中,每行data_frame表示為2D空間中折線標記的頂點。line_polar:在極線圖中,每行data_frame表示為極座標中折線標記的頂點。line_ternary:在三元線圖中,每行data_frame表示為三元座標中折線標記的頂點。line_mapbox:在Mapbox線圖中,每一行都data_frame表示為Mapbox地圖上折線標記的頂點。line_geo:在地理線圖中,每一行都data_frame表示為地圖上折線標記的頂點。parallel_coordinates:在平行座標圖中,每行data_frame由折線標記表示,該折線標記穿過一組平行軸,每個平行軸對應一個平行軸 dimensions。parallel_categories:在並行類別(或平行集)圖中,每行data_frame與其他共享相同值的行組合,dimensions然後透過一組平行軸繪製為折線標記,每個平行軸對應一個dimensions。area:在堆積區域圖中,每行data_frame表示為2D空間中折線標記的頂點。連續折線之間的區域被填充。bar:在條形圖中,每行data_frame表示為矩形標記。bar_polar:在極座標圖中,每一行都data_frame表示為極座標中的楔形標記。violin:在小提琴圖中,將data_frame行分組成一個曲線標記,以便視覺化它們的分佈。box:在箱形圖中,行data_frame被組合在一起成為盒須標記,以顯示它們的分佈。strip:在條形圖中,每一行都data_frame表示為類別中的抖動標記。histogram:在直方圖中,行data_frame被組合在一起成為矩形標記,以視覺化該值的聚合函式histfunc(例如,計數或總和)的1D分佈y(或者x如果orientation是"h")。choropleth:在等值區域圖中,每行data_frame由地圖上的彩色區域標記表示。gapminder資料集說明我們使用gapminder資料集進行體驗 Plotly Express 。
gapminder資料集顯示2007年按國家/地區的人均預期壽命和人均GDP 之間的趨勢:包含1952~2007年世界各國家人口、GDP發展與/地區的人均預期壽命和人均GDP 之間的趨勢。
Country:國家,ChinaContinent:洲,AsiaYear:年份,1952LifeExp:預期壽命,44POP:人口,556263527GdpPercap:分均 GDP,400.448611iso_alpha:國家編碼,CHNiso_num:國家程式碼,156上手體驗一下,輕鬆地進行資料視覺化。散點圖scatter常用引數說明:
data_frame: 一個"整潔" pandas.DataFramex:(字串:列的名稱data_frame)此列中的值用於沿笛卡爾座標沿x軸定位標記。對於水平histogram()s,這些值用作輸入histfunc。y:(字串:列的名稱data_frame)此列中的值用於沿笛卡爾座標中的y軸定位標記。對於垂直histogram()s,這些值用作輸入histfunc。color:(字串:列的名稱data_frame)此列中的值用於為標記指定顏色。size:(字串:列名稱data_frame)此列中的值用於指定標記大小。color_continuous_scale:(有效CSS顏色字串列表)此列表用於在表示的列color包含數字資料時構建連續顏色標度。plotly_express.colors子模組中有各種有用的色標,特別plotly_express.colors.sequential是plotly_express.colors.diverging和plotly_express.colors.cyclical。title:(字串)圖示題。template:(字串或Plotly.py模板物件)圖模板名稱或定義。width:(整數,預設None)圖形寬度(以畫素為單位)。height:(整數,預設600)圖形高度(以畫素為單位)。使用散點圖描述華人口與GDP增長趨勢圖
地理散點圖scatter_geo常用引數說明
data_frame:“整潔”pandas.DataFramelat:(字串:data_frame)此列的值用於根據地圖上的緯度定位標記。lon:(字串:data_frame)此列的值用於根據地圖上的經度定位標記。locations:(字串:data_frame)該列中的值將根據locationmode並對映到經度/緯度。locationmode:(字串,“ISO-3”、“美國-州”、“國家名稱”之一)確定用於匹配locations地圖上的區域。color:(字串:data_frame)此列的值用於為標記指定顏色。size:(字串:data_frame)此列的值用於分配標記大小。color_continuous_scale:(有效的css-顏色字串列表)此列表用於在color包含數字資料。中提供了各種有用的色標。plotly_express.colors子模組,特別是plotly_express.colors.sequential, plotly_express.colors.diverging和plotly_express.colors.cyclical.title:(字串)圖形標題。width:(整數,預設)None)以畫素為單位的圖形寬度。height:(整數,預設)600)以畫素為單位的圖形高度。使用地理散點圖描述全球人口與GDP
折線圖(line)常用引數說明
data_frame:“整潔”pandas.DataFramex:(字串:data_frame)該列的值用於在笛卡爾座標中沿x軸定位標記。臥式histogram(),這些值用作histfunc.y:(字串:data_frame)該列的值用於在笛卡爾座標中沿y軸定位標記。垂直histogram(),這些值用作histfunc.color:(字串:data_frame)此列的值用於為標記指定顏色。facet_col:(字串:data_frame)此列中的值用於在水平方向平面子圖分配標記。title:(字串)圖形標題。width:(整數,預設)None)以畫素為單位的圖形寬度。height:(整數,預設)600)以畫素為單位的圖形高度。使用折線圖描述1952~2007中國與美華人口增長趨勢圖
條形圖(bar)常用引數說明
data_frame:“整潔”pandas.DataFramex:(字串:data_frame)該列的值用於在笛卡爾座標中沿x軸定位標記。臥式histogram(),這些值用作histfunc.y:(字串:data_frame)該列的值用於在笛卡爾座標中沿y軸定位標記。垂直histogram(),這些值用作histfunc.color:(字串:data_frame)此列的值用於為標記指定顏色。facet_row:(字串:data_frame)此列的值用於向垂直方向上的平面子圖分配標記。facet_col:(字串:data_frame)此列中的值用於在水平方向平面子圖分配標記。text:(字串:data_frame)此列的值以文字標籤的形式顯示在圖中。title:(字串)圖形標題。template:(String或Plotly.py模板物件)圖形模板名稱或定義。width:(整數,預設)None)以畫素為單位的圖形寬度。height:(整數,預設)600)以畫素為單位的圖形高度。使用條形圖描述1952~2007中國與美華人口增長趨勢圖
等值區域圖(choropleth)常用引數說明
data_frame:“整潔”pandas.DataFramelat:(字串:data_frame)此列的值用於根據地圖上的緯度定位標記。lon:(字串:data_frame)此列的值用於根據地圖上的經度定位標記。locations:(字串:data_frame)該列中的值將根據locationmode並對映到經度/緯度。locationmode:(字串,“ISO-3”、“美國-州”、“國家名稱”之一)確定用於匹配locations地圖上的區域。color:(字串:data_frame)此列的值用於為標記指定顏色。size:(字串:data_frame)此列的值用於分配標記大小。color_continuous_scale:(有效的css-顏色字串列表)此列表用於在color包含數字資料。中提供了各種有用的色標。plotly_express.colors子模組,特別是plotly_express.colors.sequential, plotly_express.colors.diverging和plotly_express.colors.cyclical.title:(字串)圖形標題。width:(整數,預設)None)以畫素為單位的圖形寬度。height:(整數,預設)600)以畫素為單位的圖形高度。使用等值區域圖描述各個國家人口數量
回覆列表
如同藝術家們用繪畫讓人們更貼切的感知世界,資料視覺化也能讓人們更直觀的傳遞資料所要表達的資訊。
我們今天就分享一下如何用 Python 簡單便捷的完成資料視覺化。
其實利用 Python 視覺化資料並不是很麻煩,因為 Python 中有兩個專用於視覺化的庫 matplotlib 和 seaborn 能讓我們很容易的完成任務。
Matplotlib:基於Python的繪相簿,提供完全的 2D 支援和部分 3D 影象支援。在跨平臺和互動式環境中生成高質量資料時,matplotlib 會很有幫助。也可以用作製作動畫。Seaborn:該 Python 庫能夠建立富含資訊量和美觀的統計圖形。Seaborn 基於 matplotlib,具有多種特性,比如內建主題、調色盤、可以視覺化單變數資料、雙變數資料,線性迴歸資料和資料矩陣以及統計型時序資料等,能讓我們建立複雜的視覺化圖形。我們用 Python 可以做出哪些視覺化圖形?
那麼這裡可能有人就要問了,我們為什麼要做資料視覺化?比如有下面這個圖表:
當然如果你把這張圖表丟給別人,他們倒是也能看懂,但無法很直觀的理解其中的資訊,而且這種形式的圖表看上去也比較 low,這個時候我們如果換成直觀又美觀的視覺化圖形,不僅能突顯逼格,也能讓人更容易的看懂資料。
下面我們就用上面這個簡單的資料集作為例子,展示用 Python 做出9種視覺化效果,並附有相關程式碼。
匯入資料集
import matplotlib.pyplot as plt import pandas as pd df=pd.read_excel("E:/First.xlsx", "Sheet1")
視覺化為直方圖
fig=plt.figure() #Plots in matplotlib reside within a figure object, use plt.figure to create new figure #Create one or more subplots using add_subplot, because you can"t create blank figure ax = fig.add_subplot(1,1,1) #Variable ax.hist(df["Age"],bins = 7) # Here you can play with number of bins Labels and Tit plt.title("Age distribution") plt.xlabel("Age") plt.ylabel("#Employee") plt.show()
視覺化為箱線圖
import matplotlib.pyplot as plt import pandas as pd fig=plt.figure() ax = fig.add_subplot(1,1,1) #Variable ax.boxplot(df["Age"]) plt.show()
視覺化為小提琴圖
import seaborn as sns sns.violinplot(df["Age"], df["Gender"]) #Variable Plot sns.despine()
視覺化為條形圖
var = df.groupby("Gender").Sales.sum() #grouped sum of sales at Gender level fig = plt.figure() ax1 = fig.add_subplot(1,1,1) ax1.set_xlabel("Gender") ax1.set_ylabel("Sum of Sales") ax1.set_title("Gender wise Sum of Sales") var.plot(kind="bar")
視覺化為折線圖
var = df.groupby("BMI").Sales.sum() fig = plt.figure() ax1 = fig.add_subplot(1,1,1) ax1.set_xlabel("BMI") ax1.set_ylabel("Sum of Sales") ax1.set_title("BMI wise Sum of Sales") var.plot(kind="line")
視覺化為堆疊柱狀圖
var = df.groupby(["BMI","Gender"]).Sales.sum() var.unstack().plot(kind="bar",stacked=True, color=["red","blue"], grid=False)
視覺化為散點圖
fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.scatter(df["Age"],df["Sales"]) #You can also add more variables here to represent color and size. plt.show()
視覺化為泡泡圖
fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.scatter(df["Age"],df["Sales"], s=df["Income"]) # Added third variable income as size of the bubble plt.show()
視覺化為餅狀圖
var=df.groupby(["Gender"]).sum().stack() temp=var.unstack() type(temp) x_list = temp["Sales"] label_list = temp.index pyplot.axis("equal") #The pie chart is oval by default. To make it a circle use pyplot.axis("equal") #To show the percentage of each pie slice, pass an output format to the autopctparameter plt.pie(x_list,labels=label_list,autopct="%1.1f%%") plt.title("Pastafarianism expenses") plt.show()
視覺化為熱度圖
import numpy as np #Generate a random number, you can refer your data values also data = np.random.rand(4,2) rows = list("1234") #rows categories columns = list("MF") #column categories fig,ax=plt.subplots() #Advance color controls ax.pcolor(data,cmap=plt.cm.Reds,edgecolors="k") ax.set_xticks(np.arange(0,2)+0.5) ax.set_yticks(np.arange(0,4)+0.5) # Here we position the tick labels for x and y axis ax.xaxis.tick_bottom() ax.yaxis.tick_left() #Values against each labels ax.set_xticklabels(columns,minor=False,fontsize=20) ax.set_yticklabels(rows,minor=False,fontsize=20) plt.show()
你也可以自己試著根據兩個變數比如性別(X 軸)和 BMI(Y 軸)繪出熱度圖。
結語
其實,也不一定非得用python,python的上手難度太高了,對於非程式設計人員來說,這個其實是很困難的,所以我推薦FineBI,一款簡潔易用的視覺化工具。
你可以直接棄用Excel做資料透視表,各種寫公式,各種百度VBA程式碼的“無奈”操作。尤其是最新版,無論是對剛入門資料分析的,自己捯飭資料做業務分析的,出資料視覺化的,還是專業的資料分析師,都是絕佳的好工具。
而且個人使用永久免費,沒有閹割功能,大讚!先給大家看看finebi的效果圖~
當然,其實以上只是FineBI強大功能中的冰山一角,限於篇幅,這邊暫時先給大家分享這麼多。
首先是工作流程上,BI工具打破了傳統資訊部門開發報表,業務人員檢視報表的滯後資料流程,透過輕量便捷的BI平臺使得最有分析需求的業務人員也能輕鬆分析出自己所需要的資料結果。
其次是大資料的處理效能上,FineBI提供的FineIndex+FineDirect雙資料引擎則分別滿足實時和大資料量的計算需求,秒級重新整理的頁面響應,讓領導看資料不再經歷漫長等待。
最後,FineBI除了解放業務人員之外,最大的貢獻應該是對企業。上了FineBI之後,讓業務人員也能基於業務基於指標去做特定主題的資料分析,進而為公司經營出謀劃策,做到全員都能用好資料,實現阿米巴式模式全員經營,這樣一來,企業經營業績指標不蒸蒸日上才怪呢。