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.
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'])
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()
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()
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()
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)
Je ne l'ai jamais utilisé, mais je vais le présenter pour le moment.
titanic.plot.hexbin(x='Age', y='Fare', gridsize=30)
Il est souvent utilisé pour afficher les valeurs agrégées de chaque catégorie.
titanic['Embarked'].value_counts(dropna=False).plot.bar()
J'ai essayé de m'allonger.
titanic['Embarked'].value_counts(dropna=False).plot.barh()
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)
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))
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)
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()
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.
Grouped Box Plot
Cela ne fonctionne pas avec groupby
, alors écrivez comme suit.
titanic.boxplot(column='Age', by='Survived')
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)
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)
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)
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)
Grouped Hexagonal Binning Plot
titanic.groupby('Survived').plot.hexbin(x='Age', y='Fare', gridsize=30)
Grouped Bar Plot
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack().plot.bar()
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.bar()
Grouped Horizontal Bar Plot
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack().plot.barh()
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.barh()
Grouped Horizontal Bar Plot with DataFrame Styling
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).style.bar(vmin=0, axis=None)
Grouped Line Plot
crime['OCCURRED_ON_DATE'].dt.date.groupby(crime['DISTRICT']).value_counts().unstack(0).plot.line(figsize=(16, 4), alpha=0.5)
crime['OCCURRED_ON_DATE'].dt.date.groupby(crime['DISTRICT']).value_counts().unstack(0).iloc[:, :4].plot.line(figsize=(16, 4), alpha=0.5)
Stacked Area Plot
crime['OCCURRED_ON_DATE'].dt.date.groupby(crime['DISTRICT']).value_counts().unstack(0).plot.area(figsize=(16, 4), linewidth=0)
crime['OCCURRED_ON_DATE'].dt.date.groupby(crime['DISTRICT']).value_counts().unstack(0).iloc[:, :4].plot.area(figsize=(16, 4), linewidth=0)
Grouped Pie Plot
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.pie(subplots=True)
Stacked Bar Plot
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack().plot.bar(stacked=True)
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.bar(stacked=True)
Stacked Horizontal Bar Plot
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack().plot.barh(stacked=True)
titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0).plot.barh(stacked=True)
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))
(titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0)
.div(titanic['Embarked'].value_counts(dropna=False), axis=0)
.plot.bar(stacked=True))
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))
(titanic['Embarked'].groupby(titanic['Survived']).value_counts(dropna=False).unstack(0)
.div(titanic['Embarked'].value_counts(dropna=False), axis=0)
.plot.barh(stacked=True))
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)
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)
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%}'))
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%}'))
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}')
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