%pip install pandas numpy🚀 TP 2 : Exploratory Data Analysis (EDA) - L’Enquête Dimensionnelle
Mission : Félicitations, grâce à votre travail de Data Wrangling, la base de données du Spaceship Titanic est restaurée ! Cependant, le mystère reste entier : pourquoi certains passagers ont-ils été aspirés dans l’anomalie spatio-temporelle (colonne Transported) et d’autres non ? Y a-t-il un profil type de victime ?
En tant qu’Analyste de l’équipe de sauvetage, vous devez explorer ces données pour trouver des modèles cachés. Vos conclusions permettront de calibrer les portails de recherche.
import pandas as pd
import numpy as np
# 1. Chargement des données (On utilise le fichier de la mission précédente)
# Astuce : Assurez-vous d'avoir le fichier train.csv dans le mĂŞme dossier
df = pd.read_csv('train.csv')
# 2. Préparation rapide (le résultat de votre TP1)
df['Age'] = df['Age'].fillna(df['Age'].median())
df['VIP'] = df['VIP'].fillna(False)
df['Total_Spent'] = df[['RoomService', 'FoodCourt', 'ShoppingMall', 'Spa', 'VRDeck']].sum(axis=1)
print("Base de données opérationnelle. Prêt pour l'exploration !")
display(df.head(3))🔍 Étape 1 : Le Bilan Global (Statistiques Descriptives)
Notions abordées : describe(), value_counts()
Avant de chercher des relations complexes, prenons de la hauteur. L’état-major a besoin d’un rapport de situation immédiat sur les passagers.
# A VOUS DE JOUER :
# 1. Quelle est la moyenne d'âge sur le vaisseau ? Quel est le passager le plus âgé ?
# Utilisez la méthode .describe() sur la colonne 'Age'
print("--- Profil des âges ---")
stats_age = df['Age'].___()
display(stats_age)
# 2. Combien de personnes ont disparu au total ?
# Utilisez .value_counts() sur la colonne 'Transported' (True = disparu, False = resté à bord)
print("\n--- Bilan des disparitions ---")
bilan_disparus = df['Transported'].___()
display(bilan_disparus)🤝 Étape 2 : L’Hypothèse des Privilégiés (Analyse Bivariée / Croisée)
Notions abordées : pd.crosstab()
Une rumeur circule parmi les survivants : les passagers VIP auraient été épargnés par l’anomalie grâce aux boucliers de leurs cabines de luxe. En tant que scientifique, vous ne croyez qu’aux données. Vérifions cette rumeur en croisant les variables VIP et Transported.
# A VOUS DE JOUER :
# Utilisez la fonction pd.crosstab() pour créer un tableau à double entrée.
# En index (lignes), mettez le statut VIP. En colonnes, mettez le statut Transported.
tableau_croise = pd.___(
index=df['___'],
columns=df['___'],
margins=True # Ajoute les totaux
)
print("--- Analyse de Survie des VIP ---")
display(tableau_croise)
# Question de réflexion : La rumeur est-elle vraie ?
# Regardez la proportion de VIP disparus par rapport aux non-VIP disparus.🧬 Étape 3 : Profilage par Origine (Regroupement & Agrégation)
Notions abordées : groupby(), agg()
Le vaisseau transportait des passagers de trois planètes : la Terre, l’Europe et Mars. La biologie différente des passagers a-t-elle influencé leurs dépenses ou leur âge ? Nous allons regrouper les données par planète d’origine pour générer un profil type.
# A VOUS DE JOUER :
# 1. Regroupez le DataFrame par la planète d'origine ('HomePlanet')
# 2. Calculez l'âge moyen et le total des dépenses moyen pour chaque planète.
profil_planetes = df.groupby('___')[['Age', 'Total_Spent']].___()
print("--- Profils moyens par planète d'origine ---")
display(profil_planetes.round(1)) # .round(1) pour garder 1 seule décimale et rendre ça lisible🧲 Étape 4 : Détecter les liaisons invisibles (Corrélation)
Notions abordées : corr()
L’anomalie temporelle génère des champs magnétiques qui pourraient réagir avec la monnaie numérique des passagers. Y a-t-il un lien mathématique fort entre le fait de dépenser beaucoup au Spa et les dépenses en réalité virtuelle (VRDeck) ?
La matrice de corrélation de Pearson nous indique si deux variables quantitatives évoluent dans le même sens (proche de 1), en sens inverse (proche de -1), ou n’ont aucun lien (proche de 0).
# Sélectionnons uniquement les colonnes liées aux dépenses
colonnes_financieres = ['RoomService', 'FoodCourt', 'ShoppingMall', 'Spa', 'VRDeck']
# A VOUS DE JOUER :
# Appliquez la méthode .corr() sur ce sous-ensemble du DataFrame
matrice_correlation = df[colonnes_financieres].___()
# Pour faciliter la lecture, nous utilisons un dégradé de couleurs via pandas "style"
print("--- Matrice des interactions financières ---")
display(matrice_correlation.style.background_gradient(cmap='coolwarm', vmin=-1, vmax=1))
# Conclusion du détective : Les corrélations sont-elles fortes (proches de 1 ou -1) ?
# Si elles sont toutes proches de 0, cela signifie que les passagers répartissent leurs dépenses au hasard !🏆 Bilan de Mission
Excellent travail d’exploration ! Grâce à vos manipulations (Wrangling) et vos requêtes (EDA) : 1. Nous savons que l’anomalie a happé quasiment 50% des passagers. 2. Les passagers européens dépensent en moyenne beaucoup plus que les terriens. 3. Le statut VIP n’a pas particulièrement protégé les passagers.
Prochaine étape (Chapitre 4) : Ces tableaux de chiffres sont difficiles à lire pour l’État-Major. Vous allez devoir apprendre la Visualisation de données (DataViz) pour transformer ces découvertes en graphiques percutants !