[PYTHON] Création d'une méthode pour sélectionner et visualiser automatiquement un graphique approprié pour les pandas DataFrame

introduction

Je me demande souvent quel graphique utiliser pour visualiser des données. C'est pourquoi, la dernière fois, j'ai résumé les graphiques adaptés à chaque type de variable explicative et de variable objective (Variable explicative, méthode de visualisation des données par variable objective). Cependant, je pensais que j'écrivais "J'oublierai ça bientôt!" Par conséquent, j'ai créé une méthode qui détermine automatiquement le type de variable et dessine un graphique approprié.

Dernier résumé

La méthode Seaborn appropriée pour chaque type de variable explicative et de variable objective (qu'il s'agisse d'une quantité discrète ou non) est la suivante. Pour plus de détails, veuillez vous référer à l'article précédent à partir du lien ci-dessus. sns_summary.png

Contenu de la méthode

Voici le code de ma propre méthode.

import matplotlib.pyplot as plt
import seaborn as sns

def visualize_data(data, target_col):
    
    for key in data.keys():
        
        if key==target_col:
            continue
            
        length=10
        subplot_size=(length, length/2)
        
        if is_categorical(data, key) and is_categorical(data, target_col):

            fig, axes=plt.subplots(1, 2, figsize=subplot_size)
            sns.countplot(x=key, data=data, ax=axes[0])
            sns.countplot(x=key, data=data, hue=target_col, ax=axes[1])
            plt.tight_layout()
            plt.show()

        elif is_categorical(data, key) and not is_categorical(data, target_col):

            fig, axes=plt.subplots(1, 2, figsize=subplot_size)
            sns.countplot(x=key, data=data, ax=axes[0])
            sns.violinplot(x=key, y=target_col, data=data, ax=axes[1])
            plt.tight_layout()
            plt.show()

        elif not is_categorical(data, key) and is_categorical(data, target_col):

            fig, axes=plt.subplots(1, 2, figsize=subplot_size)
            sns.distplot(data[key], ax=axes[0], kde=False)
            g=sns.FacetGrid(data, hue=target_col)
            g.map(sns.distplot, key, ax=axes[1], kde=False)
            axes[1].legend()
            plt.tight_layout()
            plt.close()
            plt.show()

        else:

            sg=sns.jointplot(x=key, y=target_col, data=data, height=length*2/3)
            plt.show()            

Le is_categorical est le suivant.

def is_categorical(data, key):
    
    col_type=data[key].dtype
    
    if col_type=='int':
        
        nunique=data[key].nunique()
        return nunique<6
    
    elif col_type=="float":
        return False
    
    else:
        return True

Le contour est

-Passez les données que vous souhaitez visualiser (pandas.DataFrame) aux données et la clé de la variable objective à target_col. -Utiliser la méthode is_categorical pour déterminer si les variables explicatives et objectives sont discrètes ou continues, et les visualiser avec la méthode seaborn appropriée.

Il est devenu. Lorsque le type de données est int, s'il y a 6 types de valeurs ou plus, c'est une quantité continue, et s'il n'y a que 5 types de valeurs ou moins, c'est une quantité discrète. Pour être honnête, il y a place à l'amélioration dans le jugement ici.

Application

Appliquez-le aux données titanesques (une seule copie car le résultat est long).

import pandas as pd

data=pd.read_csv("train.csv")
data=data.drop(["PassengerId", "Name", "Ticket", "Cabin"], axis=1) #Exclut les valeurs uniques

visualize_data(data, "Survived")

visualize_data.png J'ai pu dessiner automatiquement un graphique approprié pour chaque type!

À la fin

Dans le [GitHub] précédemment publié (https://github.com/mr16048/AUTOMATE_ML) avec Méthode pour obtenir un aperçu des données avec Pandas soulevé. Veuillez l'utiliser! Je souhaite automatiser divers prétraitements à l'avenir.

Recommended Posts

Création d'une méthode pour sélectionner et visualiser automatiquement un graphique approprié pour les pandas DataFrame
[Python] J'ai créé un script qui coupe et colle automatiquement les fichiers du PC local sur un SSD externe.
J'ai créé un outil pour générer automatiquement un diagramme de transition d'état pouvant être utilisé à la fois pour le développement Web et le développement d'applications
[Python] Comment ajouter des lignes et des colonnes à une table (pandas DataFrame)
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
[Python / Tkinter] Rechercher Pandas DataFrame → Créer un formulaire de recherche simple à afficher
Une note lors de la recherche d'une alternative aux pandas roulant pour une fenêtre en mouvement
J'ai créé un réseau pour convertir des images noir et blanc en images couleur (pix2pix)
J'ai créé une extension Chrome qui affiche un graphique sur la page Amedas
J'ai créé un programme pour saisir ce que j'ai mangé et afficher les calories et les sucres
J'ai créé un docset de tableau de bord pour Holoviews
Comment diviser et enregistrer un DataFrame
J'ai créé un module alternatif pour les japandas.
[Pandas_flavor] Ajouter une méthode de Pandas DataFrame
J'ai fait un script pour afficher des pictogrammes
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
Je viens de créer un outil pour afficher facilement les données sous forme de graphique par opération GUI
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai fait un modèle de classification d'images et essayé de le déplacer sur mobile
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
Ce que j'ai pensé et appris à étudier pendant 100 jours dans une école de programmation
J'ai fait une image pour qemu avec Yocto, mais j'ai échoué et j'ai recommencé
J'ai créé un package pour créer un fichier exécutable à partir du code source Hy
J'ai créé un outil en Python qui clique avec le bouton droit sur un fichier Excel et le divise en fichiers pour chaque feuille.
J'ai essayé de créer une méthode de super résolution / ESPCN
J'ai fait un algorithme de rechange2 moins cher pour uWSGI
J'ai créé un outil utile pour Digital Ocean
Je veux INSÉRER un DataFrame dans MSSQL
J'ai essayé de créer une méthode de super résolution / SRCNN ①
J'ai créé un téléchargeur pour l'expression distribuée par mot
J'ai créé un outil pour compiler nativement Hy
J'ai essayé de créer une méthode de super résolution / SRCNN ③
J'ai essayé de créer une méthode de super résolution / SRCNN ②
J'ai créé un outil pour obtenir de nouveaux articles
J'ai fait un graphique de nombres aléatoires avec Numpy
Nous avons créé un produit de prévention du télétravail.
J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.
J'ai oublié d'utiliser VIM, j'ai donc fait une vidéo pour la mémorisation. 3 vidéos par niveau
J'ai fait une commande pour attendre que Django démarre jusqu'à ce que la base de données soit prête
J'ai converti le temps en un entier, je l'ai décomposé en facteurs premiers et j'ai fait un bot pour tweeter le résultat (matériel xkcd)