我已经从 Spark DataFrame
中的crosstab
生成了一个数据帧data
,并希望执行卡方检验。
似乎Statistics.chiSqTest
只能应用于矩阵。我的DataFrame
如下所示,我想看看三组之间的水平分布是否相同:
-
true
-
false
- 和
Undefined
.
from pyspark.mllib.stat import Statistics
+-----------------------------+-------+--------+----------+
|levels | true| false|Undefined |
+-----------------------------+-------+--------+----------+
| 1 |32783 |634460 |2732340 |
| 2 | 2139 | 41248 |54855 |
| 3 |28837 |573746 |5632147 |
| 4 |16473 |320529 |8852552 |
+-----------------------------+-------+--------+----------+
有没有简单的方法可以转换它以用于卡方检验?
一种不使用mllib.Statistics
来处理此问题的方法:
import scipy.stats
crosstab = ...
scipy.stats.chi2_contingency(
crosstab.drop(crosstab.columns[0]).toPandas().as_matrix()
)
如果你真的想要 Spark 统计数据:
from itertools import chain
Statistics.chiSqTest(DenseMatrix(
numRows=crosstab.count(), numCols=len(crosstab.columns) - 1,
values=list(chain(*zip(*crosstab.drop(crosstab.columns[0]).collect())))
))