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
我有一个包含历史销售数据的数据集,我正在尝试研究每个 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