數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。
數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。
一、 常用可視化工具Python有許多用於數據可視化的庫,例如常見的有seaborn、pyecharts(echarts的Python版本)、ggplot(移植於R語言的ggplot2,但是有些差別,Python有其他方法可以調用R語言的ggplot2)、bokeh、Plotly(同時支持Python和R語言)等等,這些大多是基於Matplotlib進行開發封裝的。
Matplotlib是一個Python 2D繪圖庫(使用Matplotlib發布的mpl_toolkits庫可以畫3D圖形 ),能夠以多種硬拷貝格式和跨平臺的交互式環境生成出版物質量的圖形,用來繪製各種靜態,動態,交互式的圖表。
Matplotlib 是 Python 最著名的繪圖庫,它提供了一整套和 MATLAB 相似的命令 API,十分適合交互式地進行製圖。而且也可以方便地將它作為繪圖控制項,使用在Python腳本,Python和IPython Shell、Jupyter notebook,Web應用程式伺服器和各種圖形用戶界面工具包等上面。
二、 Matplotlib 初識1. 例子Matplotlib的圖像是畫在figure(如windows,jupyter窗體)上的,每一個figure又包含了一個或多個axes(一個可以指定坐標系的子區域)。最簡單的創建figure以及axes的方式是通過pyplot.subplots命令,創建axes以後,可以使用Axes.plot繪製最簡易的折線圖。
聲明:以下使用的是IPython Shell
%matplotlib # 在IPython Shell調用Matplotlib繪圖接口,需要加這行代碼
import matplotlib.pyplot as plt
import numpy as np
fig, ax= plt.subplots() # 創建一個包含一個axes的figure
# 繪圖
ax.plot([1, 2, 3, 4], [1, 4, 3, 2])這裡有一個小知識點,很小很小,但是對於剛剛接觸數據可視化的新手可能容易弄混。ax.plot([1, 2, 3, 4], [1, 4, 3, 2]) 這句代碼裡面第一個參數是數據集裡各個數據點的X值的集合,第二個參數數據集裡各個數據點的Y值的集合。所以這裡輸入的參數值並不是數學上常見的成對坐標點如(x1,y1)、(x2,y2)、...、(xn,yn)的格式,而是 (x1,x2,...,xn)和(y1,y2,...,yn) 。
2. 例子和MATLAB命令類似,你還可以通過一種更簡單的方式繪製圖像,matplotlib.pyplot 方法能夠直接在當前axes上繪製圖像,如果用戶未指定axes,matplotlib會幫你自動創建一個。所以上面的例子也可以簡化為以下這一行代碼。
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
這裡有個trick(坑)需要注意一下。如上所示,在IPython或jupyter notebook的同一個代碼框中,如果不對其聲明畫在哪個圖上(可以使用 plot() 函數裡面的 ax 參數進行指定),就會自動畫到最後一個創建的圖上(即最後一個Figure對象的最後一個Axes子圖裡)。plt.figure() # 創建一個新的Figure對象
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
更多例子可以在Matplotlib官網查看:
https://matplotlib.org/gallery/index.html三、 Matplotlib 全貌現在我們來深入看一下figure的組成。通過一張figure解剖圖,我們可以看到一個完整的matplotlib圖像通常會包括以下四個層級,這些層級也被稱為容器(container),下一節會詳細介紹。在matplotlib的世界中,我們將通過各種命令方法來操縱圖像中的每一個部分,從而達到數據可視化的最終效果,一副完整的圖像實際上是各類子元素的集合。
Axes:matplotlib宇宙的核心,容納了大量元素用來構造一幅幅子圖,一個figure可以由一個或多個子圖組成。
Axis:axes的下屬層級,用於處理所有和坐標軸,網格有關的元素。
Tick:axis的下屬層級,用來處理所有和刻度有關的元素。
四、 Matplotlib 繪圖接口matplotlib提供了兩種最常用的繪圖接口
顯式創建figure和axes,在上面調用繪圖方法,也被稱為OO模式(object-oriented style)。依賴pyplot自動創建figure和axes,並繪圖。使用第一種繪圖接口,是這樣的:
x = np.linspace(0, 2, 100)
fig, ax = plt.subplots()
ax.plot(x, x, label='linear')
ax.plot(x, x**2, label='quadratic')
ax.plot(x, x**3, label='cubic')
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend()
而如果採用第二種繪圖接口,繪製同樣的圖,代碼是這樣的:
plt.figure() IPython 裡面需要加這行,jupyter notebook則不用,原因見<2.2 例子2>。x = np.linspace(0, 2, 100)
plt.figure() # IPython裡面需要加這行,jupyter notebook則不用
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
五、 討論在工作或學習中通常何時會用到數據可視化,希望通過可視化達到什麼目的?個人經驗:
① 在機器學習中,數據可視化經常用於各種算法模型擬合效果的直觀展示。例子1:線性回歸模型的擬合效果。
例子2:機器學習聚類算法的K-MEANS算法和DBSCAN算法對數據集劃分類別的效果對比。
下圖來源:K-MEANS可視化網站https://www.naftaliharris.com/blog/visualizing-k-means-clustering/下圖來源:DBSCAN算法可視化網站https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/
② 在數據分析和數據挖掘中經常用來檢查數據的分布,以及窺探數據集內在的規律或事件發展的規律。以下是個人在數據分析和數據挖掘中使用到數據可視化的2個案例。
例1:使用黃氏曲線評估零售店促銷活動效果
例2:Kaggle項目:Predict Future Sales(商品未來銷量預測)參考連接:(數據可視化開源教程)
https://github.com/datawhalechina/fantastic-matplotlib