In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
In [2]:
# Définir le style des visualisations
sns.set_style("whitegrid")
plt.rcParams['figure.figsize'] = (12, 8)
plt.rcParams['font.size'] = 12
In [3]:
# Charger les données
file_path = "../Data/raw/atus_full_selected.csv"
df = pd.read_csv(file_path)
In [4]:
# Afficher les premières lignes du dataset
print("Aperçu des données :")
display(df.head())
Aperçu des données :
TUCASEID TUACTIVITY_N TUACTDUR24 TUSTARTTIM TEWHERE ACTIVITY_NAME TUDIARYDAY TUFNWGTP001 TUFNWGTP002 GEMETSTA GTMETSTA
0 20030100013280 1 60 04:00:00 9 Personal Care Activities 6 7323431.0 12200000.0 1 -1
1 20030100013280 2 30 05:00:00 -1 Household Activities 6 7323431.0 12200000.0 1 -1
2 20030100013280 3 600 05:30:00 -1 Caring For & Helping Household (HH) Members 6 7323431.0 12200000.0 1 -1
3 20030100013280 4 150 15:30:00 1 Caring for & Helping Nonhousehold (NonHH) Members 6 7323431.0 12200000.0 1 -1
4 20030100013280 5 5 18:00:00 1 Work & Work-Related Activities 6 7323431.0 12200000.0 1 -1
In [5]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3347093 entries, 0 to 3347092
Data columns (total 11 columns):
 #   Column         Dtype  
---  ------         -----  
 0   TUCASEID       int64  
 1   TUACTIVITY_N   int64  
 2   TUACTDUR24     int64  
 3   TUSTARTTIM     object 
 4   TEWHERE        int64  
 5   ACTIVITY_NAME  object 
 6   TUDIARYDAY     int64  
 7   TUFNWGTP001    float64
 8   TUFNWGTP002    float64
 9   GEMETSTA       int64  
 10  GTMETSTA       int64  
