[PYTHON] Mit Pandas schnell visualisieren

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.

Vorbereitung

Umgebung

Daten

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'])

Visualisierungsrezept

Histogramm

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()

image.png

Box-Plot

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()

image.png

Kernel Density Optimization

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()

image.png

Streudiagramm

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)

image.png

Sechseckige Binning-Handlung

Ich habe es nie benutzt, aber ich werde es vorerst vorstellen.

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

image.png

Bar Plot

Es wird häufig verwendet, um aggregierte Werte für jede Kategorie anzuzeigen.

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

image.png

Horizontales Balkendiagramm

Ich versuchte mich hinzulegen.

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

image.png

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)

image.png

Liniendiagramm

Es wird oft verwendet, um Änderungen in der Serie zu sehen.

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

image.png

Flächengrundstück

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)

image.png

Tortenplot

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()

image.png

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.

image.png

Grouped Box Plot

Es funktioniert nicht mit groupby, also schreibe wie folgt.

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

image.png

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)

image.png

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)

image.png image.png

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)

image.png

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)

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

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))

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

Ü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)

image.png

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)

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

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%}'))

image.png

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}')

image.png

das Ende

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

Mit Pandas schnell visualisieren
Versuchen Sie schnell, Ihren Datensatz mit Pandas zu visualisieren
Datensätze mit Pandas verarbeiten (1)
Bootstrap-Sampling mit Pandas
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Datensätze mit Pandas verarbeiten (2)
Zusammenführen von Datensätzen mit Pandas
Pandas lernen mit Chemoinfomatik
Visualisieren Sie Ansprüche mit AI
Visualisieren Sie 2019 nem mit WordCloud
Visualisieren Sie Daten interaktiv mit TreasureData, Pandas und Jupyter.
Datenvisualisierung mit Pandas
Datenmanipulation mit Pandas!
Daten mit Pandas mischen
Lesen Sie CSV mit Python-Pandas
Lassen Sie uns 2ch Thread mit WordCloud-Scraping- visualisieren
[Python] Ändere den Typ mit Pandas
Visualisieren Sie Standortinformationen mit Basemap
Standardisieren Sie nach Gruppen mit Pandas
Lassen Sie uns das Wissen über Wikidata mit Neo4j visualisieren
Verhindern Sie Auslassungen mit Pandas Print
Datenverarbeitungstipps mit Pandas
[In einer Zeile] Visualisiere wie ein Rasen mit nur Pandas
Extrahieren Sie den Maximalwert mit Pandas.
Visualisieren Sie den Entscheidungsbaum mit einem Jupyter-Notizbuch
Pandas
Vielseitige Datenerfassung mit Pandas + Matplotlib
[Python] Verbinde zwei Tabellen mit Pandas
Visualisieren Sie Python-Paketabhängigkeiten mit graphviz
Extrahieren Sie bestimmte mehrere Spalten mit Pandas
1. Mit Python 1-1 gelernte Statistiken. Grundlegende Statistiken (Pandas)
Bequeme Analyse mit Pandas + Jupyter Notebook
Zeichnen Sie ein Diagramm mit Pandas + XlsxWriter
Bearbeiten von Strings mit Pandas gruppieren nach
Bulk Insert Pandas DataFrame mit psycopg2
Ich möchte ○○ mit Pandas machen
Erstellen Sie eine Altersgruppe mit Pandas
[Python] Format, wenn to_csv mit Pandas
Feature-Generierung mit Pandas gruppieren nach
Behandelt verschiedene Datumsformate mit Pandas
Melden Sie sich schnell mit SSH mit Authentifizierung mit öffentlichem Schlüssel an
Zeichnen Sie den Nikkei Average Stock Index mit Pandas
Laden Sie csv mit doppelten Spalten in Pandas
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Erstellen Sie schnell eine Excel-Datei mit Python #python
Tipps zum Zeichnen mehrerer Linien mit Pandas
Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln
Zeichnen Sie eine hierarchische Achsenbeschriftung mit matplotlib + pandas
Lassen Sie uns 2ch Thread mit WordCloud-morphologische Analyse / WordCloud Edition- visualisieren
Visualisieren Sie Punkt P, der mit Python funktioniert
[Python] Erstellen Sie schnell eine API mit Flask
Ersetzen Sie Spaltennamen / -werte durch Pandas-Datenrahmen
[Easy Python] Lesen von Excel-Dateien mit Pandas
Implementieren Sie schnell S3-kompatiblen Speicher mit Python-Flask
Laden Sie csv mit Pandas und spielen Sie mit Index