本節書摘來自華章出版社《python資料分析與挖掘實戰》一書中的第3章,第3.3節,作者 張良均 王路 譚立雲 蘇劍林,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
python中用于資料探索的庫主要是pandas(資料分析)和matplotlib(資料可視化)。其中,pandas提供了大量的與資料探索相關的函數,這些資料探索函數可大緻分為統計特征函數與統計作圖函數,而作圖函數依賴于matplotlib,是以往往又會跟matplotlib結合在一起使用。本節對pandas中主要的統計特征函數與統計作圖函數進行介紹,并舉例以友善了解。
統計特征函數用于計算資料的均值、方差、标準差、分位數、相關系數和協方差等,這些統計特征能反映出資料的整體分布。本小節所介紹的統計特征函數如表3-8所示,它們主要作為pandas的對象dataframe或series的方法出現。

(1)sum
功能:計算資料樣本的總和(按列計算)。
使用格式:
d.sum()
按列計算樣本d的總和,樣本d可為dataframe或者series。
(2)mean
功能:計算資料樣本的算術平均數。
d.mean()
按列計算樣本d的均值,樣本d可為dataframe或者series。
(3)var
功能:計算資料樣本的方差。
d.var()
(4)std
功能:計算資料樣本的标準差。
d.std()
(5)corr
功能:計算資料樣本的spearman(pearson)相關系數矩陣。
d.corr(method='pearson')
樣本d可為dataframe,傳回相關系數矩陣,method參數為計算方法,支援pearson(皮爾森相關系數,預設選項)、kendall(肯德爾系數)、spearman(斯皮爾曼系數);
s1.corr(s2, method='pearson') s1、s2均為series,這種格式指定計算兩個series之間的相關系數。
執行個體:計算兩個列向量的相關系數,采用spearman方法。
d = pd.dataframe([range(1, 8), range(2, 9)]) #生成樣本d,一行為1~7,一行為2~8
d.corr(method='spearson') #計算相關系數矩陣
s1 = d.loc[0] #提取第一行
s2 = d.loc[1] #提取第二行
s1.corr(s2, method='pearson') #計算s1、s2的相關系數
(6)cov
功能:計算資料樣本的協方差矩陣。
d.cov()
樣本d可為dataframe,傳回協方差矩陣;
s1.cov(s2) s1、s2均為series,這種格式指定計算兩個series之間的協方差。
執行個體:計算6×5随機矩陣的協方差矩陣。
(7)skew/kurt
功能:計算資料樣本的偏度(三階矩)/ 峰度(四階矩)。
d.skew() / d.kurt()
計算樣本d的偏度(三階矩)/ 峰度(四階矩)。樣本d可為dataframe或series。
執行個體:計算6×5随機矩陣的偏度(三階矩)/ 峰度(四階矩)。
(8)describe
功能:直接給出樣本資料的一些基本的統計量,包括均值、标準差、最大值、最小值、分位數等。
d.describe()
括号裡可以帶一些參數,比如percentiles = [0.2, 0.4, 0.6, 0.8]就是指定隻計算0.2、0.4、0.6、0.8分位數,而不是預設的1/4、1/2、3/4分位數。
執行個體:給出6×5随機矩陣的describe。
除了上述基本的統計特征外,pandas還提供了一些非常友善實用的計算統計特征的函數,主要有累積計算(cum)和滾動計算(pd.rolling_),見表3-8和表3-9。
其中,cum系列函數是作為dataframe或series對象的方法而出現的,是以指令格式為d.cumsum(),而rolling_系列是pandas的函數,不是dataframe或series對象的方法,是以,它們的使用格式為pd.rolling_mean(d, k),意思是每k列計算一次均值,滾動計算。
執行個體:
通過統計作圖函數繪制的圖表可以直覺地反映出資料及統計量的性質及其内在規律,如盒圖可以表示多個樣本的均值,誤差條形圖能同時顯示下限誤差和上限誤差,最小二乘拟合曲線圖能分析兩變量間的關系。
python的主要作圖庫是matplotlib,在第2章中已經進行了初步的介紹,而pandas基于matplotlib并對某些指令進行了簡化,是以作圖通常是matplotlib和pandas互相結合着使用。本小節僅對一些基本的作圖函數做一下簡介,而真正靈活地使用應當參考書中所給出的各個作圖代碼清單。我們要介紹的統計作圖函數如表3-8所示。
在作圖之前,通常要加載以下代碼。
作圖完成後,一般通過plt.show()來顯示作圖結果。
(1)plot
功能:繪制線性二維圖、折線圖。
plt.plot(x, y, s)
這是matplotlib通用的繪圖方式,繪制y對于x(即以x為橫軸的二維圖形),字元串參量s指定繪制時圖形的類型、樣式和顔色,常用的選項有:'b'為藍色、'r'為紅色、'g'為綠色、'o'為圓圈、'+'為加号标記、'-'為實線、'--'為虛線。當x、y均為實數同維向量時,則描出點(x(i), y(i)),然後用直線依次相連。
d.plot(kind = 'box')
這裡使用的是dataframe或series對象内置的方法作圖,預設以index為橫坐标,每列資料為縱坐标自動作圖,通過kind參數指定作圖類型,支援line(線)、bar(條形)、barh、hist(直方圖)、box(箱線圖)、kde(密度圖)和area、pie(餅圖)等,同時也能夠接受plt.plot()中接受的參數。是以,如果資料已經被加載為pandas中的對象,那麼以這種方式作圖是比較簡潔的。
執行個體:在區間(0≤x≤2π)繪制一條藍色的正弦虛線,并在每個坐标點标上五角星。繪制圖形如圖3-13所示。
(2)pie
功能:繪制餅型圖。
使用matplotlib繪制餅圖,其中size是一個清單,記錄各個扇形的比例。pie有豐富的參數,詳情請參考下面的執行個體。
執行個體:通過向量[15, 30, 45, 10]畫餅圖,注上标簽,并将第2部分分離出來。繪制結果如圖3-14所示。
(3)hist
功能:繪制二維條形直方圖,可顯示資料的分布情形。
其中,x是待繪制直方圖的一維數組,y可以是整數,表示均勻分為n組;也可以是清單,清單各個數字為分組的邊界點(即手動指定分界點)。
執行個體:繪制二維條形直方圖,随機生成有1000個元素的服從正态分布的數組,分成10組繪制直方圖。繪制結果如圖3-15所示。
(4)boxplot
功能:繪制樣本資料的箱形圖。
有兩種比較簡單的方式繪制d的箱形圖,其中一種是直接調用dataframe的boxplot()方法;另外一種是調用series或者dataframe的plot()方法,并用kind參數指定箱形圖(box)。其中,盒子的上、下四分位數和中值處有一條線段。箱形末端延伸出去的直線稱為須,表示盒外資料的長度。如果在須外沒有資料,則在須的底部有一點,點的顔色與須的顔色相同。
執行個體:繪制樣本資料的箱形圖,樣本由兩組正态分布的随機資料組成。其中,一組資料均值為0,标準差為1,另一組資料均值為1,标準差為1。繪制結果如圖3-16所示。
(5)plot(logx = true) / plot(logy = true)
功能:繪制x或y軸的對數圖形。
d.plot(logx = true) / d.plot(logy = true)
對x軸(y軸)使用對數刻度(以10為底),y軸(x軸)使用線性刻度,進行plot函數繪圖,d為pandas的dataframe或者series。
執行個體:構造指數函數資料使用plot(logy = true)函數進行繪圖,繪制結果如圖3-17所示。
(6)plot(yerr = error)
功能:繪制誤差條形圖。
d.plot(yerr = error)
繪制誤差條形圖。d為pandas的dataframe或series,代表着均值資料列,而error則是誤差列,此指令在y軸方向畫出誤差棒圖;類似地,如果設定參數xerr = error,則在x軸方向畫出誤差棒圖。
執行個體:繪制誤差棒圖。繪制結果如圖3-18所示。