Крамер V в PySpark - PullRequest
       12

Крамер V в PySpark

0 голосов
/ 03 апреля 2020

Ванильная Python реализация доступна здесь Соотношение категорий

Какой лучший способ реализовать то же самое в PySpark?

1 Ответ

0 голосов
/ 06 апреля 2020

Я собирался сделать это следующим образом:

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)))

Просто нужно создать матрицу непредвиденных обстоятельств, используя встроенную функцию искры. Обычно эти матрицы достаточно малы, чтобы поместиться в памяти, поэтому преобразуйте матрицу в pandas кадр данных. После этого просто используйте код, указанный в вопросе.

Это не так много изменений, но может быть полезно для людей, которые также имеют очень большие искровые кадры данных, которые не помещаются в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...