[PYTHON] Zeichnen Sie ein Diagramm, indem Sie es mit Pandas groupby verarbeiten

Einführung

Ich fange an, mit Kaggles Titanic zu spielen, aber bevor ich fehlende Werte ergänze oder Hyperparameter überprüfe, möchte ich mir die Daten genauer ansehen und sie ansehen. Ich möchte die gelesenen Daten schnell nach dem Wert "Survived" gruppieren und ein Diagramm zeichnen, aber es funktioniert nicht sehr gut. Weil ich Pandas '"GroupBy" nicht verstehe.

Es gibt viele Beispiele für das Zeichnen von Grafiken durch unsere Vorgänger im Internet, aber ich habe diesen Artikel geschrieben, weil ich dachte, dass er für Anfänger nützlich sein könnte, indem ich den Weg meines Verständnisses beschreibe.

Ziel erreichen

Zeichnen Sie ein Diagramm wie das folgende.

チケット記号ごとの生存・死亡・不明者数

In diesem Diagramm ist die horizontale Achse das Symbol für "Ticket", die vertikale Achse ist das Überleben ("s"), der Tod ("d"), das Unbekannte ("na"). Die Anzahl der Personen in ) wird in absteigender Reihenfolge nach der Gesamtzahl der Personen akkumuliert und sortiert. Beispielsweise beträgt das Ticketsymbol von `` CA. 2343``` ganz links 11 Personen insgesamt, 4 Personen unbekannt und der Rest 7 Menschen sind gestorben.

Ich möchte eine solche Grafik schnell zeichnen.

Daten lesen

Lesen Sie die Daten und überprüfen Sie die Nummer für jedes Symbol in den Daten von `` `Ticket```.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

train_data = pd.read_csv("../train.csv")
test_data = pd.read_csv("../test.csv")
total_data = pd.concat([train_data, test_data]) # train_Daten und Test_Daten verketten

ticket_freq = total_data["Ticket"].value_counts()
CA. 2343        11
CA 2144          8
1601             8
S.O.C. 14879     7
3101295          7
                ..
350404           1
248706           1
367655           1
W./C. 14260      1
350047           1
Name: Ticket, Length: 929, dtype: int64

CA.2343 sind 11 Personen,8 CA 2144,Und so weiter.



# Erstellen Sie Daten für Diagramme
## Gruppe für Gruppeby

 Gruppieren Sie zuerst `` `total_data``` nach Ticketsymbol.

```python
total_data_ticket = total_data.groupby("Ticket")
#Ausgabe
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001F5A14327C8>

Der Nachteil von groupby ist,Der Inhalt der Daten wird nicht angezeigt.Hier, ***Gruppiert***Verstehe in meinem Kopf,Gehe zum nächsten.



## Extrahieren Sie nur Überlebensinformationen
 Rufen Sie als nächstes die Überlebensinformationen ab (`` `Survived```).

```python
total_data_ticket = total_data.groupby("Ticket")["Survived"]
total_data_ticket
#Ausgabe
<pandas.core.groupby.generic.SeriesGroupBy object at 0x000001F5A1437B48>

Die Daten werden auch hier nicht angezeigt.

Zählen Sie nach Überleben, Tod, unbekannt

Verwenden Sie weiterhin `value_counts ()`, um die Nummer jedes Werts von `` Survived``` zu zählen. Durch Setzen von `dropna = False``` wird auch N / A gezählt. ..

total_data_ticket = total_data.groupby("Ticket")["Survived"].value_counts(dropna=False)
total_data_ticket
#Ausgabe
Ticket       Survived
110152       1.0         3
110413       1.0         2
             0.0         1
110465       0.0         2
110469       NaN         1
                        ..
W.E.P. 5734  NaN         1
             0.0         1
W/C 14208    0.0         1
WE/P 5735    0.0         1
             1.0         1
Name: Survived, Length: 1093, dtype: int64

Ändern Sie die Form der Daten

