5.7.3. 实例-统计分析¶
随机生成三组数据:
In [70]: np.random.seed(1234)
...: d1 = pd.Series(2*np.random.normal(size = 100)+3)
...: d2 = np.random.f(2,4,size = 100)
...: d3 = np.random.randint(1,100,size = 100)
基本函数:
In [70]: print('非空元素计算: ', d1.count()) #非空元素计算
...: print('最小值: ', d1.min()) #最小值
...: print('最大值: ', d1.max()) #最大值
...: print('最小值的位置: ', d1.idxmin()) #最小值的位置,类似于R中的which.min函数
...: print('最大值的位置: ', d1.idxmax()) #最大值的位置,类似于R中的which.max函数
...: print('10%分位数: ', d1.quantile(0.1)) #10%分位数
...: print('求和: ', d1.sum()) #求和
...: print('均值: ', d1.mean()) #均值
...: print('中位数: ', d1.median()) #中位数
非空元素计算: 100
最小值: -4.1270333212494705
最大值: 7.781921030926066
最小值的位置: 81
最大值的位置: 39
10%分位数: 0.6870184644069928
求和: 307.0224566250873
均值: 3.070224566250873
中位数: 3.204555266776845
基本函数-众数:
In [70]: print('众数: ', d1.mode()) #众数
众数: 0 -4.127033
1 -1.800907
2 -1.485370
3 -1.149955
...
98 7.061207
99 7.781921
Length: 100, dtype: float64
基本函数-众数:
In [70]: print('方差: ', d1.var()) #方差
...: print('标准差: ', d1.std()) #标准差
...: print('平均绝对偏差: ', d1.mad()) #平均绝对偏差
...: print('偏度: ', d1.skew()) #偏度
...: print('峰度: ', d1.kurt()) #峰度
...: print('描述性统计指标: ', d1.describe()) #一次性输出多个描述性统计指标
方差: 4.005609378535087
标准差: 2.001401853335578
平均绝对偏差: 1.5112880411556104
偏度: -0.6494780760484293
峰度: 1.2201094052398012
描述性统计指标:
count 100.000000
mean 3.070225
std 2.001402
min -4.127033
25% 2.040101
50% 3.204555
75% 4.434788
max 7.781921
dtype: float64
自定义一个函数,将这些统计描述指标全部汇总到一起:
def stats(x):
return pd.Series([
x.count(),x.min(),x.idxmin(),x.quantile(.25),x.median(),x.quantile(.75),
x.mean(),x.max(),x.idxmax(),x.mad(),x.var(),x.std(),x.skew(),x.kurt()
], index = ['Count','Min','Whicn_Min','Q1','Median','Q3','Mean','Max',
'Which_Max','Mad','Var','Std','Skew','Kurt'])
// 使用:
print(stats(d1))
将d1,d2,d3数据构建数据框:
In [71]: df = pd.DataFrame(np.array([d1,d2,d3]).T,columns=['x1','x2','x3'])
...: print(df.head())
x1 x2 x3
0 3.942870 1.369531 55.0
1 0.618049 0.943264 68.0
2 5.865414 0.590663 73.0
3 2.374696 0.206548 59.0
4 1.558823 0.223204 60.0
使用stats函数:
In [75]: print(df.apply(stats))
x1 x2 x3
Count 100.000000 100.000000 100.000000
Min -4.127033 0.014330 3.000000
Whicn_Min 81.000000 72.000000 76.000000
Q1 2.040101 0.249580 25.000000
Median 3.204555 1.000613 54.500000
Q3 4.434788 2.101581 73.000000
Mean 3.070225 2.028608 51.490000
Max 7.781921 18.791565 98.000000
Which_Max 39.000000 53.000000 96.000000
Mad 1.511288 1.922669 24.010800
Var 4.005609 10.206447 780.090808
Std 2.001402 3.194753 27.930106
Skew -0.649478 3.326246 -0.118917
Kurt 1.220109 12.636286 -1.211579
连续变量的相关系数(corr):
In [87]: print(df.corr())
x1 x2 x3
x1 1.000000 0.136085 0.037185
x2 0.136085 1.000000 -0.005688
x3 0.037185 -0.005688 1.000000
// 相关系数的计算可以调用pearson方法或kendell方法或spearman方法,默认使用pearson方法
In [88]: print(df.corr('spearman'))
x1 x2 x3
x1 1.00000 0.178950 0.006590
x2 0.17895 1.000000 -0.033874
x3 0.00659 -0.033874 1.000000
// 只关注某一个变量(x1)与其余变量的相关系数
In [89]: print(df.corrwith(df['x1']))
x1 1.000000
x2 0.136085
x3 0.037185
dtype: float64
数值型变量间的协方差矩阵:
In [90]: print(df.cov())
x1 x2 x3
x1 4.005609 0.870124 2.078596
x2 0.870124 10.206447 -0.507512
x3 2.078596 -0.507512 780.090808