[PYTHON] Faisons l'analyse des données de naufrage du Titanic comme ça

Objectif

Dans le cadre d'un examen de la conférence Python à Udemy, j'ai enquêté sur l'accident de naufrage du Titanic. L'environnement est Windows 10, Python 3.5.2 Tout est écrit dans le cahier Jupyter.

python.PNG


Commençons par importer des pandas.

import pandas as pd
from pandas import Series, DataFrame

Tout d'abord, afin d'obtenir les données du naufrage du Titanic, téléchargez le fichier train.csv depuis le site (https://www.kaggle.com/c/titanic) qui contient les données de Kaggle.

titanic.PNG

#Lire le fichier csv
titanic_df = pd.read_csv('train.csv')
#Afficher le début du fichier et vérifier l'ensemble de données
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

Voici les points importants de cette analyse.


À propos des passagers

##Importer numpy et seaborn
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

#Les données ont une colonne d'âge mais pas de colonne d'état de l'enfant
#Ici, les enfants de moins de 10 ans

def male_female_child(passenger):
    age, sex = passenger
    if age < 10:
        return 'child'
    else:
        return sex

#Ajout d'une nouvelle colonne appelée personne pour les hommes et les femmes et les enfants
titanic_df['person'] = titanic_df[['Age','Sex']].apply(male_female_child, axis=1)

#Comptez le nombre de passagers (y compris les survivants)
sns.countplot('Pclass', data=titanic_df, hue='person')

output_8_1.png

En comparant les chambres de troisième classe avec les chambres de première classe, le nombre d'enfants est extrêmement important. Regardons ici la répartition par âge.

titanic_df['Age'].hist(bins=70)

output_10_1.png

titanic_df['Age'].mean()
29.69911764705882

Il semble que l'âge moyen global était d'environ 30 ans. Utilisons maintenant FacetGrid pour voir le groupe d'âge de chaque classe de salle.

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

output_13_2.png

J'ai fini par comprendre la situation approximative des passagers.


À propos du port

À propos, la colonne Embarqué (Embarquement ... embarquement) contient trois valeurs de "C", "Q" et "S". Cela signifie respectivement le port de Cherbourg, le port de Queenstown et le port de Southhampton pour voir la page Kaggle. Comme aucun d'entre eux n'est connu, je vais déduire des classes de chambres d'hôtes des personnes qui ont embarqué à partir de ce port.

sns.countplot('Embarked', data=titanic_df, hue='Pclass', color ='g')

output_17_1.png

Apparemment, le port de Southhampton est le plus grand d'entre eux. On suppose également que le port de Cherbourg était un terrain plus économique que le port de Queenstown.


À propos des frais d'embarquement

#Voir la répartition des frais de pension par classe de chambre en utilisant FacetGrid
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()

output_20_2.png

J'ai un graphique qui a l'air fou.

titanic_df['Fare'].max()
512.32920000000001
titanic_df['Fare'].mean()
32.2042079685746

Il y a des gens qui paient évidemment beaucoup d'argent ...

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

Il semble que ces trois personnes aient payé un coût d'embarquement exceptionnellement élevé par rapport aux autres passagers. (Et, bien sûr, tout le monde a survécu à l'accident.)

Pour ceux qui sont intéressés, je publierai les liens du site pour les trois personnes ci-dessus.

Dessinons un graphique avec seulement ces trois personnes retirées.

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

output_27_2.png

Cela n'a pas l'air très facile ... Jetons un coup d'œil à l'histogramme des frais d'embarquement.

titanic_df['Fare'].hist(bins=70)

output_29_1.png


À propos du taux de survie

Tout d'abord, examinons rapidement le taux de survie global.

titanic_df['Survivor'] = titanic_df.Survived.map({0:'Dead', 1:'Alive'})
sns.countplot('Survivor', data=titanic_df, palette='husl')

output_31_1.png

Ensuite, à propos de la classe de chambre et du taux de survie.

sns.factorplot('Pclass', 'Survived', data=titanic_df)

output_32_1.png

Jusqu'ici, le résultat semble raisonnable.

Regardons de plus près en utilisant la teinte.

sns.factorplot('Pclass', 'Survived', hue='person', data=titanic_df, aspect=2)

output_34_1.png

C'est devenu une question pendant un moment, mais comme j'ai vérifié ci-dessus, il n'y avait presque pas d'enfants dans la salle de première classe.

