From 74f433717f7e5d108ea93b56dd1de76bd46b0431 Mon Sep 17 00:00:00 2001
From: gaspar <gaspar.henniaux.etu@univ-lille.fr>
Date: Fri, 11 Apr 2025 15:30:17 +0200
Subject: [PATCH] rendu final

---
 folkTables.ipynb | 72 +++++++++++++++++++++---------------------------
 1 file changed, 32 insertions(+), 40 deletions(-)

diff --git a/folkTables.ipynb b/folkTables.ipynb
index 25f11f4..1332330 100644
--- a/folkTables.ipynb
+++ b/folkTables.ipynb
@@ -11,6 +11,25 @@
     "- HENNIAUX Gaspar"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "63a79aeb",
+   "metadata": {},
+   "source": [
+    "Pour exécuter ce notebook, il faut : \n",
+    "\n",
+    "- se rendre sur cette page :https://www2.census.gov/programs-surveys/acs/data/pums/2018/1-Year/\n",
+    "- télécharger les fichiers : \n",
+    "    - csv_pca.zip\n",
+    "    - csv_pny.zip\n",
+    "    - csv_ptx.zip\n",
+    "- il faut les déziper et placer les fichiers \"psam_p06.csv\", \"psam_p36.csv\", \"psam_p48.csv\"  dans un dossier \"/data/2018/1-year\" qui se trouve au niveau du notebook\n",
+    "- exécuter la commande :\n",
+    "```bash\n",
+    "pip install folktables\n",
+    "```\n"
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "d70abd61-f4bd-41b3-97cf-e06311de84fa",
@@ -31,7 +50,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "id": "c5d2b55c",
    "metadata": {},
    "outputs": [],
@@ -45,12 +64,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 2,
    "id": "7cb34917",
    "metadata": {},
    "outputs": [],
    "source": [
-    "states = ['CA', 'TX', 'NY']  # Exemple d'États"
+    "states = ['CA', 'TX', 'NY']"
    ]
   },
   {
@@ -99,26 +118,22 @@
     "state_dfs = {}\n",
     "\n",
     "data_source = ACSDataSource(survey_year='2018', horizon='1-Year', survey='person')\n",
-    "states = ['CA', 'TX', 'NY']  # Exemple d'États\n",
+    "states = ['CA', 'TX', 'NY']\n",
     "\n",
     "# Pour chaque état, récupérer les données et ajouter une colonne \"state\"\n",
     "for state in states:\n",
     "    state_data = data_source.get_data(states=[state], download=False)\n",
     "    features, labels, _ = ACSIncome.df_to_pandas(state_data)\n",
     "\n",
-    "    # Ajouter une colonne \"state\"\n",
     "    features['state'] = state\n",
     "\n",
-    "    # Ajouter les labels au DataFrame\n",
     "    features['income'] = labels\n",
     "\n",
-    "    # Ajouter les données de cet état au dictionnaire\n",
     "    state_dfs[state] = features\n",
     "\n",
     "# Fusionner tous les États dans un seul DataFrame\n",
     "df_all_states = pd.concat(state_dfs.values(), ignore_index=True)\n",
     "\n",
-    "# Afficher les DataFrames\n",
     "for state, df_state in state_dfs.items():\n",
     "    print(f\"DataFrame for state {state}:\")\n",
     "    print(df_state.head())\n",
@@ -402,10 +417,8 @@
     "lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10, method='standard')\n",
     "lle_result = lle.fit_transform(df_scaled_all_states)\n",
     "\n",
-    "# Use the 'income' column from the original DataFrame\n",
     "income_values = loaded_state_dfs['NY']['income'].iloc[:10000]\n",
     "\n",
-    "# Affichage du scatter plot\n",
     "plt.figure(figsize=(8, 6))\n",
     "plt.scatter(lle_result[:, 0], lle_result[:, 1], alpha=0.2, c=income_values, cmap='viridis')\n",
     "plt.title(\"Projection LLE des données (premiers 1000 points)\")\n",
@@ -445,23 +458,17 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Fixer une seed pour la reproductibilité\n",
     "np.random.seed(42)\n",
     "\n",
-    "# Nombre d'échantillons à prendre (ajuste selon tes besoins)\n",
     "sample_size = 1000\n",
     "\n",
-    "# Sélectionner les colonnes numériques pour la réduction de dimension\n",
     "numerical_features = [\"AGEP\", \"COW\", \"SCHL\", \"MAR\", \"OCCP\", \"POBP\", \"RELP\", \"WKHP\", \"SEX\", \"RAC1P\", \"income\", \"state\"]\n",
     "\n",
-    "# Extraire les données échantillonnées\n",
     "df_sample = df_loaded[numerical_features].sample(n=sample_size, random_state=42)\n",
     "\n",
-    "# On garde les features numériques et la variable cible\n",
-    "X_sample = df_sample.drop(columns=[\"income\", \"state\"])  # Supprime income pour l'analyse\n",
-    "income_sample = df_sample[\"income\"].values  # Label pour la coloratio\n",
+    "X_sample = df_sample.drop(columns=[\"income\", \"state\"])\n",
+    "income_sample = df_sample[\"income\"].values\n",
     "\n",
-    "# Normalisation des données pour de meilleures performances\n",
     "scaler = StandardScaler()\n",
     "X_scaled = scaler.fit_transform(X_sample)\n"
    ]
@@ -550,7 +557,6 @@
     "\n",
     "    plt.show()\n",
     "\n",
