Beim Versuch, Daten mit maschinellem Lernen zu analysieren, plötzlich aus den erhaltenen CSV-Daten
"OK! Lass uns zurück gehen!"
"OK! Lass uns klassifizieren!"
Auf diese Weise kommt es selten vor, dass es plötzlich in die Modellgenerierung aufgenommen wird. Vielmehr sind die Hindernisse bis zu diesem Punkt für Anfänger recht hoch.
Diesmal habe ich also die Datenvorverarbeitung zusammengefasst.
Diesmal habe ich Daten von der Titanic of Kaggle ausgeliehen. Ich benutze übrigens Jupyter. (Wenn jemand weiß, wie man die Eingabe und Ausgabe von Jupyter in Qiita kombiniert, lass es mich wissen ...)
In[1]
%matplotlib inline
import matplotlib as plt
import pandas as pd
import numpy as np
import seaborn as sns
df = pd.read_csv('./train.csv')
df = df.set_index('PassengerId') #Setzen Sie eindeutige Spalten auf Index
print(df.shape)
df.head()
In[2]
df = df.drop(['Name', 'Ticket'], axis=1) #
df.head()
In[3]
print(df.info())
#print(df.dtypes) #Klicken Sie hier, wenn Sie nur den Datentyp überprüfen möchten
df.isnull().sum(axis=0)
#df.isnull().any(axis=0) #Klicken Sie hier, um nur das Vorhandensein oder Fehlen von Null zu überprüfen
out[3]
<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 9 columns):
Survived 891 non-null int64
Pclass 891 non-null int64
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(4), object(3)
memory usage: 69.6+ KB
None
Survived 0
Pclass 0
Sex 0
Age 177
SibSp 0
Parch 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
In[4]
#Zählen Sie die Elementtypen auf der Nennskala
import collections
c = collections.Counter(df['Sex'])
print('Sex:',c)
c = collections.Counter(df['Cabin'])
print('Cabin:',len(c))
c = collections.Counter(df['Embarked'])
print('Embarked:',c)
out[4]
Sex: Counter({'male': 577, 'female': 314})
Cabin: 148
Embarked: Counter({'S': 644, 'C': 168, 'Q': 77, nan: 2})
In[5]
df = df.drop(['Cabin'], axis=1) #Gelöscht, da die Analyse schwierig zu sein scheint
df = df.dropna(subset = ['Embarked']) #Die Kabine weist nur wenige Mängel auf. Löschen Sie sie daher mit dropna in einer Zeile
df = df.fillna(method = 'ffill') #Andere Spalten ergänzen frühere Daten
print(df.isnull().any(axis=0))
df.shape
out[5]
Survived False
Pclass False
Sex False
Age False
SibSp False
Parch False
Fare False
Embarked False
dtype: bool
(889, 8)
Konvertiert Daten vom Typ Objekt (Zeichen) in numerische Daten vom Typ (numerisch) mithilfe der Etikettencodierung.
In[6]
from sklearn.preprocessing import LabelEncoder
for column in ['Sex','Embarked']:
le = LabelEncoder()
le.fit(df[column])
df[column] = le.transform(df[column])
df.head()
Sie können sehen, dass es eine Etikettencodierung für Sex and Embarked gibt.
Durch die Etikettencodierung können Sie auch die Umrisse der Daten mithilfe des Paardiagramms von Seaborn usw. anzeigen.
sns.pairplot(df);
Ich denke, es ist gut, nur kontinuierliche Variablen auszuwählen und sie anzuzeigen. (Obwohl das Folgende einige enthält, die keine streng kontinuierlichen Variablen sind ...)
df_continuous = df[['Age','SibSp','Parch','Fare']]
sns.pairplot(df_continuous);
One-Hot-Codierung von numerischen Daten und anderen nominalen Skalendaten unter Verwendung von One-Hot-Codierung. Ich wusste nicht, wie man den OneHotEncoder von scikitlearn gut benutzt, also habe ich get_dummies von Pandas verwendet.
In[7]
df = pd.get_dummies(df, columns = ['Pclass','Embarked'])
df.head()
Sie können sehen, dass es eine Hot-Codierung für Pclass und Embarked gibt.
Ich denke, dieser Trend ist vielen Datenanalysen gemeinsam. Bitte beachten Sie den Ablauf der Vorbehandlung.
Wir suchen nach Kommentaren, Artikelmaterial usw.