dtypes: float64(2), int64(7), object(2)
memory usage: 280.9+ MB
In [6]:
# Afficher la forme du dataset
print(f"\nDimensions du dataset : {df.shape}")
Dimensions du dataset : (3347093, 11)
In [7]:
# Afficher les types de données
print("\nTypes de données :")
print(df.dtypes)
Types de données :
TUCASEID           int64
TUACTIVITY_N       int64
TUACTDUR24         int64
TUSTARTTIM        object
TEWHERE            int64
ACTIVITY_NAME     object
TUDIARYDAY         int64
TUFNWGTP001      float64
TUFNWGTP002      float64
GEMETSTA           int64
GTMETSTA           int64
dtype: object
In [8]:
# Vérifier les valeurs manquantes
print("\nValeurs manquantes par colonne :")
print(df.isnull().sum())
Valeurs manquantes par colonne :
TUCASEID              0
TUACTIVITY_N          0
TUACTDUR24            0
TUSTARTTIM            0
TEWHERE               0
ACTIVITY_NAME    763110
TUDIARYDAY            0
TUFNWGTP001           0
TUFNWGTP002           0
GEMETSTA              0
GTMETSTA              0
dtype: int64
In [9]:
# Statistiques descriptives
print("\n✅ Statistiques descriptives des colonnes numériques :")
display(df.describe())
✅ Statistiques descriptives des colonnes numériques :
TUCASEID TUACTIVITY_N TUACTDUR24 TEWHERE TUDIARYDAY TUFNWGTP001 TUFNWGTP002 GEMETSTA GTMETSTA
count 3.347093e+06 3.347093e+06 3.347093e+06 3.347093e+06 3.347093e+06 3.347093e+06 3.347093e+06 3.347093e+06 3.347093e+06
mean 2.008538e+13 1.198248e+01 7.350034e+01 4.120066e+00 3.980755e+00 6.614841e+06 6.620492e+06 -6.188788e-01 8.058566e-01
std 3.815143e+10 8.507737e+00 9.986215e+01 6.974539e+00 2.307969e+00 6.338694e+06 7.450391e+06 8.503977e-01 9.046464e-01
min 2.003010e+13 1.000000e+00 1.000000e+00 -3.000000e+00 1.000000e+00 1.566915e+05 1.302141e+05 -1.000000e+00 -1.000000e+00
25% 2.005071e+13 5.000000e+00 1.500000e+01 1.000000e+00 2.000000e+00 2.655114e+06 2.127190e+06 -1.000000e+00 1.000000e+00
50% 2.008111e+13 1.000000e+01 3.000000e+01 1.000000e+00 4.000000e+00 4.783635e+06 4.280356e+06 -1.000000e+00 1.000000e+00
75% 2.012030e+13 1.700000e+01 9.000000e+01 8.000000e+00 6.000000e+00 8.148153e+06 8.335296e+06 -1.000000e+00 1.000000e+00
max 2.015121e+13 9.100000e+01 1.313000e+03 9.900000e+01 7.000000e+00 1.370000e+08 1.700000e+08 3.000000e+00 3.000000e+00
In [10]:
# Distribution de la durée des activités
plt.figure(figsize=(12, 6))
sns.histplot(df['TUACTDUR24'], bins=50, kde=True)
plt.title("Distribution de la durée des activités (TUACTDUR24)", fontsize=14)
plt.xlabel("Durée (minutes)", fontsize=12)
plt.ylabel("Fréquence", fontsize=12)
plt.axvline(df['TUACTDUR24'].mean(), color='red', linestyle='--', label=f"Moyenne: {df['TUACTDUR24'].mean():.2f}")
plt.axvline(df['TUACTDUR24'].median(), color='green', linestyle='--', label=f"Médiane: {df['TUACTDUR24'].median():.2f}")
plt.legend()
plt.tight_layout()
plt.show()
No description has been provided for this image
In [11]:
# Top 10 des activités les plus fréquentes
plt.figure(figsize=(14, 8))
top_activities = df['ACTIVITY_NAME'].value_counts().head(10)
sns.barplot(x=top_activities.values, y=top_activities.index, palette="viridis")
plt.title("Top 10 des activités les plus fréquentes", fontsize=14)
plt.xlabel("Nombre d'occurrences", fontsize=12)
plt.ylabel("Nom de l'activité", fontsize=12)
plt.tight_layout()
plt.show()
C:\Windows\Temp\ipykernel_14736\252755260.py:4: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(x=top_activities.values, y=top_activities.index, palette="viridis")
No description has been provided for this image
In [12]:
# Répartition des activités selon le lieu
plt.figure(figsize=(12, 6))
sns.countplot(x='TEWHERE', data=df, palette="Set2")
plt.title("Répartition des activités selon TEWHERE (lieu)", fontsize=14)
plt.xlabel("Code lieu (TEWHERE)", fontsize=12)
plt.ylabel("Nombre d'activités", fontsize=12)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
C:\Windows\Temp\ipykernel_14736\143660803.py:3: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.countplot(x='TEWHERE', data=df, palette="Set2")
No description has been provided for this image
In [13]:
# Distribution des activités par heure de la journée
plt.figure(figsize=(14, 6))
# Convertir TUSTARTTIM en heure du jour (0-23)
df['hour'] = df['TUSTARTTIM'].apply(lambda x: int(str(x).zfill(4)[:2]) if pd.notnull(x) else np.nan)
hour_counts = df.groupby('hour').size()
sns.barplot(x=hour_counts.index, y=hour_counts.values, palette="rocket")
plt.title("Distribution des activités par heure de la journée", fontsize=14)
plt.xlabel("Heure", fontsize=12)
plt.ylabel("Nombre d'activités", fontsize=12)
plt.xticks(range(0, 24))
plt.tight_layout()
plt.show()
C:\Windows\Temp\ipykernel_14736\3535087203.py:6: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.barplot(x=hour_counts.index, y=hour_counts.values, palette="rocket")
No description has been provided for this image
In [14]:
# Matrice de corrélation
plt.figure(figsize=(12, 10))
corr_matrix = df.corr(numeric_only=True)
mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap="coolwarm", mask=mask, vmin=-1, vmax=1)
plt.title("Matrice de corrélation entre variables numériques", fontsize=14)
plt.tight_layout()
plt.show()
No description has been provided for this image
In [15]:
# Analyse temporelle : durée moyenne des activités par heure
plt.figure(figsize=(14, 6))
hour_durations = df.groupby('hour')['TUACTDUR24'].mean()
sns.lineplot(x=hour_durations.index, y=hour_durations.values, marker='o')
plt.title("Durée moyenne des activités par heure de la journée", fontsize=14)
plt.xlabel("Heure", fontsize=12)
plt.ylabel("Durée moyenne (minutes)", fontsize=12)
plt.xticks(range(0, 24))
plt.grid(True)
plt.tight_layout()
plt.show()
No description has been provided for this image