我已经从Spark data
中的crosstab
生成了一个数据帧DataFrame
,并且想要执行卡方测试。
看来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())))
))
关于python - 使用Cross选项卡( Spark 数据框)中的结果在SparkMlib中进行卡方检验,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35736493/