Python: Schiffsüberlebensvorhersage Teil 2

Ich werde danach schreiben.

Analyse und nächste Aktion

Wir haben die Durchschnittswerte aus der vorherigen Pivot-Tabelle verglichen. Als Ergebnis fanden wir Folgendes.

Daten visualisieren und verstehen

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()

image.png

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.

Korrelation zwischen Kategoriewert und Merkmalsmenge mit numerischem Wert

#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()

image.png

Ergebnis

Entscheidung Betrachten Sie Pclass als ein Merkmal des Modells.

Korrelation der Merkmalsmenge (Kategoriewert)

Ü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.

Datenformung

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)

Erstellen Sie ein neues Feature aus einem vorhandenen Feature

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'])

image.png

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()

image.png

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()

image.png

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)

Konvertierung mehrwertiger Daten

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()

Ergänzen Sie fortlaufende numerische Daten

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()

image.png

image.png

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 ein neues Feature, indem Sie vorhandene Features kombinieren

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)

image.png

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)

image.png

Ergänzt Merkmalsmengen mit Werten

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)

image.png

# 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()

image.png

Ergänzung numerischer Daten

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()

image.png

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)

image.png

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

Python: Schiffsüberlebensvorhersage Teil 2
Python: Schiffsüberlebensvorhersage Teil 1
Python: Schiffsüberlebensvorhersage Teil 3
QGIS + Python Teil 2
QGIS + Python Teil 1
Python: Scraping Teil 1
Lösung Wenn Sie Python 3.6 oder höher verwenden, benötigen Sie die enum34-Bibliothek ebenfalls nicht. Deinstallieren Sie sie daher und verwenden Sie das Standard-Enum-Modul. Enum34 deinstallieren Führen Sie nach der Deinstallation von enum34 erneut `pip install optuna` aus und Sie haben Optuna erfolgreich installiert! Python, pip, Python3, enum, OptunaPython3 Beginn Teil 1
Python: Scraping Teil 2
Python für Feature Prediction Statistics
Python Basic Memorandum Teil 2
Python-Grundnotiz - Teil 2
Python-Grundnotiz - Teil 1
Bildverarbeitung mit Python (Teil 2)
Python mit freeCodeCamp Teil1 studieren
Angrenzende Bilder mit Python Teil 1
Python-Anwendung: Pandas Teil 1: Basic
Python-Anwendung: Pandas Teil 2: Serie
Schaben mit Selen + Python Teil 1
Python: Überwachtes Lernen: Hyperparameter Teil 1
Python-Grammatik-Grundnotiz (1)
Python studieren mit freeCodeCamp part2
Bildverarbeitung mit Python (Teil 1)
Nampre mit Python lösen (Teil 2)
Bildverarbeitung mit Python (3)
Python: Aktienkursprognose Teil 2
UI-Automatisierung Teil 2 in Python
Python: Überwachtes Lernen: Hyperparameter Teil 2
Schaben mit Selen + Python Teil 2
Python x GIS-Grundlagen (1)
Python: Aktienkursprognose Teil 1
Verschieben von CSV-Dateien mit Python Teil 1
Python x GIS-Grundlagen (3)
Spielen Sie handschriftliche Zahlen mit Python Part 1
Perl-Objekt und Python-Klasse Teil 2.
Anwendung von Python: Datenbereinigung Teil 1: Python-Notation
[Mit Python automatisiert! ] Teil 1: Datei einstellen
Python-Anwendung: Datenverarbeitung # 3: Datenformat
Einführung in Python Hands On Teil 1
Python studieren Teil 1 Erstellen einer Umgebung
Python-Anwendung: Numpy Teil 3: Double Array
Grundlagen von Python x GIS (Teil 2)
Perl-Objekt und Python-Klasse Teil 1.
Automatisieren Sie einfache Aufgaben mit Python Part0
Python-Anwendung: Datenvisualisierung Teil 1: Grundlegend
[Mit Python automatisiert! ] Teil 2: Dateivorgang
Erstellen Sie ein Überlebensvorhersagemodell für Passagiere der Kaggle Titanic, ohne Python zu verwenden