248 lines
58 KiB
Plaintext
248 lines
58 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "0c48e17e-3dd5-43ef-be44-a11a3cbeacfe",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdin",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Choisissez le type de compagnie : sport ? musique ? musee ? sport\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"File path : projet-bdc2324-team1/0_Input/Company_5/customerplus_cleaned.csv\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "PermissionError",
|
|
"evalue": "Forbidden",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mClientError\u001b[0m Traceback (most recent call last)",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:529\u001b[0m, in \u001b[0;36mS3FileSystem.info\u001b[0;34m(self, path, version_id, refresh)\u001b[0m\n\u001b[1;32m 528\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 529\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_s3\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43ms3\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhead_object\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mBucket\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbucket\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 530\u001b[0m \u001b[43m \u001b[49m\u001b[43mKey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mversion_id_kw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mversion_id\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreq_kw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 531\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m {\n\u001b[1;32m 532\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mETag\u001b[39m\u001b[38;5;124m'\u001b[39m: out[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mETag\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 533\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mKey\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin([bucket, key]),\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 540\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVersionId\u001b[39m\u001b[38;5;124m'\u001b[39m: out\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVersionId\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 541\u001b[0m }\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:200\u001b[0m, in \u001b[0;36mS3FileSystem._call_s3\u001b[0;34m(self, method, *akwarglist, **kwargs)\u001b[0m\n\u001b[1;32m 198\u001b[0m additional_kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_s3_method_kwargs(method, \u001b[38;5;241m*\u001b[39makwarglist,\n\u001b[1;32m 199\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m--> 200\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43madditional_kwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/botocore/client.py:553\u001b[0m, in \u001b[0;36mClientCreator._create_api_method.<locals>._api_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 552\u001b[0m \u001b[38;5;66;03m# The \"self\" in this scope is referring to the BaseClient.\u001b[39;00m\n\u001b[0;32m--> 553\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_api_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43moperation_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/botocore/client.py:1009\u001b[0m, in \u001b[0;36mBaseClient._make_api_call\u001b[0;34m(self, operation_name, api_params)\u001b[0m\n\u001b[1;32m 1008\u001b[0m error_class \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mfrom_code(error_code)\n\u001b[0;32m-> 1009\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m error_class(parsed_response, operation_name)\n\u001b[1;32m 1010\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
|
|
"\u001b[0;31mClientError\u001b[0m: An error occurred (403) when calling the HeadObject operation: Forbidden",
|
|
"\nDuring handling of the above exception, another exception occurred:\n",
|
|
"\u001b[0;31mPermissionError\u001b[0m Traceback (most recent call last)",
|
|
"Cell \u001b[0;32mIn[2], line 28\u001b[0m\n\u001b[1;32m 25\u001b[0m list_of_comp \u001b[38;5;241m=\u001b[39m companies[type_of_activity] \n\u001b[1;32m 27\u001b[0m \u001b[38;5;66;03m# Load files\u001b[39;00m\n\u001b[0;32m---> 28\u001b[0m customer, campaigns_kpi, campaigns_brut, tickets, products \u001b[38;5;241m=\u001b[39m \u001b[43mload_files\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlist_of_comp\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 30\u001b[0m \u001b[38;5;66;03m# Identify anonymous customer for each company and remove them from our datasets\u001b[39;00m\n\u001b[1;32m 31\u001b[0m outlier_list \u001b[38;5;241m=\u001b[39m outlier_detection(tickets, list_of_comp)\n",
|
|
"File \u001b[0;32m<string>:22\u001b[0m, in \u001b[0;36mload_files\u001b[0;34m(nb_compagnie)\u001b[0m\n",
|
|
"File \u001b[0;32m<string>:12\u001b[0m, in \u001b[0;36mdisplay_input_databases\u001b[0;34m(directory_path, file_name, datetime_col)\u001b[0m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/fsspec/spec.py:1295\u001b[0m, in \u001b[0;36mAbstractFileSystem.open\u001b[0;34m(self, path, mode, block_size, cache_options, compression, **kwargs)\u001b[0m\n\u001b[1;32m 1293\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1294\u001b[0m ac \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mautocommit\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_intrans)\n\u001b[0;32m-> 1295\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_open\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1296\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1297\u001b[0m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1298\u001b[0m \u001b[43m \u001b[49m\u001b[43mblock_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mblock_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1299\u001b[0m \u001b[43m \u001b[49m\u001b[43mautocommit\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mac\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1300\u001b[0m \u001b[43m \u001b[49m\u001b[43mcache_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1301\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1302\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1303\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compression \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1304\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mfsspec\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompression\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m compr\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:375\u001b[0m, in \u001b[0;36mS3FileSystem._open\u001b[0;34m(self, path, mode, block_size, acl, version_id, fill_cache, cache_type, autocommit, requester_pays, **kwargs)\u001b[0m\n\u001b[1;32m 372\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cache_type \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 373\u001b[0m cache_type \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdefault_cache_type\n\u001b[0;32m--> 375\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mS3File\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mblock_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mblock_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43macl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43macl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 376\u001b[0m \u001b[43m \u001b[49m\u001b[43mversion_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mversion_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfill_cache\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfill_cache\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 377\u001b[0m \u001b[43m \u001b[49m\u001b[43ms3_additional_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcache_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_type\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 378\u001b[0m \u001b[43m \u001b[49m\u001b[43mautocommit\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mautocommit\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequester_pays\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequester_pays\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:1096\u001b[0m, in \u001b[0;36mS3File.__init__\u001b[0;34m(self, s3, path, mode, block_size, acl, version_id, fill_cache, s3_additional_kwargs, autocommit, cache_type, requester_pays)\u001b[0m\n\u001b[1;32m 1094\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39ms3_additional_kwargs \u001b[38;5;241m=\u001b[39m s3_additional_kwargs \u001b[38;5;129;01mor\u001b[39;00m {}\n\u001b[1;32m 1095\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreq_kw \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mRequestPayer\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrequester\u001b[39m\u001b[38;5;124m'\u001b[39m} \u001b[38;5;28;01mif\u001b[39;00m requester_pays \u001b[38;5;28;01melse\u001b[39;00m {}\n\u001b[0;32m-> 1096\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43ms3\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mblock_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mautocommit\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mautocommit\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1097\u001b[0m \u001b[43m \u001b[49m\u001b[43mcache_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_type\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1098\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39ms3 \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfs \u001b[38;5;66;03m# compatibility\u001b[39;00m\n\u001b[1;32m 1099\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwritable():\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/fsspec/spec.py:1651\u001b[0m, in \u001b[0;36mAbstractBufferedFile.__init__\u001b[0;34m(self, fs, path, mode, block_size, autocommit, cache_type, cache_options, size, **kwargs)\u001b[0m\n\u001b[1;32m 1649\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msize \u001b[38;5;241m=\u001b[39m size\n\u001b[1;32m 1650\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1651\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msize \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdetails\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msize\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 1652\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcache \u001b[38;5;241m=\u001b[39m caches[cache_type](\n\u001b[1;32m 1653\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mblocksize, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fetch_range, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msize, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mcache_options\n\u001b[1;32m 1654\u001b[0m )\n\u001b[1;32m 1655\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/fsspec/spec.py:1664\u001b[0m, in \u001b[0;36mAbstractBufferedFile.details\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1661\u001b[0m \u001b[38;5;129m@property\u001b[39m\n\u001b[1;32m 1662\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdetails\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1663\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_details \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1664\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_details \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minfo\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1665\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_details\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:548\u001b[0m, in \u001b[0;36mS3FileSystem.info\u001b[0;34m(self, path, version_id, refresh)\u001b[0m\n\u001b[1;32m 546\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28msuper\u001b[39m(S3FileSystem, \u001b[38;5;28mself\u001b[39m)\u001b[38;5;241m.\u001b[39minfo(path)\n\u001b[1;32m 547\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 548\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ee\n\u001b[1;32m 549\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ParamValidationError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 550\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFailed to head path \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (path, e))\n",
|
|
"\u001b[0;31mPermissionError\u001b[0m: Forbidden"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"import numpy as np\n",
|
|
"import os\n",
|
|
"import io\n",
|
|
"import s3fs\n",
|
|
"import re\n",
|
|
"import warnings\n",
|
|
"\n",
|
|
"# Ignore warning\n",
|
|
"warnings.filterwarnings('ignore')\n",
|
|
"\n",
|
|
"exec(open('0_KPI_functions.py').read())\n",
|
|
"exec(open('utils_stat_desc.py').read())\n",
|
|
"\n",
|
|
"# Create filesystem object\n",
|
|
"S3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n",
|
|
"fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL})\n",
|
|
"\n",
|
|
"companies = {'musee' : ['1', '2', '3', '4'], # , '101'\n",
|
|
" 'sport': ['5', '6', '7', '8', '9'],\n",
|
|
" 'musique' : ['10', '11', '12', '13', '14']}\n",
|
|
"\n",
|
|
"\n",
|
|
"type_of_activity = input('Choisissez le type de compagnie : sport ? musique ? musee ?')\n",
|
|
"list_of_comp = companies[type_of_activity] \n",
|
|
"\n",
|
|
"# Load files\n",
|
|
"customer, campaigns_kpi, campaigns_brut, tickets, products = load_files(list_of_comp)\n",
|
|
"\n",
|
|
"# Identify anonymous customer for each company and remove them from our datasets\n",
|
|
"outlier_list = outlier_detection(tickets, list_of_comp)\n",
|
|
"\n",
|
|
"# Identify valid customer (customer who bought tickets after starting date or received mails after starting date)\n",
|
|
"customer_valid_list = valid_customer_detection(products, campaigns_brut)\n",
|
|
"\n",
|
|
"databases = [customer, campaigns_kpi, campaigns_brut, tickets, products]\n",
|
|
"\n",
|
|
"for dataset in databases:\n",
|
|
" dataset['customer_id'] = dataset['customer_id'].apply(lambda x: remove_elements(x, outlier_list))# remove outlier\n",
|
|
" dataset = dataset[dataset['customer_id'].isin(customer_valid_list)] # keep only valid customer\n",
|
|
" #print(f'shape of {dataset} : ', dataset.shape)\n",
|
|
"\n",
|
|
"# Identify customer who bought during the period of y\n",
|
|
"customer_target_period = identify_purchase_during_target_periode(products)\n",
|
|
"customer['has_purchased_target_period'] = np.where(customer['customer_id'].isin(customer_target_period), 1, 0)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "e15380a0-76b8-4914-a927-303ab46a636e",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"customer.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "bf475e2b-fa82-40f0-bcbe-7ef40a13caae",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"tickets.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "171cf427-18bf-4c0b-9698-3cec5cd61073",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"tickets.groupby('number_company')['achat_internet'].sum()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "c430185e-7995-4287-8621-95c6410be9df",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"tickets.columns"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "b299c7a4-aa07-4349-bebd-b4f24bda1c8f",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"customer"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "f6630f7a-96f5-488d-9797-caacb6d6067a",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"print(len(tickets['customer_id']))\n",
|
|
"print(len(tickets['customer_id'].unique()))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "f4caa95a-7854-4a21-b291-28d779c4c4db",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"has_purchased = customer.groupby('number_company').agg({\n",
|
|
" 'has_purchased_target_period' : 'sum',\n",
|
|
" 'customer_id' : 'nunique'})\n",
|
|
"has_purchased"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 35,
|
|
"id": "24fda291-764a-4a6f-9cdf-86da49b978e2",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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goIC+Pj4QK1WIzY2VppXWFiIw4cPIyQkBADQrVs3WFtb67VJTU3FmTNnpDbBwcHQaDQ4fvy41ObYsWPQaDRSm4oolUrpdgClDyJqOMr2DpViLxGRPFmZcuVvvfUWBg4cCE9PT+Tk5CA6OhqHDh1CTEwMFAoFIiIisGTJErRp0wZt2rTBkiVLYG9vj+HDhwMAVCoVxowZgxkzZsDFxQXOzs6YOXMm/P390adPHwBA+/btMWDAAIwdOxZr164FAIwbNw5hYWHw9fU12bYTkemU9g4poIBA+Z4gBRRYeXolQjxCHnmKnogaBpMGovT0dISHhyM1NRUqlQqdOnVCTEwM+vbtCwCYPXs28vPzMXHiRGRlZSEwMBD79u2Do6OjtIyPP/4YVlZWGDp0KPLz89G7d29s2LABlpaWUputW7di6tSp0tVogwcPxqpVq+p2Y4nIbBTpipCWl1ZhGAIAAYG0vDQU6YpgY2lTx9URkSkoBE+UV4lWq4VKpYJGo+HpM6IGIC0vDXfv3610vrOtM9QO6jqsiIhqQ1WP3ybtISIiMhW1g5qBh4gkZjeomoiIiKiuMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7DEQERERkewxEBEREZHsMRARERGR7Jk0EEVFReHxxx+Ho6MjXF1d8eyzz+LixYt6bUaNGgWFQqH3CAoK0mtTUFCAKVOmoGnTpnBwcMDgwYNx8+ZNvTZZWVkIDw+HSqWCSqVCeHg4srOza3sTiYiIqB4waSA6fPgwJk2ahMTERMTGxqK4uBj9+vVDXl6eXrsBAwYgNTVVeuzevVtvfkREBLZv347o6GjExcUhNzcXYWFhKCkpkdoMHz4cSUlJiImJQUxMDJKSkhAeHl4n20lERETmTSGEEKYuotSdO3fg6uqKw4cP46mnngLwdw9RdnY2duzYUeFrNBoNmjVrhs2bN2PYsGEAgNu3b8PT0xO7d+9G//79cf78eXTo0AGJiYkIDAwEACQmJiI4OBgXLlyAr6/vI2vTarVQqVTQaDRwcnIyzgYTERFRrarq8dusxhBpNBoAgLOzs970Q4cOwdXVFW3btsXYsWORkZEhzTt58iSKiorQr18/aZqHhwf8/PwQHx8PAEhISIBKpZLCEAAEBQVBpVJJbYiIiEi+rExdQCkhBKZPn44nn3wSfn5+0vSBAwfixRdfhLe3N65du4YFCxagV69eOHnyJJRKJdLS0mBjY4MmTZroLc/NzQ1paWkAgLS0NLi6upZbp6urq9SmrIKCAhQUFEjPtVqtMTaTiIiIzJDZBKLJkyfj999/R1xcnN700tNgAODn54eAgAB4e3vjp59+wpAhQypdnhACCoVCev7g/ytr86CoqCgsXLiwuptBRERE9ZBZnDKbMmUKdu7ciYMHD6JFixYPbevu7g5vb29cvnwZAKBWq1FYWIisrCy9dhkZGXBzc5PapKenl1vWnTt3pDZlzZs3DxqNRnqkpKQYsmlERERUD5g0EAkhMHnyZGzbtg0///wzfHx8HvmazMxMpKSkwN3dHQDQrVs3WFtbIzY2VmqTmpqKM2fOICQkBAAQHBwMjUaD48ePS22OHTsGjUYjtSlLqVTCyclJ70FEREQNk0mvMps4cSK+/vpr/PDDD3pXeqlUKtjZ2SE3NxeRkZF4/vnn4e7ujuvXr+Ott95CcnIyzp8/D0dHRwDAhAkT8OOPP2LDhg1wdnbGzJkzkZmZiZMnT8LS0hLA32ORbt++jbVr1wIAxo0bB29vb+zatatKtfIqMyIiovqnqsdvkwaiysbvrF+/HqNGjUJ+fj6effZZnD59GtnZ2XB3d0fPnj3x3nvvwdPTU2p///59zJo1C19//TXy8/PRu3dvrF69Wq/N3bt3MXXqVOzcuRMAMHjwYKxatQqNGzeuUq0MRERERPVPvQhE9QkDERERUf1TL+9DRERERGQKDEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsMRERERCR7DEREREQkewxEREREJHsmDURRUVF4/PHH4ejoCFdXVzz77LO4ePGiXhshBCIjI+Hh4QE7Ozv06NEDZ8+e1WtTUFCAKVOmoGnTpnBwcMDgwYNx8+ZNvTZZWVkIDw+HSqWCSqVCeHg4srOza3sTiYiIqB4waSA6fPgwJk2ahMTERMTGxqK4uBj9+vVDXl6e1GbZsmVYvnw5Vq1ahRMnTkCtVqNv377IycmR2kRERGD79u2Ijo5GXFwccnNzERYWhpKSEqnN8OHDkZSUhJiYGMTExCApKQnh4eF1ur1ERERkpoQZycjIEADE4cOHhRBC6HQ6oVarxdKlS6U29+/fFyqVSqxZs0YIIUR2drawtrYW0dHRUptbt24JCwsLERMTI4QQ4ty5cwKASExMlNokJCQIAOLChQtVqk2j0QgAQqPR1Hg7iYiIqG5U9fhtVmOINBoNAMDZ2RkAcO3aNaSlpaFfv35SG6VSidDQUMTHxwMATp48iaKiIr02Hh4e8PPzk9okJCRApVIhMDBQahMUFASVSiW1ISIiIvmyMnUBpYQQmD59Op588kn4+fkBANLS0gAAbm5uem3d3Nxw48YNqY2NjQ2aNGlSrk3p69PS0uDq6lpuna6urlKbsgoKClBQUCA912q1Bm4ZERERmTuz6SGaPHkyfv/9d3zzzTfl5ikUCr3nQohy08oq26ai9g9bTlRUlDQAW6VSwdPTsyqbQURERPWQWQSiKVOmYOfOnTh48CBatGghTVer1QBQrhcnIyND6jVSq9UoLCxEVlbWQ9ukp6eXW++dO3fK9T6VmjdvHjQajfRISUkxfAOJiIjIrJk0EAkhMHnyZGzbtg0///wzfHx89Ob7+PhArVYjNjZWmlZYWIjDhw8jJCQEANCtWzdYW1vrtUlNTcWZM2ekNsHB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RL3BzYmJidL7evToUXh7e2P+/PnS/KoMEK/I66+/jo8//hi3bt1Cnz599Hq8iIiBiIiqyc7ODkFBQVi6dClatmyJv/76C2+//bbRlp+SkoLp06fjjTfewKlTp7By5UqpR6Rt27Z45ZVXMGLECHz00Ufo2rUr/vrrL/z888/w9/fH008/bdA6IyMjMX78eLi6umLgwIHIycnB0aNHMWXKFPTp0wedOnXCK6+8ghUrVqC4uBgTJ05EaGgoAgICary9//nPfxAQEIAnn3wSW7duxfHjx/Hll18CAB577DEkJycjOjoajz/+OH766Sds377doPW88sormDlzJj7//HNs2rSpxnUTNTS87J6Iqu2rr75CUVERAgIC8Oabb2LRokVGW/aIESOQn5+PJ554ApMmTcKUKVMwbtw4af769esxYsQIzJgxA76+vhg8eDCOHTtWox6PkSNHYsWKFVi9ejU6duyIsLAwXL58GcDfp5927NiBJk2a4KmnnkKfPn3QqlUrfPvttzXeVgBYuHAhoqOj0alTJ2zcuBFbt25Fhw4dAADPPPMMpk2bhsmTJ6NLly6Ij4/HggULDFqPk5MTnn/+eTRq1AjPPvusUWonakgU4sGBAEREVGcUCgW2b99eZwGlb9++aN++PT799NM6WR9RfcJTZkREDdzdu3exb98+/Pzzz1i1apWpyyEySwxERNTgPXgFWll79uwx2gBtc/WPf/wDWVlZeP/99+Hr62vqcojMEk+ZEVGD9+eff1Y6r3nz5o+89J6IGj4GIiIiIpI9XmVGREREssdARERERLLHQERERESyx0BEREREssdARERERLLHQERERESyx0BEREREssdARERERLL3/wE/bFzBgYBosAAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"ename": "ClientError",
|
|
"evalue": "An error occurred (InvalidAccessKeyId) when calling the PutObject operation: The Access Key Id you provided does not exist in our records.",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mClientError\u001b[0m Traceback (most recent call last)",
|
|
"Cell \u001b[0;32mIn[35], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m exec(\u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutils_stat_desc.py\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;241m.\u001b[39mread())\n\u001b[0;32m----> 2\u001b[0m \u001b[43mbox_plot_price_tickets\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtickets\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtype_of_activity\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m<string>:357\u001b[0m, in \u001b[0;36mbox_plot_price_tickets\u001b[0;34m(tickets, type_of_activity)\u001b[0m\n",
|
|
"File \u001b[0;32m<string>:62\u001b[0m, in \u001b[0;36msave_file_s3\u001b[0;34m(File_name, type_of_activity)\u001b[0m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/fsspec/spec.py:1963\u001b[0m, in \u001b[0;36mAbstractBufferedFile.__exit__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1962\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__exit__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs):\n\u001b[0;32m-> 1963\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclose\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/fsspec/spec.py:1930\u001b[0m, in \u001b[0;36mAbstractBufferedFile.close\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1928\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1929\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mforced:\n\u001b[0;32m-> 1930\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mflush\u001b[49m\u001b[43m(\u001b[49m\u001b[43mforce\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 1932\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfs \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1933\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfs\u001b[38;5;241m.\u001b[39minvalidate_cache(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpath)\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/fsspec/spec.py:1801\u001b[0m, in \u001b[0;36mAbstractBufferedFile.flush\u001b[0;34m(self, force)\u001b[0m\n\u001b[1;32m 1798\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclosed \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 1799\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n\u001b[0;32m-> 1801\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_upload_chunk\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfinal\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mforce\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m:\n\u001b[1;32m 1802\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moffset \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuffer\u001b[38;5;241m.\u001b[39mseek(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 1803\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuffer \u001b[38;5;241m=\u001b[39m io\u001b[38;5;241m.\u001b[39mBytesIO()\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:1252\u001b[0m, in \u001b[0;36mS3File._upload_chunk\u001b[0;34m(self, final)\u001b[0m\n\u001b[1;32m 1249\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparts\u001b[38;5;241m.\u001b[39mappend({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPartNumber\u001b[39m\u001b[38;5;124m'\u001b[39m: part, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mETag\u001b[39m\u001b[38;5;124m'\u001b[39m: out[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mETag\u001b[39m\u001b[38;5;124m'\u001b[39m]})\n\u001b[1;32m 1251\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mautocommit \u001b[38;5;129;01mand\u001b[39;00m final:\n\u001b[0;32m-> 1252\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcommit\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1253\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m final\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:1267\u001b[0m, in \u001b[0;36mS3File.commit\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1265\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuffer\u001b[38;5;241m.\u001b[39mseek(\u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 1266\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuffer\u001b[38;5;241m.\u001b[39mread()\n\u001b[0;32m-> 1267\u001b[0m write_result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_s3\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1268\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43ms3\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mput_object\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1269\u001b[0m \u001b[43m \u001b[49m\u001b[43mKey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mBucket\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbucket\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mBody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkwargs\u001b[49m\n\u001b[1;32m 1270\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1271\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfs\u001b[38;5;241m.\u001b[39mversion_aware:\n\u001b[1;32m 1272\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mversion_id \u001b[38;5;241m=\u001b[39m write_result\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVersionId\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:1130\u001b[0m, in \u001b[0;36mS3File._call_s3\u001b[0;34m(self, method, *kwarglist, **kwargs)\u001b[0m\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_call_s3\u001b[39m(\u001b[38;5;28mself\u001b[39m, method, \u001b[38;5;241m*\u001b[39mkwarglist, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m-> 1130\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_s3\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43ms3_additional_kwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwarglist\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1131\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/s3fs/core.py:200\u001b[0m, in \u001b[0;36mS3FileSystem._call_s3\u001b[0;34m(self, method, *akwarglist, **kwargs)\u001b[0m\n\u001b[1;32m 197\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCALL: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m - \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m - \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m (method\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m, akwarglist, kw2))\n\u001b[1;32m 198\u001b[0m additional_kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_s3_method_kwargs(method, \u001b[38;5;241m*\u001b[39makwarglist,\n\u001b[1;32m 199\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m--> 200\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43madditional_kwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/botocore/client.py:553\u001b[0m, in \u001b[0;36mClientCreator._create_api_method.<locals>._api_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 549\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[1;32m 550\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpy_operation_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m() only accepts keyword arguments.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 551\u001b[0m )\n\u001b[1;32m 552\u001b[0m \u001b[38;5;66;03m# The \"self\" in this scope is referring to the BaseClient.\u001b[39;00m\n\u001b[0;32m--> 553\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_api_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43moperation_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/botocore/client.py:1009\u001b[0m, in \u001b[0;36mBaseClient._make_api_call\u001b[0;34m(self, operation_name, api_params)\u001b[0m\n\u001b[1;32m 1005\u001b[0m error_code \u001b[38;5;241m=\u001b[39m error_info\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mQueryErrorCode\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m error_info\u001b[38;5;241m.\u001b[39mget(\n\u001b[1;32m 1006\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCode\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1007\u001b[0m )\n\u001b[1;32m 1008\u001b[0m error_class \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexceptions\u001b[38;5;241m.\u001b[39mfrom_code(error_code)\n\u001b[0;32m-> 1009\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m error_class(parsed_response, operation_name)\n\u001b[1;32m 1010\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1011\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m parsed_response\n",
|
|
"\u001b[0;31mClientError\u001b[0m: An error occurred (InvalidAccessKeyId) when calling the PutObject operation: The Access Key Id you provided does not exist in our records."
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"exec(open('utils_stat_desc.py').read())\n",
|
|
"box_plot_price_tickets(tickets, type_of_activity)"
|
|
]
|
|
}
|
|
],
|
|
"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.11.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|