Fonctions inopinément nécessaires lors de la création de tableaux et de graphiques. J'ai essayé de résumer une telle fonction de tableau croisé dynamique qu'il y a une différence entre le ciel et la terre si vous ne la connaissez pas. Au fait, quand j'étais étudiant, je ne connaissais même pas la fonction de tableau croisé dynamique d'Excel, et je me souviens avoir pleuré et façonné les données expérimentales ... Depuis qu'il a été posté sur Qiita, je l'ai essayé avec la trame de données pandas cette fois.
L'une des fonctions d'Excel, il fait référence à un outil qui extrait les données nécessaires d'une liste préenregistrée, les agrège et les analyse dans toutes les directions. La fonction «agréger» est particulièrement pratique, et vous pouvez renvoyer le résultat affiché à droite à partir du format de données indiqué à gauche dans la figure ci-dessous.
Vous en aurez besoin lorsque vous voudrez faire des tableaux croisés ou lorsque vous souhaitez créer un graphique légèrement compliqué. Cette fois, je vais faire quelque chose de similaire sur la trame de données pandas au lieu d'Excel.
Données de train empruntées à kaggle Titanic Competition. Veuillez consulter ici pour la signification de chaque colonne.
Cela ressemble à ça tel qu'il est ... Difficile à interpréter!
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Path
input_path = "../input_data/"
# Set Display Max Columns
pd.set_option("display.max_columns", 50)
train = pd.read_csv(input_path + "train.csv", sep=",", header=0, quotechar="\"")
# test = pd.read_csv(input_path + "bank/test.csv", sep=",", header=0, quotechar="\"")
#Traitement de la valeur manquante car difficile à gérer
train["Embarked"] = train.Embarked.fillna("S")
train["Age"]=train["Age"].fillna(train.Age.mean())
#Âge par âge
labels = [ "{0} - {1}".format(i, i + 9) for i in range(0, 100, 10) ]
train["Age"] = pd.cut(train["Age"], np.arange(0, 101, 10),
include_lowest=True, right=False,
labels=labels)
#Concentrez-vous sur ce qui semble être facile à gérer à cet effet
df = train[["PassengerId", "Survived", "Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]]
#Confirmation des données
df.head()
Les noms des passagers qui semblent difficiles à gérer sont supprimés.
Au minimum, les trois arguments suivants sont requis
-Data (premier argument): Spécifiez l'objet pandas.DataFrame des données d'origine. -Index: spécifiez le nom de colonne des données d'origine. Il devient l'en-tête de la ligne de résultat. -Colonnes: spécifiez le nom de colonne des données d'origine. Il devient l'en-tête de colonne de résultat.
La valeur moyenne des colonnes non spécifiées dans l'index des arguments et les colonnes est calculée en conséquence, mais les colonnes dont le type n'est pas numérique sont exclues.
df.pivot_table(index="Age", columns= "Sex", values="Fare")
Par défaut, la valeur moyenne de l'agrégation est renvoyée. (D'autres résultats peuvent être calculés en ajoutant aggfunc à l'argument.)
Par défaut, la valeur moyenne est calculée, mais il est possible de calculer la valeur par d'autres méthodes en spécifiant une fonction dans l'argument aggfunc. Par défaut (lorsque l'argument aggfunc est omis), numpy.mean () est spécifié.
df.pivot_table(index="Age", columns= "Sex", values="Fare", aggfunc='count')
En spécifiant aggfunc = 'count', le nombre de données applicables est compté.
df.pivot_table(index="Age", columns= ["Pclass","Sex"], values="Survived", aggfunc='mean')
df.pivot_table(index="Age", columns= ["Pclass","Sex"], values="Survived", aggfunc=["mean","count"])
df.pivot_table(index="Age", columns= ["Pclass","Sex"], values="Survived", aggfunc=["mean","count"],margins=True, margins_name="total")
En spécifiant l'argument normalisation de la fonction cross_tab, il peut être standardisé pour l'ensemble, pour chaque ligne et pour chaque colonne.
pd.crosstab(index=df.Age, columns= df.Sex, values=df.Fare, aggfunc='count', normalize=True)
-Si normalize = True ou normalize = 'all', le total est normalisé à 1. -Si normalize = 'index' ou'columns ', il est normalisé pour que le total soit de 1 pour chaque ligne ou colonne.
c'est tout.
Après avoir utilisé le tableau croisé dynamique, les colonnes sont multicouches, mais je ne peux pas les extraire en spécifiant les colonnes. Si quelqu'un sait, veuillez commenter ...
・ Http://yaginogogo.hatenablog.jp/entry/2016/04/22/011327 ・ Https://note.nkmk.me/python-pandas-pivot-table/ ・ Https://deepage.net/features/pandas-pivot.html ・ Https://boxil.jp/mag/a2149/ ・ Https://deepage.net/features/pandas-pivot.html ・ Https://qiita.com/kshigeru/items/bfa8c11d1e6487c791d3 ・ Https://qiita.com/hoto17296/items/3442af64c7acb682de6a
Recommended Posts