Analiza zbioru danych Titanic, w Python

 

Absolutną klasyką analizy danych jest zbiór zawierający informacje na temat pasażerów legendarnego Titanica. Mamy informację czy dany pasażer przeżył, wiek, płeć, klasa itd. Wiele ciekawych danych, aby zadać sobie pytanie – czy to, że niektórzy pasażerowie przeżyli, to był przypadek? A może coś więcej? Zobaczmy.

 

W celu dokonania analizy, posłużymy się Pythonem oraz bibliotekami Pandas i Seaborn.

Wszystkie poniższe, kody źródłowe, znajdują się w repozytorium GitHuba – https://github.com/AnalitykEduPL/Ciekawe-zbiory-oraz-zrodla-danych.git

 

Słów kilka, o zbiorze danych Titanic

 

Zbiór, jest dostępny do pobrania, pod adresem – http://analityk.edu.pl/wp-content/uploads/2020/02/titanic.csv

 

Zawiera on dane wszystkich pasażerów Titanica, z takimi informacjami jak:

 

  • survival – czy pasażer przeżył (1-tak, 0-nie)
  • class – clasa, którą podróżował (1-najlepsza)
  • name – imię, nazwisko
  • sex – płeć
  • age – wiek
  • sibsp – Number of Siblings/Spouses Aboard
  • parch – ilość dzieci lub rodziców
  • ticket – numer biletu
  • fare – cena biletu
  • cabin – numer kajuty
  • embarked – Port, w ktorym osoba wsiadła na pokład (C = Cherbourg; Q = Queenstown; S = Southampton)
  • boat – numer łódki, która się ewakuował
  • body – numer identyfikacyjny znalezionego ciała

 

Tego zbioru danych używa się, na ogół, w dwojaki sposób:

 

  1. Aby nabrać wprawy użyciu technik eksploracji danych. Analizując różnice w grupach osób które przeżyły i które zginęły, często za pomocą wykresów. Ma to na celu zdobycie doświadczenia w posługiwaniu się między innymi, Pandas oraz Seaborn
  2. Budując model predykcji, który po podaniu nowych parametrów pasażera, oblicza prawdopodobieństwo że pasażer przeżyje lub zginie. Ma to na celu, nabranie wprawy w procesie Data Mining, w ramach którego budujemy modele oparte przykładowo o drzewa decyzyjne lub regresję logistyczną.

 

My skupimy się na poruszeniu punktu 1 oraz zapoznaniu się ze zbiorem danych. Punkt 2, omówimy przy innej okazji.

 

Import oraz przygotowanie zbioru danych

 

Import bibliotek

 

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

 

Import oraz czyszczenie danych

 

df = pd.read_csv(„http://analityk.edu.pl/wp-content/uploads/2020/02/titanic.csv”)
df.head()

 

 

Od razu, usuniemy kolumny, które na ten moment, nas nie interesują.

 

df = df.drop(['sibsp','ticket','fare','boat','body','cabin'], axis=1)

 

Zobaczmy czy mamy z duplikowane rekordy:

 

df[df.duplicated()==True]

 

 

Sprawdźmy jak wygląda sprawa brakujących danych:

 

df.isnull().sum()

 

 

Widzimy, że mamy braki w danych odnośnie wieku, portu docelowego, oraz małe braki odnośnie portu, w którym osoba wsiadła na pokład. Będziemy musieli to wziąć pod uwagę w nasze analizie. W szczególności w przypadku, tworzenia wykresów w Seaborn, które będą wymagać kompletu danych.

 

Szybka analiza zbioru danych Titanic w Python:

 

Ile osób przeżyło, a ile zginęło

 

Na początku, zobaczmy, z jakim zjawiskiem mamy do czynienia, czyli ile osób przeżyło, a ile zginęło:

 

sns.set_palette("Set1")
sns.catplot(data=df,
           x='survived',
           kind='count')
plt.show()

 

 

Czy klasa którą podróżowały osoby, miała wpływ na przeżycie?

 

Pierwszym aspektem, który zbadamy, to klasa podróżna. 1 – to najwyższa klasa, w stylu premium. Być może, osoby podróżujące tą klasą, miały priorytet przy ewakuacji, analogicznie do osób wsiadających do samolotu na lotnisku, a być może ich kajuty, były zlokalizowane w specyficznej części statku. Ułatwiającej lub utrudniającej ewakuację.

 

sns.catplot(data=df,
           x='pclass',
           kind = 'count',
           hue= 'survived')
plt.show()

 

 

Czy wiek osoby, miał wpływ na przeżycie?

 

Kolejną ciekawą sprawą jest czy wiek podróżnego miał wpływ na jego przeżycie. Być może dzieci miały priorytet.

 

sns.distplot(df[df['age'].notnull() & (df['survived']==1)]['age'], 
             kde_kws={"label": "Survived"}, 
             bins=10)
sns.distplot(df[df['age'].notnull() & (df['survived']==0)]['age'], 
             kde_kws={"label": "Not Survived"}, 
             bins=10)
plt.show()

 

 

Widzimy, że większość dzieci przeżyła. Nie ma widocznej różnicy, dla osób po 20 roku życia.

 

Czy płeć osoby, miała wpływ na przeżycie?

 

Możemy się spodziewać, że kobiety były wpuszczane na pokład łodzi ratunkowych, w pierwszej kolejności. Zobaczmy co na to dane:

 

sns.catplot(data=df,
           x = 'sex',
           hue = 'survived',
           kind='count')
plt.show()

 

 

Podsumowując.

 

Dokonaliśmy szybkiego przeglądu danych, za pomocą Pandas oraz Seaborn. Hipotezy, które możemy postawić to:

 

  1. Podróżni, którzy podróżowali pierwszą klasą, mieli większe szanse na przeżycie. Albo byli ewakuowaniu w pierwszej kolejności, lub, ich kabiny było zlokalizowane bliżej łodzi ratunkowych
  2. Kobiety miały większe szanse na przeżycie. Prawdopodobnie miały pierwszeństwo
  3. Dzieci, były również traktowane priorytetowo.

 

Ta krótka analiza, to jedynie zachęta to zapoznania się ze zbiorem danych i nie wyczerpuje wszystkich informacji w nim ukrytych. Możemy zadać o wiele więcej pytań, jak – Czy rodziny miały większe szanse na przeżycie? Czy port w którym wsiadły osoby był znaczący? Czy cena biletu miała znaczenie? Jaki jest profil osoby która miała największe szanse?

 

Zachęcamy do pobrania zbioru oraz jego analizy, jako doskonałe ćwiczenie oraz ciekawostkę dotyczącą legendarnej katastrofy Titanic.