-    "# Plot des PCA colorés\n",
     "plot_pca(X_pca_1D, income_sample, 1)\n",
     "plot_pca(X_pca_2D, income_sample, 2)\n",
     "plot_pca(X_pca_3D, income_sample, 3)\n",
@@ -649,7 +655,6 @@
     "\n",
     "    plt.show()\n",
     "\n",
-    "# Plot des LLE colorés\n",
     "plot_lle(X_lle_1D, income_sample, 1)\n",
     "plot_lle(X_lle_2D, income_sample, 2)\n",
     "plot_lle(X_lle_3D, income_sample, 3)\n",
@@ -711,7 +716,6 @@
     }
    ],
    "source": [
-    "# Assuming X_sample and income_sample are already defined\n",
     "X_tsne_1D = TSNE(n_components=1, random_state=42).fit_transform(X_sample)\n",
     "X_tsne_2D = TSNE(n_components=2, random_state=42).fit_transform(X_sample)\n",
     "X_tsne_3D = TSNE(n_components=3, random_state=42).fit_transform(X_sample)\n",
@@ -743,7 +747,6 @@
     "\n",
     "    plt.show()\n",
     "\n",
-    "# Affichage des graphes\n",
     "plot_tsne(X_tsne_1D, income_sample, 1)\n",
     "plot_tsne(X_tsne_2D, income_sample, 2)\n",
     "plot_tsne(X_tsne_3D, income_sample, 3)\n"
@@ -824,8 +827,6 @@
    "id": "8bb5d18f",
    "metadata": {},
    "source": [
-    "🔹 Pourquoi ?\n",
-    "\n",
     "L’histogramme montre la répartition globale et l’éventuelle asymétrie.\n",
     "\n",
     "Le KDE (Kernel Density Estimation) permet de visualiser la densité des valeurs.\n",
@@ -936,8 +937,6 @@
    "id": "3495af8c",
    "metadata": {},
    "source": [
-    "🔹 Pourquoi ?\n",
-    "\n",
     "Permet de voir s’il y a des catégories dominantes et si certaines sont sous-représentées.\n",
     "\n",
     "Vérifie la diversité des données pour éviter des biais dans les modèles.\n",
@@ -1248,9 +1247,8 @@
     }
    ],
    "source": [
-    "# Iterate through all numerical features and plot KDE for each\n",
     "for feature in numerical_features:\n",
-    "    if feature not in [\"income\", \"state\"]:  # Exclude non-numerical or categorical features\n",
+    "    if feature not in [\"income\", \"state\"]:\n",
     "        plt.figure(figsize=(10, 5))\n",
     "        sns.kdeplot(df_sample[df_sample[\"income\"] == True][feature], label=\"Income True\", shade=True, color=\"green\")\n",
     "        sns.kdeplot(df_sample[df_sample[\"income\"] == False][feature], label=\"Income False\", shade=True, color=\"red\")\n",
@@ -1265,13 +1263,11 @@
    "id": "cbcc3da2",
    "metadata": {},
    "source": [
-    "🔹 Pourquoi ?\n",
-    "\n",
     "Par exemple pour l'age : \n",
     "\n",
-    "    On peut voir si les jeunes ou les vieux ont plus de chance d’avoir un bon revenu.\n",
+    "    - On peut voir si les jeunes ou les vieux ont plus de chance d’avoir un bon revenu.\n",
     "\n",
-    "    Vérifie l’influence de l’âge sur income."
+    "    - Vérifie l’influence de l’âge sur income."
    ]
   },
   {
@@ -1279,7 +1275,8 @@
    "id": "92100388",
    "metadata": {},
    "source": [
-    "Conclusion\n",
+    "#### Conclusion\n",
+    "\n",
     "Avec ces visualisations, on peut :\n",
     "\n",
     "Détecter des outliers et des déséquilibres dans les données.\n",
@@ -1400,8 +1397,6 @@
    "id": "988ddd54",
    "metadata": {},
    "source": [
-    "🔹 Pourquoi ?\n",
-    "\n",
     "Le boxplot met en évidence les écarts entre les États.\n",
     "\n",
     "L’histogramme permet de voir si le revenu est distribué différemment en fonction de l’État.\n"
@@ -1501,8 +1496,6 @@
    "id": "20dd2cda",
    "metadata": {},
    "source": [
-    "🔹 Pourquoi ?\n",
-    "\n",
     "Si le modèle fonctionne bien sur CA mais échoue sur TX ou NY, cela montre qu’il y a une hétérogénéité forte entre les États."
    ]
   },
@@ -1588,8 +1581,6 @@
    "id": "4b01c9ea",
    "metadata": {},
    "source": [
-    "🔹 Pourquoi ?\n",
-    "\n",
     "KL Divergence mesure l’asymétrie entre distributions (si CA est très différent de TX).\n",
     "\n",
     "Wasserstein Distance donne une mesure plus robuste sur comment les distributions sont éloignées en moyenne."
@@ -1600,7 +1591,8 @@
    "id": "ee1d8b8e",
    "metadata": {},
    "source": [
-    "Conclusion\n",
+    "Conclusion : \n",
+    "\n",
     "Si les distributions sont différentes, il faut adapter les modèles à chaque État.\n",
     "\n",
     "Si un modèle entraîné sur CA fonctionne mal sur TX, cela montre une forte hétérogénéité.\n",
-- 
GitLab