全文共6661字,預計學習時長20分鐘或更長
在現代數字世界中,數據就像空氣一樣重要。
人們每天都會自覺或不自覺地消費和產生大量數據。近來,許多商家試圖利用這些數據來進行營銷和吸引消費者。所有行業都開始在其服務中增添人性化色彩,向消費者兜售絕佳的用戶體驗。而這一切都是基於數據科學下人工智慧和機器學習技術的發展。機器正變得越發聰明,能通過分析大量數據從而做出決策。
為了分析大量數據集,機器需要使用通過Python語言構建的數據視覺化工具。因此,今天需要了解以下問題:
1. 什麼是數據視覺化呈現?
2. 有哪些數據視覺化呈現工具?
3. 如何使用這些工具?
4. 為什麼需要學習使用這些工具?
數據科學中的數據視覺化
眾所周知,人腦更易於理解圖像。因此有句俗語說:一圖勝千言。而這完全適用於數據科學,因為其需要分析大量視覺化呈現的數據以推演數據模型。
數據視覺化是數據科學領域的一項技術,可使你講出具有信服力的故事,通過易於理解、模擬化的方式將數據和分析結果視覺化呈現。這項技術能讓複雜的數據看起來很簡單,並易於理解。
數據視覺化呈現工具
以下介紹幾個常用的數據視覺化工具:
1. Matplotlib
2. Seaborn
3. Plotly
4. Pandas
學習使用這些視覺化工具可促進數據理解、信息提取和決策制定。本文將對Matplotlib工具進行詳細介紹。
Matplotlib
Matplotlib是一個Python的2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環境生成出版質量級別的圖形。Matplotlib可在多種環境下運行,包括Python腳本、Python及IPython shell命令行,Jupyter notebook,網絡應用伺服器與四個圖形用戶界面工具包。
Matplotlib廣泛應用於數據視覺化,運行良好,用戶界面與Matlab相似度較低,並給予用戶極大的編碼靈活度。寫編碼可能會很無聊,但Matplotlib會給用戶極大的自由。
安裝Matplotlib
1. 使用畫中畫
python -m pip install -U pip
python -m pip install -U matplotlib
2. 使用Python科學包
有許多第三方科學包,如:
· Anaconda
· Canopy
· Activestate
本文最推薦Anaconda。它是常用Python數據科學包之一,可幫助輕鬆安裝所有數據科學包,並預裝Numpy,SciPy, Pandas, Matplotlib, Plotly等工具。推薦所有人安裝這個科學包,安裝時間只需要幾秒鐘。
可在conda終端運行conda命令以安裝任何科學包。不過需要訪問官網獲取準確的命令形式。
conda install PackageName
對於Matpotlib工具:
conda install matplotlib
不同類型的Matpolotlib工具提供的功能不同:
1. 線、條、標誌
2. 圖像、輪廓、場
3. 餅狀圖、極坐標圖
4. 統計性繪圖
以及許多其它功能。這些功能廣泛應用於折線圖、柱狀圖、直方圖、餅狀圖等。
案例學習
如上所述,可使用Matplotlib繪製多種圖形,如散點圖、柱狀圖和直方圖。根據數據視覺化過程中的實際需求選擇圖形類型,如群組對比、定量變量對比、數據分布分析等。
以下介紹幾個常用的繪圖技巧:
基本要求
解決實際問題之前,須安裝好工具:
安裝Anaconda科學包
1. 首先,確保安裝Anaconda
啟動JupyterNotebook
Anaconda科學包安裝完成後,打開Anaconda指南,啟動Jupyter notebook(如下圖所示)。使用Jupyter notebook對案例進行編碼。
檢查安裝預裝包
參考下圖:在Environments菜單下,右側顯示有預裝包。比如,搜索Pandas,界面右側顯示Pandas已安裝。同樣,可輸入需要的安裝包名稱進行安裝。檢查並確保安裝matplotlib,numpy, pandas, seaborn等工具。
確保安裝所有科學包後,學習繪製餅狀圖。
關於Matplotlibs的幾個要點
Matplotlibs包含一個幫助繪圖的子模塊,稱為Pyplot。繪圖中可使用Jupyter notebook,它易於使用、操作簡單。運行import matplotlib.pyplot as plt命令導入Matplotlibs下的Pyplot模塊。
· 使用Pandas pd.read_csv()導入所需圖庫和數據集。
· 使用plt.plot()繪製折線圖及其他圖形。所有繪圖功能都需要數據,數據以參數形式提供。
· 使用plot.xlabel , plt.ylabel分別標記x軸和y軸。
· 使用plt.xticks , plt.yticks分別標記x軸和y軸觀察點。
· 使用 plt.legend()表示觀察變量。
· 使用plt.title()設置圖片標題。
· 使用plot.show()展示圖片。
1. 繪製餅狀圖
#Here we import ther matplotlibpackage with alias name as plt
import matplotlib.pyplot as plt
plt.bar([1,3,5,7,9],[5,2,7,8,2],label=」Example one」)
plt.bar([2,4,6,8,10],[8,6,2,5,6],label=」Example two」, color=』g』)plt.legend()plt.xlabel(『bar number』)plt.ylabel(『bar height』)
plt.title(『Wow! We Got OurFirst Bar Graph』)
plt.show()
將以上編碼複製粘貼到Jupyter notebook,運行該命令,餅狀圖如下所示:
說明:
導入matplotlib包後,其子模塊pyplot運行餅狀圖繪製命令。
通過以下說明了解plt. bar繪圖方法。
#matplotlib.pyplot.bar(x,height, width=0.8, bottom=None, *, align='center',data=None, **kwargs)[source]
So to Make a bar plot:
The bars are positioned at xwith the given alignment. Their dimensions are given by width andheight. The vertical baseline is bottom(default 0).
Each of x, height,width, and bottom may either be a scalar applying to all bars, orit may be a sequence of length N providing a separate value for each bar.
2. 直方圖
直方圖由一系列高度不等的縱向條紋或線段表示數據分布的情況。
直方圖可用以估測數據分布,頻率值被劃分到某一數值段。
若需想為某一直方賦值,使用numpyhistogram()方法,運行如下命令。若需估測數值分布,可使用.hist()方法,繪製簡單直方圖。
Matplotlib可通過NumPy’s histogram()方法視覺化呈現Python直方圖,並提供通用包裝:
案例:
#Histogram Codeimport matplotlib.pyplot as plt
import numpy as np #importingnumpy package for array generation
np.set_printoptions(precision=3)>>> d = np.random.laplace(loc=15, scale=3, size=500)>>> d[:5]
# An "interface" tomatplotlib.axes.Axes.hist() method
n, bins, patches =plt.hist(x=d, bins='auto', color='#0504aa',alpha=0.7,rwidth=0.85)plt.grid(axis='y', alpha=0.75)plt.xlabel('Value')plt.ylabel('Frequency')plt.title('My First Histogram Ever')plt.text(23, 45, r'$\mu=15, b=3$')maxfreq = n.max()# Set a clean upper y-axis limit.plt.ylim(ymax=np.ceil(maxfreq / 10) * 10 if maxfreq % 10 else maxfreq + 10)
說明:
可通過matplotlib下pyplot.hist()命令繪製直方圖。須確定所需直方內線條數量。X軸接觸線條邊緣,y軸為相應頻率。在以上直方圖中,bins='auto'命令從兩個算法中選擇,以估算理想的線條數。更深層面,算法的目標是選擇合適的線寬,以最忠實地表現數據。
原始碼輸出:#以上提到的直方圖編碼:
3. 散點圖
散點圖是繪圖或數學圖形,使用笛卡爾坐標表現一組數據中兩個變量的數值。如果對散點進行編碼(顏色/形狀/規模),可額外表現一個變量。散點圖將數據顯示為一組點,一變量值決定散點水平位置,另一變量值確定其垂直位置。
散點圖可以顯示不同變量之間的相互關聯關係,並具有一定的機密間隔。比如,重量和高度,y軸為重量,x軸為高度。關聯關係可以是正向的(起)、反向的(落)、不存在的(無關聯)。如果散點模型從左下向右上傾斜,顯示變量之間為正相關。如果傾斜趨勢為從左上到右下,則為負相關。
模型:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)[source]
x,y :array_like, shape (n, )
The data positions.
s : scalar orarray_like, shape (n, ), optional
The marker size in points**2. Default is rcParams['lines.markersize'] ** 2.
c : color, sequence,or sequence of color, optional
案例:
#scatter plot lib example usingmatplotlb
import numpy as npimport matplotlib.pyplot as plt
# Create dataN = 100x = np.random.rand(N)y = np.random.rand(N)colors = (0,100,255)area = np.pi*3
# Plotplt.scatter(x, y, s=area, c=colors, alpha=0.5)plt.title('Scatter plot example using matplotlib')plt.xlabel('x')plt.ylabel('y')plt.show()
在jupyternotebook上編碼,結果如下所示:
通過實際數據集理解數據視覺化
使用從kaggle下載的汽車數據集理解MatplotLib數據視覺化
切記:
1. 從上述網站下載Automobile.csv文件
2. 將Jupyter文件上載至編碼所在的工作目錄
3. 繪製直方圖:分類使用群組數據:
可在一次繪圖中繪製多幅直方圖,有助於比較分類持續變量的分布。
使用Automobile.csv數據集進行理解:
讀取數據集:
import pandas as pd#Reading data frm the automobile #data sets using pandas read method
df =pd.read_csv(『Automobile.csv』)df.head()
#When you compile this code youwill see the below given o/p as a series of data column wise.
將以下編碼編寫/複製-粘貼至jupyter notebook文件:
import matplotlib.pyplot as plt
#is you don't want to make aregular call on #plt.show use this line%matplotlib inline
x1 =df.loc[df.make=='alfa-romero', 'horsepower']x2 = df.loc[df.make=='audi', 'horsepower']x3 = df.loc[df.make=='bmw', 'horsepower']x4 = df.loc[df.make=='ferrari', 'horsepower']
kwargs = dict(alpha=0.9,bins=100)
plt.hist(x1, **kwargs,color='g', label='alfa-romero')plt.hist(x2, **kwargs, color='b', label='audi')plt.hist(x3, **kwargs, color='r', label='bmw')plt.hist(x3, **kwargs, color='y', label='ferrari')
plt.gca().set(title='Horsepower Varitation for various make of a car', ylabel='Frequency')#plt.xlim(50,200)plt.legend();
以下直方圖使用了給定數據集的數值
顯然,馬力值集中在110-120 hp區段。
散點圖:
用散點圖表現數據分布。基於車型觀察價格分布。
將以下編碼複製/粘貼至jupyter notebook文件,並運行命令。
# Scatter Plot
import matplotlib.pyplot as plt%matplotlib inline
import pandas as pd
df = pd.read_csv(『Automobile.csv』)
bodystyle = df[『body_style』]#fetching bodytype values rprice = df[『price』] #fetching price for different body type
plt.scatter(bodystyle, price,edgecolors=』r』)plt.xlabel(『body_style』, 'make')plt.ylabel(『price (Rs)』)plt.title(『Price variation based on car body type』)
輸出:
觀察:
數據點集中與轎車車型,價格通常在10,000至15,000美元之間。倉門式汽車次之。貨車車型的價格最低。
更多繪圖類型:
1. 小提琴圖
2. 堆積圖
3. 莖葉圖
4. 線條圖
5. 箱型圖
以下這幅圖全面展示了常用數據視覺化圖(表)類型,根據數據分析要求選擇適合的圖(表):
留言 點讚 關注
我們一起分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 「讀芯術」