From ba6c4a8a241a067507d4a34f92602f63961ea211 Mon Sep 17 00:00:00 2001 From: tpique-ensae Date: Sun, 24 Mar 2024 10:05:28 +0000 Subject: [PATCH] update notebook --- Sport/Modelization/CA_segment_sport.ipynb | 196 +++++++++------------- 1 file changed, 82 insertions(+), 114 deletions(-) diff --git a/Sport/Modelization/CA_segment_sport.ipynb b/Sport/Modelization/CA_segment_sport.ipynb index 346e68f..6368ebf 100644 --- a/Sport/Modelization/CA_segment_sport.ipynb +++ b/Sport/Modelization/CA_segment_sport.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 1, "id": "9771bf29-d08e-4674-8c23-9a2672fbef8f", "metadata": {}, "outputs": [], @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "539ccbdf-f29f-4f04-99c1-8c88d0efe514", "metadata": {}, "outputs": [], @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "0c3a6ddc-9345-4a42-b6bf-a20a95de3028", "metadata": {}, "outputs": [], @@ -98,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "2831d546-b365-498b-8248-c618bd9c3057", "metadata": {}, "outputs": [ @@ -106,7 +106,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_519/2459610029.py:7: DtypeWarning: Columns (38) have mixed types. Specify dtype option on import or set low_memory=False.\n", + "/tmp/ipykernel_521/2459610029.py:7: DtypeWarning: Columns (38) have mixed types. Specify dtype option on import or set low_memory=False.\n", " dataset_train = pd.read_csv(file_in, sep=\",\")\n" ] }, @@ -156,7 +156,7 @@ "dtype: int64" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -168,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "b8827f7b-b304-4f51-9814-c7a98ed88cf0", "metadata": {}, "outputs": [], @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "c18195fc-ed40-4e39-a59e-c9ecc5a8e6c3", "metadata": {}, "outputs": [ @@ -225,7 +225,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "7c81390e-598c-4f02-bd56-dd03b00dcb33", "metadata": {}, "outputs": [ @@ -564,7 +564,7 @@ "[96096 rows x 17 columns]" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -575,7 +575,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "c708f439-bb75-4688-bf4f-4c04e13deaae", "metadata": {}, "outputs": [], @@ -593,7 +593,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "5261a803-05b8-41a0-968c-dc7bde48ddd3", "metadata": {}, "outputs": [ @@ -1115,7 +1115,7 @@ " scoring=make_scorer(recall_score, response_method='predict'))" ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -1135,7 +1135,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "id": "018d8ff4-3436-4eec-8507-d1a265cbabf1", "metadata": {}, "outputs": [], @@ -1146,7 +1146,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "id": "846f53b9-73c2-4a8b-9d9e-f11bf59ce9ba", "metadata": {}, "outputs": [ @@ -1154,25 +1154,25 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_519/375041546.py:3: SettingWithCopyWarning: \n", + "/tmp/ipykernel_521/375041546.py:3: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " X_test_segment[\"has_purchased\"] = y_test\n", - "/tmp/ipykernel_519/375041546.py:4: SettingWithCopyWarning: \n", + "/tmp/ipykernel_521/375041546.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " X_test_segment[\"has_purchased_estim\"] = y_pred\n", - "/tmp/ipykernel_519/375041546.py:5: SettingWithCopyWarning: \n", + "/tmp/ipykernel_521/375041546.py:5: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " X_test_segment[\"score\"] = y_pred_prob\n", - "/tmp/ipykernel_519/375041546.py:6: SettingWithCopyWarning: \n", + "/tmp/ipykernel_521/375041546.py:6: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", @@ -1534,7 +1534,7 @@ "[10 rows x 21 columns]" ] }, - "execution_count": 13, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1579,7 +1579,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "id": "f0379536-a6c5-4b16-bde5-d0319ec1b140", "metadata": {}, "outputs": [], @@ -1592,7 +1592,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "id": "32a0dfd0-f49d-4785-a56f-706d381bfe41", "metadata": {}, "outputs": [], @@ -1608,7 +1608,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "id": "2dff1def-02df-413e-afce-b4aeaf7752b6", "metadata": {}, "outputs": [], @@ -1619,7 +1619,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "id": "683d71fc-7442-4028-869c-49c57592d6e9", "metadata": {}, "outputs": [], @@ -1642,7 +1642,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 32, "id": "781b0d40-c954-4c54-830a-e709c8667328", "metadata": {}, "outputs": [ @@ -1652,7 +1652,7 @@ "6.172331113516847" ] }, - "execution_count": 18, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1668,7 +1668,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 33, "id": "248cb862-418e-4767-9933-70c4885ecf40", "metadata": {}, "outputs": [ @@ -1678,7 +1678,7 @@ "6.070461139075353" ] }, - "execution_count": 19, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1695,7 +1695,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 34, "id": "fff6cbe6-7bb3-4732-9b81-b9ac5383bbcf", "metadata": {}, "outputs": [ @@ -1713,7 +1713,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 35, "id": "f506870d-4a8a-4b2c-8f0b-e0789080b20c", "metadata": {}, "outputs": [ @@ -1736,7 +1736,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 36, "id": "8213d0e4-063b-49fa-90b7-677fc34f4c01", "metadata": {}, "outputs": [ @@ -1744,7 +1744,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_519/1825363704.py:7: SettingWithCopyWarning: \n", + "/tmp/ipykernel_521/1825363704.py:7: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", @@ -1765,7 +1765,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 37, "id": "834d3723-2e72-4c65-9c62-e2d595c69461", "metadata": {}, "outputs": [ @@ -1794,7 +1794,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 38, "id": "9f30a4dd-a9d8-405a-a7d5-5324ae88cf70", "metadata": {}, "outputs": [ @@ -1818,21 +1818,10 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 39, "id": "6f9396db-e213-408c-a596-eaeec3bc79f3", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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8fHxMDQ0RL169aCvr1+WuSkOn/NWAJ/zRkRECqC057yVauQtn4mJCd55552yyoWIiIiIXqFUNywQERERUeVg8UZERESkICzeiIiIiBSExRsRERGRgrB4IyIiIlIQFm9ERERECvJajwqht8+JhAdltqwd286X2bIKM6e3W7kun4iI6E3EkTciIiIiBWHxRkRERKQgLN6IiIiIFITFGxEREZGCsHgjIiIiUhAWb0REREQKwuKNiIiISEFYvBEREREpCIs3IiIiIgVh8UZERESkICzeiIiIiBSExRsRERGRgrB4IyIiIlIQFm9ERERECsLijYiIiEhBWLwRERERKQiLNyIiIiIFYfFGREREpCAs3oiIiIgUhMUbERERkYKweCMiIiJSEBZvRERERArC4o2IiIhIQVi8ERERESkIizciIiIiBWHxRkRERKQgLN6IiIiIFITFGxEREZGCsHgjIiIiUhAWb0REREQKwuKNiIiISEFYvBEREREpCIs3IiIiIgVh8UZERESkICzeiIiIiBSExRsRERGRgrB4IyIiIlIQFm9EREREClKpxducOXPwzjvvwNTUFDY2NujVqxcuX74sixFCYPr06bC3t4ehoSHatm2LixcvymKysrIwevRoWFlZwdjYGD169MDt27dlMampqQgICIBarYZarUZAQADS0tJkMbdu3UL37t1hbGwMKysrBAcHIzs7u1y2nYiIiKg0KrV4i4qKwsiRI3H8+HFERkbi2bNn8PHxQWZmphQzb948LFq0CMuXL0dMTAzs7OzQqVMnPHz4UIoJCQnB9u3bERYWhiNHjuDRo0fw8/NDbm6uFOPv74+4uDiEh4cjPDwccXFxCAgIkKbn5uaiW7duyMzMxJEjRxAWFoatW7ciNDS0YjqDiIiIqBhUQghR2Unku3fvHmxsbBAVFYU2bdpACAF7e3uEhIRg0qRJAJ6Pstna2mLu3LkYNmwY0tPTYW1tjQ0bNuDDDz8EANy5cwcODg7Ys2cPfH19ER8fDxcXFxw/fhweHh4AgOPHj8PT0xN//vknnJycsHfvXvj5+SExMRH29vYAgLCwMAwYMAApKSkwMzN7Zf4ZGRlQq9VIT08vVnyJ7BpTtst7iRMJD8psWTuqTyyzZRVmTm+3cl0+ERH9O5Tr8bscvFHXvKWnpwMALCwsAAAJCQlITk6Gj4+PFKOvrw9v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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# visualization\n", "\n", @@ -1847,9 +1836,7 @@ " plt.xlabel(\"probability of a future purchase\")\n", " plt.ylabel(\"count\")\n", " plt.title(f\"Comparison between score and adjusted score for {type_of_activity} companies\")\n", - " plt.show()\n", - "\n", - "plot_hist_scores(X_test_segment, score = \"score\", score_adjusted = \"score_adjusted\", type_of_activity=\"sport\")" + " plt.show()" ] }, { @@ -1875,7 +1862,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 40, "id": "add631d7-0757-45a5-bb5b-f7f4b4baa961", "metadata": {}, "outputs": [ @@ -1898,7 +1885,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 41, "id": "3a5b5bd9-e033-4436-8c56-bf5fb61df87f", "metadata": {}, "outputs": [ @@ -1911,35 +1898,6 @@ }, "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[108], line 11\u001b[0m\n\u001b[1;32m 9\u001b[0m file_name \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhist_score_adjusted\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 10\u001b[0m FILE_PATH_OUT_S3 \u001b[38;5;241m=\u001b[39m PATH \u001b[38;5;241m+\u001b[39m file_name \u001b[38;5;241m+\u001b[39m type_of_activity \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.png\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m---> 11\u001b[0m \u001b[38;5;28;43;01mwith\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mfs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mFILE_PATH_OUT_S3\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mwb\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mas\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ms3_file\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 12\u001b[0m \u001b[43m \u001b[49m\u001b[43ms3_file\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimage_buffer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 13\u001b[0m plt\u001b[38;5;241m.\u001b[39mclose()\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.._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": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -1976,7 +1934,7 @@ }, { "cell_type": "code", - "execution_count": 161, + "execution_count": 42, "id": "90c4c2b5-0ede-4001-889f-749cfbd9df04", "metadata": {}, "outputs": [ @@ -2048,7 +2006,7 @@ "3 4 90.52 66.20 65.01" ] }, - "execution_count": 161, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -2082,30 +2040,10 @@ }, { "cell_type": "code", - "execution_count": 130, + "execution_count": 43, "id": "d6a04d3e-c454-43e4-ae4c-0746e928575b", "metadata": {}, - "outputs": [ - { - "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[130], line 5\u001b[0m\n\u001b[1;32m 3\u001b[0m file_name \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtable_adjusted_score\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 4\u001b[0m FILE_PATH_OUT_S3 \u001b[38;5;241m=\u001b[39m PATH \u001b[38;5;241m+\u001b[39m file_name \u001b[38;5;241m+\u001b[39m type_of_activity \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;43;01mwith\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mfs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mFILE_PATH_OUT_S3\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mw\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mas\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mfile_out\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[43mX_test_table_adjusted_scores\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile_out\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\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.._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." - ] - } - ], + "outputs": [], "source": [ "# comparison between score and adjusted score - export csv associated\n", "\n", @@ -2117,7 +2055,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 44, "id": "a974589f-7952-4db2-bebf-7b69c6b09372", "metadata": {}, "outputs": [], @@ -2139,10 +2077,40 @@ }, { "cell_type": "code", - "execution_count": 143, + "execution_count": 45, "id": "dd8a52e1-d06e-4790-8687-8e58e3e6b84e", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_521/3689439025.py:7: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_output.loc[:,\"nb_tickets_projected\"] = df_output.loc[:,nb_tickets] / duration_ratio\n", + "/tmp/ipykernel_521/3689439025.py:8: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_output.loc[:,\"total_amount_projected\"] = df_output.loc[:,total_amount] / duration_ratio\n", + "/tmp/ipykernel_521/3689439025.py:10: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_output.loc[:,\"nb_tickets_expected\"] = df_output.loc[:,score_adjusted] * df_output.loc[:,\"nb_tickets_projected\"]\n", + "/tmp/ipykernel_521/3689439025.py:11: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_output.loc[:,\"total_amount_expected\"] = df_output.loc[:,score_adjusted] * df_output.loc[:,\"total_amount_projected\"]\n" + ] + }, { "data": { "text/html": [ @@ -2539,7 +2507,7 @@ "[96096 rows x 26 columns]" ] }, - "execution_count": 143, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -2551,7 +2519,7 @@ }, { "cell_type": "code", - "execution_count": 144, + "execution_count": 46, "id": "f58f9151-2f91-45df-abb7-1ddcf0652adc", "metadata": {}, "outputs": [], @@ -2581,7 +2549,7 @@ }, { "cell_type": "code", - "execution_count": 145, + "execution_count": 47, "id": "c8df6c80-43e8-4f00-9cd3-eb9022744313", "metadata": {}, "outputs": [ @@ -2669,7 +2637,7 @@ "3 90.11 " ] }, - "execution_count": 145, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -2683,7 +2651,7 @@ }, { "cell_type": "code", - "execution_count": 164, + "execution_count": 48, "id": "ac706ed7-defa-4df1-82e1-06f12fc1b6ad", "metadata": {}, "outputs": [ @@ -2693,7 +2661,7 @@ "'\\\\begin{tabular}{lrrrrr}\\n\\\\toprule\\nquartile & size & size (%) & nb tickets expected & total amount expected & revenue recovered (%) \\\\\\\\\\n\\\\midrule\\n1 & 37410 & 38.930000 & 84.760000 & 1867.190000 & 4.380000 \\\\\\\\\\n2 & 29517 & 30.720000 & 2899.290000 & 74461.020000 & 9.850000 \\\\\\\\\\n3 & 20137 & 20.960000 & 10876.790000 & 344286.660000 & 22.840000 \\\\\\\\\\n4 & 9032 & 9.400000 & 215194.830000 & 9899417.810000 & 90.110000 \\\\\\\\\\n\\\\bottomrule\\n\\\\end{tabular}\\n'" ] }, - "execution_count": 164, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -2707,7 +2675,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "id": "771da0cf-c49f-4e7e-b52f-ebcfb0fb2df3", "metadata": {}, "outputs": [],