Als Rückblick auf die Python-Vorlesung in Udemy untersuchte ich den Untergangsunfall der Titanic. Umgebung ist Windows 10, Python 3.5.2 Alles in Jupiter-Notizbuch geschrieben.
Beginnen wir mit dem Import von Pandas.
import pandas as pd
from pandas import Series, DataFrame
Laden Sie zunächst die Datei train.csv von der Website (https://www.kaggle.com/c/titanic) herunter, auf der die Daten von Kaggle gespeichert sind, um die Daten zum Untergang der Titanic zu erhalten.
#CSV-Datei lesen
titanic_df = pd.read_csv('train.csv')
#Zeigen Sie den Anfang der Datei an und überprüfen Sie den Datensatz
titanic_df.head()
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
Das Folgende sind wichtige Punkte in dieser Analyse.
##Import numpy und seaborn
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#Die Daten haben eine Altersspalte, aber keine untergeordnete Statusspalte
#Hier Kinder unter 10 Jahren
def male_female_child(passenger):
age, sex = passenger
if age < 10:
return 'child'
else:
return sex
#Es wurde eine neue Spalte mit dem Namen Person für Männer, Frauen und Kinder hinzugefügt
titanic_df['person'] = titanic_df[['Age','Sex']].apply(male_female_child, axis=1)
#Zählen Sie die Anzahl der Passagiere (einschließlich der Überlebenden).
sns.countplot('Pclass', data=titanic_df, hue='person')
Vergleicht man die Zimmer der dritten Klasse mit den Zimmern der ersten Klasse, so ist die Anzahl der Kinder überwältigend groß. Schauen wir uns hier die Altersverteilung an.
titanic_df['Age'].hist(bins=70)
titanic_df['Age'].mean()
29.69911764705882
Es scheint, dass das Durchschnittsalter insgesamt etwa 30 Jahre betrug. Verwenden wir nun FacetGrid, um die Altersgruppe für jede Raumklasse anzuzeigen.
fig = sns.FacetGrid(titanic_df, hue='Pclass', aspect=4)
fig.map(sns.kdeplot, 'Age', shade=True)
oldest = titanic_df['Age'].max()
fig.set(xlim=(0,oldest))
fig.add_legend()
Ich habe die ungefähre Situation der Passagiere verstanden.
Übrigens enthält die Spalte von Embarked (Embark ... Boarding) drei Werte von "C", "Q" und "S". Dies bedeutet Cherbourg Port, Queenstown Port und Southhampton Port auf der Kaggle-Seite. Da keiner von ihnen bekannt ist, werde ich aus den Gästezimmerklassen der Leute schließen, die von diesem Hafen aus an Bord gingen.
sns.countplot('Embarked', data=titanic_df, hue='Pclass', color ='g')
Anscheinend ist Southhampton Port der größte davon. Es wird auch spekuliert, dass der Hafen von Cherbourg ein wirtschaftlicheres Land war als der Hafen von Queenstown.
#Sehen Sie sich die Verteilung der Boarding-Kosten nach Gästezimmerklassen mit FacetGrid an
fig = sns.FacetGrid(titanic_df, hue='Pclass', aspect=3)
fig.map(sns.kdeplot, 'Fare', shade=True)
highest = titanic_df['Fare'].max()
fig.set(xlim=(0,highest))
fig.add_legend()
Ich habe eine Grafik, die verrückt aussieht.
titanic_df['Fare'].max()
512.32920000000001
titanic_df['Fare'].mean()
32.2042079685746
Es gibt Leute, die offensichtlich viel Geld bezahlen ...
titanic_df[titanic_df['Fare']>300]
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | person | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
258 | 259 | 1 | 1 | Ward, Miss. Anna | female | 35.0 | 0 | 0 | PC 17755 | 512.3292 | NaN | C | female |
679 | 680 | 1 | 1 | Cardeza, Mr. Thomas Drake Martinez | male | 36.0 | 0 | 1 | PC 17755 | 512.3292 | B51 B53 B55 | C | male |
737 | 738 | 1 | 1 | Lesurer, Mr. Gustave J | male | 35.0 | 0 | 0 | PC 17755 | 512.3292 | B101 | C | male |
Es scheint, dass diese drei Personen im Vergleich zu anderen Passagieren außergewöhnlich hohe Boarding-Kosten bezahlt haben. (Und natürlich hat jeder den Unfall überlebt.)
Für diejenigen, die interessiert sind, werde ich die Site-Links für die oben genannten drei Personen veröffentlichen.
Zeichnen wir eine Grafik, in der nur diese drei Personen herausgezogen sind.
drop_idx = [258, 679, 737]
titanic_df2 = titanic_df.drop(drop_idx)
fig = sns.FacetGrid(titanic_df2, hue='Pclass', aspect=4)
fig.map(sns.kdeplot, 'Fare', shade=True)
highest = titanic_df2['Fare'].max()
fig.set(xlim=(0,highest))
fig.add_legend()
Es sah nicht sehr einfach aus ... Werfen wir einen Blick auf das Boarding-Kosten-Histogramm.
titanic_df['Fare'].hist(bins=70)
Lassen Sie uns zunächst einen kurzen Blick auf die Gesamtüberlebensrate werfen.
titanic_df['Survivor'] = titanic_df.Survived.map({0:'Dead', 1:'Alive'})
sns.countplot('Survivor', data=titanic_df, palette='husl')
Als nächstes über Raumklasse und Überlebensrate.
sns.factorplot('Pclass', 'Survived', data=titanic_df)
Bisher scheint das Ergebnis vernünftig zu sein.
Schauen wir uns den Farbton genauer an.
sns.factorplot('Pclass', 'Survived', hue='person', data=titanic_df, aspect=2)
Es wurde für einen Moment zu einer Frage, aber wie ich oben nachgesehen habe, waren fast keine Kinder im erstklassigen Raum.
Zeichnen wir für jedes Alter eine Regressionslinie im Diagramm der Überlebensrate.
generations = [10,20,30,40,50,60,70,80]
sns.lmplot('Age', 'Survived', hue='Pclass', data=titanic_df,
hue_order=[1,2,3], x_bins=generations)
Sie können sehen, dass es einen Unterschied in der Überlebensrate von 10 bis 20% gibt, abhängig vom Rang des Gästezimmers, unabhängig vom Alter, obwohl es Unterschiede gibt.
sns.lmplot('Age','Survived',hue='Sex',data=titanic_df,palette='summer',
x_bins=generations)
Im Vergleich zum Geschlecht wurde jedoch festgestellt, dass die Überlebensrate von Frauen mit dem Alter anstieg.
jupyter notebook Ich bin noch nicht daran gewöhnt, aber vorerst habe ich viel geschrieben und festgestellt, dass es mit der Verknüpfung von "esc +" M "in" Markdown "geändert werden kann.
Recommended Posts