Ich werde danach schreiben.
Wir haben die Durchschnittswerte aus der vorherigen Pivot-Tabelle verglichen. Als Ergebnis fanden wir Folgendes.
Lassen Sie uns nun die Daten visualisieren und einige Annahmen sehen.
Korrelation numerischer Daten Beginnen Sie mit dem Verständnis der Korrelation zwischen numerischen Daten und Zielen (Ergebnissen). Mit dem Histogramm können Sie eine Verteilung Ihrer Daten unter Verwendung eines festgelegten Bereichs mit gleichmäßigem Abstand erstellen. Dies hilft bei der Beantwortung von Fragen zu einem bestimmten Bereich (Durch Teilen des Alters durch die Reichweite können Sie beispielsweise die Frage "Ist die Überlebensrate von Säuglingen besser?" Beantworten.) Beachten Sie, dass die vertikale Achse im Histogramm die Anzahl der Daten (Passagiere) darstellt.
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
train_df = pd.read_csv('./8010_titanic_data/train.csv')
test_df = pd.read_csv('./8010_titanic_data/test.csv')
combine = [train_df, test_df]
#1.Entfernen Sie fehlende Werte für Alter
Age_se = train_df["Age"].dropna()
#2.Visualisieren Sie das Alter mithilfe eines Histogramms.
train_df["Age"].hist(bins=20) #Die Feinheit des Bereichs (Klasse) beträgt 20
plt.show()
#3.Alter überlebt=0 und überlebt=Visualisierung bei 1.
#Ergänzung Sie können leicht vergleichen, indem Sie im Parameter der hist-Methode by angeben.
train_df["Age"].hist(by=train_df["Survived"])
plt.show()
als Ergebnis
nächste Aktion
1, Sie müssen das im Datensatz enthaltene Alter berücksichtigen. Ergänzt aus mehreren Gründen die fehlenden Alterswerte 3, Erstellen Sie eine Feature-Menge, die Alter durch Bereich teilt.
#1.der Verstorbene(Survived=0)Erstellen Sie im Fall von ein Altershistogramm für jede Klasse.
train_df[train_df["Survived"]==0]["Age"].hist(by=train_df["Pclass"])
plt.show()
#2.Überlebende(Suvived=1)Erstellen Sie im Fall von ein Altershistogramm für jede Klasse.
train_df[train_df["Survived"]==1]["Age"].hist(by=train_df["Pclass"])
plt.show()
Ergebnis
Entscheidung Betrachten Sie Pclass als ein Merkmal des Modells.
Überprüfen Sie die Korrelation zwischen Features und Kategoriewerten. Hier werden wir die Beziehung zwischen Survived und Pclass / Sex bestätigen, wobei der Schwerpunkt auf Embarked liegt.
# 1.Der Abfahrtshafen ist Cherbourg (eingeschifft)='C'), Erstellen Sie eine Pivot-Tabelle für Survived und Pclass / Sex.
cor_category = train_df[train_df["Embarked"]=='C'][["Pclass", "Survived", "Sex"]].groupby(["Pclass", "Sex"], as_index=False).mean().sort_values(by="Survived", ascending=False)
#Sex teilt die Daten in männlich und weiblich auf,
cor_category_male = cor_category[cor_category["Sex"]=='male'].sort_values('Pclass')
cor_category_female = cor_category[cor_category["Sex"]=='female'].sort_values('Pclass')
#Fügen Sie mithilfe der Matplotlib-Bibliothek Diagramme hinzu.
plt.plot(['1', '2', '3'], cor_category_male["Survived"], label="male")
plt.plot(['1', '2', '3'], cor_category_female["Survived"], label="female")
plt.legend()
plt.xlabel("Pclass")
plt.ylabel("Survived")
plt.show()
# 2.Der Abfahrtshafen ist Queenstown (eingeschifft)='Q'), Erstellen Sie eine Pivot-Tabelle für Survived und Pclass / Sex.
cor_category = train_df[train_df["Embarked"]=='Q'][["Pclass", "Survived", "Sex"]].groupby(["Pclass", "Sex"], as_index=False).mean().sort_values(by="Survived", ascending=False)
#Sex teilt die Daten in männlich und weiblich auf,
cor_category_male = cor_category[cor_category["Sex"]=='male'].sort_values('Pclass')
cor_category_female = cor_category[cor_category["Sex"]=='female'].sort_values('Pclass')
#Fügen Sie mithilfe der Matplotlib-Bibliothek Diagramme hinzu.
plt.plot(['1', '2', '3'], cor_category_male["Survived"], label="male")
plt.plot(['1', '2', '3'], cor_category_female["Survived"], label="female")
plt.legend()
plt.xlabel("Pclass")
plt.ylabel("Survived")
plt.show()
# 3.Der Abfahrtshafen ist Southampton (eingeschifft)='S'), Erstellen Sie eine Pivot-Tabelle für Survived und Pclass / Sex.
cor_category = train_df[train_df["Embarked"]=='S'][["Pclass", "Survived", "Sex"]].groupby(["Pclass", "Sex"], as_index=False).mean().sort_values(by="Survived", ascending=False)
#Das Geschlecht teilt die Daten in Männer und Frauen auf.
cor_category_male = cor_category[cor_category["Sex"]=='male'].sort_values('Pclass')
cor_category_female = cor_category[cor_category["Sex"]=='female'].sort_values('Pclass')
#Fügen Sie mithilfe der Matplotlib-Bibliothek Diagramme hinzu.
plt.plot(['1', '2', '3'], cor_category_male["Survived"], label="male")
plt.plot(['1', '2', '3'], cor_category_female["Survived"], label="female")
plt.legend()
plt.xlabel("Pclass")
plt.ylabel("Survived")
plt.show()
Ergebnis 1, weibliche Passagiere zeigten ein viel besseres Überleben als männliche. Die Überlebensrate von Männern bei 2, Embarked = C war höher als die anderer Embarked-Werte. 3, Dies ist die Korrelation zwischen Pclass und Embarked und die Korrelation zwischen Pclass und Survived, nicht unbedingt die direkte Korrelation zwischen Embarked und 4, Survived. 5, Die Überlebensrate von Männern war in Embarked = C und S höher als in Embarked = Q.
Entscheidung 1, Sex zur Modellerstellung hinzufügen. 2, Hinzufügen von Embarked zur Modellerstellung.
Wir werden mit der Konvertierung, Erstellung und Ergänzung von Merkmalsmengen fortfahren.
#1. train_Ticket- und Kabinenfunktionen von df entfernt
train_df = train_df.drop(["Ticket", "Cabin"], axis=1)
#2. test_Ticket- und Kabinenfunktionen von df entfernt
test_df = test_df.drop(["Ticket", "Cabin"], axis=1)
print ("-"*25+ "After"+ "-"*25)
#3.Aktueller Zug_Überprüfen Sie die Anzahl der Zeilen und Spalten von df
print(train_df.shape)
# 4.Aktueller Test_Überprüfen Sie die Anzahl der Zeilen und Spalten von df
print(test_df.shape)
combine = [train_df, test_df]
# 1. train_df und test_Für jede df ein Punkt in einer neuen Funktion namens Titel(.)Speichert frühere Titel.
for dataset in combine:
dataset['Title'] = dataset.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
#2.Kreuztabelle mit Geschlecht und Titel. Kreuztabelle wird für Kreuztabellen verwendet.
pd.crosstab(train_df['Title'], train_df['Sex'])
Es stellt sich heraus, dass es Titel wie Master, Mr, Miss, Mrs. gibt. Ersetzen Sie nun die nicht häufigen Werte durch einen Wert namens Rare.
for dataset in combine:
# 1. train_df, test_Im Titel von df,'Lady', 'Countess','Capt', 'Col', 'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'Für andere Artikel als'Rare'Umgeschrieben an.
dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col', 'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
# 2.Ebenso wird Mile in Miss umgeschrieben.
dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss')
dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')
# 3.Frau wird an Frau umgeschrieben
dataset['Title'] = dataset['Title'].replace('Mme', 'Mrs')
# 4.Berechnen Sie für Titel und Überleben den Durchschnittswert von Überlebt, indem Sie nach Titel summieren.
train_df[['Title', 'Survived']].groupby(['Title'], as_index=False).mean()
Konvertieren Sie diese Titel in Ordnungsdaten, um die Erstellung eines Vorhersagemodells zu vereinfachen.
# 1. train_df und test_Mit df{"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}Umstellung auf.
title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}
for dataset in combine:
dataset["Title"] = dataset["Title"] .map({"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5})
dataset['Title'] = dataset['Title'].fillna(0)
# 2. train_Geben Sie die erste erste Zeile mit df aus.
train_df.head()
Entfernen Sie abschließend den Namen und die Passagier-ID
# 1.Zugname und Passanten-ID_Aus df entfernt.
train_df = train_df.drop(['Name', 'PassengerId'], axis=1)
# 2.Testname_Aus df entfernt.
test_df = test_df.drop(['Name'], axis=1)
combine = [train_df, test_df]
# train_df und test_Überprüfen Sie die Anzahl der Zeilen und Spalten von df.
print(train_df.shape, test_df.shape)
Konvertiert mehrwertige Daten in Binärdaten.
# 1.Sex zu weiblich=1, male=-In 0 konvertieren.
for dataset in combine:
dataset['Sex'] = dataset['Sex'].map( {'female': 1, 'male': 0} ).astype(int)
#Extrahieren Sie die erste Zeile
train_df.head()
Jetzt müssen wir Features mit fehlenden oder Nullwerten schätzen und vervollständigen. Schauen wir uns zunächst das Alter an.
Es gibt drei Möglichkeiten, kontinuierliche numerische Daten zu ergänzen.
1, wie man eine Zufallszahl zwischen dem Durchschnitt erzeugt
2, Eine genauere Möglichkeit, auf fehlende Werte zu schließen, besteht darin, andere korrelierte Merkmale zu verwenden. Bisher wissen wir, dass es einen Zusammenhang zwischen Alter, Geschlecht und Klasse gibt. Mit anderen Worten, leiten Sie den Alterswert aus der Kombination von Klasse und Geschlecht ab. Verwenden Sie beispielsweise ein mittleres Alter wie Pclass = 1, Gender = 0, Pclass = 1, Gender = 1.
Es ist eine Methode zum Kombinieren von 3, 1 und 2. Verwenden Sie daher anstelle der Schätzung des Alters anhand des Medians eine Zufallszahl zwischen Mittelwert und Standardabweichung basierend auf der Kombination von Klasse und Geschlecht.
# 1. Pclass=Wenn 1, erstellen Sie ein Altershistogramm für Geschlecht.
train_df[train_df["Pclass"]==1]["Age"].hist(by=train_df["Sex"], bins=20)
plt.show()
# 2. Pclass=Erstellen Sie bei 2 ein Altershistogramm für Sex.
train_df[train_df["Pclass"]==2]["Age"].hist(by=train_df["Sex"], bins=20)
plt.show()
# 3. Pclass=Erstellen Sie mit 3 Jahren ein Altershistogramm für Sex.
train_df[train_df["Pclass"]==3]["Age"].hist(by=train_df["Sex"], bins=20)
plt.show()
Bereiten Sie ein leeres Speicherarray mit abgeleiteten Altersschätzungen vor, die auf einer Kombination aus Pclassx und Geschlecht basieren
# 1.Erstellen Sie ein Array zum Speichern des Alterswerts.
guess_ages = np.zeros((2,3))
#Zeigen Sie den Inhalt des Arrays an.
print(guess_ages)
# 2.Altersschätzung im Array(Mittleres Alter)Geschäft.
for dataset in combine:
for i in range(0, 2):
for j in range(0, 3):
guess_df = dataset[(dataset['Sex'] == i) & (dataset['Pclass'] == j+1)]['Age'].dropna()
#Im Fall von Methode 3
#import random
#age_mean = guess_df.mean()
#age_std = guess_df.std()
#age_guess = random.uniform(age_mean - age_std, age_mean + age_std)
age_guess = guess_df.median()
# 0.Runde in 5 Einheiten
guess_ages[i,j] = int( age_guess/0.5 + 0.5 ) * 0.5
for i in range(0, 2):
for j in range(0, 3):
dataset.loc[ (dataset.Age.isnull()) & (dataset.Sex == i) & (dataset.Pclass == j+1),\
'Age'] = guess_ages[i,j]
dataset['Age'] = dataset['Age'].astype(int)
#Zeigen Sie die ersten 5 Zeilen an.
print(guess_ages)
train_df.head()
Erstellen Sie als Nächstes eine Funktion namens AgeBand, die Age in 5 Ebenen unterteilt.
# 1.Das Alter, das ein kontinuierlicher Wert ist, wird in beliebige Zahlen unterteilt und in diskrete Werte umgewandelt.
train_df['AgeBand'] = pd.cut(train_df['Age'], 5)
# 2.Erstellt AgeBand- und Survived-Pivot-Tabellen.
train_df[['AgeBand', 'Survived']].groupby(['AgeBand'], as_index=False).mean().sort_values(by='AgeBand', ascending=True)
Ersetzen Sie Age durch einen diskreten Wert (Bestelldaten).
# 1.Wenn der Alterswert 16 oder weniger beträgt, wird er in 0 konvertiert, wenn er 16 oder mehr und 32 oder weniger beträgt, wird er in 1 konvertiert, wenn er 32 oder mehr und 48 oder weniger beträgt, wird er in 2 konvertiert, und wenn er 48 oder mehr und 64 oder weniger beträgt, wird er in 3 konvertiert.
for dataset in combine:
dataset.loc[ dataset['Age'] <= 16, 'Age'] = 0
dataset.loc[(dataset['Age'] > 16) & (dataset['Age'] <= 32), 'Age'] = 1
dataset.loc[(dataset['Age'] > 32) & (dataset['Age'] <= 48), 'Age'] = 2
dataset.loc[(dataset['Age'] > 48) & (dataset['Age'] <= 64), 'Age'] = 3
dataset.loc[ dataset['Age'] > 64, 'Age']
#Zeigen Sie 5 Zeilen von Anfang an an
train_df.head()
# 1. train_Gelöscht, weil AgeBand nicht von df verwendet wird.
train_df = train_df.drop(['AgeBand'], axis=1)
#Zeigen Sie 5 Zeilen von Anfang an an
train_df.head()
Erstellen Sie als neue Funktion von Family Size, die Parch und SibSp kombiniert.
combine = [train_df, test_df]
# 1.Erstellt eine neue Funktion namens Familiengröße durch Hinzufügen von Parch und SibSp.
for dataset in combine:
dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1
# 2.Aggregieren Sie die Durchschnittswerte für Familiengröße und Überleben in Gruppen.
train_df[['FamilySize', 'Survived']].groupby(['FamilySize'], as_index=False).mean().sort_values(by='Survived', ascending=False)
Erstellen Sie als Nächstes eine neue Funktion namens isAlone. Diese Feature-Menge speichert 1 für Singles und 0 für Familienmitglieder.
for dataset in combine:
# 1.Erstellt mit allen Funktionen namens IsAlone auf 0 gesetzt.
dataset['IsAlone'] = 0
# 2.Wenn FamilySize 1 ist, ist isAlone 1.
dataset.loc[dataset['FamilySize'] == 1, 'IsAlone'] = 1
# 3.IsAlone und Survived werden zusammengefasst und der Durchschnittswert von Survived wird ausgegeben.
train_df[['IsAlone', 'Survived']].groupby(['IsAlone'], as_index=False).mean()
# train_df und test_Entfernen Sie Parch, SibSp und FamilySize aus df.
train_df = train_df.drop(['Parch', 'SibSp', 'FamilySize'], axis=1)
test_df = test_df.drop(['Parch', 'SibSp', 'FamilySize'], axis=1)
combine = [train_df, test_df]
train_df.head()
Sie können auch künstliche Funktionen erstellen, die Klasse und Alter kombinieren. Erstellen Sie eine Variable namens Age * Class. Diese Merkmalsmenge speichert den Wert, der durch Gewichtung der Kabinenqualität mit dem Alter erhalten wird.
# 1. Age*Erstellen Sie eine neue Funktion namens Klasse und speichern Sie den Wert, der durch Multiplizieren von Alter und Klasse erhalten wird.
for dataset in combine:
dataset['Age*Class'] = dataset.Age * dataset.Pclass
train_df.loc[:, ['Age*Class', 'Age', 'Pclass']].head(10)
Bei der Einschiffung werden Werte von S, Q, C basierend auf dem Boarding-Port verwendet. Im Trainingsdatensatz fehlen zwei Werte. Ersetzen Sie diese fehlenden Werte durch die am häufigsten vorkommenden Werte.
# 1.Entfernen Sie na mit Embarked und ändern Sie den häufigsten Wert in die neue Merkmalsmenge freq_Im Hafen gelagert.
freq_port = train_df.Embarked.dropna().mode()[0]
print(freq_port)
# 1. train_df und test_Fehlender Wert von df, freq_Ersetzt durch den Wert von port.
for dataset in combine:
dataset['Embarked'] = dataset['Embarked'].fillna(freq_port)
# 2.Eingeschifft und Überlebt werden zusammengefasst und der Durchschnittswert von Überlebt wird ausgegeben.
train_df[['Embarked', 'Survived']].groupby(['Embarked'], as_index=False).mean().sort_values(by='Survived', ascending=False)
# 1.Eingeschifft{'S': 0, 'C': 1, 'Q': 2}Ersetzt mit.
for dataset in combine:
dataset['Embarked'] = dataset['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)
train_df.head()
In test_df fehlt nur ein Wert im Tarif. Ersetzen Sie diesen fehlenden Wert durch den Median.
# 1. test_Füllen Sie den fehlenden Tarifwert in df mit dem Medianwert des Tarifs.
test_df['Fare'].fillna(test_df['Fare'].dropna().median(), inplace=True)
test_df.head()
Erstellen Sie als Nächstes eine Funktion namens FareBand, die den Tarif in vier Ebenen unterteilt.
# 1.Teilen Sie den Tarif, der ein kontinuierlicher Wert ist, in vier und konvertieren Sie ihn in einen diskreten Wert.
train_df['FareBand'] = pd.qcut(train_df['Fare'], 4)
# 2.Erstellen Sie eine Pivot-Tabelle für FareBand und Survived.
train_df[['FareBand', 'Survived']].groupby(['FareBand'], as_index=False).mean().sort_values(by='FareBand', ascending=True)
Ersetzen Sie den Tarif durch diskrete Werte (Bestelldaten).
# 1.Der Fahrpreis beträgt 7.0, 7 wenn 91 oder weniger.Über 91 14.1, 14 für 454 oder weniger.Wenn es 454 überschreitet und 31 oder weniger beträgt, wird es in 2 konvertiert und wenn es 31 überschreitet und 3 ist.
for dataset in combine:
dataset.loc[ dataset['Fare'] <= 7.91, 'Fare'] = 0
dataset.loc[(dataset['Fare'] > 7.91) & (dataset['Fare'] <= 14.454), 'Fare'] = 1
dataset.loc[(dataset['Fare'] > 14.454) & (dataset['Fare'] <= 31), 'Fare'] = 2
dataset.loc[ dataset['Fare'] > 31, 'Fare'] = 3
dataset['Fare'] = dataset['Fare'].astype(int)
train_df = train_df.drop(['FareBand'], axis=1)
combine = [train_df, test_df]
train_df.head(10)
Recommended Posts