Project_Carmignac/Essai.ipynb

1189 lines
220 KiB
Plaintext
Raw Normal View History

2025-11-25 15:30:27 +01:00
{
"cells": [
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 3,
2025-11-25 15:30:27 +01:00
"id": "dad4ac5b-b66f-4eab-acbf-51dc708616ef",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fichiers AUM : ['projet-bdc-data/carmignac/AUM ENSAE V1 -20251027.csv', 'projet-bdc-data/carmignac/AUM ENSAE V2 -20251105.csv']\n"
]
}
],
"source": [
"import os\n",
"import s3fs\n",
2025-12-04 09:48:07 +01:00
"import pandas as pd\n",
2025-11-25 15:30:27 +01:00
"\n",
"s3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n",
"\n",
"fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': s3_ENDPOINT_URL})\n",
"\n",
"BUCKET = \"projet-bdc-data\"\n",
"carmignac_path = \"projet-bdc-data/carmignac\"\n",
"\n",
"# Liste des fichiers AUM\n",
"all_files = fs.ls(carmignac_path)\n",
"aum_files = [f for f in all_files if \"AUM\" in f and f.endswith(\".csv\")]\n",
"print(\"Fichiers AUM :\", aum_files)\n",
"\n",
"# Lire tous les fichiers dans un dictionnaire\n",
"aum_data = {}\n",
"for file_path in aum_files:\n",
" with fs.open(file_path, 'r') as f:\n",
" df = pd.read_csv(f, sep=';',low_memory=False)\n",
" aum_data[os.path.basename(file_path)] = df\n"
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 4,
2025-11-25 15:30:27 +01:00
"id": "68903172-d4f8-4c6e-96f8-578c5b1afe23",
"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>Agreement - Code</th>\n",
" <th>Company - Id</th>\n",
" <th>Company - Ultimate Parent Id</th>\n",
" <th>Registrar Account - ID</th>\n",
" <th>Registrar Account - Region</th>\n",
" <th>RegistrarAccount - Country</th>\n",
" <th>Product - Asset Type</th>\n",
" <th>Product - Strategy</th>\n",
" <th>Product - Legal Status</th>\n",
" <th>Product - Is Dedie ?</th>\n",
" <th>Product - Fund</th>\n",
" <th>Product - Shareclass Type</th>\n",
" <th>Product - Shareclass Currency</th>\n",
" <th>Product - Isin</th>\n",
" <th>Centralisation Date</th>\n",
" <th>Quantity - AUM</th>\n",
" <th>Value - AUM CCY</th>\n",
" <th>Value - AUM €</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-03-31</td>\n",
" <td>35.368</td>\n",
" <td>24648.6666</td>\n",
" <td>24648.6666</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-11-30</td>\n",
" <td>35.368</td>\n",
" <td>22413.0553</td>\n",
" <td>22413.0553</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-12-31</td>\n",
" <td>35.368</td>\n",
" <td>22051.2406</td>\n",
" <td>22051.2406</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2016-03-31</td>\n",
" <td>35.368</td>\n",
" <td>21626.1173</td>\n",
" <td>21626.1173</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2016-11-30</td>\n",
" <td>35.368</td>\n",
" <td>22489.4502</td>\n",
" <td>22489.4502</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Agreement - Code Company - Id Company - Ultimate Parent Id \\\n",
"0 003 166 166 \n",
"1 003 166 166 \n",
"2 003 166 166 \n",
"3 003 166 166 \n",
"4 003 166 166 \n",
"\n",
" Registrar Account - ID Registrar Account - Region \\\n",
"0 200000647 France \n",
"1 200000647 France \n",
"2 200000647 France \n",
"3 200000647 France \n",
"4 200000647 France \n",
"\n",
" RegistrarAccount - Country Product - Asset Type Product - Strategy \\\n",
"0 France Diversified Patrimoine \n",
"1 France Diversified Patrimoine \n",
"2 France Diversified Patrimoine \n",
"3 France Diversified Patrimoine \n",
"4 France Diversified Patrimoine \n",
"\n",
" Product - Legal Status Product - Is Dedie ? Product - Fund \\\n",
"0 FCP NO Carmignac Patrimoine \n",
"1 FCP NO Carmignac Patrimoine \n",
"2 FCP NO Carmignac Patrimoine \n",
"3 FCP NO Carmignac Patrimoine \n",
"4 FCP NO Carmignac Patrimoine \n",
"\n",
" Product - Shareclass Type Product - Shareclass Currency Product - Isin \\\n",
"0 A EUR FR0010135103 \n",
"1 A EUR FR0010135103 \n",
"2 A EUR FR0010135103 \n",
"3 A EUR FR0010135103 \n",
"4 A EUR FR0010135103 \n",
"\n",
" Centralisation Date Quantity - AUM Value - AUM CCY Value - AUM € \n",
"0 2015-03-31 35.368 24648.6666 24648.6666 \n",
"1 2015-11-30 35.368 22413.0553 22413.0553 \n",
"2 2015-12-31 35.368 22051.2406 22051.2406 \n",
"3 2016-03-31 35.368 21626.1173 21626.1173 \n",
"4 2016-11-30 35.368 22489.4502 22489.4502 "
]
},
2025-12-04 16:11:38 +01:00
"execution_count": 4,
2025-11-25 15:30:27 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2025-12-04 09:48:07 +01:00
"df = aum_data['AUM ENSAE V2 -20251105.csv']\n",
"df.head()"
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 5,
2025-12-04 09:48:07 +01:00
"id": "22042f8f-1492-44a4-a492-5074ef1dc9f6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4880297\n"
]
}
],
"source": [
"print(len(df))"
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 6,
2025-12-04 09:48:07 +01:00
"id": "0fff2ef5-35dd-41d3-a8c2-72e4eb30bfcf",
"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>Agreement - Code</th>\n",
" <th>Company - Id</th>\n",
" <th>Company - Ultimate Parent Id</th>\n",
" <th>Registrar Account - ID</th>\n",
" <th>Registrar Account - Region</th>\n",
" <th>RegistrarAccount - Country</th>\n",
" <th>Product - Asset Type</th>\n",
" <th>Product - Strategy</th>\n",
" <th>Product - Legal Status</th>\n",
" <th>Product - Is Dedie ?</th>\n",
" <th>Product - Fund</th>\n",
" <th>Product - Shareclass Type</th>\n",
" <th>Product - Shareclass Currency</th>\n",
" <th>Product - Isin</th>\n",
" <th>Centralisation Date</th>\n",
" <th>Quantity - AUM</th>\n",
" <th>Value - AUM CCY</th>\n",
" <th>Value - AUM €</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-03-31</td>\n",
" <td>35.368</td>\n",
" <td>24648.6666</td>\n",
" <td>24648.6666</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-11-30</td>\n",
" <td>35.368</td>\n",
" <td>22413.0553</td>\n",
" <td>22413.0553</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2015-12-31</td>\n",
" <td>35.368</td>\n",
" <td>22051.2406</td>\n",
" <td>22051.2406</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2016-03-31</td>\n",
" <td>35.368</td>\n",
" <td>21626.1173</td>\n",
" <td>21626.1173</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2016-11-30</td>\n",
" <td>35.368</td>\n",
" <td>22489.4502</td>\n",
" <td>22489.4502</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Agreement - Code Company - Id Company - Ultimate Parent Id \\\n",
"0 003 166 166 \n",
"1 003 166 166 \n",
"2 003 166 166 \n",
"3 003 166 166 \n",
"4 003 166 166 \n",
"\n",
" Registrar Account - ID Registrar Account - Region \\\n",
"0 200000647 France \n",
"1 200000647 France \n",
"2 200000647 France \n",
"3 200000647 France \n",
"4 200000647 France \n",
"\n",
" RegistrarAccount - Country Product - Asset Type Product - Strategy \\\n",
"0 France Diversified Patrimoine \n",
"1 France Diversified Patrimoine \n",
"2 France Diversified Patrimoine \n",
"3 France Diversified Patrimoine \n",
"4 France Diversified Patrimoine \n",
"\n",
" Product - Legal Status Product - Is Dedie ? Product - Fund \\\n",
"0 FCP NO Carmignac Patrimoine \n",
"1 FCP NO Carmignac Patrimoine \n",
"2 FCP NO Carmignac Patrimoine \n",
"3 FCP NO Carmignac Patrimoine \n",
"4 FCP NO Carmignac Patrimoine \n",
"\n",
" Product - Shareclass Type Product - Shareclass Currency Product - Isin \\\n",
"0 A EUR FR0010135103 \n",
"1 A EUR FR0010135103 \n",
"2 A EUR FR0010135103 \n",
"3 A EUR FR0010135103 \n",
"4 A EUR FR0010135103 \n",
"\n",
" Centralisation Date Quantity - AUM Value - AUM CCY Value - AUM € \n",
"0 2015-03-31 35.368 24648.6666 24648.6666 \n",
"1 2015-11-30 35.368 22413.0553 22413.0553 \n",
"2 2015-12-31 35.368 22051.2406 22051.2406 \n",
"3 2016-03-31 35.368 21626.1173 21626.1173 \n",
"4 2016-11-30 35.368 22489.4502 22489.4502 "
]
},
2025-12-04 16:11:38 +01:00
"execution_count": 6,
2025-12-04 09:48:07 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_200000647 = df[df['Registrar Account - ID'] == '200000647'].copy()\n",
"\n",
"df_200000647.head()\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 7,
2025-12-04 09:48:07 +01:00
"id": "54b7ab00-a39e-4ca5-8a92-fa9ca93d69d4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"12501\n"
]
}
],
"source": [
"# Liste unique des Registrar Account - ID\n",
"registrar_ids = df['Registrar Account - ID'].unique()\n",
"\n",
"# Afficher\n",
"print(len(registrar_ids))\n"
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 8,
2025-12-04 09:48:07 +01:00
"id": "090b2eae-889b-44b3-9a73-cd0cd0734191",
"metadata": {},
"outputs": [],
"source": [
2025-12-04 16:11:38 +01:00
"# Evolution stock d'un compte\n",
"\n",
2025-12-04 09:48:07 +01:00
"import matplotlib.pyplot as plt\n",
"\n",
"def evolution(id=None, n=None):\n",
"\n",
" if id is None :\n",
" registrar_ids = df['Registrar Account - ID'].unique()\n",
" id = registrar_ids[n]\n",
" \n",
" df_id = df[df['Registrar Account - ID'] == id].copy()\n",
" \n",
" # Conversion de la colonne Centralisation Date en datetime si ce n'est pas déjà fait\n",
" df_id['Centralisation Date'] = pd.to_datetime(df_id['Centralisation Date'])\n",
"\n",
" # Tri par date\n",
" df_id = df_id.sort_values('Centralisation Date')\n",
" df_id.set_index('Centralisation Date', inplace=True)\n",
"\n",
" # Aggrégation\n",
" df_agg = df_id.groupby('Centralisation Date')['Quantity - AUM'].sum().reset_index()\n",
" \n",
" plt.figure(figsize=(10,5))\n",
" plt.plot(df_agg['Centralisation Date'], df_agg['Quantity - AUM'], marker='.',linestyle='-')\n",
" plt.title(f'Évolution de la quantité dactifs sous gestion - Account ID{id}')\n",
" plt.xlabel('Date')\n",
" plt.ylabel('Quantity - AUM')\n",
" plt.grid(True)\n",
" plt.show()"
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 9,
2025-12-04 09:48:07 +01:00
"id": "9f984cb5-fa9c-48fa-a547-c7139d44d3fc",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAHZCAYAAACMzgo1AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcy5JREFUeJzt3Xd0VNXax/HfpBeSQCAhQVpAkCp4aQYVpDcLAgpWUAQLiIDtxUaxYEVFsVwLYMGr2BAvLQLCVYqIICCIgBSBhJ4ESEjd7x9hRoYkkEmmZCbfz1pZMOfsOWefeaY9s5vFGGMEAAAAACgxP09XAAAAAAC8DYkUAAAAADiIRAoAAAAAHEQiBQAAAAAOIpECAAAAAAeRSAEAAACAg0ikAAAAAMBBJFIAAAAA4CASKXiNdevW6emnn9bx48c9XRUAAABUcCRS8AoHDhzQNddco7i4OEVERHi6OgAAAKjgLMYY4+lKAOczb948paWl6cYbb/R0VQC3SEtL02uvvaZOnTrpiiuu8HR1AADAWWiRglfo3bu3W5Moi8WiCRMmOPWYM2bMkMVi0a5du5x63LJw9nXWrVtXQ4YMcdrxvN2VV16pK6+8slT3HTp0qObPn6/WrVuX+vw//PCDLBaLfvjhh1Ifw5kmTJggi8Vity03N1cPP/ywatWqJT8/P/Xt29czlYOGDBmiunXreroaAOA1SKRQblkTj+L+Vq1a5ekqFunZZ5/VN9984+lqwE02b96sCRMmlChB3r9/vyZMmKD169efs9xrr72mDRs2aO7cuQoNDXVORU/btWuXLBaLyxLejIwMTZgwocTJ2wcffKAXX3xRAwYM0MyZMzVmzBiX1AsFSvoc9AapqakKCQmRxWLRli1bPF0dl5k3b55DP3hdeeWVatasmd22unXr2j47/fz8VLlyZTVv3lzDhw/X6tWrCx3jyJEjevHFF9WhQwfFxMSocuXKuvTSS/XZZ58Vec6srCw98sgjqlGjhkJDQ9WuXTslJSUVWXbFihW6/PLLFRYWpri4OI0aNUonTpwod8fMzs7Ws88+q0aNGikkJETVq1dXnz59tHfv3iLLS9Izzzwji8VS6PG3vu8W9zds2LBij4nyLcDTFQDOZ9KkSUpISCi0/cILL/RAbc7v2Wef1YABAwr9sn7rrbdq0KBBCg4O9kzF4BKbN2/WxIkTdeWVVxb6NX/RokV2t/fv36+JEyeqbt26atmyZZHHy87O1smTJ7VgwQJVq1bN6fVNS0uTJJe1PGRkZGjixImSVKg17vHHH9f//d//2W1bsmSJLrjgAr3yyisuqQ/snes5+O677yo/P98zFSuF2bNny2KxKC4uTp988omefvppT1fJJebNm6dp06aVufdAy5Yt9cADD0iSjh8/ri1btmj27Nl69913NWbMGE2ZMsVWduXKlXrsscfUu3dvPf744woICNCXX36pQYMG2d7zzjRkyBB98cUXGj16tBo0aKAZM2aod+/eWrp0qS6//HJbufXr16tLly5q3LixpkyZor179+qll17Stm3bNH/+/HJzzJycHPXp00crVqzQsGHDdPHFF+vYsWNavXq10tLSVLNmzUKP7969e/Xss88qPDy80L6YmBh99NFHhbYvWLBAn3zyibp3715kzOAFDFBOTZ8+3Ugya9ascfu5JZnx48eX6r7h4eFm8ODBTq2Pq5TlOotSp04dr7l2Z5k9e7aRZJYuXXresmvWrDGSzPTp011eL2OMWbp0aaG6TZ061URERJgjR4645JyHDh1y6HnVqVMn07RpU5fUBYW5+znoSh06dDD9+vUzY8aMMQkJCZ6ujsuMGDHCOPJ1rWPHjoVeU3Xq1DF9+vQpVDYjI8P07dvXSDJvvvmmbftff/1ldu3aZVc2Pz/fdO7c2QQHB5sTJ07Ytq9evdpIMi+++KJtW2Zmpqlfv75JTEy0O0avXr1MfHy8SUtLs2179913jSSzcOHCcnPM559/3gQGBprVq1cXesyKM3DgQNO5c+ciH//idOnSxURGRprMzMwSnwflC4kUyq2SJFLZ2dmmSpUqZsiQIYX2paWlmeDgYPPAAw/Yth04cMDccccdJjY21gQHB5uLL77YzJgxo9B9z/4iOHjwYFOnTp1C5caPH2/3ASep0J81sbBez86dO+2OMW3aNNOkSRMTFBRk4uPjzb333muOHTtmV8b6xvz777+bK6+80oSGhpoaNWqY559/vtjH5kynTp0yo0ePNtWqVTOVKlUyV199tfn777+L/MK7d+9ec/vtt5vY2FgTFBRkmjRpYt5///0SnefsROrIkSPmgQceMM2aNTPh4eEmIiLC9OzZ06xfv96p9S5pfIwx5oMPPjCdOnUyMTExJigoyDRu3NjuC8SZ19KnTx/zv//9z7Rp08YEBwebhIQEM3PmTFsZa0zP/rMmLh07djQdO3Y0xvyT1Jz9d+YX2lWrVpkePXqYyMhIExoaajp06GB+/PHHEj1Wf//9t7n22mtNWFiYiYmJMaNHjzYLFiwolEj179/fPPbYY3b3dSROmZmZZvz48aZBgwYmODjYxMXFmeuuu85s377d7Ny5s8hrtMbqzHgUV9Za108//dT861//MpUqVTIRERGmWbNm5tVXXz3v41CS++3YscMMGDDAVKlSxYSGhpp27dqZ7777zq5Mca/XopLTP//80/Tr189Ur17dBAcHmwsuuMAMHDjQpKamnre+b7zxhklISDAhISGmTZs2Zvny5XbPG6tTp06ZJ5980tSvX98EBQWZmjVrmoceesicOnXKrtyiRYvMZZddZqKiokx4eLhp2LChGTdunF3di3sOFvU6OnHihBk7dqypWbOmCQoKMg0bNjQvvviiyc/PtysnyYwYMcJ8/fXXpmnTprb3jvnz55/3MSiN3bt3G4vFYj7//HPbF+SffvqpyLIfffSRadOmjQkNDTWVK1c2V1xxhd0XbGOMmTdvnunQoYPtedO6dWvzySef2JX5/PPPzb/+9S8TEhJiqlatam6++Wazd+9euzJFxc6Ywo+t9fn/4osvmnfeecfUq1fPBAUFmdatW5uff/7Z7n5FxexcHEmkjDHm+PHjJjo62lxwwQWF4nq2qVOnGklmw4YNtm0PPfSQ8ff3t0tkjDHm2WefNZLMnj17jDEFn8kBAQHmoYcesiuXlZVlKlWqZIYOHVoujpmXl2dq1KhhbrjhBmOMMTk5OebkyZPnfFyWLVtm/P39zYYNG0qcSO3fv9/4+fkV+f0F3oOufSj30tLSdPjwYbttFotFVatWVWBgoK677jp99dVXeueddxQUFGQr88033ygrK0uDBg2SJGVmZurKK6/U9u3bNXLkSCUkJGj27NkaMmSIUlNTdf/995e5rh999JHuvPNOtW3bVsOHD5ck1a9fv9jyEyZM0MSJE9W1a1fdc8892rp1q9566y2tWbNGP/30kwIDA21ljx07pp49e6pfv3664YYb9MUXX+iRRx5R8+bN1atXr3PW684779THH3+sm266Se3bt9eSJUvUp0+fQuUOHDigSy+9VBaLRSNHjlRMTIzmz5+voUOHKj09XaNHj3bo8fjrr7/0zTff6Prrr1dCQoIOHDigd955Rx07dtTmzZtVo0YNp9TbEW+99ZaaNm2qa665RgEBAZo7d67uvfde5efna8SIEXZlt2/frgEDBmjo0KEaPHiwPvjgAw0ZMkStWrVS06ZN1aFDB40aNUpTp07Vo48+qsaNG0uS7d8zNW7cWJMmTdKTTz6p4cOH22bia9++vaSCLm69evVSq1atNH78ePn5+Wn69Onq3Lmz/ve//6lt27bFXlNmZqa6dOmiPXv2aNSoUapRo4Y++ugjLVmypFDZL774otC2ksYpLy9PV111lRYvXqxBgwbp/vvv1/Hjx5WUlKRNmzapa9eueuutt3TPPffouuuuU79+/SRJF198caFzWru6PPPMMzpx4oQmT55se5ySkpJ04403qkuXLnr++eclSVu2bNFPP/10ztdpSe534MABtW/fXhkZGRo1apSqVq2qmTNn6pprrtEXX3yh6667rtjjFyU
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"evolution(n=0)"
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 10,
"id": "4d11701e-8a6a-4879-bc8a-c233e13d56b6",
2025-12-04 09:48:07 +01:00
"metadata": {},
2025-12-04 16:11:38 +01:00
"outputs": [],
2025-12-04 09:48:07 +01:00
"source": [
2025-12-04 16:11:38 +01:00
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"\n",
"def evolution_2_comptes(id1, id2):\n",
" def prepare_df(id):\n",
" df_id = df[df['Registrar Account - ID'] == id].copy()\n",
" df_id['Centralisation Date'] = pd.to_datetime(df_id['Centralisation Date'])\n",
" df_agg = (\n",
" df_id\n",
" .groupby('Centralisation Date')['Quantity - AUM']\n",
" .sum()\n",
" .reset_index()\n",
" .sort_values('Centralisation Date')\n",
" )\n",
" return df_agg\n",
"\n",
" df1 = prepare_df(id1)\n",
" df2 = prepare_df(id2)\n",
"\n",
" plt.figure(figsize=(12, 6))\n",
"\n",
" # Courbe du premier compte\n",
" plt.plot(df1['Centralisation Date'], df1['Quantity - AUM'],\n",
" marker='.', linestyle='-', label=f'Account {id1}')\n",
"\n",
" # Courbe du second compte\n",
" plt.plot(df2['Centralisation Date'], df2['Quantity - AUM'],\n",
" marker='.', linestyle='-', label=f'Account {id2}')\n",
"\n",
" plt.title(\"Évolution des AUM pour deux comptes\")\n",
" plt.xlabel(\"Date\")\n",
" plt.ylabel(\"Quantity - AUM\")\n",
" plt.grid(True)\n",
" plt.legend() # <- important pour distinguer les comptes\n",
" plt.tight_layout()\n",
" plt.show()"
2025-12-04 09:48:07 +01:00
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 11,
"id": "945bbd98-bec1-4415-ba48-7b296115f39e",
2025-12-04 09:48:07 +01:00
"metadata": {},
"outputs": [
{
"data": {
2025-12-04 16:11:38 +01:00
"image/png": "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IUOG8Oqrr3LllVfy8ssvM2zYsEqPMSwsjHfeeYcdO3bw73//27F+zJgxpKamMmfOnHIzBE+dOsX555/Pq6++yoABA5g6dSp33nkn27ZtcwQqK/u/+/777zNjxgzuueceHnjgAVauXMl1113HI488wldffcWECRO4/fbbWbhwoVPQ2u7PP/9k2LBhXHrppTz77LMEBgZy7bXXsmzZMsA8v+69914A/vWvfzn+19u1aweYzwODBw8mIiKC559/nkcffZTffvuN8847zyngNHToUD799FNGjx7NjBkzuPfeezl58iR79uyp9N9BRERqEUNERETc7u233zaAUn9CQkIc+y1dutQAjIULFzrdftCgQUbLli0d16dMmWIAxnvvvedYl5OTY/Tq1cuIiIgw0tLSHOsBY9KkSY7rI0eONJo3b15ijJMmTTKKvzWoU6eOMXLkyDJ/n127dhmGYRiHDx82goODjQEDBhj5+fmO/aZNm2YAxuzZsx3r+vbtawDG3LlzHeuys7ONuLg4Y+jQoSXuq6hNmzYZgHH33Xc7rR8+fHiJ3/OWW24x4uPjjaNHjzrte/311xvR0dFGRkaGYRiGccUVVxgdOnQo937LkpOTY9SvX9/497//7TSWzp07l9i3efPmxuDBg0s9zvr16w3AePvttx3r7H+PI0eOGP/85z+NVq1aObZ1797dGD16tGEY5t93zJgxpx2r/Xz76aefHOv+/vtvIzQ01Ljqqqsc66688kojODjY2Llzp2PdgQMHjMjISKNPnz4lxldc8XPD/rsDxldffXXacebk5BixsbFGly5djOzsbMf6N954wwCMvn37Ota9++67RkBAgPH99987HeO1114zAOPHH380DMMwdu3aVeLxLfq4FD1vDMMwJk6caAQEBBirVq0yPvzwQwMwpkyZctqxP/bYYwZgfPLJJyW22Ww2wzAq/r9rH3PDhg2NlJQUp7EBRufOnY3c3FzH+htuuMEIDg42srKyHOvsj/vHH3/sWJeammrEx8cbZ511lmOd/Xf89ttvncZ88uRJIyYmxrjtttuc1icnJxvR0dGO9SdOnDAA4z//+c9pHyMREZGilCklIiLiQdOnT2fZsmVOP0Wzgy644AIaNGjA/PnzHetOnDjBsmXLnDI/lixZQlxcHDfccINjXVBQEPfeey+nTp1i5cqVnvmFCnzzzTfk5OQwbtw4AgIK317cdtttREVFsXjxYqf9IyIiuOmmmxzXg4OD6dGjB3/99Ve597NkyRIAR2aH3bhx45yuG4bBxx9/zJAhQzAMwykzbeDAgaSmprJx40YAYmJi2LdvH+vXr6/07/3ll19y7Ngxp7/DDTfcwObNm0uUN1XH8OHD2bFjB+vXr3csK1O6Z9erVy+6devmuN6sWTOuuOIKli5dSn5+Pvn5+Xz99ddceeWVtGzZ0rFffHw8w4cP54cffiAtLa1Kv0NiYiIDBw487X4//fQThw8f5s477yQ4ONixftSoUURHRzvt++GHH9KuXTvatm3r9De+4IILAPj222+rNNbHH3+cDh06MHLkSO6++2769u1b4pwrzccff0znzp256qqrSmyzlzpW9n/32muvdfq9e/bsCcBNN91EYGCg0/qcnBz279/vdPvGjRs7jScqKooRI0bw888/k5ycXO7vs2zZMlJ
2025-12-04 09:48:07 +01:00
"text/plain": [
2025-12-04 16:11:38 +01:00
"<Figure size 1200x600 with 1 Axes>"
2025-12-04 09:48:07 +01:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
2025-12-04 16:11:38 +01:00
"evolution_2_comptes('365377','365409')"
2025-12-04 09:48:07 +01:00
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 26,
"id": "1443ecd5-4e87-4306-945a-64a9ed4f7c3e",
2025-12-04 09:48:07 +01:00
"metadata": {},
"outputs": [
{
"data": {
2025-12-04 16:11:38 +01:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAt59JREFUeJzs3Xd4VGXexvF7UiYFMiG0FIEQuiJNQIwFUDChiKKs0lRUbCs2dJUXV5qioC4KiIgoxVVUYFV0AZWIFFcj0gIiiIihJ0EEEkJ68rx/hBkYk8AEMpkMfD/XlUvmnGfO+Z3JM7zL/T7FYowxAgAAAAAAACqRj6cLAAAAAAAAwIWHUAoAAAAAAACVjlAKAAAAAAAAlY5QCgAAAAAAAJWOUAoAAAAAAACVjlAKAAAAAAAAlY5QCgAAAAAAAJWOUAoAAAAAAACVjlAKAIBKsHHjRo0fP17Hjh3zdCkAAABAlUAoBQCAm6WlpenGG29URESEQkJCPF0OAAAAUCVYjDHG00UAAHA+W7p0qdLT0zVw4EBPlwIAAABUGYyUAgDAzXr16lWpgZTFYtHYsWMr9Jpz586VxWLRrl27KvS658Idz4mqpWvXrurataunywAAAG5CKAUAgBvYQ5yyfn744QdPl1iqF198UYsWLfJ0GVXetm3bZLFYFBgYqKNHj5bapmHDhrrhhhtKPbdu3TpZLBbNnTvXcWzs2LGyWCzy8fHR3r17S7wnIyNDQUFBslgsevjhhyviMXCB2rp1q8aOHVulQmYAwIWJUAoAADd67rnn9N5775X4adKkiadLK1VZodQdd9yh7OxsRUdHV35RVdD777+viIgISdJ//vOfCr12QECAPvzwwxLHP/nkkwq9Dy5cW7du1bhx4wilAAAe5+fpAgAAOJ/17NlTHTp08HQZ58zX11e+vr6eLqNKMMbogw8+0KBBg5ScnKx58+bp3nvvrbDr9+rVSx9++KGefvppp+MffPCBevfurY8//rjC7lVZjDHKyclRUFCQp0sBAABVCCOlAADwkPz8fNWsWVN33313iXMZGRkKDAzUP/7xD8exgwcPaujQoQoPD1dgYKDatGmjd99994z3ueuuu9SwYcMSx+3TxewsFouOHz+ud9991zHN8K677pJU9ppS06dPV8uWLRUQEKCoqCgNGzasxHS2rl276tJLL9XWrVt17bXXKjg4WBdddJFefvnlM9YuSbm5uRo+fLjq1KmjkJAQ3Xjjjdq3b1+pbffv36977rlH4eHhCggIUMuWLTV79uwS7V5//XW1bNlSwcHBCgsLU4cOHfTBBx+4VM93332nXbt2acCAARowYIBWr15dZj1nY9CgQUpKStIvv/ziOJaamqpvvvlGgwYNcvk69ml+8+bNU/PmzRUYGKj27dtr9erVJdpu3LhRPXv2lM1mU/Xq1dWtW7cSU0z/2l/sSusb9qmLX331lTp06KCgoCC99dZbp6135syZaty4sYKCgnT55Zfr22+/LbVdbm6uxowZoyZNmiggIED169fX008/rdzcXEebXbt2lZgeeernYl+LLDs7Wy1atFCLFi2UnZ3taHP48GFFRkbqyiuvVGFh4WnrPnr0qIYPH66GDRsqICBA9erV05133qlDhw452rjy3bXX/K9//UtvvPGGGjVqpODgYMXFxWnv3r0yxuj5559XvXr1FBQUpJtuukmHDx92uob9c1+2bJnatm2rwMBAXXLJJU6j7ObOnatbb71VknTttdc6vusrV650tPniiy90zTXXqFq1agoJCVHv3r31888/O90rNTVVd999t+rVq6eAgABFRkbqpptuYvQVAKBcCKUAAHCj9PR0HTp0yOnnzz//lCT5+/vr5ptv1qJFi5SXl+f0vkWLFik3N1cDBgyQVPyP565du+q9997T4MGD9corryg0NFR33XWXpkyZUiG1vvfeewoICNA111zjmGb4wAMPlNl+7NixGjZsmKKiojRp0iT169dPb731luLi4pSfn+/U9siRI+rRo4fatGmjSZMmqUWLFhoxYoS++OKLM9Z17733avLkyYqLi9PEiRPl7++v3r17l2iXlpamK664Ql9//bUefvhhTZkyRU2aNNHQoUM1efJkR7u3335bjz76qC655BJNnjxZ48aNU9u2bbVmzRqXPqd58+apcePG6tixo/r06aPg4OBSp9udrc6dO6tevXpOIdn8+fNVvXr1Up/7dFatWqXHH39ct99+u5577jn9+eef6tGjh7Zs2eJo8/PPP+uaa67Rpk2b9PTTT2vUqFFKTk5W165dXf5MSrN9+3YNHDhQ119/vaZMmaK2bduW2XbWrFl64IEHFBERoZdffllXXXWVbrzxxhJraxUVFenGG2/Uv/71L/Xp00evv/66+vbtq9dee039+/cvd41BQUF699139dtvv+mf//yn4/iwYcOUnp6uuXPnnnaEYGZmpq655hq9/vrriouL05QpU/Tggw/ql19+cQSV5f3uzps3T9OnT9cjjzyiJ598UqtWrdJtt92mZ599Vl9++aVGjBih+++/X//973+dQmu7HTt2qH///urZs6cmTJggPz8/3XrrrUpISJBU3L8effRRSdIzzzzj+K5ffPHFkor/Hujdu7eqV6+ul156SaNGjdLWrVt19dVXOwVO/fr106effqq7775b06dP16OPPqpjx45pz5495f49AAAuYAYAAFS4OXPmGEml/gQEBDjaffXVV0aS+e9//+v0/l69eplGjRo5Xk+ePNlIMu+//77jWF5enomNjTXVq1c3GRkZjuOSzJgxYxyvhwwZYqKjo0vUOGbMGPPX/ylQrVo1M2TIkDKfJzk52RhjzMGDB43VajVxcXGmsLDQ0W7atGlGkpk9e7bjWJcuXYwk8+9//9txLDc310RERJh+/fqVuNepkpKSjCTz0EMPOR0fNGhQieccOnSoiYyMNIcOHXJqO2DAABMaGmqysrKMMcbcdNNNpmXLlqe9b1ny8vJMrVq1zD//+U+nWtq0aVOibXR0tOndu3ep11m7dq2RZObMmeM4Zv99/PHHH+Yf//iHadKkieNcx44dzd13322MKf79Dhs27Iy12vvbunXrHMd2795tAgMDzc033+w41rdvX2O1Ws3OnTsdxw4cOGBCQkJM586dS9T3V3/tG/Znl2S+/PLLM9aZl5dn6tata9q2bWtyc3Mdx2fOnGkkmS5dujiOvffee8bHx8d8++23TteYMWOGkWS+++47Y4wxycnJJT7fUz+XU/uNMcaMHDnS+Pj4mNWrV5uFCxcaSWby5MlnrH306NFGkvnkk09KnCsqKjLGuP7dtddcp04dc/ToUafaJJk2bdqY/Px8x/GBAwcaq9VqcnJyHMfsn/vHH3/sOJaenm4iIyNNu3btHMfsz7hixQqnmo8dO2Zq1Khh7rvvPqfjqampJjQ01HH8yJEjRpJ55ZVXzvgZAQBwOoyUAgDAjd544w0lJCQ4/Zw6Oui6665T7dq1NX/+fMexI0eOKCEhwWnkx9KlSxUREaGBAwc6jvn7++vRRx9VZmamVq1aVTkPdMLXX3+tvLw8Pf744/LxOfk/J+677z7ZbDYtWbLEqX316tV1++23O15brVZdfvnl+v333097n6VLl0qSY2SH3eOPP+702hijjz/+WH369JExxmlkWnx8vNLT07VhwwZJUo0aNbRv3z6tXbu23M/9xRdf6M8//3T6PQwcOFCbNm0qMb3pXAwaNEi//fab1q5d6/hveabu2cXGxqp9+/aO1w0aNNBNN92kr776SoWFhSosLNSyZcvUt29fNWrUyNEuMjJSgwYN0v/+9z9lZGSc1TPExMQoPj7+jO3WrVungwcP6sEHH5TVanUcv+uuuxQaGurUduHChbr44ovVokULp9/xddddJ0lasWLFWdU6duxYtWzZUkOGDNFDDz2kLl26lOhzpfn444/Vpk0b3XzzzSXO2ac6lve7e+uttzo9d6dOnSRJt99+u/z8/JyO5+Xlaf/+/U7vj4qKcqrHZrPpzjvv1MaNG5Wamnra50lISNDRo0c1cOBAp8/X19dXnTp
2025-12-04 09:48:07 +01:00
"text/plain": [
2025-12-04 16:11:38 +01:00
"<Figure size 1200x600 with 1 Axes>"
2025-12-04 09:48:07 +01:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
2025-12-04 16:11:38 +01:00
"evolution_2_comptes('200000240','200090163')"
2025-12-04 09:48:07 +01:00
]
},
{
"cell_type": "code",
2025-12-04 16:11:38 +01:00
"execution_count": 16,
"id": "6d95d61e-98ce-4c8c-9ac1-4461676fced3",
"metadata": {},
"outputs": [],
"source": [
"def caracteristiques_compte(df, account_id):\n",
" \"\"\"\n",
" Renvoie un résumé clair des caractéristiques d'un compte donné.\n",
" df : dataframe complet\n",
" account_id : Registrar Account - ID\n",
" \"\"\"\n",
"\n",
" # Colonnes à extraire\n",
" colonnes = [\n",
" 'Agreement - Code',\n",
" 'Company - Id',\n",
" 'Company - Ultimate Parent Id',\n",
" 'Registrar Account - Region',\n",
" 'RegistrarAccount - Country',\n",
" 'Product - Asset Type',\n",
" 'Product - Strategy',\n",
" 'Product - Legal Status',\n",
" 'Product - Is Dedie ?',\n",
" 'Product - Fund',\n",
" 'Product - Shareclass Type',\n",
" 'Product - Shareclass Currency'\n",
" ]\n",
"\n",
" # Filtrage du compte\n",
" df_compte = df[df['Registrar Account - ID'] == account_id]\n",
"\n",
" if df_compte.empty:\n",
" print(f\"Aucun enregistrement trouvé pour le compte {account_id}.\")\n",
" return None\n",
"\n",
" # Résumé : valeurs uniques par colonne\n",
" resume = {\n",
" col: sorted(df_compte[col].dropna().unique().tolist())\n",
" for col in colonnes\n",
" }\n",
"\n",
" # Affichage propre\n",
" print(f\" Caractéristiques du compte {account_id}\")\n",
" print(\"-\" * 50)\n",
" for col, val in resume.items():\n",
" # On affiche une seule valeur si elle est unique\n",
" if len(val) == 1:\n",
" print(f\"{col} : {val[0]}\")\n",
" else:\n",
" print(f\"{col} : {val}\")\n",
" print(\"-\" * 50)\n",
"\n",
" #return resume\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "f3d2fd2e-d1c3-4590-8f10-b58942d3330f",
2025-12-04 09:48:07 +01:00
"metadata": {},
"outputs": [
{
2025-12-04 16:11:38 +01:00
"name": "stdout",
"output_type": "stream",
"text": [
" Caractéristiques du compte 365377\n",
"--------------------------------------------------\n",
"Agreement - Code : L262\n",
"Company - Id : 4438\n",
"Company - Ultimate Parent Id : 27222\n",
"Registrar Account - Region : Italy\n",
"RegistrarAccount - Country : Italy\n",
"Product - Asset Type : ['Diversified', 'Equity', 'Fixed Income']\n",
"Product - Strategy : ['Climate Transition', 'Court Terme', 'Credit', 'Emerging Patrimoine', 'Grande Europe', 'Investissement', 'Patrimoine', 'Patrimoine Europe', 'Sécurité']\n",
"Product - Legal Status : ['FCP', 'SICAV']\n",
"Product - Is Dedie ? : NO\n",
"Product - Fund : ['Carmignac Court Terme', 'Carmignac Investissement', 'Carmignac Patrimoine', 'Carmignac Portfolio Climate Transition', 'Carmignac Portfolio Credit', 'Carmignac Portfolio Emerging Patrimoine', 'Carmignac Portfolio Grande Europe', 'Carmignac Portfolio Patrimoine Europe', 'Carmignac Portfolio Sécurité', 'Carmignac Sécurité']\n",
"Product - Shareclass Type : ['A', 'AW & AW-R', 'F', 'FW & FW-R']\n",
"Product - Shareclass Currency : EUR\n",
"--------------------------------------------------\n",
" Caractéristiques du compte 365409\n",
"--------------------------------------------------\n",
"Agreement - Code : L262\n",
"Company - Id : 4438\n",
"Company - Ultimate Parent Id : 27222\n",
"Registrar Account - Region : Italy\n",
"RegistrarAccount - Country : Italy\n",
"Product - Asset Type : ['Alternative', 'Diversified', 'Equity', 'Fixed Income']\n",
"Product - Strategy : ['Climate Transition', 'Court Terme', 'Credit', 'Grande Europe', 'Innovation', 'Investissement', 'Large Cap Emerging Markets Strategy', 'Long-Short European Equities', 'Patrimoine', 'Sécurité']\n",
"Product - Legal Status : ['FCP', 'SICAV']\n",
"Product - Is Dedie ? : NO\n",
"Product - Fund : ['Carmignac Court Terme', 'Carmignac Emergents', 'Carmignac Innovation', 'Carmignac Investissement', 'Carmignac Patrimoine', 'Carmignac Portfolio Climate Transition', 'Carmignac Portfolio Credit', 'Carmignac Portfolio Grande Europe', 'Carmignac Portfolio Long-Short European Equities', 'Carmignac Portfolio Patrimoine', 'Carmignac Portfolio Sécurité', 'Carmignac Sécurité']\n",
"Product - Shareclass Type : ['A', 'AW & AW-R', 'E', 'F', 'FW & FW-R']\n",
"Product - Shareclass Currency : EUR\n",
"--------------------------------------------------\n"
]
2025-12-04 09:48:07 +01:00
}
],
"source": [
2025-12-04 16:11:38 +01:00
"caracteristiques_compte(df, '365377')\n",
"caracteristiques_compte(df, '365409')"
2025-12-04 09:48:07 +01:00
]
},
{
"cell_type": "code",
"execution_count": 195,
"id": "428fa3a9-2ed6-476a-a552-e5bdaf4f1f56",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Product - Asset Type\n",
"Equity 2023860\n",
"Diversified 1377424\n",
"Fixed Income 948728\n",
"Alternative 214235\n",
"Private Assets 219\n",
"Name: count, dtype: int64\n"
]
}
],
"source": [
"import pandas as pd\n",
"\n",
"# Comptage du nombre de comptes distincts par type dasset\n",
"result = df.groupby(\"Product - Asset Type\")[\"Registrar Account - ID\"].nunique().reset_index()\n",
"\n",
"# Renommage de colonne pour plus de clarté\n",
"result = result.rename(columns={\"Registrar Account - ID\": \"Nombre de comptes\"})\n",
"\n",
"result = df[\"Product - Asset Type\"].value_counts()\n",
"print(result)\n"
]
},
{
"cell_type": "code",
"execution_count": 196,
"id": "adc9e4c3-54e8-435f-af50-bce48ae7a401",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"RegistrarAccount - Country\n",
"France 2200046\n",
"Italy 699749\n",
"Switzerland 430383\n",
"Spain 325147\n",
"Luxembourg 320383\n",
"Germany 248409\n",
"Belgium 196894\n",
"United Kingdom 181071\n",
"Us Offshore 63949\n",
"Netherlands 55772\n",
"Latam 39207\n",
"Monaco 24416\n",
"Austria 19310\n",
"Singapore 16475\n",
"Sweden 14425\n",
"Portugal 7519\n",
"Israel 6459\n",
"Hong Kong 5336\n",
"Liechtenstein 5244\n",
"Unknown 4551\n",
"Denmark 2554\n",
"Mauritius 2052\n",
"Malta 1748\n",
"Ireland 1682\n",
"United Arab Emirates 1515\n",
"Greece 1253\n",
"International 1223\n",
"Taiwan 995\n",
"Canada 713\n",
"Finland 394\n",
"Czech Republic 294\n",
"Japan 260\n",
"Poland 209\n",
"South Korea 160\n",
"Bahamas 160\n",
"Lithuania 122\n",
"South Africa 94\n",
"United States 80\n",
"Norway 44\n",
"Name: count, dtype: int64\n"
]
}
],
"source": [
"import pandas as pd\n",
"\n",
"# Comptage du nombre de comptes distincts par type dasset\n",
"result = df.groupby(\"RegistrarAccount - Country\")[\"Registrar Account - ID\"].nunique().reset_index()\n",
"\n",
"# Renommage de colonne pour plus de clarté\n",
"result = result.rename(columns={\"Registrar Account - ID\": \"Nombre de comptes\"})\n",
"\n",
"result = df[\"RegistrarAccount - Country\"].value_counts()\n",
"print(result)"
]
},
{
"cell_type": "code",
"execution_count": 200,
"id": "7a30da9a-e1a6-4451-b742-32a81d353bb2",
"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>Agreement - Code</th>\n",
" <th>Company - Id</th>\n",
" <th>Company - Ultimate Parent Id</th>\n",
" <th>Registrar Account - ID</th>\n",
" <th>Registrar Account - Region</th>\n",
" <th>RegistrarAccount - Country</th>\n",
" <th>Product - Asset Type</th>\n",
" <th>Product - Strategy</th>\n",
" <th>Product - Legal Status</th>\n",
" <th>Product - Is Dedie ?</th>\n",
" <th>Product - Fund</th>\n",
" <th>Product - Shareclass Type</th>\n",
" <th>Product - Shareclass Currency</th>\n",
" <th>Product - Isin</th>\n",
" <th>Centralisation Date</th>\n",
" <th>Quantity - AUM</th>\n",
" <th>Value - AUM CCY</th>\n",
" <th>Value - AUM €</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2019-08-31</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2019-07-31</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2020-02-29</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2020-05-31</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>003</td>\n",
" <td>166</td>\n",
" <td>166</td>\n",
" <td>200000647</td>\n",
" <td>France</td>\n",
" <td>France</td>\n",
" <td>Diversified</td>\n",
" <td>Patrimoine</td>\n",
" <td>FCP</td>\n",
" <td>NO</td>\n",
" <td>Carmignac Patrimoine</td>\n",
" <td>A</td>\n",
" <td>EUR</td>\n",
" <td>FR0010135103</td>\n",
" <td>2021-04-30</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Agreement - Code Company - Id Company - Ultimate Parent Id \\\n",
"10 003 166 166 \n",
"14 003 166 166 \n",
"15 003 166 166 \n",
"16 003 166 166 \n",
"17 003 166 166 \n",
"\n",
" Registrar Account - ID Registrar Account - Region \\\n",
"10 200000647 France \n",
"14 200000647 France \n",
"15 200000647 France \n",
"16 200000647 France \n",
"17 200000647 France \n",
"\n",
" RegistrarAccount - Country Product - Asset Type Product - Strategy \\\n",
"10 France Diversified Patrimoine \n",
"14 France Diversified Patrimoine \n",
"15 France Diversified Patrimoine \n",
"16 France Diversified Patrimoine \n",
"17 France Diversified Patrimoine \n",
"\n",
" Product - Legal Status Product - Is Dedie ? Product - Fund \\\n",
"10 FCP NO Carmignac Patrimoine \n",
"14 FCP NO Carmignac Patrimoine \n",
"15 FCP NO Carmignac Patrimoine \n",
"16 FCP NO Carmignac Patrimoine \n",
"17 FCP NO Carmignac Patrimoine \n",
"\n",
" Product - Shareclass Type Product - Shareclass Currency Product - Isin \\\n",
"10 A EUR FR0010135103 \n",
"14 A EUR FR0010135103 \n",
"15 A EUR FR0010135103 \n",
"16 A EUR FR0010135103 \n",
"17 A EUR FR0010135103 \n",
"\n",
" Centralisation Date Quantity - AUM Value - AUM CCY Value - AUM € \n",
"10 2019-08-31 0.0 0.0 0.0 \n",
"14 2019-07-31 0.0 0.0 0.0 \n",
"15 2020-02-29 0.0 0.0 0.0 \n",
"16 2020-05-31 0.0 0.0 0.0 \n",
"17 2021-04-30 0.0 0.0 0.0 "
]
},
"execution_count": 200,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dg = df[df['Quantity - AUM'] == 0].copy()\n",
"dg.head()"
]
},
{
"cell_type": "code",
"execution_count": 201,
"id": "77319126-2d43-4987-838a-b43c41c8cf86",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3099024"
]
},
"execution_count": 201,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(dg)"
]
},
{
"cell_type": "code",
"execution_count": 202,
"id": "629fcf04-9f92-46e0-be77-cf09a427a8f5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4880297"
]
},
"execution_count": 202,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df)"
]
},
{
"cell_type": "code",
"execution_count": 207,
"id": "bd189ebf-7266-45ce-931c-89b3b9ccbd02",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['100000014', '100000016', '100000038', '100000044', '100000047',\n",
" '100000057', '100000062', '100000074', '100000077', '100000087',\n",
" ...\n",
" '7905', '7912', '7962', '80084', '81036', '8354', '8416', '85419',\n",
" '88511', '88928'],\n",
" dtype='object', name='Registrar Account - ID', length=4841)\n"
]
}
],
"source": [
"aum_max = df.groupby('Registrar Account - ID')['Quantity - AUM'].max()\n",
"accounts_always_zero = aum_max[aum_max == 0].index\n",
"aum_max.head()\n",
"print(accounts_always_zero)"
]
},
{
"cell_type": "code",
"execution_count": 205,
"id": "9c186627-396d-496e-977b-0f990fd089ad",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12501"
]
},
"execution_count": 205,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(aum_max)"
2025-11-25 15:30:27 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
2025-12-04 09:48:07 +01:00
"id": "a586c717-4718-4a8b-a9cd-38a32f851f50",
2025-11-25 15:30:27 +01:00
"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.13.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}