Es gibt mehrere Bibliotheken, die Daten in Python visualisieren, aber Pandas allein ist ziemlich gut. Die Visualisierung mit Pandas kann in einer Methodenkette abgeschlossen werden, wodurch chaotische temporäre variable Unordnung leicht verhindert werden kann. In diesem Artikel werde ich Visualisierungsrezepte vorstellen, die sich auf diejenigen konzentrieren, die ich in der Praxis häufig verwende.
Dieses Mal werde ich die folgenden zwei Daten ausleihen.
Machen Sie die DataFrames zu "Titanic" bzw. "Crime".
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'])
Dies ist der schnellste Weg, um die Verteilung numerischer Daten zu sehen. Ein Balkendiagramm ist möglicherweise besser geeignet, wenn nur wenige eindeutige Werte vorhanden sind.
titanic['Age'].plot.hist()
Wird beim Betrachten von Quadranten verwendet. Punkte außerhalb der Boxlänge x 1,5 werden durch Markierungen als Ausreißer angezeigt. Geigen-Diagramme können mit Pandas nicht gezeichnet werden. Geben Sie also auf und verwenden Sie Seaborn.
titanic['Age'].plot.box()
Es ist eine Methode, um PDF aus Daten zu schätzen. Wenn es jedoch eindimensional ist, kann ein Histogramm ausreichen.
Weitere Informationen zur Schätzung der Python-Kerneldichte finden Sie unter hier.
Da es scipy verwendet, installieren Sie es mit pip install scipy
, wenn es nicht installiert ist.
titanic['Age'].plot.kde()
Es wird verwendet, um die Beziehung zwischen reellen Zahlen zu sehen. Wenn sich die Punkte zu stark überlappen, ist die Dichte nicht bekannt. Ich denke, es ist Standard, sie transparent zu machen. Wenn eine Kategorie eine Kategorie ist oder nur wenige eindeutige Werte aufweist, ist es besser, die unten beschriebenen gruppierten Histogramme und Box-Whisker zu verwenden.
titanic.plot.scatter(x='Age', y='Fare', alpha=0.3)
Ich habe es nie benutzt, aber ich werde es vorerst vorstellen.
titanic.plot.hexbin(x='Age', y='Fare', gridsize=30)
Es wird häufig verwendet, um aggregierte Werte für jede Kategorie anzuzeigen.
titanic['Embarked'].value_counts(dropna=False).plot.bar()
Ich versuchte mich hinzulegen.
titanic['Embarked'].value_counts(dropna=False).plot.barh()
Horizontal Bar Plot with DataFrame Styling
Sie können den DataFrame wie ein Balkendiagramm aussehen lassen. Ich benutze es oft, weil es mir erlaubt, nach Text zu suchen.
titanic['Embarked'].value_counts(dropna=False).to_frame().style.bar(vmin=0)
Es wird oft verwendet, um Änderungen in der Serie zu sehen.
crime['OCCURRED_ON_DATE'].dt.date.value_counts().plot.line(figsize=(16, 4))
Wie beim Faltliniendiagramm sehen wir die Änderung in der Reihe, aber wir sehen die Größe von Null. Wenn es jedoch zu fein ist, ist es schwierig, das Tal zu sehen, daher ist es besser, es ein wenig zu zerstreuen.
crime['OCCURRED_ON_DATE'].dt.date.value_counts().plot.area(figsize=(16, 4), linewidth=0)
Ich benutze es nicht, weil es schwierig ist, das Kreisdiagramm zu verstehen, aber ich werde es vorerst vorstellen. Die Gründe, warum das Kreisdiagramm schwer zu verstehen ist, werden im folgenden Artikel zusammengefasst.
titanic['Embarked'].value_counts(dropna=False).plot.pie()
Grouped Histogram
Wird oft verwendet, um die Verteilung zwischen zwei Gruppen zu vergleichen. (Es müssen nicht 2 Gruppen sein)
titanic.groupby('Survived')['Age'].plot.hist(alpha=0.5, legend=True)
Oder
titanic['Age'].groupby(titanic['Survived']).plot.hist(alpha=0.5, legend=True)
Im letzteren Fall können Sie also eine externe Serie verwenden.
Grouped Box Plot
Es funktioniert nicht mit groupby
, also schreibe wie folgt.
titanic.boxplot(column='Age', by='Survived')
Grouped Kernel Density Estimation
Es kann verwendet werden, um die Verteilung zwischen zwei Gruppen sowie das Histogramm zu vergleichen.
titanic['Age'].groupby(titanic['Survived']).plot.kde(legend=True)
Grouped Scatter Plot
Ich denke, ich benutze es oft, aber ich kann nicht klug schreiben. Wenn es sich um "Gruppieren nach" handelt, wird es als Liste zurückgegeben.
titanic.groupby('Survived').plot.scatter(x='Age', y='Fare', alpha=0.3)
Es kann nur verwendet werden, wenn der Schlüssel numerische Daten sind. Wenn Sie ihn jedoch wie folgt schreiben, wird für jede Gruppe ein Streudiagramm mit verschiedenen Farben erstellt.
titanic.plot.scatter(x='Age', y='Fare', c='Survived', cmap='viridis', alpha=0.3)
Pandas Official Document zeigt, wie Sie Axis freigeben und zwei Diagramme zeichnen. ..
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
Um ein zu 100% gestapeltes Balkendiagramm zu zeichnen, müssen Sie das Verhältnis berechnen.
(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
Überlagern Sie das Histogramm und den Graphen der Kernel-Dichteschätzung.
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
Sie müssen den Standardfehler berechnen, um die Fehlerleiste zu zeichnen.
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%}'))
Wenn Sie die Farbkarte ändern, sieht sie wie ein Rasen aus.
(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
Ich werde es im nächsten Artikel vorstellen.
corr = titanic.corr()
low = (1 + corr.values.min()) / (1 - corr.values.min())
corr.style.background_gradient(axis=None, cmap='viridis', low=low).format('{:.6f}')
Ich habe diejenigen vorgestellt, die relativ einfach zu bedienen scheinen. Es gibt auch so etwas! Lass es mich wissen, bitte. Wenn Sie ein ausführlicheres Diagramm zeichnen möchten, ist die nächste Seite hilfreich.
Recommended Posts