[資料分析&機器學習] 第2.5講:資料視覺化(Matplotlib, Seaborn, Plotly)

Yeh James
JamesLearningNote
Published in
9 min readOct 11, 2017

資料視覺化除了最後一步呈現你的成果之外,還可以在分析的過程中用資料視覺化來看出一些insight,比方說用熱點圖來看你的Deep learning的model是對圖片中哪一部分的看得較重要,或是可以降維之後將資料視覺化去看資料在空間中的分佈,來決定下一步的分析要怎麼做。

Python資料視覺化主要有三大套件:

  1. Matplotlib
  2. Seaborn
  3. Plotly

其他還有像是Bokeh, ggplot…十幾種Python視覺化套件,以及更進階的BI Tool(Tableau, Spotfire, MicroStrategy)。如果你去大公司上班,ex: 台積電, Yahoo…都會購買這些要價不菲的BI Tool,對於資料處理&視覺化功能有更豐富的運用。但對於一般使用者只要先掌握上述三個就夠了。今天就要來介紹一下這三種視覺化套件

Matplotlib(之後簡稱Matplot)

matplotlib官網

優點:

  1. 相較於其他視覺化套件,matplot算是最歷史悠久,因此有很多的教學文章或是範例可參考
  2. 畫圖功能最齊全,基本上沒什麼圖表畫不出來的

缺點:

  1. 圖表不好看(舊版的matplot很醜,但新版的matplot其實也算好看,尤其在style功能出來之後可以自行切換圖表的風格)
  2. 畫圖指令複雜

教學:

首先要使用matplot的話,跟numpy還有pandas一樣起手式先輸入matplotlib.pyplot as plt。如果要畫折線圖使用 plt.plot,一開始我們先只放一個參數,這樣只會有y的資料,x會是預設的0,1,2,3…。顯示出圖片需要加上.show() 否則只會顯示出這樣的訊息[<matplotlib.lines.Line2D at 0x1100cfe48>]

在jupyter按下tab+shift顯示出的plt.plot用法

如果不想要每次在jupyter notebook顯示都寫.show(),可以在jupyter notebook加上%matplotlib inline

為圖表加上 x 座標以及x, y的label

把線換成紅色的點r代表red,o代表圓點

稍微炫耀一下matplot的強大畫圖功能,先產出數值介於0~5的array,並以0.2為間隔,畫出y=x, y=x², y=x³ 的圖表,r 代表紅色、兩個-代表虛線,b代表藍色、s代表方塊,g代表綠色,^代表三角形,詳細指令可按下shift+tab來觀看

matplotlib的圖示說明

長條圖、散布圖跟畫先前的折線圖一樣簡單,用plt.bar以及plt.scatter裡面放你的資料,以及在參數設定風格即可。

matplotlib長條圖
matplotlib散佈圖

Matplot與Pandas的整合

以往我們用matplot畫圖需要將pandas資料丟進matplot畫圖,不過因為現在pandas有整合matplot,所以可以在pandas的DataFrame下直接畫圖,使用起來更方便,可以再少寫一點程式碼。

使用iris_data(Dataframe的格式)直接.plot 之後就可以接matplot的函式了,x,y直接指定欄位名稱,非常的好用!!c是color的意思,但由於target的範圍是0,1,2,所以matplot會當成是灰階的範圍,由上圖我們可以看到0變白色、1灰色、2黑色,如果要變成紅綠藍的話要怎麼做呢?先創造出一個0,1,2對應r,g,b的dictionary,接著創造出一個r,g,b的color欄位,然後把c的參數指定到color欄位就可以了

但是從圖上沒辦法一目了然看出紅藍綠這三種顏色對應到Iris的三種品種setosa, versicolor, virginica,因此我們還要再加上label。要加上三種label就比較麻煩了,要用三行的程式去寫,之後會介紹seaborn只需要一行即可

雖然預設的圖表不是那麼好看,但由於matplot還是有很多好看的範例,因此還是可以去網路上參考這些範例,並透過一些參數的調整來讓你的圖表變好看,比方下面的範例 :

不過學會參數調整來讓圖表變好看對於一般人來說還是會覺得很麻煩,因此matplotlib還提供一個style的設定讓你可以直接透過改變style來讓圖形變好看

使用plt.style.available列出可以用的style有哪些

plt.style.available

ggplot style

ggplot style

classic style

classic style

更多的畫圖例子可參考:Matplot Gallery

不同的matplot style

Seaborn

Seaborn官網

Seaborn是在Matplot的基礎上實作更高階的視覺化API,可以讓畫圖變得更方便、容易。我自己覺得Matplot跟Seaborn的關係就像是Tensorflow跟Keras。

優點:

  1. 畫圖指令非常簡單
  2. 圖案好看

缺點:

  1. 雖然99%的使用上都沒問題,但有些進階的圖案很難畫或是沒辦法畫(可用matplot互補)

要用seaborn之前要先寫輸入起手式import seaborn as sns載入,之後只要用一行就可根據不同類別加上不同顏色以及標籤

更講究一點的話我們可以再把數字轉成名字

Plotly

Plotly官網

個人非常喜愛的一個視覺化工具,可以從官網看到各大公司也都有使用Plotly,像是Google, P&G…

優點:

  1. 好看的各種視覺化圖表(個人覺得很美)
  2. 互動化的介面
  3. 功能非常齊全,還可建立Dashboard,算是半個BI的tool了,可以跟Tableau, Spotfire, MicroStrategy這些BI Tool比
  4. 有點圖表版的github的味道,你可以即時套用別人做好的視覺化圖案

缺點:

  1. 使用起來稍微有點複雜
  2. 不是完全Opensource,企業版要付錢
  3. 比較吃電腦資源

plotly一開始設計有分online跟offline,online的話你可以直接連到plotly背後的服務直接套用一些好看的圖表,或是丟到server分享給別人,但一般使用offline就足夠了。

右上角有一些互動式功能的icon,可以放大、縮小、繩索…

Plotly的圖表都設計的賞心悅目

畫Iris的資料分佈圖

另外由於Plotly並沒有在Anaconda裡面,所以在先下pip install plotly進行安裝喔

Python安裝、更新Plotly指令

程式碼

備註:由於Plotly的圖表不是圖片檔,所以在gist的preview看不到,要在Jupyter notebook內才能顯示

感謝你閱讀完這篇文章,如果你覺得這些文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)。

[Python資料分析&機器學習]這系列文章是我在Hahow上面所開設課程的講義,如果你是新手想著看影片一步一步學習,可以參考這門課:https://hahow.in/cr/pydataml

如果你對什麼主題的文章有興趣的話,歡迎透過這個連結告訴我:https://yehjames.typeform.com/to/XIIVQC
有任何問題也歡迎在底下留言或是來信告訴我: yehjames23@gmail.com

參考閱讀

  1. Overview of Python Visualization Tools
  2. Python中除了matplotlib外还有哪些数据可视化的库?
  3. Pycon 2017 Python可視化庫大全
  4. 官方matplot教學
  5. 官方seaborn教學
  6. 官方plotly教學

--

--