Comprendre la donnée - Partie 1 : Traitement de données et data visualisation¶
import pandas as pa
import numpy as np
On importe les données¶
On commence par importer nos données. Elles se trouvent aux URLs suivantes.
df = pa.read_csv('https://gitlab.com/jwheat/titanic/raw/master/passengers.csv')
su = pa.read_csv('https://gitlab.com/jwheat/titanic/raw/master/survivors.csv')
Ensuite, je remarque que les deux jeux de données ont un champs en commun : PassengerId
. Je peux donc les rejoindre en faisant un merge
.
df = df.merge(su, on="PassengerId")
Premier coup d'oeil¶
Affichons les premières lignes
df.head()
Combien de lignes ?
df.shape[0]
Combien de colonnes ?
df.shape[1]
Est-ce que nos données sont intègres ?¶
df["PassengerId"].isnull().sum()
df["Pclass"].isnull().sum()
df["Name"].isnull().sum()
df["Gender"].isnull().sum()
df["Age"].isnull().sum()
df["SibSp"].isnull().sum()
df["Parch"].isnull().sum()
df["Ticket"].isnull().sum()
df["Survived"].isnull().sum()
df["Fare"].isnull().sum()
df["Cabin"].isnull().sum()
df["Embarked"].isnull().sum()
df["Gender"].unique()
df["Pclass"].unique()
df["Survived"].unique()
Correction des données¶
# correction du gender
df = df.replace("Male", "male")
df = df.replace("Female", "female")
# correction des classes
df = df.query("Pclass != -1")
# correction de l'age
age_moyen = df["Age"].mean()
df["Age"] = df["Age"].fillna(age_moyen)
# correction de la cabine (on supprime la colonne)
df = df.drop(["Cabin"], axis=1)
Analyse¶
On importe les librairies utiles pour faire de la dataviz.
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
Analyse Univariée¶
sns.countplot(data=df, x="Gender")
sns.countplot(data=df, x="Pclass")
sns.countplot(data=df, x="Survived")
sns.boxplot(
data=df,
x="Age"
)
On voit qu'il y a des points qui "écrasent" notre graphique : ce sont des outliers. On peut rajouer showfliers=False
pour les masquer et mieux voir les autres données.
sns.boxplot(
data=df,
x="Age",
showfliers=False
)
sns.boxplot(
data=df,
x="Fare",
showfliers=False
)
Analyse bivariée¶
sns.countplot(data=df, x="Gender", hue="Survived")
sns.countplot(data=df, x="Pclass", hue="Survived")
sns.countplot(data=df, x="Pclass", hue="Gender")
sns.boxplot(
data=df,
x="Gender",
y="Age",
showfliers=False
)
sns.boxplot(
data=df,
x="Pclass",
y="Age",
showfliers=False
)
sns.boxplot(
data=df,
x="Pclass",
y="Fare",
showfliers=False
)
sns.lmplot(
data=df,
x="Fare",
y="Age"
)
Recherche de corrélations¶
Pour calculer les corrélations, on a besoin de passer le genre (qui est en texte) en nombre, afin que l'algorithme les comprenne.
# Correlation
# correction du gender
df.loc[df['Gender'] == "male", "Gender"] = 0
df.loc[df['Gender'] == "female", "Gender"] = 1
corr = df.corr(method='pearson', min_periods=0)
plt.figure(figsize=(10, 10))
sns.heatmap(corr,
linewidths=0.01,
square=True,
annot=True,
cmap='RdBu',
linecolor="white",
center=0)
On voit des corrélations entre Survived
et Gender
, Pclass
et Fare
, car les coefficients de corrélation sont significatifs (entre 0.26 et 0.55)
PCA : Analyse en composante principale¶
df.columns
dfp = df[["Pclass", "Gender", "Age", "SibSp", "Parch", "Fare"]]
dfp.head()
from sklearn.decomposition import PCA
pca = PCA(n_components=6)
principalComponents = pca.fit_transform(dfp)
print pca.explained_variance_ratio_
print pca.explained_variance_ratio_.cumsum()
On peut lire que la première composante créée par la PCA résume 93% de l'information du dataset. En regardant le tableau ci-dessous, cette composante est composée essentiellement du prix du ticket.
cov = pa.DataFrame(pca.components_)
cov.columns = dfp.columns
cov[cov < 0.01] = np.nan
cov