'How to get the relation between categorical and numerical variables of a dataframe?

I have a dataframe with 49 columns. Most of them are categorical (dtype object), some are numerical. As I'm a newbie in data science I tried to plot the Pearson correlation heatmap and see the correlation of independent variables but only numeric variables are taken into account.

So how to get the relation between categorical and numerical variables of a dataframe?

Here is an excerpt of my dataframe:

>>> df1.head(3)
    Sexe    date_naissance  Groupe_dage     ville   Statut_marital  Niveau_de_scolarite     Situation_professionnelle   Autre_situation_professionnelle     Revenu_mensuel  Si_connexion_internet   Canal_acces_info    Autre_canal_acces_info  Si_situtation_ville_degradee    Si_intention_emigration     Besoin_Sante    Besoin_Education    Besoin_Conditions_de_vie    Besoin_Lutte_contre_criminalite     Besoin_Emploi   Besoin_Lutte_contre_corruption  Besoin_Eau_potable  Besoin_Infrastructures  Besoin_Culture_art  Besoin_Amelioration_services_publics    Besoin_Acces_logement   Besoin_Autres_besoins   Non_declaration_besoins     Autres_besoins  Si_connait_president_commune    Si_connait_parlementaires   Si_inscrit_LE   Si_vote_2016    Intention_vote_2021     Consentement    Langue_du_questionnaire     region  id_reg  status  nbr_app     adherent
0   Une femme   1964-04-15  Entre 45 et 54 ans  Al Hoceima  Marié et je n'ai pas encore d'enfants à charge    1er cycle universitaire / Licence   Je suis independent     NaN     5,000-7,499 DHS     Oui     Internet    NaN     Je suis d'accord    Je ne suis pas d'accord     True    False   True    False   True    False   False   False   False   False   False   False   False   NaN     Oui     Oui     Oui     Oui     Je sais déjà pour qui je vais voter en 2021   J'accepter d'être recontacté  Arabe   Tanger-Tetouan-Al Hoceima   1.0     Qualifié   3.0     True
1   Une femme   NaN     Entre 18 et 24 ans  Tétouan    Célibataire    1er cycle universitaire / Licence   Je suis journalier, je travaille de temps à a...   NaN     1-2,499 DHS     Non     Internet    NaN     Je suis d'accord    Je suis d'accord    True    True    False   False   True    False   False   False   False   False   False   False   False   NaN     Oui     Non     Non     NaN     Je ne voterai pas en 2021   Non     Arabe   Tanger-Tetouan-Al Hoceima   1.0     NaN     NaN     NaN
2   Un homme    NaN     Entre 25 et 34 ans  Khenifra    Marié et j'ai des enfants à charge    Niveau lycée   Je suis journalier, je travaille de temps à a...   NaN     Je préfére ne pas répondre   Non     Télévision    NaN     Je suis d'accord    Je suis d'accord    True    False   True    False   True    False   False   False   False   False   False   False   False   NaN     Oui     Non     Non     NaN     Je vais voter en 2021 mais je ne sais toujours...   J'accepter d'être recontacté  Arabe   Beni Mellal-Khenifra    5.0     Na veut pas répondre   2.0     NaN

My attempt

Following this guide on categorical encoding I tried the following:

# for each column where dtype is object
for column in df1.columns:
    if df1[column].dtypes == np.object:
        df1[column] = df1[column].astype('category')
        df1[column] = df1[column].cat.codes

#Using Pearson Correlation
cor = df1.corr()

mask = np.zeros_like(cor, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
plt.figure(figsize=(12,10))
sns.heatmap(cor,
            vmin=-1,
            cmap='coolwarm',
            annot=False,
            mask = mask);

I guess it doesn't make sense as I'm doing the correlation between categorical variables or numerical and categorical variables.



Solution 1:[1]

For correlation between categorical values you can use the corrected Cramer's V, and for correlation between numerical and categorical variables you can use the correlation ratio.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Taq Seorangpun