Python 在SparkMlib中使用交叉表(spark数据框)的结果进行卡方检验
我已经从SparkPython 在SparkMlib中使用交叉表(spark数据框)的结果进行卡方检验,python,apache-spark,pyspark,apache-spark-sql,apache-spark-mllib,Python,Apache Spark,Pyspark,Apache Spark Sql,Apache Spark Mllib,我已经从Sparkdataframe中的crosstab生成了一个dataframedata,并希望执行卡方检验 似乎Statistics.chiSqTest只能应用于矩阵。我的DataFrame如下所示,我想看看三个组的级别分布是否相同: true false 和未定义 从pyspark.mllib.stat导入统计信息 +-----------------------------+-------+--------+----------+ |级别|真|假|未定义| +-----------
dataframe
中的crosstab
生成了一个dataframedata
,并希望执行卡方检验
似乎Statistics.chiSqTest
只能应用于矩阵。我的DataFrame
如下所示,我想看看三个组的级别分布是否相同:
true
false
- 和
未定义
从pyspark.mllib.stat导入统计信息
+-----------------------------+-------+--------+----------+
|级别|真|假|未定义|
+-----------------------------+-------+--------+----------+
| 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())))
))