Um ein Diagramm zu zeichnen, ändern Sie die Daten wie Überleben, Tod und unbekannte Daten in Spaltenrichtung. Verwenden Sie `` unstack () `.

total_data_ticket = total_data.groupby("Ticket")["Survived"].value_counts(dropna=False).unstack()
total_data_ticket
#Ausgabe
Survived	NaN	0.0	1.0
Ticket			
110152	NaN	NaN	3.0
110413	NaN	1.0	2.0
110465	NaN	2.0	NaN
110469	1.0	NaN	NaN
110489	1.0	NaN	NaN
...	...	...	...
W./C. 6608	1.0	4.0	NaN
W./C. 6609	NaN	1.0	NaN
W.E.P. 5734	1.0	1.0	NaN
W/C 14208	NaN	1.0	NaN
WE/P 5735	NaN	1.0	1.0
929 rows × 3 columns

Zeichnen Sie ein Diagramm

Ändern Sie N / A in eine Zahl

In der obigen Ausgabe hat der Wert immer noch `NaN```, also setzen Sie` NaN``` auf 0.

total_data_ticket.fillna(0, inplace=True)
total_data_ticket
#Ausgabe
Survived	NaN	0.0	1.0
Ticket			
110152	0.0	0.0	3.0
110413	0.0	1.0	2.0
110465	0.0	2.0	0.0
110469	1.0	0.0	0.0
110489	1.0	0.0	0.0
...	...	...	...
W./C. 6608	1.0	4.0	0.0
W./C. 6609	0.0	1.0	0.0
W.E.P. 5734	1.0	1.0	0.0
W/C 14208	0.0	1.0	0.0
WE/P 5735	0.0	1.0	1.0
929 rows × 3 columns

Spaltennamen ändern

Die Spaltennamen sind `NaN```,` 0.0, `` 1.0, aber das ist umständlich, also ändern Sie den Spaltennamen.

total_data_ticket.columns = ["nan", "d", "s"]
total_data_ticket
#Ausgabe
	nan	d	s
Ticket			
110152	0.0	0.0	3.0
110413	0.0	1.0	2.0
110465	0.0	2.0	0.0
110469	1.0	0.0	0.0
110489	1.0	0.0	0.0
...	...	...	...
W./C. 6608	1.0	4.0	0.0
W./C. 6609	0.0	1.0	0.0
W.E.P. 5734	1.0	1.0	0.0
W/C 14208	0.0	1.0	0.0
WE/P 5735	0.0	1.0	1.0
929 rows × 3 columns

Berechnen Sie die Gesamtzahl der Personen pro Zeile

Ich möchte nach der Gesamtzahl der Personen in absteigender Reihenfolge sortieren, also berechne ich die Gesamtzahl der Personen und speichere sie in einer neuen Spalte. Ich verwende `sum ()`, um die Gesamtzahl zu berechnen, aber ich berechne sie in Spaltenrichtung, also ` Summe (Achse = 1) `.

total_data_ticket["count"] = total_data_ticket.sum(axis=1)
total_data_ticket
#Ausgabe
	nan	d	s	count
Ticket				
110152	0.0	0.0	3.0	3.0
110413	0.0	1.0	2.0	3.0
110465	0.0	2.0	0.0	2.0
110469	1.0	0.0	0.0	1.0
110489	1.0	0.0	0.0	1.0
...	...	...	...	...
W./C. 6608	1.0	4.0	0.0	5.0
W./C. 6609	0.0	1.0	0.0	1.0
W.E.P. 5734	1.0	1.0	0.0	2.0
W/C 14208	0.0	1.0	0.0	1.0
WE/P 5735	0.0	1.0	1.0	2.0
929 rows × 4 columns

Jetzt können Sie das Diagramm zeichnen.

Zeichnen Sie ein Diagramm

Bestimmen Sie den Bereich der Anzahl der Personen und sortieren Sie in absteigender Reihenfolge

Der Code wird zuerst angezeigt und der Reihe nach erklärt.

total_data_ticket[total_data_ticket["count"] > 3].sort_values("count", ascending=False)[["nan", "d", "s"]].plot.bar(figsize=(15,10),stacked=True)
Code Inhalt
total_data_ticket[total_data_ticket["count"] > 3] "count"Daten größer als 3
.sort_values("count", ascending=False) "count"In absteigender Reihenfolge sortieren
[["nan", "d", "s"]] Extrahieren Sie nur die drei Spalten links("count"Ist nicht nützlich)
.plot.bar(figsize=(15,10),stacked=True) Zeichnen Sie ein Balkendiagramm.Geben Sie die Größe an,Ich habe es zu einer Stapelmethode gemacht

Jetzt können Sie das am Anfang gezeigte Diagramm zeichnen.

チケット記号ごとの生存・死亡・不明者数 (再掲)

Wenn man sich das ansieht, können sich Leute mit `CA. 2343``` und` CA 2144 vorstellen, `` `Survived = 0 ...

Ganzer Code

Schließlich wird der gesamte Code angezeigt.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

train_data = pd.read_csv("../train.csv")
test_data = pd.read_csv("../test.csv")
total_data = pd.concat([train_data, test_data])

ticket_freq = total_data["Ticket"].value_counts()
ticket_freq

total_data_ticket = total_data.groupby("Ticket")["Survived"].value_counts(dropna=False).unstack()

total_data_ticket.fillna(0, inplace=True)
total_data_ticket.columns = ["nan", "d", "s"]
total_data_ticket["count"] = total_data_ticket.sum(axis=1)
total_data_ticket[total_data_ticket["count"] > 3].sort_values("count", ascending=False)[["nan", "d", "s"]].plot.bar(figsize=(15,10),stacked=True)

