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

    10-08 22:47