[PYTHON] Dessinez un graphique en traitant avec Pandas groupby

introduction

Je commence à jouer avec Kaggle's Titanic, mais avant de compléter les valeurs manquantes ou de revoir les hyperparamètres, j'aimerais regarder de plus près les données et les regarder. Je voudrais regrouper rapidement les données lues par la valeur de `` Survived '' et dessiner un graphique, mais cela ne fonctionne pas très bien. Parce que "GroupBy" de Pandas n'est pas bien compris.

Il existe de nombreux exemples de dessin de graphes par nos prédécesseurs sur le net, mais j'ai écrit cet article en pensant qu'il pourrait être utile pour les débutants en décrivant le chemin de ma compréhension.

Objectif visé

Dessinez un graphique comme celui ci-dessous.

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

Dans ce graphique, l'axe horizontal est le symbole de Ticket '', l'axe vertical est la survie ( s ''), la mort ( d ''), inconnue ( na``). Le nombre de personnes dans ) est accumulé et trié par ordre décroissant en fonction du nombre total de personnes. Par exemple, le symbole de ticket `CA.2343 '' à l'extrême gauche est de 11 personnes au total, 4 personnes inconnues et le reste. 7 personnes sont décédées.

Je veux dessiner un tel graphique rapidement.

Lire les données

Lisez les données et vérifiez le numéro de chaque même symbole dans les données de `` 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_données et test_Concaténer les données

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 sont 11 personnes,8 CA 2144,Etc.



# Créer des données pour les graphiques
## Grouper par groupby

 Tout d'abord, groupez `` total_data '' par symbole de ticket.

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

L'inconvénient de groupby est,Il n'affiche pas le contenu des données.ici, ***Groupé***Comprends dans ma tête,Aller au suivant.



## Extraire uniquement les informations de survie
 Ensuite, récupérez les informations de survie (`` Survived '').

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

Les données ne sont pas affichées ici non plus.

Compte par survie, mort, inconnu

Continuez à utiliser value_counts () pour compter le nombre de chaque valeur de` Survived```. ..

total_data_ticket = total_data.groupby("Ticket")["Survived"].value_counts(dropna=False)
total_data_ticket
#production
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

Changer la forme des données

Pour dessiner un graphique, modifiez les données telles que la survie, la mort et les données inconnues dans le sens d'une colonne.Utilisez `` unstack () ''.

total_data_ticket = total_data.groupby("Ticket")["Survived"].value_counts(dropna=False).unstack()
total_data_ticket
#production
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

Dessinez un graphique

Remplacez N / A par un nombre

En regardant la sortie ci-dessus, la valeur a toujours NaN, alors définissez `` NaN sur 0.

total_data_ticket.fillna(0, inplace=True)
total_data_ticket
#production
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

Changer le nom de la colonne

Les noms de colonne sont NaN, `` 0.0, `` 1.0```, mais c'est gênant, alors changez le nom de la colonne.

total_data_ticket.columns = ["nan", "d", "s"]
total_data_ticket
#production
	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

Calculez le nombre total de personnes par ligne

Je veux trier par nombre total de personnes dans l'ordre décroissant, donc je calcule le nombre total de personnes et l'enregistre dans une nouvelle colonne.Pour calculer le total, utilisez sum () '', mais comme il est calculé dans le sens de la colonne, somme (axe = 1) `` ''.

total_data_ticket["count"] = total_data_ticket.sum(axis=1)
total_data_ticket
#production
	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

Vous êtes maintenant prêt à dessiner le graphique.

Dessinez un graphique

Décidez de la superficie du nombre de personnes et triez par ordre décroissant

Le code est affiché en premier et expliqué dans l'ordre.

