主页

索引

模块索引

搜索页面

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

主页

索引

模块索引

搜索页面