[PYTHON] [Kaggle] Zusammenfassung der Vorverarbeitung (Statistik, Verarbeitung fehlender Werte usw.)

1. Zweck

Ich habe im Dezember 2018 angefangen, Programmieren (Python) zu studieren und in den letzten Monaten angefangen, an Kaggle zu arbeiten.

Unter ihnen gab es viele Dinge, die ich mich fragte: "Wie mache ich das?", Und ich fuhr fort, während ich verschiedene Dinge untersuchte, also werde ich mich dieses Mal auf diese "Vorverarbeitung" konzentrieren und sie zusammenfassen. Überlegen.

2. Importieren Sie die zu verwendenden und benötigten Daten

Es ist eine bekannte Titanic in Kaggle. https://www.kaggle.com/c/titanic

import matplotlib
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns

import numpy as np
import pandas as pd

Ich werde die Daten lesen.

df_train =  pd.read_csv(r"C:///train.csv")
df_test = pd.read_csv(r"C:///test.csv")

3. Datenauftritt (Statistik)

(1) Bestätigung der Anzahl der Daten [.shape]

df_train.shape
df_test.shape

Jetzt können Sie sehen, dass die Trainingsdaten (891, 12) und die Testdaten (418, 11) sind.

(2) Sehen Sie sich die Daten an [.head ()]

Lassen Sie uns die ersten 5 Zeilen löschen, um zu sehen, welche Art von Daten darin enthalten sind.

df_train.head()
df_test.head()

Es scheint, dass die Daten so aussehen. キャプチャ1.PNG

Wie Sie an df_test.head () sehen können, zeigt die Spalte die Spalte, in der die Zielvariable "Survived" aus der Spalte der Trainingsdaten verschwunden ist.

(3) Sehen Sie sich den Datentyp [.info ()] an.

Kombinieren wir die Trainingsdaten und Testdateninformationen zu einer.

df_train.info()
print("-"*48)
df_test.info()

Sie können die Anzahl der Daten und den Datentyp in jeder Spalte grob überprüfen.

キャプチャ3.PNG

(4) Sehen Sie sich die Informationen zu numerischen Daten und Kategoriedaten an [.describe ()]

◆ Numerische Daten

df_train.describe()
キャプチャ4.PNG

Numerische Dateninformationen werden angezeigt.

◆ Kategoriedaten

df_train.describe(include=['O'])
キャプチャ2.PNG

Die kategorialen Variablen Name, Geschlecht, Ticket, Kabine und Eingeschifft werden für jede Nummer / jeden eindeutigen Wert, jede Kategorie mit der höchsten Häufigkeit und die Anzahl der Vorkommen angezeigt.

4. Integrieren Sie Trainingsdaten und Testdaten

Das ist mir wichtig, da es in den frühen Tagen so sehr gestolpert ist.

Am Ende werden wir getrennt für Trainingsdaten und Testdaten lernen, aber es ist kompliziert, eine Vorverarbeitung durchzuführen, wie z. B. die Verarbeitung fehlender Werte und die Verarbeitung kategorialer Variablen für jede Trainingsdaten und Testdaten. Fassen Sie sie also zuerst zusammen und dann Ich werde es wieder von trennen.

#Erstellen Sie eine neue Spalte mit dem Namen TrainFlag und setzen Sie sie für Trainingsdaten auf True und für Testdaten auf False.
df_train["TrainFlag"] = True
df_test["TrainFlag"] = False

#Kombinieren Sie Trainings- und Testdaten
df_all = df_train.append(df_test)

#PassengerId wird wahrscheinlich nicht für Feature-Mengen verwendet, daher möchte ich es löschen.
#Da dies jedoch bei der späteren Übermittlung von Testdaten erforderlich ist, werden diese nicht vollständig gelöscht.
#Als Index behalten
df_all.index = df_all["PassengerId"]
df_all.drop("PassengerId", axis = 1, inplace = True)

Wenn Sie sich df_all ansehen, sieht es so aus. Der Index lautet PassengerId, und ganz rechts befindet sich die gerade hinzugefügte TrainFlag-Spalte. Richtig sind die Trainingsdaten und Falsch (hier nicht gezeigt) sind die Testdaten.

キャプチャ5.PNG

5. Verarbeitung fehlender Werte

(1) Überprüfen Sie die Anzahl der fehlenden Werte

