Files
drc-ners-nlp/notebooks/eda.ipynb
T
2025-06-20 16:45:54 +02:00

222 lines
32 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "c93a55c8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
">> Loading CSV dataset from name_dataset.csv\n"
]
}
],
"source": [
"#les dépendances pour la visualisation\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import sys\n",
"import os\n",
"import importlib\n",
"\n",
"sys.path.append(os.path.abspath(\"..\"))\n",
"import misc\n",
"importlib.reload(misc)\n",
"from misc import load_csv_dataset\n",
"\n",
"data = load_csv_dataset(\"names.csv\")\n",
"df = pd.DataFrame(data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0374f8ee",
"metadata": {},
"outputs": [],
"source": [
"#découpage des noms en nom, postnom et prénom\n",
"#contrainte : tenir compte des noms composés (eg. ILUNGA WA ILUNGA MARC)\n",
"# tenir compte des manquants (eg. LOKUA KANZA, KASONGO GERMAINE) \n",
"\n",
"df['split'] = df['name'].str.strip().str.split()\n",
"df = df[df['split'].notna() & df['split'].str.len() > 0]\n",
"df['nom'] = df['split'].apply(lambda x: x[0] if len(x) >= 1 else \"null\")\n",
"df['prenom'] = df['split'].apply(lambda x: x[-1] if len(x) >= 2 else \"null\")\n",
"df['postnom'] = df['split'].apply(lambda x: ' '.join(x[1:-1]) if len(x) > 2 else \"null\")\n",
"df.drop(columns=['split'], inplace=True)\n",
"df[['name', 'nom', 'postnom', 'prenom']].head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f2924f79",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Distribution simple des prénoms (affichage des 10 prénoms les plus populaires)\n",
"sns.countplot(y=df['prenom'], order=df['prenom'].value_counts().iloc[:10].index)\n",
"plt.title(\"Top 10 des prénoms\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "76979895",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>prenom</th>\n",
" <th>nombre</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>JEAN</td>\n",
" <td>110011</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>JOSEPH</td>\n",
" <td>48119</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>ESTHER</td>\n",
" <td>46597</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>MARIE</td>\n",
" <td>43267</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>DORCAS</td>\n",
" <td>39549</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>RUTH</td>\n",
" <td>38785</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>DAVID</td>\n",
" <td>38748</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>GRACE</td>\n",
" <td>38639</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>SARAH</td>\n",
" <td>37571</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>MOISE</td>\n",
" <td>37498</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" prenom nombre\n",
"0 JEAN 110011\n",
"1 JOSEPH 48119\n",
"2 ESTHER 46597\n",
"3 MARIE 43267\n",
"4 DORCAS 39549\n",
"5 RUTH 38785\n",
"6 DAVID 38748\n",
"7 GRACE 38639\n",
"8 SARAH 37571\n",
"9 MOISE 37498"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prenoms = df['prenom'].value_counts()\n",
"df_prenoms = prenoms.reset_index()\n",
"df_prenoms.columns = ['prenom', 'nombre']\n",
"df_prenoms.head(10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5022f136-3174-406d-acf0-dee379969213",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}