{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\n# import os\n# for dirname, _, filenames in os.walk('/kaggle/input'):\n#     for filename in filenames:\n#         print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-02-26T07:25:10.615152Z","iopub.execute_input":"2023-02-26T07:25:10.615834Z","iopub.status.idle":"2023-02-26T07:25:10.621236Z","shell.execute_reply.started":"2023-02-26T07:25:10.615779Z","shell.execute_reply":"2023-02-26T07:25:10.619938Z"},"trusted":true},"outputs":[],"execution_count":2},{"cell_type":"code","source":"import os\nimport cv2\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom tqdm.notebook import tqdm_notebook as tqdm\nimport shutil","metadata":{"execution":{"iopub.status.busy":"2023-02-26T07:39:20.367509Z","iopub.execute_input":"2023-02-26T07:39:20.367885Z","iopub.status.idle":"2023-02-26T07:39:20.373335Z","shell.execute_reply.started":"2023-02-26T07:39:20.367856Z","shell.execute_reply":"2023-02-26T07:39:20.371795Z"},"trusted":true},"outputs":[],"execution_count":3},{"cell_type":"code","source":"ships = pd.read_csv(\"/kaggle/input/airbus-ship-detection/train_ship_segmentations_v2.csv\")\ntest_data = pd.read_csv(\"/kaggle/input/airbus-ship-detection/sample_submission_v2.csv\")\nships.head()","metadata":{"execution":{"iopub.status.busy":"2023-02-26T07:39:33.849791Z","iopub.execute_input":"2023-02-26T07:39:33.85014Z","iopub.status.idle":"2023-02-26T07:39:35.277971Z","shell.execute_reply.started":"2023-02-26T07:39:33.850111Z","shell.execute_reply":"2023-02-26T07:39:35.276688Z"},"trusted":true},"outputs":[{"execution_count":4,"output_type":"execute_result","data":{"text/plain":"         ImageId                                      EncodedPixels\n0  00003e153.jpg                                                NaN\n1  0001124c7.jpg                                                NaN\n2  000155de5.jpg  264661 17 265429 33 266197 33 266965 33 267733...\n3  000194a2d.jpg  360486 1 361252 4 362019 5 362785 8 363552 10 ...\n4  000194a2d.jpg  51834 9 52602 9 53370 9 54138 9 54906 9 55674 ...","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>ImageId</th>\n      <th>EncodedPixels</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>00003e153.jpg</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0001124c7.jpg</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>000155de5.jpg</td>\n      <td>264661 17 265429 33 266197 33 266965 33 267733...</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>000194a2d.jpg</td>\n      <td>360486 1 361252 4 362019 5 362785 8 363552 10 ...</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>000194a2d.jpg</td>\n      <td>51834 9 52602 9 53370 9 54138 9 54906 9 55674 ...</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":4},{"cell_type":"code","source":"ships[\"Ship\"] = ships[\"EncodedPixels\"].map(lambda x:1 if isinstance(x,str) else 0)\nship_unique = ships[[\"ImageId\",\"Ship\"]].groupby(\"ImageId\").agg({\"Ship\":\"sum\"}).reset_index()\nship_unique.head()","metadata":{"execution":{"iopub.status.busy":"2023-02-26T07:39:43.122651Z","iopub.execute_input":"2023-02-26T07:39:43.123077Z","iopub.status.idle":"2023-02-26T07:39:43.385445Z","shell.execute_reply.started":"2023-02-26T07:39:43.123048Z","shell.execute_reply":"2023-02-26T07:39:43.384503Z"},"trusted":true},"outputs":[{"execution_count":5,"output_type":"execute_result","data":{"text/plain":"         ImageId  Ship\n0  00003e153.jpg     0\n1  0001124c7.jpg     0\n2  000155de5.jpg     1\n3  000194a2d.jpg     5\n4  0001b1832.jpg     0","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>ImageId</th>\n      <th>Ship</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>00003e153.jpg</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0001124c7.jpg</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>000155de5.jpg</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>000194a2d.jpg</td>\n      <td>5</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0001b1832.jpg</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":5},{"cell_type":"code","source":"def rle2bbox(rle, shape):\n    \n    a = np.fromiter(rle.split(), dtype=np.uint)\n    a = a.reshape((-1, 2))  # an array of (start, length) pairs\n    a[:,0] -= 1  # `start` is 1-indexed\n    \n    y0 = a[:,0] % shape[0]\n    y1 = y0 + a[:,1]\n    if np.any(y1 > shape[0]):\n        # got `y` overrun, meaning that there are a pixels in mask on 0 and shape[0] position\n        y0 = 0\n        y1 = shape[0]\n    else:\n        y0 = np.min(y0)\n        y1 = np.max(y1)\n    \n    x0 = a[:,0] // shape[0]\n    x1 = (a[:,0] + a[:,1]) // shape[0]\n    x0 = np.min(x0)\n    x1 = np.max(x1)\n    \n    if x1 > shape[1]:\n        # just went out of the image dimensions\n        raise ValueError(\"invalid RLE or image dimensions: x1=%d > shape[1]=%d\" % (\n            x1, shape[1]\n        ))\n\n    xc = (x0+x1)/(2*768)\n    yc = (y0+y1)/(2*768)\n    w = np.abs(x1-x0)/768\n    h = np.abs(y1-y0)/768\n    return [xc, yc, h, w]","metadata":{"execution":{"iopub.status.busy":"2023-02-26T07:40:00.147654Z","iopub.execute_input":"2023-02-26T07:40:00.148039Z","iopub.status.idle":"2023-02-26T07:40:00.158318Z","shell.execute_reply.started":"2023-02-26T07:40:00.148008Z","shell.execute_reply":"2023-02-26T07:40:00.156934Z"},"trusted":true},"outputs":[],"execution_count":14},{"cell_type":"code","source":"# Finding the Bounding boxes from encoded pixels Normalized\nships[\"Bbox\"] = ships[\"EncodedPixels\"].apply(lambda x:rle2bbox(x,(768,768)) if isinstance(x,str) else np.NaN)\nships.head()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Droping the Encoded Pixels from the dataset\nships.drop(\"EncodedPixels\", axis =1, inplace =True)","metadata":{"execution":{"iopub.status.busy":"2023-02-26T07:42:50.459721Z","iopub.execute_input":"2023-02-26T07:42:50.460098Z","iopub.status.idle":"2023-02-26T07:42:50.500608Z","shell.execute_reply.started":"2023-02-26T07:42:50.460065Z","shell.execute_reply":"2023-02-26T07:42:50.499415Z"},"jupyter":{"source_hidden":true},"trusted":true},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_27/1236737778.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m# Droping the Encoded Pixels from the dataset\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mships\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"EncodedPixels\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m \u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minplace\u001b[0m \u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/util/_decorators.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    309\u001b[0m                     \u001b[0mstacklevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstacklevel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    310\u001b[0m                 )\n\u001b[0;32m--> 311\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    312\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    313\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36mdrop\u001b[0;34m(self, labels, axis, index, columns, level, inplace, errors)\u001b[0m\n\u001b[1;32m   4911\u001b[0m             \u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4912\u001b[0m             \u001b[0minplace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minplace\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4913\u001b[0;31m             \u001b[0merrors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0merrors\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4914\u001b[0m         )\n\u001b[1;32m   4915\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36mdrop\u001b[0;34m(self, labels, axis, index, columns, level, inplace, errors)\u001b[0m\n\u001b[1;32m   4148\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabels\u001b[0m \u001b[0;32min\u001b[0m \u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4149\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mlabels\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4150\u001b[0;31m                 \u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_drop_axis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0merrors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4151\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4152\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0minplace\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_drop_axis\u001b[0;34m(self, labels, axis, level, errors)\u001b[0m\n\u001b[1;32m   4183\u001b[0m                 \u001b[0mnew_axis\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0merrors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4184\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4185\u001b[0;31m                 \u001b[0mnew_axis\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0merrors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4186\u001b[0m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0maxis_name\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnew_axis\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   4187\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mdrop\u001b[0;34m(self, labels, errors)\u001b[0m\n\u001b[1;32m   6015\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mmask\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0many\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6016\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0merrors\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m\"ignore\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6017\u001b[0;31m                 \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{labels[mask]} not found in axis\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   6018\u001b[0m             \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mindexer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m~\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6019\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdelete\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mKeyError\u001b[0m: \"['EncodedPixels'] not found in axis\""],"ename":"KeyError","evalue":"\"['EncodedPixels'] not found in axis\"","output_type":"error"}],"execution_count":23},{"cell_type":"code","source":"ships[\"BboxArea\"]=ships[\"Bbox\"].map(lambda x:x[2]*768*x[3]*768 if x==x else 0)","metadata":{"execution":{"iopub.status.busy":"2023-02-26T07:42:09.536861Z","iopub.execute_input":"2023-02-26T07:42:09.537213Z","iopub.status.idle":"2023-02-26T07:42:09.655808Z","shell.execute_reply.started":"2023-02-26T07:42:09.537188Z","shell.execute_reply":"2023-02-26T07:42:09.654071Z"},"trusted":true},"outputs":[],"execution_count":19},{"cell_type":"code","source":"# Plotting the distribution of the bounding box areas to check the ship sizes\n\narea = ships[ships.Ship>0]\n\nplt.figure(figsize = (12,5))\nplt.subplot(1,2,1)\nsns.boxplot(area[\"BboxArea\"])\nplt.title(\"Areas of Bounding boxes for ships\")\nplt.xscale(\"log\")\nplt.subplot(1,2,2)\nsns.distplot(area[\"BboxArea\"], bins=50)\nplt.xscale(\"log\")\nplt.title(\"Distribution of Bounding boxe area\")\nplt.tight_layout()\n","metadata":{"execution":{"iopub.status.busy":"2023-02-26T07:41:54.987773Z","iopub.execute_input":"2023-02-26T07:41:54.988268Z","iopub.status.idle":"2023-02-26T07:41:55.250451Z","shell.execute_reply.started":"2023-02-26T07:41:54.988232Z","shell.execute_reply":"2023-02-26T07:41:55.249321Z"},"trusted":true},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3360\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3361\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3362\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n","\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.Int64HashTable.get_item\u001b[0;34m()\u001b[0m\n","\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.Int64HashTable.get_item\u001b[0;34m()\u001b[0m\n","\u001b[0;31mKeyError\u001b[0m: 0","\nThe above exception was the direct cause of the following exception:\n","\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_27/411822512.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0msns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mboxplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marea\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"BboxArea\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      8\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Areas of Bounding boxes for ships\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxscale\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"log\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36mboxplot\u001b[0;34m(data, x, y, hue, order, hue_order, orient, color, palette, saturation, width, dodge, fliersize, linewidth, whis, ax, **kwargs)\u001b[0m\n\u001b[1;32m   2231\u001b[0m     plotter = _BoxPlotter(x, y, hue, data, order, hue_order,\n\u001b[1;32m   2232\u001b[0m                           \u001b[0morient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpalette\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msaturation\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2233\u001b[0;31m                           width, dodge, fliersize, linewidth)\n\u001b[0m\u001b[1;32m   2234\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2235\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0max\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, x, y, hue, data, order, hue_order, orient, color, palette, saturation, width, dodge, fliersize, linewidth)\u001b[0m\n\u001b[1;32m    783\u001b[0m                  width, dodge, fliersize, linewidth):\n\u001b[1;32m    784\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 785\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mestablish_variables\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhue_order\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    786\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mestablish_colors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpalette\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msaturation\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    787\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36mestablish_variables\u001b[0;34m(self, x, y, hue, data, orient, order, hue_order, units)\u001b[0m\n\u001b[1;32m    484\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"shape\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    485\u001b[0m                     \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 486\u001b[0;31m                         \u001b[0;32mif\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misscalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    487\u001b[0m                             \u001b[0mplot_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    488\u001b[0m                         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m    940\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    941\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mkey_is_scalar\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 942\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    943\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    944\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mis_hashable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m_get_value\u001b[0;34m(self, label, takeable)\u001b[0m\n\u001b[1;32m   1049\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1050\u001b[0m         \u001b[0;31m# Similar to Index.get_value, but we do not fall back to positional\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1051\u001b[0;31m         \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1052\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_values_for_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1053\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3361\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3362\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3363\u001b[0;31m                 \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3364\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3365\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mis_scalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhasnans\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mKeyError\u001b[0m: 0"],"ename":"KeyError","evalue":"0","output_type":"error"},{"output_type":"display_data","data":{"text/plain":"<Figure size 1200x500 with 1 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAAAeUAAAGyCAYAAADau9wtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAbnUlEQVR4nO3db2yV5f348U+h0KpbawStIFjBiaJEHSUgZcTotAaMhsSFGhdRp4mNOoROJ8iiQkwaXTRTJ/gPJCboGv/GB53aB5uAuD+wYoyQaIRZ0CJpjS3+WRG4vw/40d9qi+PUFq7W1ys5D8616z7nOle6vXefc25OXpZlWQAAR9ygI70AAGA/UQaARIgyACRClAEgEaIMAIkQZQBIhCgDQCJEGQASIcoAkAhRBoBE5Bzl1atXx2WXXRYjR46MvLy8eOWVV/7nMW+++WaUlZVFYWFhjB07Nh577LGerBUABrSco/zll1/GOeecE3/84x8Paf7WrVtj5syZMX369GhoaIg777wz5s6dGy+++GLOiwWAgSzv+/wgRV5eXrz88ssxa9asg86544474tVXX43Nmzd3jFVVVcU777wTb7/9dk+fGgAGnPy+foK33347KioqOo1dcsklsXz58vjmm29iyJAhXY5pb2+P9vb2jvv79u2Lzz77LIYNGxZ5eXl9vWQA+J+yLItdu3bFyJEjY9Cg3vmKVp9HeceOHVFSUtJprKSkJPbs2RPNzc0xYsSILsfU1NTE4sWL+3ppAPC9bdu2LUaNGtUrj9XnUY6ILme3B94xP9hZ78KFC6O6urrjfmtra5x88smxbdu2KCoq6ruFAsAhamtri9GjR8ePf/zjXnvMPo/yiSeeGDt27Og0tnPnzsjPz49hw4Z1e0xBQUEUFBR0GS8qKhJlAJLSmx+r9vl1ylOnTo36+vpOY2+88UZMmjSp28+TAeCHKucof/HFF7Fx48bYuHFjROy/5Gnjxo3R2NgYEfvfep4zZ07H/Kqqqvjoo4+iuro6Nm/eHCtWrIjly5fHbbfd1juvAAAGiJzfvl6/fn1ccMEFHfcPfPZ7zTXXxMqVK6Opqakj0BERY8aMibq6upg/f348+uijMXLkyHj44Yfjiiuu6IXlA8DA8b2uUz5c2traori4OFpbW32mDEAS+qJN/u1rAEiEKANAIkQZABIhygCQCFEGgESIMgAkQpQBIBGiDACJEGUASIQoA0AiRBkAEiHKAJAIUQaARIgyACRClAEgEaIMAIkQZQBIhCgDQCJEGQASIcoAkAhRBoBEiDIAJEKUASARogwAiRBlAEiEKANAIkQZABIhygCQCFEGgESIMgAkQpQBIBGiDACJEGUASIQoA0AiRBkAEiHKAJAIUQaARIgyACRClAEgEaIMAIkQZQBIhCgDQCJEGQASIcoAkAhRBoBEiDIAJEKUASARogwAiRBlAEiEKANAIkQZABIhygCQCFEGgESIMgAkQpQBIBGiDACJEGUASIQoA0AiRBkAEiHKAJAIUQaARIgyACRClAEgEaIMAIkQZQBIhCgDQCJ6FOWlS5fGmDFjorCwMMrKymLNmjXfOX/VqlVxzjnnxNFHHx0jRoyI6667LlpaWnq0YAAYqHKOcm1tbcybNy8WLVoUDQ0NMX369JgxY0Y0NjZ2O3/t2rUxZ86cuP766+O9996L559/Pv75z3/GDTfc8L0XDwADSc5RfvDBB+P666+PG264IcaPHx9/+MMfYvTo0bFs2bJu5//tb3+LU045JebOnRtjxoyJn/3sZ3HjjTfG+vXrv/fiAWAgySnKu3fvjg0bNkRFRUWn8YqKili3bl23x5SXl8f27dujrq4usiyLTz/9NF544YW49NJLD/o87e3t0dbW1ukGAANdTlFubm6OvXv3RklJSafxkpKS2LFjR7fHlJeXx6pVq6KysjKGDh0aJ554Yhx77LHxyCOPHPR5ampqori4uOM2evToXJYJAP1Sj77olZeX1+l+lmVdxg7YtGlTzJ07N+66667YsGFDvPbaa7F169aoqqo66OMvXLgwWltbO27btm3ryTIBoF/Jz2Xy8OHDY/DgwV3Oinfu3Nnl7PmAmpqamDZtWtx+++0REXH22WfHMcccE9OnT4977703RowY0eWYgoKCKCgoyGVpANDv5XSmPHTo0CgrK4v6+vpO4/X19VFeXt7tMV999VUMGtT5aQYPHhwR+8+wAYD9cn77urq6Op566qlYsWJFbN68OebPnx+NjY0db0cvXLgw5syZ0zH/sssui5deeimWLVsWW7Zsibfeeivmzp0bkydPjpEjR/beKwGAfi6nt68jIiorK6OlpSWWLFkSTU1NMWHChKirq4vS0tKIiGhqaup0zfK1114bu3btij/+8Y/xm9/8Jo49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5crKymhpaYklS5ZEU1NTTJgwIerq6qK0tDQiIpqamjpds/z444/Hnj174uabb46bb765Y/yaa66JlStXfv9XAAADRM7XKR8JrlMGIDVH/DplAKDviDIAJEKUASARogwAiRBlAEiEKANAIkQZABIhygCQCFEGgESIMgAkQpQBIBGiDACJEGUASIQoA0AiRBkAEiHKAJAIUQaARIgyACRClAEgEaIMAIkQZQBIhCgDQCJEGQASIcoAkAhRBoBEiDIAJEKUASARogwAiRBlAEiEKANAIkQZABIhygCQCFEGgESIMgAkQpQBIBGiDACJEGUASIQoA0AiRBkAEiHKAJAIUQaARIgyACRClAEgEaIMAIkQZQBIhCgDQCJEGQASIcoAkAhRBoBEiDIAJEKUASARogwAiRBlAEiEKANAIkQZABIhygCQCFEGgESIMgAkQpQBIBGiDACJEGUASIQoA0AiRBkAEiHKAJAIUQaARIgyACSiR1FeunRpjBkzJgoLC6OsrCzWrFnznfPffPPNKCsri8LCwhg7dmw89thjPVosAAxkOUe5trY25s2bF4sWLYqGhoaYPn16zJgxIxobG7udv3Xr1pg5c2ZMnz49Ghoa4s4774y5c+fGiy+++L0XDwADSV6WZVkuB0yZMiUmTpwYy5Yt6xgbP358zJo1K2pqarrMv+OOO+LVV1+NzZs3d4xVVVXFO++8E2+//fYhPWdbW1sUFxdHa2trFBUV5bJcAOgTfdGm/Fwm7969OzZs2BALFizoNF5RURHr1q3r9pi33347KioqOo1dcsklsXz58vjmm29iyJAhXY5pb2+P9vb2jvutra0RsX8DACAFB5qU47ntd8opys3NzbF3794oKSnpNF5SUhI7duzo9pgdO3Z0O3/Pnj3R3NwcI0aM6HJMTU1NLF68uMv46NGjc1kuAPS5lpaWKC4u7pXHyinKB+Tl5XW6n2VZl7H/Nb+78QMWLlwY1dXVHfc///zzKC0tjcbGxl574T9kbW1tMXr06Ni2bZuPA3qJPe1d9rP32dPe19raGieffHIcd9xxvfaYOUV5+PDhMXjw4C5nxTt37uxyNnzAiSee2O38/Pz8GDZsWLfHFBQUREFBQZfx4uJif0y9qKioyH72Mnvau+xn77OnvW/QoN67ujinRxo6dGiUlZVFfX19p/H6+vooLy/v9pipU6d2mf/GG2/EpEmTuv08GQB+qHLOe3V1dTz11FOxYsWK2Lx5c8yfPz8aGxujqqoqIva/9TxnzpyO+VVVVfHRRx9FdXV1bN68OVasWBHLly+P2267rfdeBQAMADl/plxZWRktLS2xZMmSaGpqigkTJkRdXV2UlpZGRERTU1Ona5bHjBkTdXV1MX/+/Hj00Udj5MiR8fDDD8cVV1xxyM9ZUFAQd999d7dvaZM7+9n77Gnvsp+9z572vr7Y05yvUwYA+oZ/+xoAEiHKAJAIUQaARIgyACQimSj7Ocjelct+vvTSS3HxxRfH8ccfH0VFRTF16tR4/fXXD+Nq+4dc/0YPeOuttyI/Pz/OPffcvl1gP5Prfra3t8eiRYuitLQ0CgoK4tRTT40VK1YcptX2D7nu6apVq+Kcc86Jo48+OkaMGBHXXXddtLS0HKbVpm316tVx2WWXxciRIyMvLy9eeeWV/3lMr3QpS8Cf/vSnbMiQIdmTTz6Zbdq0Kbv11luzY445Jvvoo4+6nb9ly5bs6KOPzm699dZs06ZN2ZNPPpkNGTIke+GFFw7zytOU637eeuut2X333Zf94x//yN5///1s4cKF2ZAhQ7J//etfh3nl6cp1Tw/4/PPPs7Fjx2YVFRXZOeecc3gW2w/0ZD8vv/zybMqUKVl9fX22devW7O9//3v21ltvHcZVpy3XPV2zZk02aNCg7KGHHsq2bNmSrVmzJjvrrLOyWbNmHeaVp6muri5btGhR9uKLL2YRkb388svfOb+3upRElCdPnpxVVVV1GjvjjDOyBQsWdDv/t7/9bXbGGWd0Grvxxhuz8847r8/W2J/kup/dOfPMM7PFixf39tL6rZ7uaWVlZfa73/0uu/vuu0X5v+S6n3/+85+z4uLirKWl5XAsr1/KdU9///vfZ2PHju009vDDD2ejRo3qszX2V4cS5d7q0hF/+/rAz0F+++cde/JzkOvXr49vvvmmz9baH/RkP79t3759sWvXrl79R9b7s57u6dNPPx0ffvhh3H333X29xH6lJ/v56quvxqRJk+L++++Pk046KcaNGxe33XZbfP3114djycnryZ6Wl5fH9u3bo66uLrIsi08//TReeOGFuPTSSw/Hkgec3upSj34lqjcdrp+D/KHoyX5+2wMPPBBffvllzJ49uy+W2O/0ZE8/+OCDWLBgQaxZsyby84/4f82S0pP93LJlS6xduzYKCwvj5Zdfjubm5rjpppvis88+87ly9GxPy8vLY9WqVVFZWRn/+c9/Ys+ePXH55ZfHI488cjiWPOD0VpeO+JnyAX39c5A/NLnu5wHPPfdc3HPPPVFbWxsnnHBCXy2vXzrUPd27d29cddVVsXjx4hg3btzhWl6/k8vf6L59+yIvLy9WrVoVkydPjpkzZ8aDDz4YK1eudLb8X3LZ002bNsXcuXPjrrvuig0bNsRrr70WW7du7fgdA3LXG1064v8X/nD9HOQPRU/284Da2tq4/vrr4/nnn4+LLrqoL5fZr+S6p7t27Yr169dHQ0ND3HLLLRGxPypZlkV+fn688cYbceGFFx6WtaeoJ3+jI0aMiJNOOqnT76mPHz8+siyL7du3x2mnndana05dT/a0pqYmpk2bFrfffntERJx99tlxzDHHxPTp0+Pee+/9Qb/j2BO91aUjfqbs5yB7V0/2M2L/GfK1114bzz77rM+UviXXPS0qKop33303Nm7c2HGrqqqK008/PTZu3BhTpkw5XEtPUk/+RqdNmxaffPJJfPHFFx1j77//fgwaNChGjRrVp+vtD3qyp1999VWX3wEePHhwRPz/MzwOXa91KaevhfWRA1/lX758ebZp06Zs3rx52THHHJP9+9//zrIsyxYsWJBdffXVHfMPfPV8/vz52aZNm7Lly5e7JOq/5Lqfzz77bJafn589+uijWVNTU8ft888/P1IvITm57um3+fZ1Z7nu565du7JRo0Zlv/jFL7L33nsve/PNN7PTTjstu+GGG47US0hOrnv69NNPZ/n5+dnSpUuzDz/8MFu7dm02adKkbPLkyUfqJSRl165dWUNDQ9bQ0JBFRPbggw9mDQ0NHZeY9VWXkohylmXZo48+mpWWlmZDhw7NJk6cmL355psd/9k111yTnX/++Z3m//Wvf81++tOfZkOHDs1OOeWUbNmyZYd5xWnLZT/PP//8LCK63K655prDv/CE5fo3+t9Euatc93Pz5s3ZRRddlB111FHZqFGjsurq6uyrr746zKtOW657+vDDD2dnnnlmdtRRR2UjRozIfvnLX2bbt28/zKtO01/+8pfv/N/FvuqSn24EgEQc8c+UAYD9RBkAEiHKAJAIUQaARIgyACRClAEgEaIMAIkQZQBIhCgDQCJEGQASIcoAkAhRBoBE/B/TEINGqSI05AAAAABJRU5ErkJggg==\n"},"metadata":{}}],"execution_count":18}]}