【问题标题】:What is the difference between skew and kurtosis functions in pandas vs. scipy?pandas 与 scipy 中的 skew 和 kurtosis 函数有什么区别?
【发布时间】:2016-01-11 14:00:54
【问题描述】:

我决定比较 pandas 和 scipy.stats 中的 skew 和 kurtosis 函数,但不明白为什么我在库之间得到不同的结果。

据我从文档中得知,两个峰度函数都使用 Fisher 的定义进行计算,而对于偏斜,似乎没有足够的描述来说明它们的计算方式是否存在任何重大差异。

import pandas as pd
import scipy.stats.stats as st

heights = np.array([1.46, 1.79, 2.01, 1.75, 1.56, 1.69, 1.88, 1.76, 1.88, 1.78])

print "skewness:", st.skew(heights)
print "kurtosis:", st.kurtosis(heights)

返回:

skewness: -0.393524456473
kurtosis: -0.330672097724

而如果我转换为 pandas 数据框:

heights_df = pd.DataFrame(heights)
print "skewness:", heights_df.skew()
print "kurtosis:", heights_df.kurtosis() 

返回:

skewness: 0   -0.466663
kurtosis: 0    0.379705

抱歉,如果我在错误的地方发布了此内容;不知道是统计问题还是编程问题。

【问题讨论】:

    标签: python numpy pandas scipy


    【解决方案1】:

    差异是由于不同的归一化。默认情况下,Scipy 不会纠正偏差,而 pandas 会。

    您可以通过传递 bias=False 参数告诉 scipy 纠正偏差:

    >>> x = pandas.Series(np.random.randn(10))
    >>> stats.skew(x)
    -0.17644348972413657
    >>> x.skew()
    -0.20923623968879457
    >>> stats.skew(x, bias=False)
    -0.2092362396887948
    >>> stats.kurtosis(x)
    0.6362620964462327
    >>> x.kurtosis()
    2.0891062062174464
    >>> stats.kurtosis(x, bias=False)
    2.089106206217446
    

    似乎没有办法告诉 pandas 消除偏差校正。

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 2017-05-16
      • 2014-03-16
      • 2021-04-13
      • 2014-01-06
      • 1970-01-01
      • 2019-06-22
      • 2023-01-29
      相关资源
      最近更新 更多