[PYTHON] Ich habe die Pivot-Table-Funktion von Pandas ausprobiert

Funktionen, die beim Erstellen von Tabellen und Grafiken unerwartet erforderlich sind. Ich habe versucht, eine solche Pivot-Tabellenfunktion zusammenzufassen, dass es einen Unterschied zwischen Himmel und Erde gibt, wenn Sie es nicht wissen. Übrigens, als ich Student war, kannte ich nicht einmal die Pivot-Tabellenfunktion von Excel, und ich erinnere mich, wie ich die experimentellen Daten geweint und geformt habe ... Da es auf Qiita gepostet wurde, habe ich es diesmal mit dem Pandas-Datenrahmen versucht.

Was ist ein Pivot-Tisch?

Als eine der Funktionen in Excel bezieht es sich auf ein Tool, das die erforderlichen Daten aus einer vorregistrierten Liste extrahiert und aus allen Richtungen aggregiert und analysiert. Die Funktion "Aggregat" ist besonders praktisch, und Sie können das rechts gezeigte Ergebnis aus dem links in der folgenden Abbildung gezeigten Datenformat zurückgeben.

image.png

Sie benötigen es, wenn Sie Kreuztabellen erstellen oder ein etwas kompliziertes Diagramm erstellen möchten. Dieses Mal mache ich etwas Ähnliches im Pandas-Datenrahmen anstelle von Excel.

Daten für die Praxis verwendet

Ausgeliehene Zugdaten von kaggle Titanic Competition. Die Bedeutung jeder Spalte finden Sie unter hier.

Hauptthema

Es sieht so aus wie es ist ... image.png Schwer zu interpretieren!

Vorbereitung

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="\"")

#Fehlende Wertverarbeitung, weil es schwierig zu handhaben ist
train["Embarked"] = train.Embarked.fillna("S") 
train["Age"]=train["Age"].fillna(train.Age.mean())

#Alter nach Alter
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)

#Konzentrieren Sie sich auf das, was für diesen Zweck einfach zu handhaben scheint
df = train[["PassengerId", "Survived", "Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]]

#Bestätigung der Daten
df.head()

image.png

Die Namen der Passagiere, die schwer zu handhaben scheinen, werden gelöscht.

Verwenden Sie die Funktion pivot_table

Es sind mindestens die folgenden drei Argumente erforderlich

-Data (erstes Argument): Geben Sie das pandas.DataFrame-Objekt der Originaldaten an. -Index: Geben Sie den Spaltennamen der Originaldaten an. Es wird zur Überschrift der Ergebniszeile. -Spalten: Geben Sie den Spaltennamen der Originaldaten an. Es wird zur Spaltenüberschrift des Ergebnisses.

Der Durchschnittswert der Spalten, die nicht im Argumentindex und in den Spalten angegeben sind, wird als Ergebnis berechnet, aber die Spalten, deren Typ nicht numerisch ist, werden ausgeschlossen.

Grundlegende Verwendung

df.pivot_table(index="Age", columns= "Sex", values="Fare")

image.png Standardmäßig wird der Durchschnittswert der Aggregation zurückgegeben. (Andere Ergebnisse können berechnet werden, indem dem Argument aggfunc hinzugefügt wird.)

Gibt an, wie der resultierende Wert berechnet wird: Argument aggfunc

Standardmäßig wird der Durchschnittswert berechnet, es ist jedoch möglich, den Wert mit anderen Methoden zu berechnen, indem im Argument aggfunc eine Funktion angegeben wird. Standardmäßig (wenn das Argument aggfunc weggelassen wird) wird numpy.mean () angegeben.

df.pivot_table(index="Age", columns= "Sex", values="Fare", aggfunc='count')

image.png

Durch Angabe von aggfunc = 'count' wird die Anzahl der anwendbaren Daten gezählt.

Es können mehrere Zeilen / Spalten ausgewählt werden: Argumentindex, Spalten

df.pivot_table(index="Age", columns= ["Pclass","Sex"], values="Survived", aggfunc='mean')

image.png

Für aggfunc können mehrere Berechnungsmethoden angegeben werden

df.pivot_table(index="Age", columns= ["Pclass","Sex"], values="Survived",  aggfunc=["mean","count"])

image.png

Gesamtergebnis hinzufügen: Argumente margin, margin_name

df.pivot_table(index="Age", columns= ["Pclass","Sex"], values="Survived", aggfunc=["mean","count"],margins=True, margins_name="total")

image.png

Wenn Sie das Ergebnis standardisieren möchten, verwenden Sie das Argument cross_tab: normalize

Durch Angabe des Arguments normalize der Funktion cross_tab kann es für das Ganze, für jede Zeile und für jede Spalte standardisiert werden.

pd.crosstab(index=df.Age, columns= df.Sex, values=df.Fare, aggfunc='count',  normalize=True)

image.png

-Wenn normalize = True oder normalize = 'all', wird die Summe auf 1 standardisiert. -Wenn normalize = 'index' oder'columns ', wird es standardisiert, sodass die Summe für jede Zeile oder Spalte 1 beträgt.

das ist alles.

Nach dem Betrieb der Pivot-Tabelle sind die Spalten mehrschichtig, aber ich kann sie nicht durch Angabe der Spalten extrahieren. Wenn jemand weiß, bitte kommentieren ...

Referenz / Zitat

・ 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

Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe ein wenig versucht, das Verhalten der Zip-Funktion
Ich habe versucht, das lokale Minimum der Goldstein-Preis-Funktion zu bekämpfen
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Zeichnen auf Jupyter mit der Plot-Funktion von Pandas
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe das Argument class_weight von Chainers Funktion softmax_cross_entropy untersucht.
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen
Ich habe die einfachste Methode zur Klassifizierung von Dokumenten mit mehreren Etiketten ausprobiert
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe die Changefinder-Bibliothek ausprobiert!
Ich habe Pandas 'Sql Upsert ausprobiert
Die Kraft der Pandas: Python
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
Ich habe versucht, den allgemeinen Kommentar des verdammten Spiels des Jahres morphologisch zu analysieren
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe den Chat von YouTube Live angezeigt und versucht zu spielen
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren (Re-Challenge)
Ich habe AdaNet gegen Tabellendaten ausprobiert
Ich habe das TensorFlow-Tutorial als erstes ausprobiert
Ich habe die Naro-Roman-API 2 ausprobiert
Ich habe den Mechanismus der Flaschenanmeldung untersucht!
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe das 2. TensorFlow-Tutorial ausprobiert
Ich habe die neuartige API von Naruro ausprobiert
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen