549 lines
936 KiB
Plaintext
Raw Normal View History

2024-11-26 03:02:51 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# загрузим датасет"
]
},
{
"cell_type": "code",
"execution_count": 2,
2024-11-26 03:02:51 +04:00
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ID</th>\n",
" <th>Price</th>\n",
" <th>Levy</th>\n",
" <th>Manufacturer</th>\n",
" <th>Model</th>\n",
" <th>Prod. year</th>\n",
" <th>Category</th>\n",
" <th>Leather interior</th>\n",
" <th>Fuel type</th>\n",
" <th>Engine volume</th>\n",
" <th>Mileage</th>\n",
" <th>Cylinders</th>\n",
" <th>Gear box type</th>\n",
" <th>Drive wheels</th>\n",
" <th>Doors</th>\n",
" <th>Wheel</th>\n",
" <th>Color</th>\n",
" <th>Airbags</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>45654403</td>\n",
" <td>13328</td>\n",
" <td>1399</td>\n",
" <td>LEXUS</td>\n",
" <td>RX 450</td>\n",
" <td>2010</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Hybrid</td>\n",
" <td>3.5</td>\n",
" <td>186005 km</td>\n",
" <td>6.0</td>\n",
" <td>Automatic</td>\n",
" <td>4x4</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>44731507</td>\n",
" <td>16621</td>\n",
" <td>1018</td>\n",
" <td>CHEVROLET</td>\n",
" <td>Equinox</td>\n",
" <td>2011</td>\n",
" <td>Jeep</td>\n",
" <td>No</td>\n",
" <td>Petrol</td>\n",
" <td>3</td>\n",
" <td>192000 km</td>\n",
" <td>6.0</td>\n",
" <td>Tiptronic</td>\n",
" <td>4x4</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Black</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>45774419</td>\n",
" <td>8467</td>\n",
" <td>-</td>\n",
" <td>HONDA</td>\n",
" <td>FIT</td>\n",
" <td>2006</td>\n",
" <td>Hatchback</td>\n",
" <td>No</td>\n",
" <td>Petrol</td>\n",
" <td>1.3</td>\n",
" <td>200000 km</td>\n",
" <td>4.0</td>\n",
" <td>Variator</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Right-hand drive</td>\n",
" <td>Black</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>45769185</td>\n",
" <td>3607</td>\n",
" <td>862</td>\n",
" <td>FORD</td>\n",
" <td>Escape</td>\n",
" <td>2011</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Hybrid</td>\n",
" <td>2.5</td>\n",
" <td>168966 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>4x4</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>White</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>45809263</td>\n",
" <td>11726</td>\n",
" <td>446</td>\n",
" <td>HONDA</td>\n",
" <td>FIT</td>\n",
" <td>2014</td>\n",
" <td>Hatchback</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>1.3</td>\n",
" <td>91901 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19232</th>\n",
" <td>45798355</td>\n",
" <td>8467</td>\n",
" <td>-</td>\n",
" <td>MERCEDES-BENZ</td>\n",
" <td>CLK 200</td>\n",
" <td>1999</td>\n",
" <td>Coupe</td>\n",
" <td>Yes</td>\n",
" <td>CNG</td>\n",
" <td>2.0 Turbo</td>\n",
" <td>300000 km</td>\n",
" <td>4.0</td>\n",
" <td>Manual</td>\n",
" <td>Rear</td>\n",
" <td>02-Mar</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19233</th>\n",
" <td>45778856</td>\n",
" <td>15681</td>\n",
" <td>831</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Sonata</td>\n",
" <td>2011</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>2.4</td>\n",
" <td>161600 km</td>\n",
" <td>4.0</td>\n",
" <td>Tiptronic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Red</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19234</th>\n",
" <td>45804997</td>\n",
" <td>26108</td>\n",
" <td>836</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Tucson</td>\n",
" <td>2010</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Diesel</td>\n",
" <td>2</td>\n",
" <td>116365 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Grey</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19235</th>\n",
" <td>45793526</td>\n",
" <td>5331</td>\n",
" <td>1288</td>\n",
" <td>CHEVROLET</td>\n",
" <td>Captiva</td>\n",
" <td>2007</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Diesel</td>\n",
" <td>2</td>\n",
" <td>51258 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Black</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19236</th>\n",
" <td>45813273</td>\n",
" <td>470</td>\n",
" <td>753</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Sonata</td>\n",
" <td>2012</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Hybrid</td>\n",
" <td>2.4</td>\n",
" <td>186923 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>White</td>\n",
" <td>12</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>19237 rows × 18 columns</p>\n",
"</div>"
],
"text/plain": [
" ID Price Levy Manufacturer Model Prod. year Category \\\n",
"0 45654403 13328 1399 LEXUS RX 450 2010 Jeep \n",
"1 44731507 16621 1018 CHEVROLET Equinox 2011 Jeep \n",
"2 45774419 8467 - HONDA FIT 2006 Hatchback \n",
"3 45769185 3607 862 FORD Escape 2011 Jeep \n",
"4 45809263 11726 446 HONDA FIT 2014 Hatchback \n",
"... ... ... ... ... ... ... ... \n",
"19232 45798355 8467 - MERCEDES-BENZ CLK 200 1999 Coupe \n",
"19233 45778856 15681 831 HYUNDAI Sonata 2011 Sedan \n",
"19234 45804997 26108 836 HYUNDAI Tucson 2010 Jeep \n",
"19235 45793526 5331 1288 CHEVROLET Captiva 2007 Jeep \n",
"19236 45813273 470 753 HYUNDAI Sonata 2012 Sedan \n",
"\n",
" Leather interior Fuel type Engine volume Mileage Cylinders \\\n",
"0 Yes Hybrid 3.5 186005 km 6.0 \n",
"1 No Petrol 3 192000 km 6.0 \n",
"2 No Petrol 1.3 200000 km 4.0 \n",
"3 Yes Hybrid 2.5 168966 km 4.0 \n",
"4 Yes Petrol 1.3 91901 km 4.0 \n",
"... ... ... ... ... ... \n",
"19232 Yes CNG 2.0 Turbo 300000 km 4.0 \n",
"19233 Yes Petrol 2.4 161600 km 4.0 \n",
"19234 Yes Diesel 2 116365 km 4.0 \n",
"19235 Yes Diesel 2 51258 km 4.0 \n",
"19236 Yes Hybrid 2.4 186923 km 4.0 \n",
"\n",
" Gear box type Drive wheels Doors Wheel Color Airbags \n",
"0 Automatic 4x4 04-May Left wheel Silver 12 \n",
"1 Tiptronic 4x4 04-May Left wheel Black 8 \n",
"2 Variator Front 04-May Right-hand drive Black 2 \n",
"3 Automatic 4x4 04-May Left wheel White 0 \n",
"4 Automatic Front 04-May Left wheel Silver 4 \n",
"... ... ... ... ... ... ... \n",
"19232 Manual Rear 02-Mar Left wheel Silver 5 \n",
"19233 Tiptronic Front 04-May Left wheel Red 8 \n",
"19234 Automatic Front 04-May Left wheel Grey 4 \n",
"19235 Automatic Front 04-May Left wheel Black 4 \n",
"19236 Automatic Front 04-May Left wheel White 12 \n",
"\n",
"[19237 rows x 18 columns]"
]
},
"execution_count": 2,
2024-11-26 03:02:51 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"df = pd.read_csv(\"..//static//csv//car_price_prediction.csv\", sep=\",\")\n",
"df\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAroAAAIjCAYAAADslLiSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3gU1f7GP7O7STaFdEJL6L1HiigqKipSVFBpKsWGXrHrVbkqlqsitqvXK4r+lCYKAiJYkKaiKEqA0AMh9CQE0vtmszvz++N7NiEkINiAeD7Ps88mU86cmd1s3n3nPd9jWJZlodFoNBqNRqPR1DJsp7sDGo1Go9FoNBrNn4EWuhqNRqPRaDSaWokWuhqNRqPRaDSaWokWuhqNRqPRaDSaWokWuhqNRqPRaDSaWokWuhqNRqPRaDSaWokWuhqNRqPRaDSaWokWuhqNRqPRaDSaWokWuhqNRqPRaDSaWokWuhqNRqPRaDSaWokWurWc6dOnYxhGxcPpdNK6dWvuvvtuDh8+XG37w4cP8/DDD9O2bVuCgoIIDg6mW7duPPfcc+Tl5dV4jJ49e2IYBm+//fbv7u/YsWOr9NfhcBAXF8eIESPYvn37725fo9FoNBrN3wfH6e6A5q/h2WefpVmzZrhcLlavXs3bb7/NV199xdatWwkKCgIgISGBAQMGUFRUxE033US3bt0AWLduHS+++CLff/89y5Ytq9Lurl27SEhIoGnTpsyePZt//OMfv7uvAQEB/N///R8AHo+H3bt388477/D111+zfft2GjZs+LuPodFoNBqNpvajhe7fhP79+9O9e3cAbrvtNqKionjttddYtGgRI0eOJC8vjyFDhmC320lMTKRt27ZV9n/++ed57733qrX74YcfEhMTw6uvvsr111/Pvn37aNq06e/qq8Ph4KabbqqyrFevXgwaNIgvv/yS22+//Xe1r9FoNBqN5u+Bji78Tbn00ksB2Lt3LwBTp04lLS2N1157rZrIBahXrx5PPPFEteUfffQR119/PYMGDSIsLIyPPvqo2jYlJSXs2LGDrKys39zf+vXrAyKCffhiGfv27atYZpomnTt3xjAMpk+fXrH86aefpn379oSEhBAaGkqvXr347LPPKtY/9dRT+Pn5kZmZWe3Y48aNIzw8HJfLBcCiRYsYOHAgDRs2JCAggBYtWvDvf/8br9dbbd99+/ZViWIc/Th2m6P7CzB+/HgMw2Ds2LEVyz799FN69uxJZGQkgYGBtG3blsmTJ2NZVsU2+/fv56677qJNmzYEBgYSFRXF0KFDq1yno6/funXrqizPysrCMAyefvrpKstrWvbyyy9jGAYXX3xxleV79uxh6NChNGzYEJvNVnHOHTt2rHaNauK777771ev2Z53r008/jWEY1d6v69atq/Y6jR07lpCQkBOey9Htl5aW0rZtW9q2bUtpaWnFNjk5OTRo0IDzzz+/xvfRsedxvMexr09iYiL9+/cnNDSUkJAQ+vbty88//1yt3by8PB544AGaNm1KQEAAsbGxjB49uto1ODZadLzj7tixg+uvv57IyEicTifdu3dn8eLFJ7xOcOK/l5reZ0eOHOHWW2+lXr16OJ1OunTpwowZM2ps85VXXql2vI4dO1Zp0/e+++6776psN3DgwGrnOWHCBJxOJz/++OMJ9//xxx9xOp1MmDChSptpaWnccsst1KtXj4CAADp06MAHH3xQZRtfe/Pnz6/W95CQkCqfDafyeQgwf/58unfvTp06dapc45qu09H4jvP9999zxx13EBUVRWhoKKNHjyY3N7fKtif7WXnnnXfSqlUrgoKCiIyM5NJLL+WHH36osk3Tpk0xDIP777+/Wp/69euHYRgMGjSoyvKysjKeeuopWrZsSUBAAHFxcTzyyCOUlZVV2c4wDO6++25mz55NmzZtcDqddOvWje+//77Kdqfy2QDwzTffcOGFFxIcHEx4eDjXXHMNSUlJ1fqflpbGrbfeWnGdmjVrxj/+8Q/cbvev/s0ffdyxY8dWM5oOHjxIYGBgtffG3wnt6P5N2b17NwBRUVEALF68mMDAQK6//vqTbuOXX34hJSWFadOm4e/vz7XXXsvs2bP517/+VWW7tWvXcskll/DUU09V+4d4PHwfJF6vlz179vDoo48SFRVV7YPsWGbNmsWWLVuqLS8uLmbIkCE0bdqU0tJSpk+fznXXXceaNWvo2bMno0aN4tlnn2Xu3LncfffdFfu53W7mz5/Pddddh9PpBOSDPiQkhAcffJCQkBC++eYbJk6cSEFBAS+//HKN/Ro3bhwXXnghIGJ14cKFJzyPlJSUGh30goICzj33XMaMGYOfnx9ff/01jz32GA6Hg4ceegiQCMpPP/3EiBEjiI2NZd++fbz99ttcfPHFbN++vSKq8nvJy8tj0qRJ1ZZ7vV6uvvpq9u/fz/3330/r1q0xDIPnn3/+lI9x77330qNHDwBmzpzJ8uXLq6z/q871jyIwMJAZM2bQu3dvHn/8cV577TVAvtTk5+czffp07Hb7r7bjiyL5KCoqqhYb2rZtGxdeeCGhoaE88sgj+Pn5MXXqVC6++GJWrVrFueeeW7HvhRdeSFJSErfccgvnnHMOWVlZLF68mNTUVKKjo6u0Gx0dzX/+85+K30eNGlXtuL1796ZRo0Y89thjBAcH88knnzB48GAWLFjAkCFDfvX8Ro4cyYABA6osO1YolpaWcvHFF5OSksLdd99Ns2bNmDdvHmPHjiUvL4/77rvvV49zMnz//fd89dVX1Za/8MIL7Nq1iyFDhvDLL79UeT187N27l8GDBzNo0CBeeOGFiuWHDx+mV69eFQKrbt26LFmyhFtvvZWCgoIaxdxv4Xifh2vWrGHYsGF06dKFF198kbCwMLKysnjggQdOuu27776b8PBwnn76aXbu3Mnbb7/N/v37K8Q5nPxnpdvt5qabbiI2NpacnBymTp3KlVdeSVJSEo0bN67Yzul0Mnv2bF5++WX8/PwASE1NZeXKlRWfzz5M0+Tqq69m9erVjBs3jnbt2rFlyxb+85//kJycXMXoAFi1ahVz587l3nvvJSAggClTpnDllVeydu3ak/6CfjQrVqygf//+NG/enKeffprS0lLefPNNevfuzYYNGyoEaXp6Oj179iQvL49x48bRtm1b0tLSmD9/PiUlJVx00UXMmjWrol3f5+jjjz9esez8888/bj8mTpxYYdL8bbE0tZpp06ZZgLVixQorMzPTOnjwoDVnzhwrKirKCgwMtFJTUy3LsqyIiAirS5cup9T23XffbcXFxVmmaVqWZVnLli2zACsxMbHKdt9++60FWE899dSvtjlmzBgLqPZo1KiRtX79+hrPbe/evZZlWZbL5bIaN25s9e/f3wKsadOmHfc4R44csQDrlVdeqVh23nnnWeeee26V7T799FMLsL799tuKZSUlJdXau+OOO6ygoCDL5XJVWb5r1y4LsGbMmFGx7KmnnrKO/tPbu3dvtf4OGzbM6tixoxUXF2eNGTPmuOdhWZbVvn17a9CgQSfs35o1ayzAmjlzZsUy3/VLSEiosm1mZmaNr9exyx555BErJibG6tatm9WnT5+K5Tt37rQAa9KkSVX279Onj9WhQ4cTnosP33tp/vz5FcvGjx9vHfuR9Wecq+/1yczMrLJtQkJCtddpzJgxVnBw8AnPpaZrOWHCBMtms1nff/+9NW/ePAuwXn/99RO2c6rnMXjwYMvf39/avXt3xbL09HSrTp061kUXXVSxbOLEiRZgffrpp9WO5/vb9nHjjTdazZo1O+H59e3b1+rUqVOVvwXTNK3zzz/fatWq1QnPz/e38PLLL1db16FDhyrvs9dff90CrA8//LBimdvtts477zwrJCTEKigoOOU2fZ9VR/+9n3vuuRWfKce+jsXFxVb37t2tDh06WPn5+VX2z8vLs9q3b2/16NGj2vv01ltvtRo0aGBlZWVVWT5ixAgrLCysYntfe/PmzavW9+Dg4CqfDafyeThhwgQLsA4dOlSx7ETX6Wh8x+nWrZvldrsrlr/00ksWYC1atKhi2al8Vh7
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArAAAAIjCAYAAAD7tihbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5wURf7w8U/35LCzOcKy5JxzTqJIEAOCYsB46qmnnp5nznroGTGHU0BB8ADBgOScc44LLCxszruTp6fr+WOOfVwXEP0RTq7ed/N6SXVNdXXYme9UV1CEEAJJkiRJkiRJ+oNQL3QFJEmSJEmSJOm3kAGsJEmSJEmS9IciA1hJkiRJkiTpD0UGsJIkSZIkSdIfigxgJUmSJEmSpD8UGcBKkiRJkiRJfygygJUkSZIkSZL+UGQAK0mSJEmSJP2hyABWkiRJkiRJ+kORAawkSZIkSZL0hyID2D+QiRMnoihKjVdSUhIDBgxg7ty5F7p6kiRJ0nlUv379Wt8Hffr0YdasWSfNP2vWLIYMGUJCQgJms5m0tDRGjx7NkiVLTpr/p59+QlEU0tLS0HX9XB6KJP1mxgtdAem3e/HFF2nQoAFCCAoKCpg4cSJDhw7lhx9+YPjw4Re6epIkSdJ50r59ex555BEAcnNz+eSTT7jmmmv46KOPuOeeewAQQnD77bczceJEOnTowMMPP0xKSgp5eXnMmjWLSy65hNWrV9OzZ88aZU+ZMoX69etz5MgRlixZwqBBg8778UnSqShCCHGhKyGdmYkTJ3LbbbexceNGOnfuXJ1eVlZGcnIyo0aNYsqUKRewhpIkSdL5Ur9+fVq3bs2PP/5YnZafn0/jxo2pU6cO+/fvB+CNN97g0Ucf5aGHHuKtt95CUZQa5Xz11Vc0a9aMrl27Vqd5PB6Sk5MZN24cEyZMoF27dkyYMOH8HJgknQHZheAiEBMTg81mw2j8/w3qR44cQVEUJk6cWCPvfffdh6Io3HrrrdVp3377LV27diUuLg6bzUbz5s157bXXOPHbZunSpSiKctLHUl9//TWKorB27VoAduzYwa233krDhg2xWq2kpKRw++23U1JSctK6//IR2InXsmXLauT5eX0Bpk+fjqIo1K9fvzpt//79DBw4kJSUFCwWC+np6dxzzz2UlpZW5wkGgzz77LN06tSJ6OhoHA4Hffr0YenSpTXKP3H+3njjjVp1bt26Nf3796+R1r9//1ppGzdurD6en3O73TzyyCM0bNgQk8lU47iLi4tPep5Ot59XXnkFVVX5+uuvT3oMJ3v93BtvvEHPnj2Jj4/HZrPRqVMnZsyYcdL9T548ma5du2K324mNjaVv374sWLAAOPW1PPH6+bXSdZ133nmHVq1aYbVaSU5O5u6776asrKzG/urXr8/w4cNZsGAB7du3x2q10rJlS7799ttadTt8+DCjRo0iLi4Ou91O9+7dmTNnTo08y5Ytq1Eni8VC06ZNGTduHGfyW97v9/P888/TtGlTrFYrqampXHPNNRw6dOi07zvTe/jEuRk/fjxt2rTBarWSmJjI5ZdfzqZNm6rznOl5hkgg8sgjj5Ceno7FYqFZs2a88cYbJz3ek3VTUhSlxj13Is/P63Myzz//PC1btsTpdOJyuejevTuzZ8+ulW/69Ol06tQJm81GQkICN910Ezk5OTXy3HrrrTXqExsbS//+/Vm5cmWNfN999x3Dhg0jLS0Ni8VCo0aNeOmllwiHwzXy9e/fn9atW9eqyxtvvIGiKBw5cqQ67bdeuzO9rxVF4aGHHqpVh8GDB6Moyu9+mpaSkkKLFi3IysoCwOfzMW7cOJo3b159fL9088031wheIdLdwOfzMWrUKK6//nq+/fZb/H7/76qTJJ0LsgvBH1BFRQXFxcUIISgsLOS9997D7XZz0003nfZ9Bw8e5LPPPquVXllZSbdu3bjlllswmUzMmzePxx9/HKPRyCOPPEL//v1JT09nypQpXH311TXeO2XKFBo1akSPHj0AWLhwIYcPH+a2224jJSWF3bt38+mnn7J7927WrVt30g/PPn36cNdddwGwd+9e/vGPf5z2ODRN46mnnqqV7vF4qFu3LldccQUul4tdu3bxwQcfkJOTww8//FB9rP/6178YM2YMf/rTn6iqquLzzz9n8ODBbNiwgfbt259237/FY489dtL0Rx99lI8//pg77riDXr16YTKZ+Pbbb0/Zb+10JkyYwNNPP82bb77JDTfccNI8d911F3369AE46X7Gjx/PiBEjuPHGGwkGg0ybNo1Ro0bx448/MmzYsOp8L7zwAs8//zw9e/bkxRdfxGw2s379epYsWcJll13GO++8g9vtBv7/dXzyySdp0aIFAE6ns7qsu+++u/qJwgMPPEBWVhbvv/8+W7duZfXq1ZhMpuq8mZmZXHfdddxzzz3ccsstTJgwgVGjRjFv3jwuvfRSAAoKCujZsyder5cHHniA+Ph4Jk2axIgRI5gxY0at+/ZEvXw+H9988w1PPvkkSUlJ3HHHHac81+FwmOHDh7N48WKuv/56HnzwQaqqqli4cCG7du2iUaNGv3q9TjjVPQxwxx13MHHiRIYMGcKdd96JpmmsXLmSdevW1XjycumllzJ27Nga733zzTdrBEtCCEaMGMHSpUu54447aN++PfPnz+fRRx8lJyeHt99++6R1ePvtt0lISAAiP5B+D4/Hw9VXX039+vXx+XxMnDiRkSNHsnbt2upg6cQ90KVLF8aNG0dBQQHjx49n9erVbN26lZiYmOryEhISqut7/Phxxo8fz9ChQzl27Fh1vokTJ+J0Onn44YdxOp0sWbKEZ599lsrKSl5//fXfdRy/dLpr91vua6vVypQpU3j99der048fP87ixYuxWq2/u36hUIhjx44RHx8PwKpVqygtLeWhhx7CYDCccTlTpkxhwIABpKSkcP311/P444/zww8/MGrUqN9dN0k6q4T0hzFhwgQB1HpZLBYxceLEGnmzsrIEICZMmFCdNnr0aNG6dWuRnp4ubrnlltPuq2XLlmL48OHV/37iiSeExWIR5eXl1WmFhYXCaDSK5557rjrN6/XWKmvq1KkCECtWrKi1rU6dOuK2226r/vfSpUsFIJYuXVqdlpGRUaO+H374obBYLGLAgAEiIyPjtMdx7733CqfTWf1vTdNEIBCokaesrEwkJyeL22+/vTrtxPl7/fXXa5XZqlUr0a9fvxpp/fr1q5H2008/CUBcfvnl4pd/ZqmpqWLw4ME10p577jkBiKKiotMez8/3M2fOHGE0GsUjjzxy0ryZmZkCEJMmTaq1n5/75TULBoOidevWYuDAgTXKUlVVXH311SIcDtfIr+t6rX2f7DqesHLlSgGIKVOm1EifN29erfSMjAwBiJkzZ1anVVRUiNTUVNGhQ4fqtIceekgAYuXKldVpVVVVokGDBqJ+/frVdT5Zvfx+v1BVVdx777216vpzX3zxhQDEW2+9VWvbyc7Bz53pPbxkyRIBiAceeOC0+wDEfffdVyvPsGHDapQ3e/ZsAYiXX365Rr5rr71WKIoiDh48WCP9s88+E4A4evRoddov7+0Tn0MbN2487TH/UmFhoQDEG2+8IYSI3GdJSUmidevWwufzVef78ccfBSCeffbZ6rRbbrml1t/6p59+KgCxYcOG6rSTff7cfffdwm63C7/fX+OYWrVqVSvv66+/LgCRlZVVnXam1+633teXXnqpSEhIEDNmzKhOf+mll0TPnj1FRkaGGDZsWK36/VJGRoa47LLLRFFRkSgqKhLbt28X119/vQDEX/7yFyGEEOPHjxeAmDVr1q+Wd0JBQYEwGo3is88+q07r2bOnuPLKK8+4DEk612QXgj+gDz74gIULF7Jw4UImT57MgAEDuPPOO0/6WPWEzZs3M336dMaNG4eqnvyyFxcXc/z4cSZOnMjBgwfp27dv9baxY8cSCARqPFr+5ptv0DStRsuvzWar/m+/309xcTHdu3cHYMuWLbX2GQwGsVgsZ3zsXq+XF198kfvvv5969eqdNE9FRQUFBQUsXryYOXPm1DgOg8GA2WwGIo/
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAAJlCAYAAAD3gEJOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACkT0lEQVR4nOzdeXwTZf4H8E+SXilQkKsFKaDIitxQFMqhqAiyqKuyniDlEFYEfwLr6uIiKKgougq6iBeLuIoHeKwHIuDKaUWg9ACUG1qOFgHpmTvP74+akDRHc0wyk8zn/Xr1RTKZzDwJyWS+83yf76MRQggQERERERGpiFbuBhAREREREUUbAyEiIiIiIlIdBkJERERERKQ6DISIiIiIiEh1GAgREREREZHqMBAiIiIiIiLVYSBERERERESqw0CIiIiIiIhUh4EQERERERGpDgMhIiKiOPTee+/h6NGjzvvvvPMOTpw4IV+DiIgUhoEQUZSsWrUKGo3G61/Xrl3lbh4RxZnNmzfj0UcfxdGjR/Htt99iypQp0Gr5s09E5JAgdwOI1Obxxx/HFVdc4bz/zDPPyNgaIopX06dPx+DBg3HJJZcAAGbMmIFWrVrJ3CoiIuVgIEQUZTfccAMGDx7svP/222/jzJkz8jWIiOJSp06dcOjQIezevRvNmzdHhw4d5G4SEZGisI+cKErMZjMABJyacv78eUybNg2ZmZlITk7GZZddhueffx52u925ztGjR6HRaPDiiy96PL9r165uAZfDk08+6TU9z9u6K1euRFZWFvR6PZo3b47Ro0d7jDEYO3as1+1ddtllznXat2+Pm266CWvXrkXPnj2RkpKCzp0749NPP3Xb1rlz5/DII4+gW7duaNiwIdLS0jB8+HAUFBS4rbdhwwbnfvLz890eO3HiBHQ6HTQaDVatWuXRzp49e3q8zvnz50Oj0aBhw4Zuy5ctW4brrrsOLVu2RHJyMjp37owlS5Z4PN+f9u3be31/3nnnHY91ff3fjB071m2977//HoMGDcJFF13ktt7UqVP9tsXxvm3YsMFt+YgRI6DRaPDkk0+6LT9x4gTGjx+P9PR0JCcno0uXLvj3v//tdZsfffQRHn/8cWRkZKBBgwa45ZZbUFJS4rbu5s2bcccdd6Bt27ZITk5GZmYmpk+fDoPB4Lbe2LFj0bBhQxw+fBjDhg1DgwYN0Lp1a8ydOxdCCOd6c+bMgVarxXfffef2/EmTJiEpKcn5uQnmdQ8ePNjju+D4ntX9P/vll1/w5z//GU2bNkVKSgr69OmDL774AnWdP38e06dPR/v27ZGcnIw2bdpgzJgxzgsg3tp38uRJtG/fHn369EFVVZVz+enTpzFhwgSkp6cjJSUFPXr0wPLly322t0GDBujbty86dOiAKVOmeP081eXt9VZWViIrKwuXXHIJTp065bZ+IJ/bY8eO4cEHH8Tll18OvV6PZs2a4Y477nAbwxTI++X63ff15/r/KfVn2NvnY/v27c59O5w9exbDhw9HmzZtkJycjFatWmHUqFE4duyY23NffPFF9O/fH82aNYNer0dWVpbbccvB1/f7pptuQvv27d2WjR071mNZSUkJ9Ho9NBqN23vevn17j8/DypUrodFoPLZBFI/YI0QUJY5AKDk5ud51a2pqcM011+DEiRP4y1/+grZt2+KHH37AzJkzcerUKSxcuDDs9ixZssR54j9z5kyPx9955x2MGzcOV155JebPn4+ysjIsWrQIW7duxa5du9CkSRPnusnJyXj77bfdnt+oUSO3+wcOHMBdd92FBx54ADk5OVi2bBnuuOMOrFmzBjfccAMA4PDhw/j8889xxx134JJLLkFZWRneeOMNXHPNNdi7dy9at27tts2UlBQsW7YMixYtci5bvnw5kpKSYDQaPV5TQkIC9uzZg127dqFXr15urzUlJcXre9SlSxfccsstSEhIwJdffokHH3wQdrsdU6ZM8fXWeujZsyf++te/AgCOHDmC2bNn+13/P//5j/P29OnT3R47cuQIRowYgVatWmH27Nlo0aIFAOC+++4LuD2uNm3ahNWrV3ssLysrQ79+/ZwnYC1atMA333yDCRMmoKKiAtOmTXNb/5lnnoFGo8Fjjz2G06dPY+HChRgyZAjy8/Oh1+sB1J5g1dTUYPLkyWjWrBl++uknvPrqqzh+/DhWrlzptj2bzYYbb7wR/fr1w4IFC7BmzRrMmTMHVqsVc+fOBQDMmjULX375JSZMmICioiI0atQI3377Ld566y3MmzcPPXr0CPp1B2rPnj0YMGAALr74Yvz9739HgwYN8PHHH+PWW2/FJ598gttuuw0AUFVVhUGDBuHnn3/G+PHj0bt3b5w5cwZffPEFjh8/jubNm3tsu7y8HMOHD0diYiJWr17t/J4aDAYMHjwYBw8exNSpU3HJJZdg5cqVGDt2LM6fP4+HH37YZ3sPHjyIt956K6TXarFYMHLkSBQXF2Pr1q0+0+v8fW63b9+OH374AXfffTfatGmDo0ePYsmSJRg8eDD27t2L1NRUAPW/X1dccYXbft588038/PPPePnll53LunfvDiAyn2FvHnvsMY9lZrMZjRo1wsMPP4xmzZrh0KFDePXVV1FYWIiioiLneosWLcItt9yCUaNGwWw248MPP8Qdd9yBr776CiNGjPC5z2DNnj3b6zGxLqvVin/84x+S7ZdI8QQRRcXChQsFAFFQUOC2/JprrhFdunRxWzZv3jzRoEEDsX//frflf//734VOpxPFxcVCCCGOHDkiAIgXXnjBY39dunQR11xzjcfyxx9/XAAQZ86c8bmu2WwWLVu2FF27dhUGg8G5/KuvvhIAxOzZs53LcnJyRIMGDfy+9nbt2gkA4pNPPnEuKy8vF61atRK9evVyLjMajcJms7k998iRIyI5OVnMnTvXuez7778XAMQ999wjmjVrJkwmk/Oxjh07invvvVcAECtXrvRo58033yymTp3qXL5582ah1+vFrbfe6vE6ampqPF7LsGHDxKWXXur39bpq3bq1uOmmm5z3t2/fLgCIZcuWeaz7j3/8Q2g0Grdl7dq1Ezk5Oc77b7zxhgAgcnNz3dYDIKZMmeK3LY737fvvv3cu69u3rxg+fLgAIObMmeNcPmHCBNGqVSu3z4kQQtx9992icePGzvfGsc2LL75YVFRUONf7+OOPBQCxaNEi5zJv7+f8+fOFRqMRx44dcy7LyckRAMRDDz3kXGa328WIESNEUlKS+PXXX53Li4qKRFJSkrj//vvFb7/9Ji6++GLRp08fYbFYQnrd1157rbj66qvd2uj4nrn+n11//fWiW7duwmg0urWxf//+omPHjs5ls2fPFgDEp59+6vHa7Xa7R/uMRqMYPHiwaNmypTh48KDb+o5jyHvvvedcZjabRXZ2tmjYsKHz/ffW3jvvvFN07dpVZGZmun2evHF9vt1uF6NGjRKpqali27ZtXtcP5HPr7f8+NzdXABDvvvuuc1kg75ernJwc0a5dO6/tisRn+JprrnE7Vq5evVoAEDfeeKOo75RqwYIFHsfeuu+L2WwWXbt2Fdddd53bcl/f7xEjRni8/rrvye7du4VWq3V+3o8cOeJ8rO7/02uvvSaSk5PFtdde6/N9JYonTI0jipKzZ88CgPMKvj8rV650pj6dOXPG+TdkyBDYbDZs2rTJbf2amhq39c6cOQObzeZ1246rgt56QBx27NiB06dP48EHH3Rbb8SIEejUqRO+/vrrel9DXa1bt3ZeJQeAtLQ0jBkzBrt27UJpaSmA2p4lR+qgzWbD2bNn0bBhQ1x++eXIy8vz2ObNN98MjUbjTEfavHkzjh8/jrvuustnO8aPH48VK1bAZDIBqE1/u/3229G4cWOPdV2vApeXl+PMmTO45pprcPjwYZSXlwf0uo1Go9/32pXZbK63x7CyshIA0KxZs4C26c+nn36K7du347nnnnNbLoTAJ598gptvvhlCCLfP1bBhw1BeXu7x/zFmzBi3XsA///nPaNWqlVuvi+v7WV1djTNnzqB///4QQmDXrl0e7XNNBXJc1TebzVi/fr1
"text/plain": [
"<Figure size 1000x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArAAAAIjCAYAAAD7tihbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzddZxV1f7w8c/ep2POdMIwdHd3KxJyMUAxKOte9dpeW8TCuAbX1p8CCqISYtBId3cNMDAww3Sejr2eP85lHscZBK+E4nrjeb0866yz99px9v7O2isUIYRAkiRJkiRJkv4k1EtdAEmSJEmSJEn6LWQAK0mSJEmSJP2pyABWkiRJkiRJ+lORAawkSZIkSZL0pyIDWEmSJEmSJOlPRQawkiRJkiRJ0p+KDGAlSZIkSZKkPxUZwEqSJEmSJEl/KjKAlSRJkiRJkv5UZAArSZIkXVLTpk3j2LFjFe+nTJlCVlbWpSuQJEl/eDKAPYMpU6agKEqlV0JCAn369GHBggWXuniSJEmXjdWrV/Ovf/2LY8eOsWjRIu655x5UVd6eJEk6M/2lLsAf3fPPP0+dOnUQQpCbm8uUKVMYNGgQP/zwA0OGDLnUxZMkSfrTe/DBB+nduzd16tQB4KGHHiI5OfkSl0qSpD8yGcCexcCBA2nfvn3F+9tuu43ExERmzJghA1hJkqTzoHHjxhw5coQ9e/YQFxdHvXr1LnWRJEn6g5PPaH6jqKgoLBYLev3/j/2PHTuGoihMmTKlUt577rkHRVEYM2ZMRdqcOXPo2LEjMTExWCwWGjduzKuvvooQAoDly5ejKArffvttlXV/+eWXKIrC+vXrAdi1axdjxoyhbt26mM1mkpKSGDduHIWFhdWWvXbt2lWaRSiKwooVKyrl+Xl5AWbOnImiKNSuXbsi7eDBg/Tt25ekpCRMJhOpqan8/e9/p6ioqCKP3+/n2WefpV27dkRGRmKz2ejRowfLly+vtPzT++/f//53lTI3b96c3r17V0rr3bt3lbTNmzdXbM/POZ1OHn74YerWrYvBYKi03QUFBdXup19bz0svvYSqqnz55ZfVbkN1r5/797//TdeuXYmNjcVisdCuXTtmzZpV7fqnTZtGx44dsVqtREdH07NnTxYvXgyc+Viefv38WGmaxttvv02zZs0wm80kJiZy1113UVxcXGl9tWvXZsiQISxevJjWrVtjNptp2rQpc+bMqVK2o0ePMnz4cGJiYrBarXTu3Jl58+ZVyrNixYpKZTKZTDRs2JCJEydWnO9ncvq7Pz83AQYPHoyiKDz33HOV0rOyshg3bhyJiYmYTCaaNWvGZ599Vu0yv/76a5588kmSkpKw2WwMHTqUEydOVMq7evVqhg8fTq1atSrO7wcffBCPx1Mp35gxY7Db7Rw9epQBAwZgs9lISUnh+eefr7SN48ePR1VVfvrpp0rfv/POOzEajezcufM3b3d15+eZrkUHDhzg+uuvJyYmBrPZTPv27fn+++/5pZKSEh588EFq166NyWSiZs2ajBo1quK3Ul35srOzqV27Nu3bt8fpdFak5+XlVfzBbzabadWqFVOnTj1jeW02G506daJevXrVXjurU932lpeX065dO+rUqcOpU6cq5X/uueeq/b38fD3Hjx/n7rvvplGjRlgsFmJjYxk+fHilNrrnsr9+ef5X9/r58Tzf5/C5XicLCwsZOHAgNWvWxGQykZyczM0338zx48crffdcr12KonDvvfdWSR8yZEil6xKEfz+/TDtx4gQWiwVFUSrt83O9N0l/HbIG9ixKS0spKChACEFeXh7vvPMOTqeTW2655Ve/d/jwYT755JMq6WVlZXTq1InRo0djMBhYuHAhjz/+OHq9nocffpjevXuTmprK9OnTueaaayp9d/r06dSrV48uXboAsGTJEo4ePcrYsWNJSkpi7969fPzxx+zdu5cNGzZUCZ4AevTowZ133gnA/v37efnll391O4LBIE899VSVdJfLRc2aNbn66qtxOBzs2bOH9957j6ysLH744YeKbf2///s/Ro4cyR133EF5eTmffvopAwYMYNOmTbRu3fpX1/1bPPbYY9WmP/roo3z44YfcdtttdOvWDYPBwJw5c6r9A+FsJk+ezNNPP80bb7zBTTfdVG2eO++8kx49egBUu55JkyYxdOhQbr75Zvx+P1999RXDhw/nxx9/ZPDgwRX5JkyYwHPPPUfXrl15/vnnMRqNbNy4kWXLlnHllVfy9ttvVwQLp4/jk08+SZMmTQCw2+0Vy7rrrruYMmUKY8eO5b777iMjI4N3332X7du3s3btWgwGQ0Xe9PR0brjhBv7+978zevRoJk+ezPDhw1m4cCFXXHEFALm5uXTt2hW32819991HbGwsU6dOZejQocyaNavKeXu6XB6Pp+LGm5CQwG233fab9v+qVauYP39+lfTc3Fw6d+5cceOMj49nwYIF3HbbbZSVlfHAAw9Uyv/SSy+hKAqPPfYYeXl5vP322/Tv358dO3ZgsViA8I3R7Xbzj3/8g9jYWDZt2sQ777zDyZMnmTlzZqXlhUIhrrrqKjp37sxrr73GwoULGT9+PMFgkOeffx6Ap59+mh9++IHbbruN3bt3ExERwaJFi/jkk0944YUXaNWq1W/e7nO1d+9eunXrRo0aNXj88cex2Wx88803DBs2jNmzZ1ccL6fTSY8ePdi/fz/jxo2jbdu2FBQU8P3333Py5Eni4uKqLLu0tJSBAwdiMBiYP39+xXnn8Xjo3bs3hw8f5t5776VOnTrMnDmTMWPGUFJSwv3333/G8p7p2nkuAoEA1113HZmZmaxdu/aMzRC++OKLiv9/8MEHK322efNm1q1bx4033kjNmjU5duwYH3zwAb1792bfvn1YrVbg7PurSZMmldbz8ccfs3//ft56662KtJYtWwIX5hyuTnXXSb/fT0REBPfffz+xsbEcOXKEd955h127drF79+6KfOd67fq9nn32Wbxe71nzneneJP2FCKlakydPFkCVl8lkElOmTKmUNyMjQwBi8uTJFWkjRowQzZs3F6mpqWL06NG/uq6mTZuKIUOGVLx/4oknhMlkEiUlJRVpeXl5Qq/Xi/Hjx1ekud3uKsuaMWOGAMSqVauqfFajRg0xduzYivfLly8XgFi+fHlFWlpaWqXyvv/++8JkMok+ffqItLS0X92Ou+++W9jt9or3wWBQ+Hy+SnmKi4tFYmKiGDduXEXa6f33+uuvV1lms2bNRK9evSql9erVq1La/PnzBSCuuuoq8ctTOjk5WQwYMKBS2vjx4wUg8vPzf3V7fr6eefPmCb1eLx5++OFq86anpwtATJ06tcp6fu6Xx8zv94vmzZuLvn37VlqWqqrimmuuEaFQqFJ+TdOqrLu643ja6tWrBSCmT59eKX3hwoVV0tPS0gQgZs+eXZFWWloqkpOTRZs2bSrSHnjgAQGI1atXV6SVl5eLOnXqiNq1a1eUubpyeb1eoaqquPvuu6uU9Wzb1KlTJzFw4EABVPod3HbbbSI5OVkUFBRUWsaNN94oIiMjK/b56WXWqFFDlJWVVeT75ptvBCAmTZpUkVbdb2vixIlCURRx/PjxirTRo0cLQPzzn/+sSNM0TQwePFgYjcZK59ju3buF0WgUt99+uyguLhY1atQQ7du3F4FA4H/a7j59+oiePXtWKmN116J+/fqJFi1aCK/XW6mMXbt2FQ0aNKhIe/bZZwUg5syZU2XbT593Py+f1+sVvXv3FgkJCeLw4cOV8r/99tsCENOmTatI8/v9okuXLsJut1fs/9977fz59zVNEzfffLOwWq1i48aN1eZ/6qmnhKIoldJ+ec2r7tivX79eAOLzzz+vSDuX/fVzo0ePPuM19EKcw7/lOvlLr732mgAqledcrl1CCAGIe+65p8oyBw8eXGX7f7lP9uzZI1RVrTjfMzIyKj77Pfcm6fIkmxCcxXvvvceSJUtYsmQJ06ZNo0+fPtx+++3VPlY9bevWrcycOZOJEyeesSdtQUEBJ0+eZMqUKRw+fJiePXtWfDZq1Ch8Pl+lxzNff/01wWCwUs3vz//
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Коэффициент силуэта для K-means: 0.0203\n",
"Коэффициент силуэта для иерархической кластеризации: -0.1579\n"
]
}
],
"source": [
"# Шаг 1: Импорт необходимых библиотек\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.decomposition import PCA\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.cluster import KMeans, AgglomerativeClustering\n",
"from sklearn.metrics import silhouette_score\n",
"from scipy.cluster.hierarchy import dendrogram, linkage\n",
"\n",
"# Шаг 2: Предобработка данных\n",
"# Удалим колонку ID, которая не имеет смысла для анализа\n",
"df = df.drop(columns=[\"ID\"])\n",
"\n",
"# Преобразуем категориальные переменные в числовые\n",
"df = pd.get_dummies(df, drop_first=True)\n",
"\n",
"# Нормализуем данные (все числовые данные приводим к одному масштабу)\n",
"scaler = StandardScaler()\n",
"df_scaled = scaler.fit_transform(df)\n",
"\n",
"# Шаг 3: Понижение размерности с помощью PCA для визуализации\n",
"pca = PCA(n_components=2)\n",
"df_pca = pca.fit_transform(df_scaled)\n",
"\n",
"# Визуализация данных после понижения размерности\n",
"plt.figure(figsize=(8, 6))\n",
"plt.scatter(df_pca[:, 0], df_pca[:, 1], c='blue', edgecolor='k', alpha=0.6)\n",
"plt.title(\"PCA: Визуализация данных после понижения размерности\")\n",
"plt.xlabel(\"Компонента 1\")\n",
"plt.ylabel(\"Компонента 2\")\n",
"plt.show()\n",
"\n",
"# Шаг 4: Выбор количества кластеров с помощью метода локтя и коэффициента силуэта\n",
"# Метод локтя\n",
"inertia = []\n",
"for k in range(1, 11):\n",
" kmeans = KMeans(n_clusters=k, random_state=42)\n",
" kmeans.fit(df_scaled)\n",
" inertia.append(kmeans.inertia_)\n",
"\n",
"plt.figure(figsize=(8, 6))\n",
"plt.plot(range(1, 11), inertia, marker='o')\n",
"plt.title('Метод локтя для выбора количества кластеров')\n",
"plt.xlabel('Количество кластеров')\n",
"plt.ylabel('Инерция')\n",
"plt.show()\n",
"\n",
"# Метод силуэта\n",
"silhouette_scores = []\n",
"for k in range(2, 11): # начинаем с 2, так как для одного кластера не имеет смысла вычислять силуэт\n",
" kmeans = KMeans(n_clusters=k, random_state=42)\n",
" kmeans.fit(df_scaled)\n",
" score = silhouette_score(df_scaled, kmeans.labels_)\n",
" silhouette_scores.append(score)\n",
"\n",
"plt.figure(figsize=(8, 6))\n",
"plt.plot(range(2, 11), silhouette_scores, marker='o')\n",
"plt.title('Коэффициент силуэта для различных количеств кластеров')\n",
"plt.xlabel('Количество кластеров')\n",
"plt.ylabel('Коэффициент силуэта')\n",
"plt.show()\n",
"\n",
"# Шаг 5: Кластеризация с выбранным количеством кластеров (например, 3)\n",
"kmeans = KMeans(n_clusters=3, random_state=42)\n",
"df['Cluster'] = kmeans.fit_predict(df_scaled)\n",
"\n",
"# Визуализация кластеров на основе PCA\n",
"plt.figure(figsize=(8, 6))\n",
"plt.scatter(df_pca[:, 0], df_pca[:, 1], c=df['Cluster'], cmap='viridis', edgecolor='k', alpha=0.6)\n",
"plt.title(\"Визуализация кластеров с использованием PCA\")\n",
"plt.xlabel(\"Компонента 1\")\n",
"plt.ylabel(\"Компонента 2\")\n",
"plt.colorbar(label='Cluster')\n",
"plt.show()\n",
"\n",
"# Шаг 6: Иерархическая кластеризация\n",
"Z = linkage(df_scaled, method='ward')\n",
"\n",
"plt.figure(figsize=(10, 7))\n",
"dendrogram(Z)\n",
"plt.title(\"Дендограмма для иерархической кластеризации\")\n",
"plt.show()\n",
"\n",
"# Применение иерархической кластеризации с выбранным количеством кластеров\n",
"hierarchical = AgglomerativeClustering(n_clusters=3)\n",
"df['Hierarchical Cluster'] = hierarchical.fit_predict(df_scaled)\n",
"\n",
"# Визуализация кластеров для иерархической кластеризации\n",
"plt.figure(figsize=(8, 6))\n",
"plt.scatter(df_pca[:, 0], df_pca[:, 1], c=df['Hierarchical Cluster'], cmap='viridis', edgecolor='k', alpha=0.6)\n",
"plt.title(\"Визуализация кластеров иерархической кластеризации\")\n",
"plt.xlabel(\"Компонента 1\")\n",
"plt.ylabel(\"Компонента 2\")\n",
"plt.colorbar(label='Cluster')\n",
"plt.show()\n",
"\n",
"# Шаг 7: Оценка качества кластеризации\n",
"silhouette_kmeans = silhouette_score(df_scaled, df['Cluster'])\n",
"silhouette_hierarchical = silhouette_score(df_scaled, df['Hierarchical Cluster'])\n",
"\n",
"print(f\"Коэффициент силуэта для K-means: {silhouette_kmeans:.4f}\")\n",
"print(f\"Коэффициент силуэта для иерархической кластеризации: {silhouette_hierarchical:.4f}\")\n"
]
2024-11-26 03:02:51 +04:00
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
2024-11-26 03:02:51 +04:00
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}