Pandas數據特征分析 數據的排序 將一組數據通過摘要(有損地提取數據特征的過程)的方式,可以獲得基本統計(含排序)、分佈/累計統計、數據特征(相關性、周期性等)、數據挖掘(形成知識)。 .sort_index()方法在指定軸上根據索引進行排序,預設升序 .sort_index(axis=0, a ...
Pandas數據特征分析
數據的排序
將一組數據通過摘要(有損地提取數據特征的過程)的方式,可以獲得基本統計(含排序)、分佈/累計統計、數據特征(相關性、周期性等)、數據挖掘(形成知識)。
- .sort_index()方法在指定軸上根據索引進行排序,預設升序
- .sort_index(axis=0, ascending=True)
In [1]: import pandas as pd In [2]: import numpy as np In [3]: b = pd.DataFrame(np.arange(20).reshape(4,5), index=['c','a','d','b']) In [4]: b Out[4]: 0 1 2 3 4 c 0 1 2 3 4 a 5 6 7 8 9 d 10 11 12 13 14 b 15 16 17 18 19 In [5]: b.sort_index() Out[5]: 0 1 2 3 4 a 5 6 7 8 9 b 15 16 17 18 19 c 0 1 2 3 4 d 10 11 12 13 14 In [6]: b.sort_index(ascending=False) Out[6]: 0 1 2 3 4 d 10 11 12 13 14 c 0 1 2 3 4 b 15 16 17 18 19 a 5 6 7 8 9 In [7]: c = b.sort_index(axis=1, ascending=False) In [8]: c Out[8]: 4 3 2 1 0 c 4 3 2 1 0 a 9 8 7 6 5 d 14 13 12 11 10 b 19 18 17 16 15 In [9]: c = c.sort_index() In [10]: c Out[10]: 4 3 2 1 0 a 9 8 7 6 5 b 19 18 17 16 15 c 4 3 2 1 0 d 14 13 12 11 10
- .sort_values()方法在指定軸上根據數值進行排序,預設升序
Series.sort_values(axis=0, ascending=True) DataFrame.sort_values(by, axis=0, ascending=True) # by:axis軸上的某個索引或索引列表
In [11]: c = b.sort_values(2,ascending=False) In [12]: c Out[12]: 0 1 2 3 4 b 15 16 17 18 19 d 10 11 12 13 14 a 5 6 7 8 9 c 0 1 2 3 4 In [13]: c = c.sort_values('a',axis=1,ascending=False) In [14]: c Out[14]: 4 3 2 1 0 b 19 18 17 16 15 d 14 13 12 11 10 a 9 8 7 6 5 c 4 3 2 1 0
Nan統一放到排序末尾
In [15]: a = pd.DataFrame(np.arange(12).reshape(3,4), index=['a','b','c']) In [16]: a Out[16]: 0 1 2 3 a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 In [17]: c = a + b In [18]: c Out[18]: 0 1 2 3 4 a 5.0 7.0 9.0 11.0 NaN b 19.0 21.0 23.0 25.0 NaN c 8.0 10.0 12.0 14.0 NaN d NaN NaN NaN NaN NaN In [19]: c.sort_values(2,ascending=False) Out[19]: 0 1 2 3 4 b 19.0 21.0 23.0 25.0 NaN c 8.0 10.0 12.0 14.0 NaN a 5.0 7.0 9.0 11.0 NaN d NaN NaN NaN NaN NaN In [20]: c.sort_values(2,ascending=True) Out[20]: 0 1 2 3 4 a 5.0 7.0 9.0 11.0 NaN c 8.0 10.0 12.0 14.0 NaN b 19.0 21.0 23.0 25.0 NaN d NaN NaN NaN NaN NaN
數據的基本統計分析
基本的統計分析函數
適用於Series和DataFrame類型
方法 | 說明 |
---|---|
.sum() | 計算數據的總和,按0軸計算,下同 |
.count() | 非Nan值得數量 |
.mean() .median() | 計算數據的算術平均值、算術中位數 |
.var() .std() | 計算數據的方差、標準差 |
.min() .max() | 計算數據的最小值、最大值 |
適用於Series類型
方法 | 說明 |
---|---|
.argmin() .argmax() | 計算數據最大值、最小值所在位置的索引位置(自動索引) |
.idxmin() .idxmax() | 計算數據最大值、最小值所在位置的索引(自定義索引) |
適用於Series和DataFrame類型
方法 | 說明 |
---|---|
.describe() | 針對0軸(各列)的統計彙總 |
In [21]: a = pd.Series([9,8,7,6], index=['a','b','c','d']) In [22]: a Out[22]: a 9 b 8 c 7 d 6 dtype: int64 In [23]: a.describe() Out[23]: count 4.000000 mean 7.500000 std 1.290994 min 6.000000 25% 6.750000 50% 7.500000 75% 8.250000 max 9.000000 dtype: float64 In [24]: type(a.describe()) Out[24]: pandas.core.series.Series In [25]: a.describe()['count'] Out[25]: 4.0 In [26]: a.describe()['max'] Out[26]: 9.0 In [27]: b.describe() Out[27]: 0 1 2 3 4 count 4.000000 4.000000 4.000000 4.000000 4.000000 mean 7.500000 8.500000 9.500000 10.500000 11.500000 std 6.454972 6.454972 6.454972 6.454972 6.454972 min 0.000000 1.000000 2.000000 3.000000 4.000000 25% 3.750000 4.750000 5.750000 6.750000 7.750000 50% 7.500000 8.500000 9.500000 10.500000 11.500000 75% 11.250000 12.250000 13.250000 14.250000 15.250000 max 15.000000 16.000000 17.000000 18.000000 19.000000 In [28]: type(b.describe()) Out[28]: pandas.core.frame.DataFrame In [29]: In [30]: b.describe().ix['max'] __main__:1: DeprecationWarning: .ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing See the documentation here: http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated Out[30]: 0 15.0 1 16.0 2 17.0 3 18.0 4 19.0 Name: max, dtype: float64 In [31]: b.describe()[2] Out[31]: count 4.000000 mean 9.500000 std 6.454972 min 2.000000 25% 5.750000 50% 9.500000 75% 13.250000 max 17.000000 Name: 2, dtype: float64
數據的累計統計分析
累計統計分析函數
適用於Series和DataFrame類型,累計計算
方法 | 說明 |
---|---|
.cumsum() | 依次給出前1、2、… 、n個數的和 |
.cumprod() | 依次給出前1、2、… 、n個數的積 |
.cummax() | 依次給出前1、2、… 、n個數的最大值 |
.cummin() | 依次給出前1、2、… 、n個數的最小值 |
In [32]: b.cumsum() Out[32]: 0 1 2 3 4 c 0 1 2 3 4 a 5 7 9 11 13 d 15 18 21 24 27 b 30 34 38 42 46 In [33]: b.cumprod() Out[33]: 0 1 2 3 4 c 0 1 2 3 4 a 0 6 14 24 36 d 0 66 168 312 504 b 0 1056 2856 5616 9576 In [34]: b.cummin() Out[34]: 0 1 2 3 4 c 0 1 2 3 4 a 0 1 2 3 4 d 0 1 2 3 4 b 0 1 2 3 4 In [35]: b.cummax() Out[35]: 0 1 2 3 4 c 0 1 2 3 4 a 5 6 7 8 9 d 10 11 12 13 14 b 15 16 17 18 19
適用於Series和DataFrame類型,滾動計算(視窗計算)
方法 | 說明 |
---|---|
.rolling(w).sum() | 依次計算相鄰w個元素的和 |
.rolling(w).mean() | 依次計算相鄰w個元素的算術平均值 |
.rolling(w).var() | 依次計算相鄰w個元素的方差 |
.rolling(w).std() | 依次計算相鄰w個元素的標準差 |
.rolling(w).min() .max() | 依次計算相鄰w個元素的最小值和最大值 |
In [36]: b.rolling(2).sum() Out[36]: 0 1 2 3 4 c NaN NaN NaN NaN NaN a 5.0 7.0 9.0 11.0 13.0 d 15.0 17.0 19.0 21.0 23.0 b 25.0 27.0 29.0 31.0 33.0 In [37]: b.rolling(3).sum() Out[37]: 0 1 2 3 4 c NaN NaN NaN NaN NaN a NaN NaN NaN NaN NaN d 15.0 18.0 21.0 24.0 27.0 b 30.0 33.0 36.0 39.0 42.0
數據的相關分析
兩個事物,表示為X和Y,如何判斷它們之間的存在相關性?
相關性
- X增大,Y增大,兩個變數正相關
- X增大,Y減小,兩個變數負相關
- X增大,Y無視,兩個變數不相關
協方差
- 協方差>0, X和Y正相關
- 協方差<0, X和Y負相關
- 協方差=0, X和Y獨立無關
Pearson相關係數
r取值範圍[-1, 1]
- 0.8 - 1.0 極強相關
- 0.6 - 0.8 強相關
- 0.4 - 0.6 中等程度相關
- 0.2 - 0.4 弱相關
- 0.0 - 0.2 極弱相關或無相關
適用於Series和DataFrame類型
方法 | 說明 |
---|---|
.cov() | 計算協方差矩陣 |
.corr() | 計算相關係數矩陣,Pearson、Spearman、Kendall等繫數 |
In [38]: import pandas as pd In [39]: hprice = pd.Series([3.04, 22.93, 12.75, 22.6, 12.33], index=['2008', '2009', '2010', '2011', '2012']) In [40]: m2 = pd.Series([8.18, 18.38, 9.13, 7.82, 6.69], index=['2008', '2009', '2010','2011', '2012']) In [41]: hprice.corr(m2) Out[41]: 0.5239439145220387