взаимосвязь с несколькими категориальными переменными - PullRequest
0 голосов
/ 16 апреля 2020

Есть ли способ найти взаимосвязь между несколькими категориальными переменными? когда у вас очень большой набор данных с большим количеством категориальных переменных.

Ответы [ 2 ]

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

Вы можете использовать этот код для получения корреляции между несколькими переменными, используя plt.matshow. Где 'bikesharing_data' - это pandas DataFrame.

    plt.figure(figsize=[12, 8])
    plt.matshow(bikesharing_data.corr(),
    fignum=False,
    aspect='equal')

    columns = len(bikesharing_data.columns)

    plt.xticks(range(columns), bikesharing_data.columns)
    plt.yticks(range(columns), bikesharing_data.columns)

    plt.colorbar() 
    plt.xticks(rotation=90)
    plt.title('Correlation', y=1.2)

    plt.show()

Где вы можете отбросить числовые переменные, используя:

    features = bikesharing_data.drop(['x1', 'x2', ... ,'xn'], axis=1)

Результирующий вывод выглядит следующим образом; Матрица корреляции

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

как уже упоминалось @arpitrathi, обычно вам нужно использовать Cramer's V. Как я помню, в inte уже есть готовые фрагменты кода rnet, я оставлю вам тот, который я обычно использую для этого, возможно, это поможет you.

Вам понадобится импортировать несколько библиотек, чтобы использовать его.

from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

def cramers_v(x, y):
    '''
    Returns cramers_v for 2 categorical features
    '''
    confusion_matrix = pd.crosstab(x,y)
    chi2 = stats.chi2_contingency(confusion_matrix)[0]
    n = confusion_matrix.sum().sum()
    phi2 = chi2/n
    r,k = confusion_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)))


def heatmap_categorical_columns_w_dependant_categorical(df, dependent_variable, columns):
    '''
    Takes df, a dependant variable as str
    Returns a heatmap of catecorical columns cramers_v with dependent variable 
    '''
    plt.figure(figsize=(8, 10))
    corrM = [cramers_v(df[dependent_variable], df[column]) for column in columns]
    corr = pd.DataFrame(corrM, index=columns, columns=[dependent_variable])
    ax = sns.heatmap(corr,
            annot=True,
            cmap='coolwarm', 
            vmin=-1,
            vmax=1,
           )
    ax.set_title("Cramer V Correlation between Variables")
    return ax

Результат будет примерно таким: enter image description here

Пример использования, который вы можете проверить в этом коде: https://github.com/OzmundSedler/IBM-advanced-DS-coursera/blob/master/4%20Capstone%20/ML-project-draft.ipynb

...