我有2列具有相似数据。我绘制它们来比较它们的分布,我想量化它们的差异。
df = pd.DataFrame({'a':['cat','dog','bird','cat','dog','dog','dog'],
'b':['cat','cat','cat','bird','dog','dog','dog']})
然后我绘制数据框的2列以比较它们的分布:
ax = df['a'].value_counts().plot(kind='bar', color='blue', width=.75, legend=True, alpha=0.8)
df['b'].value_counts().plot(kind='bar', color='maroon', width=.5, alpha=1, legend=True)
我如何从统计上量化分布差异来说明它们有多相似?
这是一个简单的t检验还是别的什么?
答案 0 :(得分:2)
为此使用two-sided Kolmogorov-Smirnov test是很常见的。
在Python中,您可以使用scipy.stats.ks_2samp
:
from scipy import stats
merged = pd.merge(
df.a.value_counts().to_frame(),
df.b.value_counts().to_frame(),
left_index=True,
right_index=True)
stats.ks_2samp(merged.a, merged.b)
一般来说,如果返回的元组的第二个值很小(比如说小于0.05),你应该拒绝这个分布是相同的假设。