Python 中不同因素的正态性检验

Normality Test with different factors in Python

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

我的 csv 数据格式如下

SKU 销售额
12034 14
12033 24
12032 10
12034 8
12033 22
12033 12
12032 33
12033 15

我有 1600 多个不同的 SKUS ID,我期待得到的输出是一个摘要 table。

SKU P 值 正常
12032 0.06
12033 0.12
12034 0.00 没有

我尝试了以下代码:

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 的新手,我很感激任何建议,material 我可以检查和建议。 谢谢

这是一种方法。如果您的所有 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