Trouvons une ligne de régression sur le graphique du taux de survie pour chaque âge.

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)

output_36_1.png

Vous pouvez voir qu'il existe une différence de taux de survie de 10 à 20% selon le rang de la chambre quel que soit l'âge, bien qu'il existe des variations.

sns.lmplot('Age','Survived',hue='Sex',data=titanic_df,palette='summer',
           x_bins=generations)

output_38_1.png

Cependant, comparé par sexe, on a constaté que le taux de survie des femmes augmentait avec l'âge.


Impressions

jupyter notebook Je n'y suis pas encore habitué, mais pour le moment, j'ai beaucoup écrit cette fois et j'ai trouvé que je pouvais le changer en Markdown avec le raccourci «esc + 'M».

Recommended Posts

Faisons l'analyse des données de naufrage du Titanic comme ça
Analyse des données Titanic 2
Analyse des données Titanic 1
Analyse des données Titanic 3
Analysons les données de l'enquête par questionnaire [4e: Analyse des émotions]
Créez un BOT qui raccourcit l'URL Discord
Regardons le diagramme de dispersion avant l'analyse des données
Utilisons les données ouvertes de "Mamebus" en Python
Utilisons les données ferroviaires des informations numériques foncières nationales
Faisons un robot qui résout le Rubik Cube! 2 Algorithme
Analyse des données basée sur les résultats des élections du gouverneur de Tokyo (2020)
Traitement des données qui élimine les effets des facteurs d'intrication (théorie)
Faisons un robot qui résout le Rubik Cube! 3 Logiciel
Faisons un robot qui résout le Rubik Cube! 1. Vue d'ensemble
Faisons une carte du nouveau site d'infection corona [FastAPI / PostGIS / deck.gl (React)] (Traitement des données)
Début de l'analyse de l'encyclopédie Nico Nico ~ Appuyez sur les données fournies par JSON
Créez le thème de Pythonista 3 comme Monokai (comment créer votre propre thème)
Trouvez l'emplacement d'installation du capteur qui maximise la quantité de données acquises
À propos de Boxplot et Violinplot qui visualisent la variation des données indépendantes
Recommandation d'analyse des données à l'aide de MessagePack
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Traitement des données 2 Analyse de divers formats de données
Décidons le gagnant du bingo
Jouons avec le jeu de données d'analyse d'entreprise "CoARiJ" créé par TIS ①
J'ai écrit un lecteur de corpus qui lit les résultats de l'analyse MeCab
Résumé du livre électronique Python utile pour l'analyse de données gratuite
Résumé des distributions de probabilité qui apparaissent souvent dans les statistiques et l'analyse des données
Jouons avec le jeu de données d'analyse d'entreprise "CoARiJ" créé par TIS ②
Expliquer le mécanisme de la classe de données PEP557
Ceci et celui de la notation d'inclusion.
Obtenez la liste des colonnes et la liste des données de CASTable
J'ai essayé l'analyse factorielle avec des données Titanic!
Analyse des données avant la génération de fonctionnalités titanesques de Kaggle
[Analyse des données] Analysons les actions automobiles américaines
Examinons le mécanisme de la chinchirorine de Kaiji
Visualisez les données d'exportation du journal Piyo
Rendre la valeur par défaut de l'argument immuable
Analyse des données de pratique Python Résumé de l'apprentissage que j'ai atteint environ 10 avec 100 coups
Vérifions la transition démographique de la ville de Matsue, préfecture de Shimane avec des données ouvertes
Trouvez l'index des éléments qui correspondent aux conditions dans la trame / série de données pandas
Faisons un clustering qui donne une belle vue d'ensemble de l'ensemble de données texte
Résumé des sources de données scikit-learn pouvant être utilisées lors de la rédaction d'articles d'analyse
Introduction à la modélisation statistique pour l'analyse des données Élargissement de la gamme d'applications de GLM
Organiser les outils Python pour accélérer le mouvement initial des compétitions d'analyse de données
Une introduction à l'analyse de données à l'aide de Python - Pour augmenter le nombre de vues vidéo -
Comment faire un Raspberry Pi qui parle les tweets d'un utilisateur spécifié
J'ai essayé de créer OneHotEncoder, qui est souvent utilisé pour l'analyse des données, afin qu'il puisse atteindre l'endroit qui démange.