[PYTHON] Visualisez rapidement avec les pandas

Il existe plusieurs bibliothèques qui visualisent les données en Python, mais Pandas seul est plutôt bon. La visualisation avec Pandas peut être complétée dans une chaîne de méthodes, ce qui peut légèrement éviter un encombrement variable temporaire chaotique. Dans cet article, je présenterai des recettes de visualisation, en me concentrant sur celles que j'utilise souvent dans la pratique.

Préparation

environnement

Les données

Cette fois, j'emprunterai les deux données suivantes.

Rendre les DataFrames «titanesques» et «crime», respectivement.

import pandas as pd
import zipfile

with zipfile.ZipFile('titanic.zip') as myzip:
    with myzip.open('train.csv') as myfile:
        titanic = pd.read_csv(myfile)

with zipfile.ZipFile('crimes-in-boston.zip') as myzip:
    with myzip.open('crime.csv') as myfile:
        crime = pd.read_csv(myfile, encoding='latin-1', parse_dates=['OCCURRED_ON_DATE'])

Recette de visualisation

Histogramme

C'est le moyen le plus rapide de voir la distribution des données numériques. Un graphique à barres peut être plus approprié lorsqu'il y a peu de valeurs uniques.

titanic['Age'].plot.hist()

image.png

Boîte à moustaches

Utilisé pour regarder les quadrants. Les points en dehors de la longueur de la boîte x 1,5 sont indiqués par des marqueurs comme des valeurs aberrantes. Les diagrammes de violon ne peuvent pas être dessinés avec des Pandas, alors abandonnez et utilisez Seaborn.

titanic['Age'].plot.box()

image.png

Optimisation de la densité du noyau

C'est une méthode pour estimer un PDF à partir de données, mais si elle est unidimensionnelle, un histogramme peut suffire. Pour plus d'informations sur l'estimation de la densité du noyau Python, voir ici. Puisqu'il utilise scipy, s'il n'est pas installé, installez-le avec pip install scipy.

titanic['Age'].plot.kde()

image.png

Nuage de points

Il est utilisé pour voir la relation entre les nombres réels. Si les points se chevauchent trop, la densité ne sera pas connue, donc je pense qu'il est normal de la rendre transparente. Si l'un d'entre eux est une catégorie ou a peu de valeurs uniques, il est préférable d'utiliser les histogrammes groupés et les moustaches de boîte décrits ci-dessous.

titanic.plot.scatter(x='Age', y='Fare', alpha=0.3)

image.png

Tracé de regroupement hexagonal

Je ne l'ai jamais utilisé, mais je vais le présenter pour le moment.

titanic.plot.hexbin(x='Age', y='Fare', gridsize=30)

image.png

Bar Plot

Il est souvent utilisé pour afficher les valeurs agrégées de chaque catégorie.

titanic['Embarked'].value_counts(dropna=False).plot.bar()

image.png

Graphique à barres horizontales

J'ai essayé de m'allonger.

titanic['Embarked'].value_counts(dropna=False).plot.barh()

image.png

Horizontal Bar Plot with DataFrame Styling

Vous pouvez faire ressembler le DataFrame à un graphique à barres. Je l'utilise beaucoup car il me permet de rechercher par texte.

titanic['Embarked'].value_counts(dropna=False).to_frame().style.bar(vmin=0)

image.png

Graphique linéaire

Il est souvent utilisé pour voir les changements dans la série.

crime['OCCURRED_ON_DATE'].dt.date.value_counts().plot.line(figsize=(16, 4))

image.png

Tracé de zone

Comme avec le graphique de ligne de pliage, nous voyons la série changer, mais nous voyons la grandeur à partir de zéro. Cependant, si elle est trop fine, la vallée sera difficile à comprendre, il vaut donc mieux la disperser un peu.

crime['OCCURRED_ON_DATE'].dt.date.value_counts().plot.area(figsize=(16, 4), linewidth=0)

image.png

Graphique à secteurs

Je ne l'utilise pas car il est difficile de comprendre le graphique circulaire, mais je vais le présenter pour le moment. Les raisons pour lesquelles le graphique circulaire est difficile à comprendre sont résumées dans l'article suivant.

titanic['Embarked'].value_counts(dropna=False).plot.pie()

image.png

Grouped Histogram

