最近由于使用 pandas 和 numpy做数据分析,以及需要把算法迁移到go上,发现了pandas 在处理一些统计项的时候,其中的参数的default 和numpy里面有问题,做个记录。
pandas.skew实现(rolling 同理)
import pandas as pd
# 示例数据
data = pd.Series([1, 2, 3, 4, 5,6, 7, 8, 9, 10, 50])
skewness_pandas = data.skew()
print(f"Pandas Skewness: {skewness_pandas}")
Pandas Skewness: 3.0536609583638397
拆公式直接实现(numpy)
import numpy as np
def calculate_skew_manual(series: pd.Series) -> float:
"""
手动计算时序数据的偏度(Skewness),完全匹配 pandas 的 skew 方法。
"""
data = series.dropna() # 去除缺失值
n = len(data) # 样本量
mean = np.mean(data) # 计算均值
std = np.std(data,ddof= 0) # 使用样本标准差 (ddof=0)
numerator = np.mean((data - mean) ** 3) # 分子
denominator = std ** 3 # 分母
# 偏度校正因子
correction_factor = np.sqrt(n * (n - 1)) / (n - 2)
skewness = correction_factor * (numerator / denominator)
return skewness
# 示例数据
data = pd.Seri