python - Python Pandas 发现 2 个分布之间的统计差异
问题描述
我有 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 检验还是别的什么?
解决方案
为此,使用两侧 Kolmogorov-Smirnov 检验非常常见。
在 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),你应该拒绝分布相同的假设。
推荐阅读
- c# - Unity / C# - 是否可以返回 InputManager 的前进、后退、左、右按钮?
- python-3.x - 在执行 alien_invasion 时收到此错误。如何摆脱这个?
- d3.js - 如何使用交叉过滤器过滤图形数据并在力有向图上可视化它们?
- html - 如何删除 h1 标签中文本周围的默认空白
- c++ - 减法倒计时到零游戏模式与C++中的递归
- r - 通过 R 中的嵌套函数传递默认参数
- c - C - 有效日期证书测试中的 Seg 错误
- c# - BLE 服务 UUID--System.FormatException:'Guid 应包含 32 位数字和 4 个破折号(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。
- javascript - 尝试通过 AJAX 验证 Laravel 表单时出现错误 422
- c# - c# 程序集没有在 Visual Studio 中引用相同的代码?