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.
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.
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.
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
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
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
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
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.
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
...
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)
Mit dieser Technik überprüfen wir auch andere nicht numerische Daten wie den Nachnamen und den Titel von `Embarked```,`
Cabin, `` `Name
.
Recommended Posts