Dadurch werden sie in absteigender Reihenfolge sortiert.

df_all.isnull().sum().sort_values(ascending=False)
キャプチャ6.PNG

Es wäre schön, wenn die Anzahl der Variablen ungefähr zu dieser Zeit wäre, aber wenn die Anzahl der Variablen zunimmt, ist es sehr schwierig zu sehen, ob die numerischen Werte der fehlenden Werte aller erklärenden Variablen angegeben sind.

Lassen Sie uns daher die Variablen mit "fehlenden Werten" eingrenzen und in absteigender Reihenfolge sortieren.

df_all.isnull().sum()[df_train.isnull().sum()>0].sort_values(ascending = False)
キャプチャ7.PNG

Dann wurden nur die Variablen mit fehlenden Werten in absteigender Reihenfolge sortiert!

(2) Führen Sie die Verarbeitung fehlender Werte durch

◆Cabin Bei df_all.shape beträgt die Anzahl der Daten 1.309, wenn die Trainingsdaten und Testdaten kombiniert werden. Von diesen fehlen 1.014 Kabinen, daher werde ich dieses Mal jede Spalte vom Analyseziel ausschließen, damit ich hier keine Verarbeitung fehlender Werte durchführe.

◆Age Das Alter hat auch einige fehlende Werte, aber es gibt nicht so viele, und obwohl ich diesmal nicht darauf eingehen werde, scheint das Alter das Modell zu beeinflussen, so dass wir fehlende Werte verarbeiten werden.

Es gibt verschiedene Möglichkeiten, dies zu tun, aber dieses Mal werde ich es mit orthodoxen Durchschnittswerten füllen.

df_all["Age"] = df_all["Age"].fillna(df_all["Age"].mean())

◆Embarked Wenn Sie df_all.describe (include = ['O']) ausführen, können Sie sehen, dass Embarked nur 3 eindeutige Werte hat und die meisten von ihnen "S" sind. Diesmal füllen wir die fehlenden Werte mit S aus.

キャプチャ8.PNG
df_all["Embarked"] = df_all["Embarked"].fillna("S")

(3) Überprüfen Sie abschließend, ob keine Werte fehlen

df_all.isnull().sum()[df_train.isnull().sum()>0].sort_values(ascending = False)

Dann können Sie sehen, dass nur Cabin einen fehlenden Wert hat, sodass die Verarbeitung des fehlenden Werts jetzt abgeschlossen ist.

6. Löschen Sie unnötige Zeilen

Ich werde diesmal auf eine detaillierte Prüfung verzichten, aber aufgrund der Datenanalyse wird davon ausgegangen, dass Kabine, Name, Passagier-ID, Ticket für diesen Modellbau nicht erforderlich sind.

Löschen wir diese Spalten.

df_all = df_train.drop(["Cabin", 'Name','PassengerId','Ticket'], axis = 1)

7. Konvertierung kategorialer Variablen

df_all = pd.get_dummies(df_all, drop_first=True)

Wenn Sie mit df_all.head () prüfen, können Sie sehen, dass die kategoriale Variable wie folgt verarbeitet werden kann. キャプチャ9.PNG

Damit ist die wahnsinnig orthodoxe Vorverarbeitung abgeschlossen, und danach werden wir mit dem vollständigen Modellbau fortfahren.

8. Fazit

Es ist ein sehr rudimentärer Inhalt für Fortgeschrittene und höher, aber zuerst war es sehr schwierig, diese zu untersuchen, und jedes Mal wurde ich gestresst.

Wir hoffen, dass es solchen Menschen hilft, ihr Verständnis zu vertiefen.

Recommended Posts

[Kaggle] Zusammenfassung der Vorverarbeitung (Statistik, Verarbeitung fehlender Werte usw.)
Zusammenfassung der bisher veröffentlichten Artikel (Statistik / Maschinelles Lernen / Mathematik usw.)
Zusammenfassung der Mehrprozessverarbeitung der Skriptsprache
[Python] Zusammenfassung der mathematischen Konvertierungsverarbeitung (orthogonale Koordinate, Polarkoordinatenkonvertierung usw.) [Mathematik, Numpy usw.]
pandas Gesamtzahl der Mitarbeiter Fehlende Wertvervollständigung
Zusammenfassung der Pickle- und Unpickle-Verarbeitung von benutzerdefinierten Klassen