【问题标题】:Normality Test with different factors in PythonPython中不同因素的正态性检验
【发布时间】:2021-08-06 18:53:22
【问题描述】:

我有一个包含历史销售数据的数据集,我正在尝试研究每个 SKU 的销售是否遵循正态分布。为此,我正在使用 shapiro wilk 测试(如果有更好的选择,请告诉我)。虽然我无法将公式应用于每个不同的因素。

我的 csv 数据格式如下

SKU Sales
12034 14
12033 24
12032 10
12034 8
12033 22
12033 12
12032 33
12033 15

我有 1600 多个不同的 SKUS ID,我期待得到的输出是一个汇总表。

SKU P-Value Normal
12032 0.06 Yes
12033 0.12 Yes
12034 0.00 No

我尝试了以下代码:

import pandas as pd
import numpy as np
import scipy.stats
data = pd.read_csv('SalesHistorySample.csv')
df = pd.DataFrame(data)
p_value = stats.shapiro(df['Sales'].dropna())

我认为我在正确的轨道上,虽然当我尝试 groupby() 函数时它没有成功。

我实际上是 Python 新手,我感谢任何推荐、我可以查看的材料和建议。 谢谢。

【问题讨论】:

    标签: python pandas normal-distribution


    【解决方案1】:

    这是一种方法。如果您的所有 SKU 至少有 3 条记录,您可以删除 if len(g) > 3

    import pandas as pd
    import numpy as np
    import scipy.stats
    def p_val(g):
        # significance level
        alpha = .05
        if len(g) >= 3:
            g['P-Value'] = scipy.stats.shapiro(g['Sales'].dropna())[1]
    
            if g['P-Value'].iloc[0] > alpha:
                # fail to reject
                g['Normal'] = True
            else:
                g['Normal'] = False
                
            return g[['SKU', 'P-Value', 'Normal']].iloc[0]
    
    df.groupby('SKU').apply(p_val)
    

    假设alpha = .05

    【讨论】:

    • 非常感谢。它工作得很好。
    猜你喜欢
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2018-12-08
    • 2018-05-17
    • 2020-04-09
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多