total_data_ticket[total_data_ticket["count"] > 3].sort_values("count", ascending=False)[["nan", "d", "s"]].plot.bar(figsize=(15,10),stacked=True)
code Contenu
total_data_ticket[total_data_ticket["count"] > 3] "count"Données supérieures à 3
.sort_values("count", ascending=False) "count"Trier par ordre décroissant
[["nan", "d", "s"]] Extraire uniquement les trois colonnes de gauche("count"N'est pas utile)
.plot.bar(figsize=(15,10),stacked=True) Dessinez un graphique à barres.Précisez la taille,J'en ai fait une méthode d'empilement

Vous pouvez maintenant dessiner le graphique affiché au début.

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

En regardant cela, les personnes avec CA.2343 et `` `` CA 2144 peuvent imaginer Survived = 0``` ...

Code entier

Enfin, tout le code est affiché.

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)

en conclusion

En utilisant cette technique, nous vérifierons également d'autres données non numériques telles que le nom et le titre de Embarqué '', Cabine '', `` Nom ''.

référence

Recommended Posts

Dessinez un graphique en traitant avec Pandas groupby
Dessinez un graphique avec des pandas + XlsxWriter
Dessinez un graphique avec NetworkX
Dessinez un graphique avec networkx
Tracez un graphe avec Julia + PyQtGraph (2)
Dessinez un graphique lâche avec matplotlib
Tracez un graphique avec Julia + PyQtGraph (1)
Dessinez un graphique avec Julia + PyQtGraph (3)
Dessinez un graphique avec l'interface graphique PySimple
Dessinez simplement un graphique en spécifiant un fichier
Dessinez un graphique avec PyQtGraph Part 1-Drawing
Dessinez une surface plane avec un graphique 3D matplotlib
Dessinez un graphique avec des étiquettes japonaises dans Jupyter
Comment dessiner un graphique à 2 axes avec pyplot
Traitement des ensembles de données avec des pandas (1)
Traitement des ensembles de données avec des pandas (2)
Dessinez un graphique avec les paramètres PyQtGraph Partie 3-PlotWidget
[Python] Dessinez un graphe orienté avec Dash Cytoscape
Dessinez un graphique avec les paramètres PyQtGraph Part 4-PlotItem
Dessinez un graphique avec PyQtGraph Partie 6 - Affichage d'une légende
Dessinez un graphique avec PyQtGraph Partie 5-Augmentez l'axe Y
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Dessinez un graphique avec PyQtGraph Partie 2 - Paramètres de tracé détaillés
Standardisez par groupe avec les pandas
Conseils de traitement des données avec Pandas
Étudier les mathématiques avec Python: dessiner un graphe sympy (scipy) avec matplotlib
Traitement de fichiers multiples avec Kivy + Matplotlib + Draw Graph sur GUI
Comment réparer les multi-colonnes générées par le groupe Pandas en les traitant en single
[Visualisation] Je veux dessiner un beau graphique avec Plotly
Visualisation des données avec Python - La méthode de dessin simultané de graphes basés sur les attributs avec "Facet" est trop pratique
Dessinez un beau cercle avec numpy
Manipuler des chaînes avec un groupe pandas par
Faisons un graphe avec python! !!
Faire un joli graphique avec plotly
Dessinez facilement une carte avec matplotlib.basemap
Génération de fonctionnalités avec pandas group par
[PyQt] Afficher des graphiques multi-axes avec QtChart
Comment dessiner un graphique avec Matplotlib
Pandas: groupby () pour compléter la valeur par groupe
Dessinez un cœur en rubis avec PyCall
Dessinez un ensemble de Mandelbrot avec Brainf * ck
Comment dessiner un graphique à barres qui résume plusieurs séries avec matplotlib
Dessinez une étiquette d'axe hiérarchique avec matplotlib + pandas
Exemple de traitement efficace des données avec PANDAS
100 traitement de langage knock-34 (utilisant des pandas): "B of A"
Créer un graphique avec des bordures supprimées avec matplotlib
Quand to_csv avec Pandas, c'est devenu ligne par ligne
Dessiner un graphique d'une fonction quadratique en Python
Comment dessiner un graphique 3D avant l'optimisation
Dessinez une "courbe de seins" dans un graphique 3D (1)
Lire les données csv Python avec Pandas ⇒ Graphique avec Matplotlib
Mémo qui a fait un graphique pour animer avec intrigue
Essayez de dessiner une courbe de vie avec python
[Python] Dessinez un Mickey Mouse avec une tortue [Débutant]
100 traitement du langage knock-99 (à l'aide de pandas): visualisation par t-SNE
Dessinez une "courbe de seins" dans un graphique 3D (2)
Transformez les données de vacances en une trame de données avec les pandas
Lire ligne par ligne à partir d'un fichier avec Python
J'ai fait un graphique de nombres aléatoires avec Numpy