Souvent utilisé pour comparer la distribution entre deux groupes. (Il n'est pas nécessaire que ce soit 2 groupes)

titanic.groupby('Survived')['Age'].plot.hist(alpha=0.5, legend=True)

Ou

titanic['Age'].groupby(titanic['Survived']).plot.hist(alpha=0.5, legend=True)

Ainsi, dans ce dernier cas, vous pouvez utiliser une série externe.

image.png

Grouped Box Plot

Cela ne fonctionne pas avec groupby, alors écrivez comme suit.

titanic.boxplot(column='Age', by='Survived')

image.png

Grouped Kernel Density Estimation

Il peut être utilisé pour comparer la distribution entre deux groupes ainsi que l'histogramme.

titanic['Age'].groupby(titanic['Survived']).plot.kde(legend=True)

image.png

Grouped Scatter Plot

Je pense que je l'utilise souvent, mais je ne peux pas écrire intelligemment. S'il s'agit de «group by», il sera renvoyé sous forme de liste.

titanic.groupby('Survived').plot.scatter(x='Age', y='Fare', alpha=0.3)

image.png image.png

Il ne peut être utilisé que si la clé est des données numériques, mais si vous l'écrivez comme suit, ce sera un diagramme de dispersion de couleurs différentes pour chaque groupe.

titanic.plot.scatter(x='Age', y='Fare', c='Survived', cmap='viridis', alpha=0.3)

image.png

Document officiel de Pandas montre comment partager Axis et dessiner deux graphiques. ..

ax = titanic[titanic['Survived'] == 0].plot.scatter(x='Age', y='Fare', label=0, alpha=0.3)
titanic[titanic['Survived'] == 1].plot.scatter(x='Age', y='Fare', c='tab:orange', label=1, alpha=0.3, ax=ax)

image.png

Grouped Hexagonal Binning Plot

titanic.groupby('Survived').plot.hexbin(x='Age', y='Fare', gridsize=30)

image.png image.png

Grouped Bar Plot

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack().plot.bar()

image.png

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.bar()

image.png

Grouped Horizontal Bar Plot

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack().plot.barh()

image.png

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.barh()

image.png

Grouped Horizontal Bar Plot with DataFrame Styling

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).style.bar(vmin=0, axis=None)

image.png

Grouped Line Plot

crime['OCCURRED_ON_DATE'].dt.date.groupby(crime['DISTRICT']).value_counts().unstack(0).plot.line(figsize=(16, 4), alpha=0.5)

image.png

crime['OCCURRED_ON_DATE'].dt.date.groupby(crime['DISTRICT']).value_counts().unstack(0).iloc[:, :4].plot.line(figsize=(16, 4), alpha=0.5)

image.png

Stacked Area Plot

crime['OCCURRED_ON_DATE'].dt.date.groupby(crime['DISTRICT']).value_counts().unstack(0).plot.area(figsize=(16, 4), linewidth=0)

image.png

crime['OCCURRED_ON_DATE'].dt.date.groupby(crime['DISTRICT']).value_counts().unstack(0).iloc[:, :4].plot.area(figsize=(16, 4), linewidth=0)

image.png

Grouped Pie Plot

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.pie(subplots=True)

image.png

Stacked Bar Plot

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack().plot.bar(stacked=True)

image.png

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.bar(stacked=True)

image.png

Stacked Horizontal Bar Plot

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack().plot.barh(stacked=True)

image.png

titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.barh(stacked=True)

image.png

Percent Stacked Bar Plot

Pour dessiner un graphique à barres empilées à 100%, vous devez calculer le ratio.

(titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack()
 .div(titanic['Survived'].value_counts(dropna=False), axis=0)
 .plot.bar(stacked=True))

image.png

(titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0)
 .div(titanic['Embarked'].value_counts(dropna=False), axis=0)
 .plot.bar(stacked=True))

image.png

Percent Stacked Horizontal Bar Plot

(titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack()
 .div(titanic['Survived'].value_counts(dropna=False), axis=0)
 .plot.barh(stacked=True))

image.png

(titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0)
 .div(titanic['Embarked'].value_counts(dropna=False), axis=0)
 .plot.barh(stacked=True))

image.png

Overlay Plots

Superposez l'histogramme et le graphique de l'estimation de la densité du noyau.

titanic['Age'].groupby(titanic['Survived']).plot.hist(alpha=0.5, legend=True)
titanic['Age'].groupby(titanic['Survived']).plot.kde(legend=True, secondary_y=True)

image.png

Grouped Bar Plot with Error Bars

Vous devez calculer l'erreur standard pour dessiner la barre d'erreur.

