Pandas库-统计
| 摘要 | 
| 基本统计(包括排序) | 
| 分布 | 
| 数据特征(相关性、周期性等) | 
| 数据挖掘(形成知识) | 
数据的基本统计
排序
| 函数 | 功能 | 
| .sort_index(axis=0,ascending=True) | 指定轴然后根据索引排序 | 
| Series.sort_values(axis=0,ascending=True) | Series指定轴进行排序 | 
| DataFrame.sort_values(by,axis=0,ascending=True) | by指定特定索引,按该索引排序 | 
排序后,NaN统一放到最后
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 
 | import pandas as pd
 
 import numpy as np
 
 b=pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
 
 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
 
 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
 
 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
 
 c=b.sort_index(axis=1,ascending=False)
 
 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
 
 c=b.sort_values(2,ascending=False)
 
 c
 Out[10]:
 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
 
 c=c.sort_values('a',axis=1,ascending=False)
 
 c
 Out[12]:
 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
 
 | 
数据的基本统计分析
| 方法 | 说明 | 
| .sum() | 计算数据总和,按0轴计算,下同 | 
| .count() | 非NaN值的数量 | 
| .mean() | 计算数据的算术平均值 | 
| .median() | 计算数据的算术中位数 | 
| .var() .std() | 计算数据的方差、标准差 | 
| .min() .max() | 计算数据的最小值、最大值 | 
| .argmin() .argmax() | 计算数据最大值、最小值位置的索引位置(自动索引) | 
| .idxmin() .idxmax() | 计算数据最大值、最小值所在位置的索引(自定义索引) | 
| .describe() | 针对0轴对上面所有的分析进行汇总显示 | 
例1
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | import pandas as pd
 a=pd.Series([9,8,7,6],index=['a','b','c','d'])
 
 a
 Out[3]:
 a    9
 b    8
 c    7
 d    6
 dtype: int64
 
 a.describe()
 Out[4]:
 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
 
 type(a.describe())
 Out[5]: pandas.core.series.Series
 
 a.describe()['count']
 Out[6]: 4.0
 
 a.describe()['max']
 Out[7]: 9.0
 
 | 
例2
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 | import pandas as pd
 
 import numpy as np
 
 b=pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
 
 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
 
 b.describe()
 Out[5]:
 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
 
 type(b.describe())
 Out[6]: pandas.core.frame.DataFrame
 
 b.describe().loc['max']
 Out[7]:
 0    15.0
 1    16.0
 2    17.0
 3    18.0
 4    19.0
 Name: max, dtype: float64
 
 b.describe()[2]
 Out[8]:
 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() | 积 | 
| .cummax() | 最大值 | 
| .cummin() | 最小值 | 
| 方法 | 说明 | 
| .rolling(w).sum() | 依次计算相邻w个元素的和,下面类似 | 
| .rolling(w).mean() | 算术平均值 | 
| .rolling(w).var() | 方差 | 
| .rolling(w).std() | 标准差 | 
| .rolling(w).min().max() | 最小、最大值 | 
例1
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | import pandas as pd
 
 import numpy as np
 
 b=pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
 
 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
 
 b.cumsum()
 Out[5]:
 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
 
 | 
例2
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 
 | import pandas as pd
 
 import numpy as np
 
 b=pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
 
 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
 
 b.rolling(2).sum()
 Out[5]:
 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
 
 b.rolling(3).sum()
 Out[6]:
 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
 
 | 
数据相关性分析
协方差:cov(X,Y)=n−1∑i=1n(Xi−Xˉ)(Yi−Yˉ)
- 协方差>0,X与Y正相关
- 协方差<0,X与Y负相关
- 协方差=0,X与Y独立无关
Pearson相关系数:r=∑i=1n(xi−xˉ)2∑i=1n(yi−yˉ)2∑i=1n(xi−xˉ)(yi−yˉ)
r∈[−1,1]
- r∈[0.8,1.0] 极强相关
- r∈[0.6,0.8] 强相关
- r∈[0.4,0.6] 中等程度相关
- r∈[0.2,0.4] 弱相关
- r∈[0.0,0.2] 极弱相关
| 方法 | 说明 | 
| .cov() | 计算协方差矩阵 | 
| .corr() | 计算相关系数矩阵,Pearson、Spearman、Kendall | 
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | import pandas as pd
 
 hprice=pd.Series([3.04,22.93,12.75,22.6,12.33],index=['2008','2009','2010','2011','2012'])
 
 m2=pd.Series([8.18,18.38,9.13,7.82,6.69],index=['2008','2009','2010','2011','2012'])
 
 hprice.corr(m2)
 Out[4]: 0.5239439145220387
 
 |