使用交叉表(火花数据帧)的结果在 SparkMlib 中进行卡方检验



我已经从 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())))
))

相关内容

  • 没有找到相关文章

最新更新