yerr = titanic.groupby(['Survived', 'Pclass'])['Fare'].std().unstack(0)
titanic.groupby(['Survived', 'Pclass'])['Fare'].mean().unstack(0).plot.bar(yerr=yerr)

image.png

Heat Map with DataFrame Styling

(pd.crosstab(crime['DAY_OF_WEEK'], crime['HOUR'].div(3).map(int).mul(3), normalize=True)
 .reindex(['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'])
 .style.background_gradient(axis=None).format('{:.3%}'))

image.png

Si vous changez la carte des couleurs, cela ressemblera à une pelouse.

(pd.crosstab(crime['DAY_OF_WEEK'], crime['MONTH'], normalize=True)
 .reindex(['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'])
 .style.background_gradient(axis=None, cmap='YlGn').format('{:.3%}'))

image.png

Correlation Heat Map with DataFrame Styling

Je l'introduirai dans le prochain article.

corr = titanic.corr()
low = (1 + corr.values.min()) / (1 - corr.values.min())
corr.style.background_gradient(axis=None, cmap='viridis', low=low).format('{:.6f}')

image.png

la fin

J'ai présenté ceux qui semblent relativement faciles à utiliser. Il y a aussi une telle chose! S'il vous plaît, faites-moi savoir. Si vous souhaitez dessiner un graphique plus élaboré, la page suivante vous sera utile.

Recommended Posts

Visualisez rapidement avec les pandas
Essayez rapidement de visualiser votre ensemble de données avec des pandas
Traitement des ensembles de données avec des pandas (1)
Échantillonnage bootstrap avec Pandas
Convertir 202003 en 2020-03 avec les pandas
Traitement des ensembles de données avec des pandas (2)
Fusionner les ensembles de données avec les pandas
Pandas apprenant avec la chimioinfomatique
Visualisez les réclamations avec l'IA
Visualisez le nem 2019 avec WordCloud
Visualisez de manière interactive les données avec Treasure Data, Pandas et Jupyter.
Visualisation des données avec les pandas
Manipulation des données avec les Pandas!
Mélangez les données avec les pandas
Lire csv avec des pandas python
Visualisons le fil 2ch avec WordCloud-Scraping-
[Python] Changer de type avec les pandas
Visualisez les informations de localisation avec Basemap
Standardisez par groupe avec les pandas
Visualisons la connaissance de Wikidata avec Neo4j
Empêchez les omissions avec l'impression de pandas
Conseils de traitement des données avec Pandas
[En une seule ligne] Visualisez comme une pelouse avec seulement des pandas
Extraire la valeur maximale avec les pandas.
Visualisez l'arbre de décision avec le notebook Jupyter
Pandas
Traçage de données polyvalent avec pandas + matplotlib
[Python] Joindre deux tables avec des pandas
Visualisez les dépendances des packages python avec graphviz
Créez dynamiquement de nouvelles trames de données avec des pandas
Extraire plusieurs colonnes spécifiques avec des pandas
1. Statistiques apprises avec Python 1-1. Statistiques de base (Pandas)
Analyse pratique avec Pandas + notebook Jupyter
Dessinez un graphique avec des pandas + XlsxWriter
Manipuler des chaînes avec un groupe pandas par
Bulk Insert Pandas DataFrame avec psycopg2
Je veux faire ○○ avec les Pandas
Créez une tranche d'âge avec les pandas
[Python] Formater quand to_csv avec des pandas
Génération de fonctionnalités avec pandas group par
Gère divers formats de date avec des pandas
Connectez-vous rapidement avec SSH avec authentification par clé publique
Tracez l'indice boursier moyen Nikkei avec des pandas
Chargez csv avec des colonnes en double dans pandas
J'ai essayé de visualiser AutoEncoder avec TensorFlow
Créez rapidement un fichier Excel avec Python #python
Conseils pour tracer plusieurs lignes avec des pandas
Essayez de convertir en données ordonnées avec les pandas
Dessinez une étiquette d'axe hiérarchique avec matplotlib + pandas
Visualisons le fil 2ch avec WordCloud-analyse morphologique / édition WordCloud-
Visualisez le point P qui fonctionne avec Python
[Python] Créez rapidement une API avec Flask
Remplacez les noms / valeurs des colonnes par pandas dataframe
[Easy Python] Lecture de fichiers Excel avec des pandas
Implémentez rapidement le stockage compatible S3 avec python-flask
Chargez CSV avec des pandas et jouez avec Index