【问题标题】:Cramér's V in PySparkPySpark 中的 Cramer's V
【发布时间】:2020-07-15 15:06:48
【问题描述】:

这里有一个普通的 Python 实现Categorical features correlation

在 PySpark 中实现相同功能的最佳方法是什么?

【问题讨论】:

    标签: python apache-spark pyspark correlation


    【解决方案1】:

    我打算这样做:

    def cramers_v(df, feature1, feature2):
        contingency_matrix = c16.crosstab(feature1, feature2)
        contingency_matrix = contingency_matrix.toPandas().drop(feature1+'_'+feature2, axis=1)
        chi2 = ss.chi2_contingency(contingency_matrix)[0]
        n = contingency_matrix.sum().sum()
        phi2 = chi2 / n
        r, k = contingency_matrix.shape
        phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))
        rcorr = r - ((r-1)**2)/(n-1)
        kcorr = k - ((k-1)**2)/(n-1)
        return np.sqrt(phi2corr / min((kcorr-1), (rcorr-1)))
    

    只需要使用内置的 spark 函数创建列联矩阵。通常这个矩阵足够小以适合内存,因此然后将矩阵转换为 pandas 数据帧。之后,只需使用问题中链接的代码即可。

    变化不大,但可能对那些也有非常大的 spark 数据帧无法放入内存的人有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2022-11-29
      • 2021-11-22
      • 1970-01-01
      相关资源
      最近更新 更多