0%

【Python】Pandas与numpy的方差计算

目的

方差在统计描述和概率分布中各有不同的定义,并有不同的公式。
在统计描述中,方差用来计算每一个变量(观察值)与总体均数之间的差异。为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异程度。
总体方差计算公式\({\sigma}^2=\frac{\sum_{i=1}^{N}(X_i-\bar{\mu})}{N}\)
其中\({\sigma}^2\)为总体方差,\(X_i\)为变量,\(\bar{\mu}\)为总体均值,\(N\)为总体例数。

实际工作中,总体均数难以得到时,应用样本统计量代替总体参数,经校正后,
样本方差计算公式\({S}^2=\frac{\sum_{i=1}^{N}(X_i-\bar{X})}{n-1}\)
其中\({S}^2\)为样本方差,\(X_i\)为变量,\(\bar{X}\)为样本均值,\(n\)为样本例数。

方差的计算

数据准备

取一定周期的沪深300指数(000300.SH)的每日行情数据,如:2019年全年。为了计算每日涨跌幅,故多取了2018年最后一个交易日的数据。

1
2
3
4
5
6
7
8
9
10
11
import pandas as pd
import numpy as np
import QUANTAXIS as QA
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

index = QA.QA_fetch_index_day_adv('000300','2018-12-28','2019-12-31')
display(index.data)
# 计算每日涨跌幅
returns_index = index.data.close.pct_change()
display(returns_index)
open close high low vol amount up_count down_count date_stamp volume
date code
2018-12-28 000300 2994.80 3010.65 3024.35 2984.82 710537.0 7.814531e+10 200 81 1.545926e+09 710537.0
2019-01-02 000300 3017.07 2969.54 3018.78 2958.49 686630.0 7.610557e+10 70 216 1.546358e+09 686630.0
2019-01-03 000300 2963.02 2964.84 3000.44 2953.26 708671.0 7.666480e+10 145 142 1.546445e+09 708671.0
2019-01-04 000300 2940.19 3035.87 3036.81 2935.83 1033189.0 1.071410e+11 286 12 1.546531e+09 1033189.0
2019-01-07 000300 3055.15 3054.30 3061.75 3035.91 1011643.0 1.057039e+11 217 73 1.546790e+09 1011643.0
... ... ... ... ... ... ... ... ... ... ... ...
2019-12-25 000300 3988.66 3990.87 4000.56 3976.36 949388.0 1.318965e+11 117 168 1.577203e+09 949388.0
2019-12-26 000300 3993.67 4025.99 4025.99 3993.54 1088606.0 1.408150e+11 236 53 1.577290e+09 1088606.0
2019-12-27 000300 4029.25 4022.03 4066.80 4019.72 1509264.0 1.950904e+11 116 173 1.577376e+09 1509264.0
2019-12-30 000300 4015.52 4081.63 4083.69 4001.50 1559714.0 2.168147e+11 241 53 1.577635e+09 1559714.0
2019-12-31 000300 4077.75 4096.58 4098.14 4069.01 1232642.0 1.731193e+11 189 95 1.577722e+09 1232642.0

245 rows × 10 columns

date        code  
2018-12-28  000300         NaN
2019-01-02  000300   -0.013655
2019-01-03  000300   -0.001583
2019-01-04  000300    0.023957
2019-01-07  000300    0.006071
                        ...   
2019-12-25  000300   -0.000523
2019-12-26  000300    0.008800
2019-12-27  000300   -0.000984
2019-12-30  000300    0.014818
2019-12-31  000300    0.003663
Name: close, Length: 245, dtype: float64

使用numpy计算

numpy 中计算的方差就是总体方差。

1
np.var(returns_index)
0.00015577588074696037

使用pandas计算

pandas 中计算的方差为样本方差。

1
returns_index.var()
0.0001564169337541495

小结

在计算方差时,使用numpy和pandas会得到不一样的计算结果,需要根据实际需要样本方差还是总体方差来决定使用何种方式。