问题描述
如题,我之前都是用的statistics.pstdev((n1,n2,n3,n4))来计算的,发现咱们平台上要么是scipy要么是statsmodel,我还真的没有使用过,不知道各路神仙大佬能帮忙指条明路么?谢谢!
PS:我不需要rolling,数据也不是啥series,就是普通数值。多谢!
解决方案
在 JoinQuant 聚宽平台上,计算几个普通数值的标准差其实非常简单。平台使用的是标准的 Python 3 环境,因此你不仅可以继续使用你熟悉的 statistics 库,还可以使用量化领域最常用的 numpy 库。
以下是两种最常用的明路:
方法一:使用 numpy 库(最推荐)
numpy 是量化分析的标配库,计算速度极快。计算标准差使用 np.std() 方法。
注意总体标准差与样本标准差的区别:
- 你之前使用的
statistics.pstdev计算的是总体标准差(Population Standard Deviation)。 numpy.std()默认计算的也是总体标准差(即自由度ddof=0),所以直接替换即可,结果完全一致。
import numpy as np
# 你的4个普通数值
values = [10, 12, 15, 18]
# 计算总体标准差 (等同于 statistics.pstdev)
std_pop = np.std(values)
print("总体标准差:", std_pop)
# 如果你需要计算样本标准差 (等同于 statistics.stdev),设置 ddof=1
std_sample = np.std(values, ddof=1)
print("样本标准差:", std_sample)
方法二:继续使用内置的 statistics 库
JoinQuant 的回测和研究环境都是基于 Python 3 的,Python 3 内置了 statistics 模块,所以你完全可以像以前一样直接导入使用,不需要额外安装任何东西。
import statistics
# 你的4个普通数值
values = (10, 12, 15, 18)
# 计算总体标准差
pstdev_val = statistics.pstdev(values)
print("总体标准差:", pstdev_val)
# 计算样本标准差
stdev_val = statistics.stdev(values)
print("样本标准差:", stdev_val)
总结
- 如果你只是偶尔算几个数的标准差,直接
import statistics用你最熟悉的statistics.pstdev即可,平台完全支持。 - 如果你在策略中需要进行大量的数值计算,强烈建议习惯使用
import numpy as np然后用np.std(values),因为numpy在底层是用 C 语言实现的,处理大量数据时性能远超 Python 原生的statistics库。