abschließend

Mit dieser Technik überprüfen wir auch andere nicht numerische Daten wie den Nachnamen und den Titel von `Embarked```,` Cabin, `` `Name.

Referenz

Recommended Posts

Zeichnen Sie ein Diagramm, indem Sie es mit Pandas groupby verarbeiten
Zeichnen Sie ein Diagramm mit Pandas + XlsxWriter
Zeichnen Sie mit NetworkX ein Diagramm
Zeichnen Sie mit networkx ein Diagramm
Zeichne ein Diagramm mit Julia + PyQtGraph (2)
Zeichnen Sie mit matplotlib ein loses Diagramm
Zeichne ein Diagramm mit Julia + PyQtGraph (1)
Zeichne ein Diagramm mit Julia + PyQtGraph (3)
Zeichnen Sie ein Diagramm mit der PySimple-Benutzeroberfläche
Zeichnen Sie einfach ein Diagramm, indem Sie eine Datei angeben
Zeichnen Sie ein Diagramm mit PyQtGraph Part 1-Drawing
Zeichnen Sie eine flache Oberfläche mit einem Matplotlib-3D-Diagramm
Zeichnen Sie in Jupyter ein Diagramm mit japanischen Beschriftungen
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
Datensätze mit Pandas verarbeiten (1)
Datensätze mit Pandas verarbeiten (2)
Zeichnen Sie ein Diagramm mit den PyQtGraph Part 3-PlotWidget-Einstellungen
[Python] Zeichnen Sie mit Dash Cytoscape ein gerichtetes Diagramm
Zeichnen Sie ein Diagramm mit den Einstellungen von PyQtGraph Part 4-PlotItem
Zeichnen Sie ein Diagramm mit PyQtGraph Teil 6 - Anzeigen einer Legende
Zeichnen Sie mit PyQtGraph Teil 5 ein Diagramm. Erhöhen Sie die Y-Achse
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
Zeichnen Sie ein Diagramm mit PyQtGraph Teil 2 - Detaillierte Ploteinstellungen
Standardisieren Sie nach Gruppen mit Pandas
Datenverarbeitungstipps mit Pandas
Mathematik mit Python studieren: Zeichnen Sie mit matplotlib ein Sympy-Diagramm (Scipy-Diagramm)
Verarbeitung mehrerer Dateien mit Kivy + Matplotlib + Draw Graph auf der GUI
So beheben Sie mehrere Spalten, die von der Pandas-Gruppe generiert wurden, indem Sie sie zu einer einzelnen verarbeiten
[Visualisierung] Ich möchte mit Plotly ein schönes Diagramm zeichnen
Datenvisualisierung mit Python - Die Methode zum gleichzeitigen Zeichnen von Attribut-basierten Diagrammen mit "Facet" ist zu praktisch
Zeichne einen schönen Kreis mit Numpy
Bearbeiten von Strings mit Pandas gruppieren nach
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen Sie eine schöne Grafik mit Plotly
Zeichnen Sie einfach eine Karte mit matplotlib.basemap
Feature-Generierung mit Pandas gruppieren nach
[PyQt] Mehrachsendiagramme mit QtChart anzeigen
So zeichnen Sie ein Diagramm mit Matplotlib
Pandas: groupby (), um den Wert nach Gruppe zu vervollständigen
Zeichne mit PyCall ein Herz in Ruby
Zeichnen Sie ein Mandelbrot-Set mit Brainf * ck
So zeichnen Sie mit matplotlib ein Balkendiagramm, das mehrere Serien zusammenfasst
Zeichnen Sie eine hierarchische Achsenbeschriftung mit matplotlib + pandas
Beispiel für eine effiziente Datenverarbeitung mit PANDAS
100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"
Erstellen Sie ein Diagramm mit Rändern, die mit matplotlib entfernt wurden
Bei to_csv mit Pandas wurde es Zeile für Zeile
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
So zeichnen Sie vor der Optimierung ein 3D-Diagramm
Zeichnen Sie eine "Boobs-Kurve" in einem 3D-Diagramm (1).
Lesen Sie Python-CSV-Daten mit Pandas ⇒ Graph mit Matplotlib
Memo, mit dem ein Diagramm zum Plotten animiert wurde
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
[Python] Zeichne eine Mickey Mouse mit Turtle [Anfänger]
100 Sprachverarbeitung Knock-99 (mit Pandas): Visualisierung durch t-SNE
Zeichnen Sie eine "Boobs-Kurve" in einem 3D-Diagramm (2).
Machen Sie Urlaubsdaten mit Pandas zu einem Datenrahmen
Lesen Sie mit Python Zeile für Zeile aus der Datei
Ich habe mit Numpy eine Grafik mit Zufallszahlen erstellt