{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "source": [
        "from glob import glob\n",
        "import pandas as pd\n",
        "import matplotlib as mpl\n",
        "from matplotlib import pyplot as plt\n",
        "import random\n",
        "import numpy as np\n",
        "from tqdm.auto import tqdm"
      ],
      "metadata": {
        "id": "3u1ECNO-Tef3"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Let's load a toy dataset just to start"
      ],
      "metadata": {
        "id": "SkKp8qu0V1WC"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.datasets import load_wine\n",
        "\n",
        "wine_data = load_wine()\n",
        "# Convert data to pandas dataframe\n",
        "wine_df = pd.DataFrame(wine_data.data, columns=wine_data.feature_names)\n",
        "\n",
        "# Add the target label\n",
        "wine_df[\"target\"] = wine_data.target\n",
        "\n",
        "# Take a preview\n",
        "wine_df"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 443
        },
        "id": "XaVlHJTSSNkR",
        "outputId": "c03919ec-b62a-4228-f669-05c3a6511ab5"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "     alcohol  malic_acid   ash  alcalinity_of_ash  magnesium  total_phenols  \\\n",
              "0      14.23        1.71  2.43               15.6      127.0           2.80   \n",
              "1      13.20        1.78  2.14               11.2      100.0           2.65   \n",
              "2      13.16        2.36  2.67               18.6      101.0           2.80   \n",
              "3      14.37        1.95  2.50               16.8      113.0           3.85   \n",
              "4      13.24        2.59  2.87               21.0      118.0           2.80   \n",
              "..       ...         ...   ...                ...        ...            ...   \n",
              "173    13.71        5.65  2.45               20.5       95.0           1.68   \n",
              "174    13.40        3.91  2.48               23.0      102.0           1.80   \n",
              "175    13.27        4.28  2.26               20.0      120.0           1.59   \n",
              "176    13.17        2.59  2.37               20.0      120.0           1.65   \n",
              "177    14.13        4.10  2.74               24.5       96.0           2.05   \n",
              "\n",
              "     flavanoids  nonflavanoid_phenols  proanthocyanins  color_intensity   hue  \\\n",
              "0          3.06                  0.28             2.29             5.64  1.04   \n",
              "1          2.76                  0.26             1.28             4.38  1.05   \n",
              "2          3.24                  0.30             2.81             5.68  1.03   \n",
              "3          3.49                  0.24             2.18             7.80  0.86   \n",
              "4          2.69                  0.39             1.82             4.32  1.04   \n",
              "..          ...                   ...              ...              ...   ...   \n",
              "173        0.61                  0.52             1.06             7.70  0.64   \n",
              "174        0.75                  0.43             1.41             7.30  0.70   \n",
              "175        0.69                  0.43             1.35            10.20  0.59   \n",
              "176        0.68                  0.53             1.46             9.30  0.60   \n",
              "177        0.76                  0.56             1.35             9.20  0.61   \n",
              "\n",
              "     od280/od315_of_diluted_wines  proline  target  \n",
              "0                            3.92   1065.0       0  \n",
              "1                            3.40   1050.0       0  \n",
              "2                            3.17   1185.0       0  \n",
              "3                            3.45   1480.0       0  \n",
              "4                            2.93    735.0       0  \n",
              "..                            ...      ...     ...  \n",
              "173                          1.74    740.0       2  \n",
              "174                          1.56    750.0       2  \n",
              "175                          1.56    835.0       2  \n",
              "176                          1.62    840.0       2  \n",
              "177                          1.60    560.0       2  \n",
              "\n",
              "[178 rows x 14 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-d39fc792-aa0b-4a72-bde8-e487c4e9693b\" class=\"colab-df-container\">\n",
              "    <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>alcohol</th>\n",
              "      <th>malic_acid</th>\n",
              "      <th>ash</th>\n",
              "      <th>alcalinity_of_ash</th>\n",
              "      <th>magnesium</th>\n",
              "      <th>total_phenols</th>\n",
              "      <th>flavanoids</th>\n",
              "      <th>nonflavanoid_phenols</th>\n",
              "      <th>proanthocyanins</th>\n",
              "      <th>color_intensity</th>\n",
              "      <th>hue</th>\n",
              "      <th>od280/od315_of_diluted_wines</th>\n",
              "      <th>proline</th>\n",
              "      <th>target</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>14.23</td>\n",
              "      <td>1.71</td>\n",
              "      <td>2.43</td>\n",
              "      <td>15.6</td>\n",
              "      <td>127.0</td>\n",
              "      <td>2.80</td>\n",
              "      <td>3.06</td>\n",
              "      <td>0.28</td>\n",
              "      <td>2.29</td>\n",
              "      <td>5.64</td>\n",
              "      <td>1.04</td>\n",
              "      <td>3.92</td>\n",
              "      <td>1065.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>13.20</td>\n",
              "      <td>1.78</td>\n",
              "      <td>2.14</td>\n",
              "      <td>11.2</td>\n",
              "      <td>100.0</td>\n",
              "      <td>2.65</td>\n",
              "      <td>2.76</td>\n",
              "      <td>0.26</td>\n",
              "      <td>1.28</td>\n",
              "      <td>4.38</td>\n",
              "      <td>1.05</td>\n",
              "      <td>3.40</td>\n",
              "      <td>1050.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>13.16</td>\n",
              "      <td>2.36</td>\n",
              "      <td>2.67</td>\n",
              "      <td>18.6</td>\n",
              "      <td>101.0</td>\n",
              "      <td>2.80</td>\n",
              "      <td>3.24</td>\n",
              "      <td>0.30</td>\n",
              "      <td>2.81</td>\n",
              "      <td>5.68</td>\n",
              "      <td>1.03</td>\n",
              "      <td>3.17</td>\n",
              "      <td>1185.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>14.37</td>\n",
              "      <td>1.95</td>\n",
              "      <td>2.50</td>\n",
              "      <td>16.8</td>\n",
              "      <td>113.0</td>\n",
              "      <td>3.85</td>\n",
              "      <td>3.49</td>\n",
              "      <td>0.24</td>\n",
              "      <td>2.18</td>\n",
              "      <td>7.80</td>\n",
              "      <td>0.86</td>\n",
              "      <td>3.45</td>\n",
              "      <td>1480.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>13.24</td>\n",
              "      <td>2.59</td>\n",
              "      <td>2.87</td>\n",
              "      <td>21.0</td>\n",
              "      <td>118.0</td>\n",
              "      <td>2.80</td>\n",
              "      <td>2.69</td>\n",
              "      <td>0.39</td>\n",
              "      <td>1.82</td>\n",
              "      <td>4.32</td>\n",
              "      <td>1.04</td>\n",
              "      <td>2.93</td>\n",
              "      <td>735.0</td>\n",
              "      <td>0</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",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>173</th>\n",
              "      <td>13.71</td>\n",
              "      <td>5.65</td>\n",
              "      <td>2.45</td>\n",
              "      <td>20.5</td>\n",
              "      <td>95.0</td>\n",
              "      <td>1.68</td>\n",
              "      <td>0.61</td>\n",
              "      <td>0.52</td>\n",
              "      <td>1.06</td>\n",
              "      <td>7.70</td>\n",
              "      <td>0.64</td>\n",
              "      <td>1.74</td>\n",
              "      <td>740.0</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>174</th>\n",
              "      <td>13.40</td>\n",
              "      <td>3.91</td>\n",
              "      <td>2.48</td>\n",
              "      <td>23.0</td>\n",
              "      <td>102.0</td>\n",
              "      <td>1.80</td>\n",
              "      <td>0.75</td>\n",
              "      <td>0.43</td>\n",
              "      <td>1.41</td>\n",
              "      <td>7.30</td>\n",
              "      <td>0.70</td>\n",
              "      <td>1.56</td>\n",
              "      <td>750.0</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>175</th>\n",
              "      <td>13.27</td>\n",
              "      <td>4.28</td>\n",
              "      <td>2.26</td>\n",
              "      <td>20.0</td>\n",
              "      <td>120.0</td>\n",
              "      <td>1.59</td>\n",
              "      <td>0.69</td>\n",
              "      <td>0.43</td>\n",
              "      <td>1.35</td>\n",
              "      <td>10.20</td>\n",
              "      <td>0.59</td>\n",
              "      <td>1.56</td>\n",
              "      <td>835.0</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>176</th>\n",
              "      <td>13.17</td>\n",
              "      <td>2.59</td>\n",
              "      <td>2.37</td>\n",
              "      <td>20.0</td>\n",
              "      <td>120.0</td>\n",
              "      <td>1.65</td>\n",
              "      <td>0.68</td>\n",
              "      <td>0.53</td>\n",
              "      <td>1.46</td>\n",
              "      <td>9.30</td>\n",
              "      <td>0.60</td>\n",
              "      <td>1.62</td>\n",
              "      <td>840.0</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>177</th>\n",
              "      <td>14.13</td>\n",
              "      <td>4.10</td>\n",
              "      <td>2.74</td>\n",
              "      <td>24.5</td>\n",
              "      <td>96.0</td>\n",
              "      <td>2.05</td>\n",
              "      <td>0.76</td>\n",
              "      <td>0.56</td>\n",
              "      <td>1.35</td>\n",
              "      <td>9.20</td>\n",
              "      <td>0.61</td>\n",
              "      <td>1.60</td>\n",
              "      <td>560.0</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>178 rows × 14 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d39fc792-aa0b-4a72-bde8-e487c4e9693b')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-d39fc792-aa0b-4a72-bde8-e487c4e9693b button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-d39fc792-aa0b-4a72-bde8-e487c4e9693b');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-ba95a55d-e1ab-4190-b84b-1d3d25a9615e\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-ba95a55d-e1ab-4190-b84b-1d3d25a9615e')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-ba95a55d-e1ab-4190-b84b-1d3d25a9615e button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "  <div id=\"id_596df643-8180-4b83-b961-2586402e2eb2\">\n",
              "    <style>\n",
              "      .colab-df-generate {\n",
              "        background-color: #E8F0FE;\n",
              "        border: none;\n",
              "        border-radius: 50%;\n",
              "        cursor: pointer;\n",
              "        display: none;\n",
              "        fill: #1967D2;\n",
              "        height: 32px;\n",
              "        padding: 0 0 0 0;\n",
              "        width: 32px;\n",
              "      }\n",
              "\n",
              "      .colab-df-generate:hover {\n",
              "        background-color: #E2EBFA;\n",
              "        box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "        fill: #174EA6;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate {\n",
              "        background-color: #3B4455;\n",
              "        fill: #D2E3FC;\n",
              "      }\n",
              "\n",
              "      [theme=dark] .colab-df-generate:hover {\n",
              "        background-color: #434B5C;\n",
              "        box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "        filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "        fill: #FFFFFF;\n",
              "      }\n",
              "    </style>\n",
              "    <button class=\"colab-df-generate\" onclick=\"generateWithVariable('wine_df')\"\n",
              "            title=\"Generate code using this dataframe.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "    <script>\n",
              "      (() => {\n",
              "      const buttonEl =\n",
              "        document.querySelector('#id_596df643-8180-4b83-b961-2586402e2eb2 button.colab-df-generate');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      buttonEl.onclick = () => {\n",
              "        google.colab.notebook.generateWithVariable('wine_df');\n",
              "      }\n",
              "      })();\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "wine_df",
              "summary": "{\n  \"name\": \"wine_df\",\n  \"rows\": 178,\n  \"fields\": [\n    {\n      \"column\": \"alcohol\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.8118265380058577,\n        \"min\": 11.03,\n        \"max\": 14.83,\n        \"num_unique_values\": 126,\n        \"samples\": [\n          11.62,\n          13.64,\n          13.69\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"malic_acid\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1.1171460976144627,\n        \"min\": 0.74,\n        \"max\": 5.8,\n        \"num_unique_values\": 133,\n        \"samples\": [\n          1.21,\n          2.83,\n          1.8\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"ash\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.2743440090608148,\n        \"min\": 1.36,\n        \"max\": 3.23,\n        \"num_unique_values\": 79,\n        \"samples\": [\n          2.31,\n          2.43,\n          2.52\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"alcalinity_of_ash\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 3.3395637671735052,\n        \"min\": 10.6,\n        \"max\": 30.0,\n        \"num_unique_values\": 63,\n        \"samples\": [\n          25.5,\n          28.5,\n          15.6\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"magnesium\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 14.282483515295668,\n        \"min\": 70.0,\n        \"max\": 162.0,\n        \"num_unique_values\": 53,\n        \"samples\": [\n          126.0,\n          85.0,\n          162.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"total_phenols\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.6258510488339891,\n        \"min\": 0.98,\n        \"max\": 3.88,\n        \"num_unique_values\": 97,\n        \"samples\": [\n          1.68,\n          2.11,\n          1.35\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"flavanoids\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.9988586850169465,\n        \"min\": 0.34,\n        \"max\": 5.08,\n        \"num_unique_values\": 132,\n        \"samples\": [\n          3.18,\n          2.5,\n          3.17\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"nonflavanoid_phenols\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.12445334029667939,\n        \"min\": 0.13,\n        \"max\": 0.66,\n        \"num_unique_values\": 39,\n        \"samples\": [\n          0.58,\n          0.41,\n          0.39\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"proanthocyanins\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.5723588626747611,\n        \"min\": 0.41,\n        \"max\": 3.58,\n        \"num_unique_values\": 101,\n        \"samples\": [\n          0.75,\n          1.77,\n          1.42\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"color_intensity\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 2.318285871822413,\n        \"min\": 1.28,\n        \"max\": 13.0,\n        \"num_unique_values\": 132,\n        \"samples\": [\n          2.95,\n          3.3,\n          5.1\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"hue\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.22857156582982338,\n        \"min\": 0.48,\n        \"max\": 1.71,\n        \"num_unique_values\": 78,\n        \"samples\": [\n          1.22,\n          1.04,\n          1.45\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"od280/od315_of_diluted_wines\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.7099904287650505,\n        \"min\": 1.27,\n        \"max\": 4.0,\n        \"num_unique_values\": 122,\n        \"samples\": [\n          4.0,\n          1.82,\n          1.59\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"proline\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 314.9074742768489,\n        \"min\": 278.0,\n        \"max\": 1680.0,\n        \"num_unique_values\": 121,\n        \"samples\": [\n          1375.0,\n          1270.0,\n          735.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"target\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0,\n        \"min\": 0,\n        \"max\": 2,\n        \"num_unique_values\": 3,\n        \"samples\": [\n          0,\n          1,\n          2\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "wine_df.target.value_counts().plot(kind=\"pie\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 423
        },
        "id": "9kygJ8kEfILW",
        "outputId": "49fdf454-8383-4c74-ef52-0e106b7844c5"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<Axes: ylabel='count'>"
            ]
          },
          "metadata": {},
          "execution_count": 6
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## example: Data preprocessing"
      ],
      "metadata": {
        "id": "GT1aoI5KVy2B"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Split data into features and label\n",
        "X = wine_df[wine_data.feature_names].copy()\n",
        "y = wine_df[\"target\"].copy()\n",
        "\n",
        "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n",
        "X[\"alcohol\"].plot(kind=\"box\", ax=axs[0])\n",
        "X[\"alcohol\"].plot(kind=\"hist\", ax=axs[1])\n",
        "plt.show()\n",
        "\n",
        "\n",
        "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n",
        "X[\"proline\"].plot(kind=\"box\", ax=axs[0], color=\"red\")\n",
        "X[\"proline\"].plot(kind=\"hist\", ax=axs[1], color=\"red\")\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 570
        },
        "id": "Y1v4rV75S0qw",
        "outputId": "b8719b4f-8abf-4b03-dbd6-5ae558e7cad3"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x300 with 2 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz0AAAEXCAYAAACHwCoMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKuJJREFUeJzt3XlwFHXC//HPQJIBckECIQkkhENArsCiIgVa4diQwMO9y7VySbkP++AZEIy7Kln1iYhy7BKhfApBaxdxeRZ4FAt4ALmUwyU4IOtuJBEIkAQQNCEBhpj07w9/zLMjSciQmXTSeb+qurSP6f5Ml8z44dvTbTMMwxAAAAAAWFQjswMAAAAAgC9RegAAAABYGqUHAAAAgKVRegAAAABYGqUHAAAAgKVRegAAAABYGqUHAAAAgKVRegAAAABYGqUHAAAAgKVRegAAAABYmselZ9++fRo5cqSio6Nls9m0efNmt/UzZsyQzWZzm5KSkryVFwAAAAA84nHpKSkpUXx8vDIyMirdJikpSfn5+a7p/fffr1FIAAAAALhbfp6+IDk5WcnJyVVuY7fbFRkZeVeBysvLlZeXp+DgYNlstrvaBwDg7hiGoatXryo6OlqNGnEF9C18NwGAObz1veRx6amOPXv2KCIiQi1atNDgwYP1yiuvKDw8vMJtnU6nnE6na/78+fPq1q2bL2IBAKrp7Nmzatu2rdkx6oy8vDzFxMSYHQMAGqyafi95vfQkJSVp3Lhxat++vXJycvT8888rOTlZBw8eVOPGjW/bPj09XWlpabctP3v2rEJCQrwdDwBQhaKiIsXExCg4ONjsKHXKrfPBdxMA1C5vfS/ZDMMw7vrFNps2bdqkMWPGVLrNN998o44dO2rnzp0aMmTIbet/OtJz640VFhbyxQIAtayoqEihoaF8Bv8E5wUAzOGtz1+fX7DdoUMHtWzZUtnZ2RWut9vtCgkJcZsAAAAAwFt8XnrOnTuny5cvKyoqyteHAgAAAIDbePybnuLiYrdRm1OnTsnhcCgsLExhYWFKS0vT+PHjFRkZqZycHM2fP1+dOnXSsGHDvBocAAAAAKrD49Jz5MgRDRo0yDWfkpIiSZo+fbpWrlyp48eP691339X333+v6OhoJSYm6uWXX5bdbvdeagAAAACoJo9LT0JCgqq698H27dtrFAgAAAAAvIknzwEAAACwNEoPAAAAAEvz+sNJAau4frNMOZeKPX7djdIynfvuutq2aKom/rc/kLcqHVsFqWmAZ68BAABA1Sg9QCVyLhXr3/74aa0ec8sTA9WjTWitHhMAGoK45z429finXxth6vGBho7SA1SiY6sgbXlioMevy75YrKc/cGjZxN7qFBHk8TEBAADgXZQeoBJNAxrXaNSlU0QQozYAAAB1ADcyAADUaytXrlSvXr0UEhKikJAQ9e/fX1u3bnWtv3HjhubMmaPw8HAFBQVp/PjxunDhgomJAQC1jdIDAKjX2rZtq9dee02ZmZk6cuSIBg8erNGjR+vvf/+7JOmZZ57RRx99pA0bNmjv3r3Ky8vTuHHjTE4NAKhNXN4GAKjXRo4c6Tb/6quvauXKlTp06JDatm2r1atXa926dRo8eLAkac2aNbr33nt16NAhPfjgg2ZEBgDUMkZ6AACWUVZWpvXr16ukpET9+/dXZmamSktLNXToUNc2Xbt2VWxsrA4ePFjpfpxOp4qKitwmAED9RekBANR7X375pYKCgmS32zV79mxt2rRJ3bp1U0FBgQICAtS8eXO37Vu3bq2CgoJK95eenq7Q0FDXFBMT4+N3AADwJUoPAKDe69KlixwOhw4fPqzf/OY3mj59ur766qu73l9qaqoKCwtd09mzZ72YFgBQ2/hNDwCg3gsICFCnTp0kSX379tXf/vY3LV++XBMnTtTNmzf1/fffu432XLhwQZGRkZXuz263y263+zo2AKCWMNIDALCc8vJyOZ1O9e3bV/7+/tq1a5drXVZWlnJzc9W/f38TEwIAahMjPQCAei01NVXJycmKjY3V1atXtW7dOu3Zs0fbt29XaGioZs2apZSUFIWFhSkkJERPPPGE+vfvz53bAKABofQAAOq1ixcvatq0acrPz1doaKh69eql7du36+c//7kkaenSpWrUqJHGjx8vp9OpYcOG6a233jI5NQCgNlF6AAD12urVq6tc36RJE2VkZCgjI6OWEgEA6hp+0wMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0ig9AAAAACyN0gMAAADA0vzMDgAAAADfinvuY1OPf/q1EaYeH2CkBwAAAICl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bm7gTXweeBfn07s4n97HOfUub55Pm2G1+5ICAAAAwL/gNz0AAAAALI3SAwAAAMDSKD0AAAAALI3SA1Tg9OnTstlscjgcdWp/cXFxWrZsmVcyAQAANBSUHgAAamDfvn0aOXKkoqOjZbPZtHnzZrf1GzduVGJiosLDw736lylWVtU5LS0t1YIFC9SzZ08FBgYqOjpa06ZNU15ennmB67g7/Te6cOFCde3aVYGBgWrRooWGDh2qw4cPmxO2HrjT+fxXs2fPls1m4y8s7+BO53TGjBmy2WxuU1JSkkfHoPQAAFADJSUlio+PV0ZGRqXrBw4cqEWLFtVysvqrqnN67do1HT16VC+88IKOHj2qjRs3KisrS6NGjTIhaf1wp/9GO3furBUrVujLL7/Up59+qri4OCUmJurSpUu1nLR+uNP5vGXTpk06dOiQoqOjaylZ/VWdc5qUlKT8/HzX9P7773t2EANooLZu3WoMGDDACA0NNcLCwowRI0YY2dnZhmEYxqlTpwxJxhdffOHa/sSJE8aIESOM4OBgIygoyBg4cKBr+7KyMiMtLc1o06aNERAQYMTHxxtbt251vfbW/v76178aCQkJRtOmTY1evXoZBw4ccMv03//930a3bt2MgIAAo127dsYbb7zhtr5du3bG0qVLfXNCANSYJGPTpk0VrqvocwV3VtU5veXzzz83JBlnzpypnVD1WHXOZ2FhoSHJ2LlzZ+2EqscqO5/nzp0z2rRpY5w4cYLvbg9VdE6nT59ujB49ukb7ZaQHDVZJSYlSUlJ05MgR7dq1S40aNdLYsWNVXl5+27bnz5/Xww8/LLvdrk8++USZmZl69NFH9cMPP0iSli9frjfffFNvvPGGjh8/rmHDhmnUqFE6efKk235++9vfat68eXI4HOrcubMmT57s2kdmZqYmTJigSZMm6csvv9TChQv1wgsvaO3atT4/FwBQnxUWFspms6l58+ZmR6n3bt68qbfffluhoaGKj483O069VF5erqlTp+rZZ59V9+7dzY5jGXv27FFERIS6dOmi3/zmN7p8+bJHr/fzUS6gzhs/frzb/DvvvKNWrVrpq6++UlBQkNu6jIwMhYaGav369fL395f04+UAt7zxxhtasGCBJk2aJElatGiRdu/erWXLlrkN1c6bN08jRoyQJKWlpal79+7Kzs5W165dtWTJEg0ZMkQvvPCCa/9fffWVFi9erBkzZnj9/QOAFdy4cUMLFizQ5MmTFRISYnacemvLli2aNGmSrl27pqioKO3YsUMtW7Y0O1a9tGjRIvn5+enJJ580O4plJCUlady4cWrfvr1ycnL0/PPPKzk5WQcPHlTjxo2rtQ9GetBgnTx5UpMnT1aHDh0UEhKiuLg4SVJubu5t2zocDj300EOuwvOvioqKlJeXpwEDBrgtHzBggP7xj3+4LevVq5fr36OioiRJFy9elCT94x//qHAfJ0+eVFlZmedvEAAsrrS0VBMmTJBhGFq5cqXZceq1QYMGyeFw6MCBA0pKStKECRNc30+ovszMTC1fvlxr166VzWYzO45lTJo0SaNGjVLPnj01ZswYbdmyRX/729+0Z8+eau+D0oMGa+TIkbpy5Yr+67/+S4cPH3bdqebmzZu3bdu0aVOvHPNfS9OtD8OKLqcDAFTtVuE5c+aMduzYwShPDQUGBqpTp0568MEHtXr1avn5+Wn16tVmx6p39u/fr4sXLyo2NlZ+fn7y8/PTmTNnNHfuXNdfrqLmOnTooJYtWyo7O7var6H0oEG6fPmysrKy9Lvf/U5DhgzRvffeq++++67S7Xv16qX9+/ertLT0tnUhISGKjo7WZ5995rb8s88+U7du3aqd6d57761wH507d6720C0ANAS3Cs/Jkye1c+dOhYeHmx3JcsrLy+V0Os2OUe9MnTpVx48fl8PhcE3R0dF69tlntX37drPjWca5c+d0+fJl11Uz1cFvetAgtWjRQuHh4Xr77bcVFRWl3NxcPffcc5Vu//jjj+uPf/yjJk2apNTUVIWGhurQoUN64IEH1KVLFz377LN66aWX1LFjR/Xu3Vtr1qyRw+HQn//852pnmjt3ru6//369/PLLmjhxog4ePKgVK1borbfe8sZbBuAjxcXFbn/beOrUKTkcDoWFhSk2NlZXrlxRbm6u6zkyWVlZkqTIyEhFRkaakrmuq+qcRkVF6Re/+IWOHj2qLVu2qKysTAUFBZKksLAwBQQEmBW7zqrqfIaHh+vVV1/VqFGjFBUVpW+//VYZGRk6f/68fvnLX5qYuu6605/5n5Zwf39/RUZGqkuXLrUdtd6o6pyGhYUpLS1N48ePV2RkpHJycjR//nx16tRJw4YNq/5BanTvN6Ae27Fjh3Hvvfcadrvd6NWrl7Fnzx7XbRIrurXssWPHjMTERKNZs2ZGcHCw8dBDDxk5OTmGYfx4y+qFCxcabdq0Mfz9/Su9ZfW/7u+7774zJBm7d+92Lbt1y2p/f38jNjbWWLx4sVtmbnsJ1D27d+82JN02TZ8+3TAMw1izZk2F61966SVTc9dlVZ3TW5+nFU3/+nmK/1PV+bx+/boxduxYIzo62ggICDCioqKMUaNGGZ9//rnZseusO/2Z/ym+u++sqnN67do1IzEx0WjVqpXh7+9vtGvXznjssceMgoICj45hMwzD8KCIAQAAAEC9wm96AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApVF6AAAAAFgapQcAAACApf0/IJqalr3jMXwAAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x300 with 2 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0cAAAESCAYAAAA2Zq7uAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOx9JREFUeJzt3XtYVXW+x/HPRq6igOgAMoJ6SgXvio0x2k0Z8ZJZcmay0KhhdCo0EzNzSiftgre8ZpodU3vCLGfMKWcySUsq8YaipoZWJpZu6AzCFkpAWOePhnXcXhJ0bzcb36/nWY+s3++31vosH117f1l7/bbFMAxDAAAAAHCd83B1AAAAAACoCyiOAAAAAEAURwAAAAAgieIIAAAAACRRHAEAAACAJIojAAAAAJBEcQQAAAAAkiRPVwdwlqqqKp04cUKNGzeWxWJxdRwAuG4YhqHTp08rPDxcHh78Du5cvDYBgGvU9LWp3hZHJ06cUEREhKtjAMB16/jx42rRooWrY9QpvDYBgGtd7rWp3hZHjRs3lvTzX0BAQICL0wDA9cNmsykiIsK8DuP/8doEAK5R09emelscVX9cISAggBcgAHABPjZ2IV6bAMC1LvfaxIfBAQAAAEAURwAAAAAgieIIAAAAACRRHAEAAACAJIojAAAAAJBEcQQAAAAAkiiOAAAAAEBSPf6eI6DO+PFH6csva7fNTz9J334rtWol+fnVbtuoKKlhw9ptAwAAAIojwOm+/FKKibl2x8vOlrp3v3bHA4BrydVfLmwYrj0+AKeiOAKcLSrq54KlNg4dkoYPl958U4qOrv3xAAAAUGsUR4CzNWx45XdyoqO5CwS4wPTp0zVp0iSNHTtW8+bNkySdOXNG48eP1+rVq1VWVqb4+Hi98sorCg0NdW1YAIDDMCEDAADn2Llzp1599VV17tzZrn3cuHF6//33tWbNGm3ZskUnTpzQ0KFDXZQSAOAMFEcAAPxHSUmJEhMT9dprr6lJkyZme3FxsZYtW6Y5c+aoT58+iomJ0fLly7V161Zt27bNhYkBAI5EcQQAwH+kpKRo0KBBiouLs2vPzs5WRUWFXXtUVJQiIyOVlZV1yf2VlZXJZrPZLQCAuotnjgAAkLR69Wrt3r1bO3fuvKDParXK29tbQUFBdu2hoaGyWq2X3GdaWpqmTp3q6KgAACfhzhEA4Lp3/PhxjR07Vunp6fL19XXYfidNmqTi4mJzOX78uMP2DQBwvFoXR5mZmRo8eLDCw8NlsVi0bt26C8YcOnRId911lwIDA+Xv76+bbrpJeXl5Zv+ZM2eUkpKipk2bqlGjRkpISFB+fr7dPvLy8jRo0CA1bNhQISEhmjBhgs6ePVv7MwQA4DKys7NVUFCg7t27y9PTU56entqyZYsWLFggT09PhYaGqry8XEVFRXbb5efnKyws7JL79fHxUUBAgN0CAKi7al0clZaWqkuXLlq0aNFF+7/++mv17t1bUVFR+uSTT7Rv3z5NnjzZ7jdxl5vxp7KyUoMGDVJ5ebm2bt2qlStXasWKFZoyZcoVnCIAAL+sb9++2r9/v3JycsylR48eSkxMNH/28vLSpk2bzG1yc3OVl5en2NhYFyYHADhSrZ85GjBggAYMGHDJ/qeffloDBw7UzJkzzbYbbrjB/Ll6xp9Vq1apT58+kqTly5crOjpa27Zt080336yNGzfq4MGD+uijjxQaGqquXbvqueee08SJE/Xss8/K29u7trEBALikxo0bq2PHjnZt/v7+atq0qdmenJys1NRUBQcHKyAgQGPGjFFsbKxuvvlmV0QGADiBQ585qqqq0j//+U+1bdtW8fHxCgkJUc+ePe0+eleTGX+ysrLUqVMnuy/Wi4+Pl81m04EDBy56bGYEAgA409y5c3XnnXcqISFBt956q8LCwrR27VpXxwIAOJBDi6OCggKVlJRo+vTp6t+/vzZu3Kh77rlHQ4cO1ZYtWyTVbMYfq9V6wTeOV69falagtLQ0BQYGmktERIQjTw0AcJ355JNPNG/ePHPd19dXixYtUmFhoUpLS7V27dpffN4IAOB+HH7nSJKGDBmicePGqWvXrnrqqad05513asmSJY481AWYEQgAAADA1XBocdSsWTN5enqqffv2du3R0dHmbHVhYWGXnfEnLCzsgtnrqtcv9Vs6ZgQCAAAAcDUcWhx5e3vrpptuUm5url374cOH1bJlS0lSTEzMZWf8iY2N1f79+1VQUGCOycjIUEBAwAWFFwAAAAA4Qq1nqyspKdFXX31lrh89elQ5OTkKDg5WZGSkJkyYoHvvvVe33nqr7rjjDm3YsEHvv/++PvnkE0lSYGDgZWf86devn9q3b68RI0Zo5syZslqteuaZZ5SSkiIfHx/HnDkAAAAAnKPWxdGuXbt0xx13mOupqamSpKSkJK1YsUL33HOPlixZorS0ND322GNq166d/v73v6t3797mNnPnzpWHh4cSEhJUVlam+Ph4vfLKK2Z/gwYNtH79ej3yyCOKjY2Vv7+/kpKSNG3atKs5VwAAAAC4JIthGIarQziDzWZTYGCgiouLef4I7mf3bikmRsrOlrp3d3UaoFa4/l4afzcOYLG49vj1820TUO/V9Prr0GeOAAAAAMBdURwBAAAAgCiOAAAAAEDSFUzIAAAArmOufuYHAJyIO0cAAAAAIIojAAAAAJBEcQQAAAAAkiiOAAAAAEASxREAAAAASKI4AgAAAABJFEcAAAAAIIniCAAAAAAkURwBAAAAgCSKIwAAAACQRHEEAAAAAJIojgAAAABAEsURAAAAAEiiOAIAAAAASRRHAAAAACDpCoqjzMxMDR48WOHh4bJYLFq3bt0lxz788MOyWCyaN2+eXXthYaESExMVEBCgoKAgJScnq6SkxG7Mvn37dMstt8jX11cRERGaOXNmbaMCAAAAQI3VujgqLS1Vly5dtGjRol8c9+6772rbtm0KDw+/oC8xMVEHDhxQRkaG1q9fr8zMTI0aNcrst9ls6tevn1q2bKns7GzNmjVLzz77rJYuXVrbuAAAAABQI5613WDAgAEaMGDAL475/vvvNWbMGH344YcaNGiQXd+hQ4e0YcMG7dy5Uz169JAkLVy4UAMHDtTs2bMVHh6u9PR0lZeX6/XXX5e3t7c6dOignJwczZkzx66IAgAAAABHcfgzR1VVVRoxYoQmTJigDh06XNCflZWloKAgszCSpLi4OHl4eGj79u3mmFtvvVXe3t7mmPj4eOXm5urUqVMXPW5ZWZlsNpvdAgAAAAA15fDiaMaMGfL09NRjjz120X6r1aqQkBC7Nk9PTwUHB8tqtZpjQkND7cZUr1ePOV9aWpoCAwPNJSIi4mpPBQAAAMB1xKHFUXZ2tubPn68VK1bIYrE4cteXNWnSJBUXF5vL8ePHr+nxAQAAALg3hxZHn376qQoKChQZGSlPT095enrq2LFjGj9+vFq1aiVJCgsLU0FBgd12Z8+eVWFhocLCwswx+fn5dmOq16vHnM/Hx0cBAQF2CwAAAADUlEOLoxEjRmjfvn3Kyckxl/DwcE2YMEEffvihJCk2NlZFRUXKzs42t9u8ebOqqqrUs2dPc0xmZqYqKirMMRkZGWrXrp2aNGniyMgAAAAAIOkKZqsrKSnRV199Za4fPXpUOTk5Cg4OVmRkpJo2bWo33svLS2FhYWrXrp0kKTo6Wv3799fIkSO1ZMkSVVRUaPTo0Ro2bJg57ff999+vqVOnKjk5WRMnTtQXX3yh+fPna+7cuVdzrgAAAABwSbUujnbt2qU77rjDXE9NTZUkJSUlacWKFTXaR3p6ukaPHq2+ffvKw8NDCQkJWrBggdkfGBiojRs3KiUlRTExMWrWrJmmTJnCNN4AAAAAnKbWxdHtt98uwzBqPP7bb7+9oC04OFirVq36xe06d+6sTz/9tLbxAAAAAOCKOHwqbwAAAABwRxRHAAAAACCKIwAAAACQRHEEAAAAAJIojgAAAABAEsURAAAAAEiiOAIAAAAASRRHAABIkhYvXqzOnTsrICBAAQEBio2N1QcffGD2nzlzRikpKWratKkaNWqkhIQE5efnuzAxAMDRKI4AAJDUokULTZ8+XdnZ2dq1a5f69OmjIUOG6MCBA5KkcePG6f3339eaNWu0ZcsWnThxQkOHDnVxagCAI3m6OgAAAHXB4MGD7dZfeOEFLV68WNu2bVOLFi20bNkyrVq1Sn369JEkLV++XNHR0dq2bZtuvvnmi+6zrKxMZWVl5rrNZnPeCQAArhp3jgAAOE9lZaVWr16t0tJSxcbGKjs7WxUVFYqLizPHREVFKTIyUllZWZfcT1pamgIDA80lIiLiWsQHAFwhiiMAAP5j//79atSokXx8fPTwww/r3XffVfv27WW1WuXt7a2goCC78aGhobJarZfc36RJk1RcXGwux48fd/IZAACuBh+rAwDgP9q1a6ecnBwVFxfrb3/7m5KSkrRly5Yr3p+Pj498fHwcmBAA4EwURwAA/Ie3t7duvPFGSVJMTIx27typ+fPn695771V5ebmKiors7h7l5+crLCzMRWkBAI7Gx+oAALiEqqoqlZWVKSYmRl5eXtq0aZPZl5ubq7y8PMXGxrowIQDAkbhzBACAfn4+aMCAAYqMjNTp06e1atUqffLJJ/rwww8VGBio5ORkpaamKjg4WAEBARozZoxiY2MvOVMdAMD9UBwBACCpoKBADzzwgE6ePKnAwEB17txZH374oX73u99JkubOnSsPDw8lJCSorKxM8fHxeuWVV1ycGgDgSBRHAABIWrZs2S/2+/r6atGiRVq0aNE1SgQAuNZ45ggAAAAAdAXFUWZmpgYPHqzw8HBZLBatW7fO7KuoqNDEiRPVqVMn+fv7Kzw8XA888IBOnDhht4/CwkIlJiYqICBAQUFBSk5OVklJid2Yffv26ZZbbpGvr68iIiI0c+bMKztDAAAAAKiBWhdHpaWl6tKly0U/VvDjjz9q9+7dmjx5snbv3q21a9cqNzdXd911l924xMREHThwQBkZGVq/fr0yMzM1atQos99ms6lfv35q2bKlsrOzNWvWLD377LNaunTpFZwiAAAAAFxerZ85GjBggAYMGHDRvsDAQGVkZNi1vfzyy/rNb36jvLw8RUZG6tChQ9qwYYN27typHj16SJIWLlyogQMHavbs2QoPD1d6errKy8v1+uuvy9vbWx06dFBOTo7mzJljV0QBAAAAgKM4/Zmj4uJiWSwW80vzsrKyFBQUZBZGkhQXFycPDw9t377dHHPrrbfK29vbHBMfH6/c3FydOnXqoscpKyuTzWazWwAAAACgppxaHJ05c0YTJ07Ufffdp4CAAEmS1WpVSEiI3ThPT08FBwfLarWaY0JDQ+3GVK9XjzlfWlqaAgMDzSUiIsLRpwMAqIO++eYbV0cAANQTTiuOKioq9Ic//EGGYWjx4sXOOoxp0qRJKi4uNpfjx487/ZgAANe78cYbdccdd+jNN9/UmTNnXB0HAODGnFIcVRdGx44dU0ZGhnnXSJLCwsJUUFBgN/7s2bMqLCxUWFiYOSY/P99uTPV69Zjz+fj4KCAgwG4BANR/u3fvVufOnZWamqqwsDD9+c9/1o4dO1wdCwDghhxeHFUXRkeOHNFHH32kpk2b2vXHxsaqqKhI2dnZZtvmzZtVVVWlnj17mmMyMzNVUVFhjsnIyFC7du3UpEkTR0cGALixrl27av78+Tpx4oRef/11nTx5Ur1791bHjh01Z84c/fDDD66OCABwE7UujkpKSpSTk6OcnBxJ0tGjR5WTk6O8vDxVVFTov//7v7Vr1y6lp6ersrJSVqtVVqtV5eXlkqTo6Gj1799fI0eO1I4dO/T5559r9OjRGjZsmMLDwyVJ999/v7y9vZWcnKwDBw7o7bff1vz585Wamuq4MwcA1Cuenp4aOnSo1qxZoxkzZuirr77SE088oYiICD3wwAM6efKkqyMCAOq4WhdHu3btUrdu3dStWzdJUmpqqrp166YpU6bo+++/13vvvafvvvtOXbt2VfPmzc1l69at5j7S09MVFRWlvn37auDAgerdu7fddxgFBgZq48aNOnr0qGJiYjR+/HhNmTKFabwBAJe0a9cuPfroo2revLnmzJmjJ554Ql9//bUyMjJ04sQJDRkyxNURAQB1nMUwDMPVIZzBZrMpMDBQxcXFPH8E97N7txQTI2VnS927uzoNUCvX+vo7Z84cLV++XLm5uRo4cKD+9Kc/aeDAgfLw+P/f/3333Xdq1aqVzp496/Q8v6RevDZZLK5O4Fr1820TUO/V9Ppb6y+BBQCgLlm8eLH++Mc/6sEHH1Tz5s0vOiYkJETLli27xskAAO6G4ggA4NaOHDly2THe3t5KSkq6BmkAAO7MqV8CCwCAsy1fvlxr1qy5oH3NmjVauXKlCxIBANwVxREAwK2lpaWpWbNmF7SHhIToxRdfdEEiAIC7ojgCALi1vLw8tW7d+oL2li1bKi8vzwWJAADuiuIIAODWQkJCtG/fvgva9+7de8EXkQMA8EsojgAAbu2+++7TY489po8//liVlZWqrKzU5s2bNXbsWA0bNszV8QAAboTZ6gAAbu25557Tt99+q759+8rT8+eXtaqqKj3wwAM8cwQAqBWKIwCAW/P29tbbb7+t5557Tnv37pWfn586deqkli1bujoaAMDNUBwBAOqFtm3bqm3btq6OAQBwYxRHAAC3VllZqRUrVmjTpk0qKChQVVWVXf/mzZtdlAwA4G4ojgAAbm3s2LFasWKFBg0apI4dO8pisbg6EgDATVEcAQDc2urVq/XOO+9o4MCBro4CAHBzTOUNAHBr3t7euvHGG10dAwBQD1AcAQDc2vjx4zV//nwZhuHqKAAAN8fH6gAAbu2zzz7Txx9/rA8++EAdOnSQl5eXXf/atWtdlAwA4G4ojgAAbi0oKEj33HOPq2MAAOoBiiMAgFtbvny5qyMAAOoJnjkCALi9s2fP6qOPPtKrr76q06dPS5JOnDihkpISFycDALiTWhdHmZmZGjx4sMLDw2WxWLRu3Tq7fsMwNGXKFDVv3lx+fn6Ki4vTkSNH7MYUFhYqMTFRAQEBCgoKUnJy8gUvYPv27dMtt9wiX19fRUREaObMmbU/OwBAvXfs2DF16tRJQ4YMUUpKin744QdJ0owZM/TEE0+4OB0AwJ3UujgqLS1Vly5dtGjRoov2z5w5UwsWLNCSJUu0fft2+fv7Kz4+XmfOnDHHJCYm6sCBA8rIyND69euVmZmpUaNGmf02m039+vVTy5YtlZ2drVmzZunZZ5/V0qVLr+AUAQD12dixY9WjRw+dOnVKfn5+Zvs999yjTZs2uTAZAMDd1PqZowEDBmjAgAEX7TMMQ/PmzdMzzzyjIUOGSJLeeOMNhYaGat26dRo2bJgOHTqkDRs2aOfOnerRo4ckaeHChRo4cKBmz56t8PBwpaenq7y8XK+//rq8vb3VoUMH5eTkaM6cOXZFFAAAn376qbZu3Spvb2+79latWun77793USoAgDty6DNHR48eldVqVVxcnNkWGBionj17KisrS5KUlZWloKAgszCSpLi4OHl4eGj79u3mmFtvvdXuhS4+Pl65ubk6derURY9dVlYmm81mtwAA6r+qqipVVlZe0P7dd9+pcePGLkgEAHBXDi2OrFarJCk0NNSuPTQ01OyzWq0KCQmx6/f09FRwcLDdmIvt49xjnC8tLU2BgYHmEhERcfUnBACo8/r166d58+aZ6xaLRSUlJfrrX/+qgQMHui6Ys1gsrl0AoB6rN1N5T5o0Sampqea6zWajQIJzHDki/Wc2LKc5dMj+T2dr3Fhq0+baHAtwsJdeeknx8fFq3769zpw5o/vvv19HjhxRs2bN9NZbb7k6HgDAjTi0OAoLC5Mk5efnq3nz5mZ7fn6+unbtao4pKCiw2+7s2bMqLCw0tw8LC1N+fr7dmOr16jHn8/HxkY+Pj0POA7ikI0ektm2v3fGGD792xzp8mAIJbqlFixbau3evVq9erX379qmkpETJyclKTEy0m6ABAIDLcWhx1Lp1a4WFhWnTpk1mMWSz2bR9+3Y98sgjkqTY2FgVFRUpOztbMTExkqTNmzerqqpKPXv2NMc8/fTTqqiokJeXlyQpIyND7dq1U5MmTRwZGaid6jtGb74pRUc77zg//SR9+63UqpXk7Dd3hw79XIQ5+24Y4ESenp4afi1/mQAAqJdqXRyVlJToq6++MtePHj2qnJwcBQcHKzIyUo8//rief/55tWnTRq1bt9bkyZMVHh6uu+++W5IUHR2t/v37a+TIkVqyZIkqKio0evRoDRs2TOHh4ZKk+++/X1OnTlVycrImTpyoL774QvPnz9fcuXMdc9bA1YqOlrp3d+4xevVy7v6BeuKNN974xf4HHnjgGiUBALi7WhdHu3bt0h133GGuVz/nk5SUpBUrVujJJ59UaWmpRo0apaKiIvXu3VsbNmyQr6+vuU16erpGjx6tvn37ysPDQwkJCVqwYIHZHxgYqI0bNyolJUUxMTFq1qyZpkyZwjTeAIALjB071m69oqJCP/74o7y9vdWwYUOKIwBAjdW6OLr99ttlGMYl+y0Wi6ZNm6Zp06ZdckxwcLBWrVr1i8fp3LmzPv3009rGAwBcZy72FQ9HjhzRI488ogkTJrggEQDAXTl0Km8AAOqCNm3aaPr06RfcVbqUtLQ03XTTTWrcuLFCQkJ09913Kzc3127MmTNnlJKSoqZNm6pRo0ZKSEi4YPIgAIB7ozgCANRLnp6eOnHiRI3GbtmyRSkpKdq2bZsyMjJUUVGhfv36qbS01Bwzbtw4vf/++1qzZo22bNmiEydOaOjQoc6KDwBwgXrzPUcAgOvTe++9Z7duGIZOnjypl19+Wb1qOLHJhg0b7NZXrFihkJAQZWdn69Zbb1VxcbGWLVumVatWqU+fPpKk5cuXKzo6Wtu2bdPNN9/smJMBALgUxREAwK1Vz4ZazWKx6Fe/+pX69Omjl1566Yr2WVxcLOnnZ2QlKTs7WxUVFYqLizPHREVFKTIyUllZWZcsjsrKylRWVmau22y2K8oDALg2KI4AAG6tqqrK4ft7/PHH1atXL3Xs2FGSZLVa5e3traCgILuxoaGhslqtl9xXWlqapk6d6tB8AADn4ZkjAADOkZKSoi+++EKrV6++6n1NmjRJxcXF5nL8+HEHJAQAOAt3jgAAbq36+/ZqYs6cOb/YP3r0aK1fv16ZmZlq0aKF2R4WFqby8nIVFRXZ3T3Kz89XWFjYJffn4+MjHx+fGucDALgWxREAwK3t2bNHe/bsUUVFhdq1aydJOnz4sBo0aKDu3bub4ywWyyX3YRiGxowZo3fffVeffPKJWrdubdcfExMjLy8vbdq0SQkJCZKk3Nxc5eXlKTY21glnBQBwBYojAIBbGzx4sBo3bqyVK1eqSZMmkn7+YtiHHnpIt9xyi8aPH3/ZfaSkpGjVqlX6xz/+ocaNG5vPEQUGBsrPz0+BgYFKTk5WamqqgoODFRAQoDFjxig2NpaZ6gCgHqE4AgC4tZdeekkbN240CyNJatKkiZ5//nn169evRsXR4sWLJUm33367Xfvy5cv14IMPSpLmzp0rDw8PJSQkqKysTPHx8XrllVccdh5wE79wB/KaMAzXHv96P3/UexRHAAC3ZrPZ9MMPP1zQ/sMPP+j06dM12odRgzdcvr6+WrRokRYtWlTrjAAA98BsdQAAt3bPPffooYce0tq1a/Xdd9/pu+++09///nclJydr6NChro4HAHAj3DkCALi1JUuW6IknntD999+viooKSZKnp6eSk5M1a9YsF6cDALgTiiMAgFtr2LChXnnlFc2aNUtff/21JOmGG26Qv7+/i5MBANwNH6sDANQLJ0+e1MmTJ9WmTRv5+/vX6DkiAADORXEEAHBr//73v9W3b1+1bdtWAwcO1MmTJyVJycnJNZqpDgCAahRHAAC3Nm7cOHl5eSkvL08NGzY02++9915t2LDBhckAAO6GZ44AAG5t48aN+vDDD9WiRQu79jZt2ujYsWMuSgUAcEfcOQIAuLXS0lK7O0bVCgsL5ePj44JEAAB35fDiqLKyUpMnT1br1q3l5+enG264Qc8995zdg7GGYWjKlClq3ry5/Pz8FBcXpyNHjtjtp7CwUImJiQoICFBQUJCSk5NVUlLi6LgAADd3yy236I033jDXLRaLqqqqNHPmTN1xxx0uTAYAcDcO/1jdjBkztHjxYq1cuVIdOnTQrl279NBDDykwMFCPPfaYJGnmzJlasGCBVq5cqdatW2vy5MmKj4/XwYMH5evrK0lKTEzUyZMnlZGRoYqKCj300EMaNWqUVq1a5ejIAAA3NnPmTPXt21e7du1SeXm5nnzySR04cECFhYX6/PPPXR0PAOBGHF4cbd26VUOGDNGgQYMkSa1atdJbb72lHTt2SPr5rtG8efP0zDPPaMiQIZKkN954Q6GhoVq3bp2GDRumQ4cOacOGDdq5c6d69OghSVq4cKEGDhyo2bNnKzw83NGxAQBuqmPHjjp8+LBefvllNW7cWCUlJRo6dKhSUlLUvHlzV8cDALgRh3+s7re//a02bdqkw4cPS5L27t2rzz77TAMGDJAkHT16VFarVXFxceY2gYGB6tmzp7KysiRJWVlZCgoKMgsjSYqLi5OHh4e2b99+0eOWlZXJZrPZLQCA+q2iokJ9+/ZVQUGBnn76ab3zzjv617/+peeff57CCABQaw6/c/TUU0/JZrMpKipKDRo0UGVlpV544QUlJiZKkqxWqyQpNDTUbrvQ0FCzz2q1KiQkxD6op6eCg4PNMedLS0vT1KlTHX06AIA6zMvLS/v27XN1DABAPeHwO0fvvPOO0tPTtWrVKu3evVsrV67U7NmztXLlSkcfys6kSZNUXFxsLsePH3fq8QAAdcPw4cO1bNkyV8cAANQDDr9zNGHCBD311FMaNmyYJKlTp046duyY0tLSlJSUpLCwMElSfn6+3Uce8vPz1bVrV0lSWFiYCgoK7PZ79uxZFRYWmtufz8fHhylbAeA6dPbsWb3++uv66KOPFBMTI39/f7v+OXPmuCgZAMDdOLw4+vHHH+XhYX9DqkGDBqqqqpIktW7dWmFhYdq0aZNZDNlsNm3fvl2PPPKIJCk2NlZFRUXKzs5WTEyMJGnz5s2qqqpSz549HR0ZAOCGvvnmG7Vq1UpffPGFunfvLknm867VLBaLK6IBANyUw4ujwYMH64UXXlBkZKQ6dOigPXv2aM6cOfrjH/8o6ecXqscff1zPP/+82rRpY07lHR4errvvvluSFB0drf79+2vkyJFasmSJKioqNHr0aA0bNoyZ6gAAkqQ2bdro5MmT+vjjjyVJ9957rxYsWHDBM60AANSUw4ujhQsXavLkyXr00UdVUFCg8PBw/fnPf9aUKVPMMU8++aRKS0s1atQoFRUVqXfv3tqwYYP5HUeSlJ6ertGjR6tv377y8PBQQkKCFixY4Oi4AAA3de6Xi0vSBx98oNLSUhelAQDUBw4vjho3bqx58+Zp3rx5lxxjsVg0bdo0TZs27ZJjgoOD+cJXAECNnV8sAQBQWw6frQ4AgGvBYrFc8EwRzxgBAK6Gw+8cAQBwLRiGoQcffNCcqfTMmTN6+OGHL5itbu3ata6IBwBwQxRHAAC3lJSUZLc+fPhwFyUBANQXFEcAALe0fPlyV0cAANQzPHMEAAAAAKI4AgAAAABJFEcAAAAAIIniCAAAAAAkURwBAAAAgCSKIwAAAACQRHEEAAAAAJL4niPgyhw65OoEjlOfzgUAAOAqUBwBV2L4cFcnAABcjywWVye4vrn6798wXHv86wDFEXAl3nxTio52dQrHOHSIYg8AAEAUR8CViY6Wund3dQoAAAA4EBMyAAAAAIAojgAAAABAEsURAAAAAEiiOAIAAAAASU4qjr7//nsNHz5cTZs2lZ+fnzp16qRdu3aZ/YZhaMqUKWrevLn8/PwUFxenI0eO2O2jsLBQiYmJCggIUFBQkJKTk1VSUuKMuAAAAADg+OLo1KlT6tWrl7y8vPTBBx/o4MGDeumll9SkSRNzzMyZM7VgwQItWbJE27dvl7+/v+Lj43XmzBlzTGJiog4cOKCMjAytX79emZmZGjVqlKPjAgAAAIAkJ0zlPWPGDEVERGj58uVmW+vWrc2fDcPQvHnz9Mwzz2jIkCGSpDfeeEOhoaFat26dhg0bpkOHDmnDhg3auXOnevToIUlauHChBg4cqNmzZys8PNzRsQEAAABc5xx+5+i9995Tjx499Pvf/14hISHq1q2bXnvtNbP/6NGjslqtiouLM9sCAwPVs2dPZWVlSZKysrIUFBRkFkaSFBcXJw8PD23fvv2ixy0rK5PNZrNbAAAAAKCmHF4cffPNN1q8eLHatGmjDz/8UI888ogee+wxrVy5UpJktVolSaGhoXbbhYaGmn1Wq1UhISF2/Z6engoODjbHnC8tLU2BgYHmEhER4ehTAwAAAFCPObw4qqqqUvfu3fXiiy+qW7duGjVqlEaOHKklS5Y4+lB2Jk2apOLiYnM5fvy4U48HAKhfMjMzNXjwYIWHh8tisWjdunV2/TWZTAgA4N4cXhw1b95c7du3t2uLjo5WXl6eJCksLEySlJ+fbzcmPz/f7AsLC1NBQYFd/9mzZ1VYWGiOOZ+Pj48CAgLsFgAAaqq0tFRdunTRokWLLtpfk8mEAADuzeHFUa9evZSbm2vXdvjwYbVs2VLSz5MzhIWFadOmTWa/zWbT9u3bFRsbK0mKjY1VUVGRsrOzzTGbN29WVVWVevbs6ejIAABowIABev7553XPPfdc0Hf+ZEKdO3fWG2+8oRMnTlxwhwkA4L4cXhyNGzdO27Zt04svvqivvvpKq1at0tKlS5WSkiJJslgsevzxx/X888/rvffe0/79+/XAAw8oPDxcd999t6Sf7zT1799fI0eO1I4dO/T5559r9OjRGjZsGDPVAQCuuZpMJnQxTBYEAO7F4cXRTTfdpHfffVdvvfWWOnbsqOeee07z5s1TYmKiOebJJ5/UmDFjNGrUKN10000qKSnRhg0b5Ovra45JT09XVFSU+vbtq4EDB6p3795aunSpo+MCAHBZNZlM6GKYLAgA3IvDv+dIku68807deeedl+y3WCyaNm2apk2bdskxwcHBWrVqlTPiAQBwTUyaNEmpqanmus1mo0ACgDrM4XeOAACob2oymdDFMFkQALgXiiMAAC6jJpMJAQDcn1M+VgcAgLspKSnRV199Za4fPXpUOTk5Cg4OVmRkpDmZUJs2bdS6dWtNnjzZbjIhAID7ozgCAEDSrl27dMcdd5jr1c8KJSUlacWKFXryySdVWlqqUaNGqaioSL17975gMiEAgHujOAIAQNLtt98uwzAu2V+TyYQAAO6NZ44AAAAAQNw5Amrnxx9//nP3buce56efpG+/lVq1kvz8nHusQ4ecu38AAAA3QXEE1MaXX/7858iRrs3hDI0buzoBAACAS1EcAbVRPStVVJTUsKHzjnPokDR8uPTmm1J0tPOOU61xY6lNG+cfBwCAq2GxuDoB6jmKI6A2mjWT/vSna3e86Gipe/drdzwAAIDrGBMyAAAAAIAojgAAAABAEsURAAAAAEiiOAIAAAAASRRHAAAAACCJ4ggAAAAAJFEcAQAAAIAkiiMAAAAAkERxBAAAAACSrkFxNH36dFksFj3++ONm25kzZ5SSkqKmTZuqUaNGSkhIUH5+vt12eXl5GjRokBo2bKiQkBBNmDBBZ8+edXZcAAAAANcppxZHO3fu1KuvvqrOnTvbtY8bN07vv/++1qxZoy1btujEiRMaOnSo2V9ZWalBgwapvLxcW7du1cqVK7VixQpNmTLFmXEBAAAAXMecVhyVlJQoMTFRr732mpo0aWK2FxcXa9myZZozZ4769OmjmJgYLV++XFu3btW2bdskSRs3btTBgwf15ptvqmvXrhowYICee+45LVq0SOXl5c6KDAAAAOA65rTiKCUlRYMGDVJcXJxde3Z2tioqKuzao6KiFBkZqaysLElSVlaWOnXqpNDQUHNMfHy8bDabDhw4cNHjlZWVyWaz2S0AAAAAUFOeztjp6tWrtXv3bu3cufOCPqvVKm9vbwUFBdm1h4aGymq1mmPOLYyq+6v7LiYtLU1Tp051QHoAAAAA1yOH3zk6fvy4xo4dq/T0dPn6+jp695c0adIkFRcXm8vx48ev2bEBAAAAuD+HF0fZ2dkqKChQ9+7d5enpKU9PT23ZskULFiyQp6enQkNDVV5erqKiIrvt8vPzFRYWJkkKCwu7YPa66vXqMefz8fFRQECA3QIAAAAANeXw4qhv377av3+/cnJyzKVHjx5KTEw0f/by8tKmTZvMbXJzc5WXl6fY2FhJUmxsrPbv36+CggJzTEZGhgICAtS+fXtHRwYAAAAAxz9z1LhxY3Xs2NGuzd/fX02bNjXbk5OTlZqaquDgYAUEBGjMmDGKjY3VzTffLEnq16+f2rdvrxEjRmjmzJmyWq165plnlJKSIh8fH0dHBgAAAADnTMhwOXPnzpWHh4cSEhJUVlam+Ph4vfLKK2Z/gwYNtH79ej3yyCOKjY2Vv7+/kpKSNG3aNFfEBQAAAHAdsBiGYbg6hDPYbDYFBgaquLiY54/gfnbvlmJipOxsqXt3V6cBaoXr76U55O/GYnFsKADuo36+bb8manr9dcmdIwAAAAC15OpfjlwHxZnTvgQWAAAAANwJxREAAAAAiOIIAAAAACRRHAEAAACAJIojAAAAAJBEcQQAAAAAkiiOAAAAAEASxREAAAAASKI4AgAAAABJkqerAwD13o8/Sl9+WbttDh2y/7M2oqKkhg1rvx0AAMB1juIIcLYvv5RiYq5s2+HDa79NdrbUvfuVHQ8AAOBSLBbXHt8wnH4IiiPA2aKifi5YauOnn6Rvv5VatZL8/Gp/PAAAANQaxRHgbA0bXtmdnF69HJ8FAAAAl8SEDAAAAAAgiiMAAAAAkERxBAAAAACSKI4AAAAAQBLFEQAAtbJo0SK1atVKvr6+6tmzp3bs2OHqSAAAB6E4AgCght5++22lpqbqr3/9q3bv3q0uXbooPj5eBQUFro4GAHCAejuVt/GfL4my2WwuTgIA15fq665xDb6s71qbM2eORo4cqYceekiStGTJEv3zn//U66+/rqeeeuqC8WVlZSorKzPXi4uLJfHaBABX5CqunTV9baq3xdHp06clSRERES5OAgDXp9OnTyswMNDVMRymvLxc2dnZmjRpktnm4eGhuLg4ZWVlXXSbtLQ0TZ069YJ2XpsA4Ao44DXlcq9N9bY4Cg8P1/Hjx9W4cWNZLBZXxwFqxWazKSIiQsePH1dAQICr4wC1YhiGTp8+rfDwcFdHcaj//d//VWVlpUJDQ+3aQ0ND9eWXX150m0mTJik1NdVcr6qqUmFhoZo2beoWr03ueC1yx8wSua8ld8wskftq1fS1qd4WRx4eHmrRooWrYwBXJSAgwK0ugEC1+nTH6Gr4+PjIx8fHri0oKMg1Ya6CO16L3DGzRO5ryR0zS+S+GjV5bWJCBgAAaqBZs2Zq0KCB8vPz7drz8/MVFhbmolQAAEeiOAIAoAa8vb0VExOjTZs2mW1VVVXatGmTYmNjXZgMAOAo9fZjdYA78/Hx0V//+tcLPo4DwLVSU1OVlJSkHj166De/+Y3mzZun0tJSc/a6+sYdr0XumFki97Xkjpklcl8rFqM+zrUKAICTvPzyy5o1a5asVqu6du2qBQsWqGfPnq6OBQBwAIojAAAAABDPHAEAAACAJIojAAAAAJBEcQQAAAAAkiiOgDqpVatWmjdvnrlusVi0bt06l+UBAAC4HlAcAW7g5MmTGjBggKtjAKhnpk+fLovFoscff9xsO3PmjFJSUtS0aVM1atRICQkJF3zxbV5engYNGqSGDRsqJCREEyZM0NmzZ52a9fvvv9fw4cPVtGlT+fn5qVOnTtq1a5fZbxiGpkyZoubNm8vPz09xcXE6cuSI3T4KCwuVmJiogIAABQUFKTk5WSUlJU7LXFlZqcmTJ6t169by8/PTDTfcoOeee07nzoVVF3JnZmZq8ODBCg8Pv+gv4xyVcd++fbrlllvk6+uriIgIzZw50ymZKyoqNHHiRHXq1En+/v4KDw/XAw88oBMnTrg08+Vyn+/hhx+WxWKx+2VpXc596NAh3XXXXQoMDJS/v79uuukm5eXlmf119dpyPooj4BoqLy+/ou3CwsLc5vsBALiHnTt36tVXX1Xnzp3t2seNG6f3339fa9as0ZYtW3TixAkNHTrU7K+srNSgQYNUXl6urVu3auXKlVqxYoWmTJnitKynTp1Sr1695OXlpQ8++EAHDx7USy+9pCZNmphjZs6cqQULFmjJkiXavn27/P39FR8frzNnzphjEhMTdeDAAWVkZGj9+vXKzMzUqFGjnJZ7xowZWrx4sV5++WUdOnRIM2bM0MyZM7Vw4cI6lbu0tFRdunTRokWLLtrviIw2m039+vVTy5YtlZ2drVmzZunZZ5/V0qVLHZ75xx9/1O7duzV58mTt3r1ba9euVW5uru666y67cdc68+Vyn+vdd9/Vtm3bFB4efkFfXcz99ddfq3fv3oqKitInn3yiffv2afLkyfL19TXH1MVry0UZAK7YbbfdZqSkpBgpKSlGQECA0bRpU+OZZ54xqqqqDMMwjJYtWxrTpk0zRowYYTRu3NhISkoyDMMw/va3vxnt27c3vL29jZYtWxqzZ8+222/Lli2NuXPnmuuSjHfffdcwDMM4evSoIcn4+9//btx+++2Gn5+f0blzZ2Pr1q12+/j000+N3r17G76+vkaLFi2MMWPGGCUlJU77uwDgPk6fPm20adPGyMjIMG677TZj7NixhmEYRlFRkeHl5WWsWbPGHHvo0CFDkpGVlWUYhmH861//Mjw8PAyr1WqOWbx4sREQEGCUlZU5Je/EiRON3r17X7K/qqrKCAsLM2bNmmW2FRUVGT4+PsZbb71lGIZhHDx40JBk7Ny50xzzwQcfGBaLxfj++++dknvQoEHGH//4R7u2oUOHGomJiXU297mvN47M+MorrxhNmjSx+zcyceJEo127dg7PfDE7duwwJBnHjh2rE5l/Kfd3331n/PrXvza++OKLC94P1NXc9957rzF8+PBLblNXry0Xw50j4CqtXLlSnp6e2rFjh+bPn685c+bof/7nf8z+2bNnq0uXLtqzZ48mT56s7Oxs/eEPf9CwYcO0f/9+Pfvss5o8ebJWrFhRq+M+/fTTeuKJJ5STk6O2bdvqvvvuM289f/311+rfv78SEhK0b98+vf322/rss880evRoR546ADeVkpKiQYMGKS4uzq49OztbFRUVdu1RUVGKjIxUVlaWJCkrK0udOnVSaGioOSY+Pl42m00HDhxwSt733ntPPXr00O9//3uFhISoW7dueu2118z+o0ePymq12uUODAxUz5497XIHBQWpR48e5pi4uDh5eHho+/btTsn929/+Vps2bdLhw4clSXv37tVnn31mfky6ruY+l6MyZmVl6dZbb5W3t7c5Jj4+Xrm5uTp16pTTz6O4uFgWi0VBQUF1OnNVVZVGjBihCRMmqEOHDhf018XcVVVV+uc//6m2bdsqPj5eISEh6tmzp91H7+rqteViPK/ZkYB6KiIiQnPnzpXFYlG7du20f/9+zZ07VyNHjpQk9enTR+PHjzfHJyYmqm/fvpo8ebIkqW3btjp48KBmzZqlBx98sMbHfeKJJzRo0CBJ0tSpU9WhQwd99dVXioqKUlpamhITE83nCNq0aaMFCxbotttu0+LFi+1ucwO4vqxevVq7d+/Wzp07L+izWq3y9vY230BWCw0NldVqNcec++alur+6zxm++eYbLV68WKmpqfrLX/6inTt36rHHHpO3t7eSkpLM414s17m5Q0JC7Po9PT0VHBzstNxPPfWUbDab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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.preprocessing import MinMaxScaler\n",
        "\n",
        "# Instantiate scaler and fit on features\n",
        "scaler = MinMaxScaler()\n",
        "scaler.fit(X)\n",
        "\n",
        "# Transform features\n",
        "X_scaled = scaler.transform(X)\n",
        "\n",
        "X_scaled_0 = pd.Series(X_scaled[:,0], name=\"alcohol\")\n",
        "X_scaled_12 = pd.Series(X_scaled[:,12], name=\"proline\")\n",
        "\n",
        "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n",
        "X_scaled_0.plot(kind=\"box\", ax=axs[0])\n",
        "X_scaled_0.plot(kind=\"hist\", ax=axs[1])\n",
        "plt.show()\n",
        "\n",
        "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n",
        "X_scaled_12.plot(kind=\"box\", ax=axs[0], color=\"red\")\n",
        "X_scaled_12.plot(kind=\"hist\", ax=axs[1], color=\"red\")\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 565
        },
        "id": "Q0n8FX7sSjJY",
        "outputId": "0b042475-eacb-4053-fb1a-34639942f104"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x300 with 2 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzoAAAESCAYAAAA10aDGAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMw5JREFUeJzt3X9YVHXe//EXv2bwB+AP5Jdi+DM1EwtXltSyJMlcN8v7XtNSYs2270KrzrolpZLZipUS7UZ6ratS1+Zidpv3bhqukdiWmCtK5m6iqISpoFYyigkI5/tH29w7icoAw8DwfFzXuep8zuec8/6Ml4wvzjmf42EYhiEAAAAAcCOeri4AAAAAAJoaQQcAAACA2yHoAAAAAHA7BB0AAAAAboegAwAAAMDtEHQAAAAAuB2CDgAAAAC34+3qAuqjtrZWJ0+elJ+fnzw8PFxdDgC0GYZh6Pz58woLC5OnJ78b+x7fSwDgOvX9bmoVQefkyZMKDw93dRkA0GYdP35cPXr0cHUZLQbfSwDgetf7bmoVQcfPz0/Sd4Px9/d3cTUA0HZYrVaFh4fbfg7jO3wvAYDr1Pe7qVUEne9vC/D39+cLBQBcgNuz7PG9BACud73vJm64BgAAAOB2CDoAAAAA3A5BBwAAAIDbIegAAAAAcDsOB50PP/xQEyZMUFhYmDw8PLRp06br7pObm6tbb71VZrNZffv2VWZmZgNKBQAAAID6cTjoVFRUKDIyUhkZGfXqf+zYMY0fP1533nmnCgoKNHv2bD366KPaunWrw8UCAAAAQH04PL30uHHjNG7cuHr3X7lypXr16qXly5dLkgYOHKiPPvpIL7/8suLi4hw9PQAAAABcl9Pfo5OXl6fY2Fi7tri4OM2ePfuq+1RWVqqystK2brVanVUe4JBvq2p05MwFh/a5VF2jL7/5Vj06t5Ovj5dD+/bp1lHtTI7tAwAAgGYIOqWlpQoODrZrCw4OltVq1bfffqt27dpdsU9qaqoWLVrk7NIAhx05c0E/+f1HzXa+d58YqcHdA5rtfADQlkTM2+zS8xcvHe/S8wPuzulBpyGSk5NlsVhs61arVeHh4S6sCPhOn24d9e4TIx3ap+j0Bc1eX6D0yUPVN6ijw+cDAACA45wedEJCQlRWVmbXVlZWJn9//zqv5kiS2WyW2Wx2dmmAw9qZvBp8haVvUEeuzgAAADQTp79HJyYmRjk5OXZt27ZtU0xMjLNPDQAAAKCNcjjoXLhwQQUFBSooKJD03fTRBQUFKikpkfTdbWfTp0+39X/88cd19OhRPfnkkzp48KBee+01vfXWW5ozZ07TjAAAgP+wYsUKDRkyRP7+/vL391dMTIzee+892/ZLly4pMTFRXbt2VceOHTVp0qQr7jwAALR+DgedPXv26JZbbtEtt9wiSbJYLLrlllu0cOFCSdKpU6dsoUeSevXqpc2bN2vbtm2KjIzU8uXL9cc//pGppQEATtGjRw8tXbpU+fn52rNnj+666y7dd999+uc//ylJmjNnjv76179qw4YN2rFjh06ePKkHHnjAxVUDAJqaw8/ojB49WoZhXHV7ZmZmnfvs27fP0VMBAOCwCRMm2K3/9re/1YoVK7Rr1y716NFDq1ev1rp163TXXXdJktauXauBAwdq165d+vGPf1znMXntAQC0Pk5/RgcAAFepqalRVlaWKioqFBMTo/z8fFVXV9u9323AgAHq2bOn8vLyrnqc1NRUBQQE2BZmAgWAlo+gAwBwO5999pk6duwos9msxx9/XO+8844GDRqk0tJSmUwmderUya5/cHCwSktLr3q85ORklZeX25bjx487eQQAgMZqke/RAQCgMW688UYVFBSovLxcb7/9tuLj47Vjx44GH4/XHgBA60PQAQC4HZPJpL59+0qSoqKi9I9//EOvvPKKJk+erKqqKp07d87uqk5ZWZlCQkJcVC0AwBm4dQ0A4PZqa2tVWVmpqKgo+fj42L3frbCwUCUlJbzfDQDcDFd0AABuJTk5WePGjVPPnj11/vx5rVu3Trm5udq6dasCAgI0Y8YMWSwWdenSRf7+/nriiScUExNz1RnXAACtE0EHAOBWTp8+renTp+vUqVMKCAjQkCFDtHXrVt19992SpJdfflmenp6aNGmSKisrFRcXp9dee83FVQMAmhpBBwDgVlavXn3N7b6+vsrIyFBGRkYzVQQAcAWe0QEAAADgdgg6AAAAANwOQQcAAACA2yHoAAAAAHA7BB0AAAAAboegAwAAAMDtEHQAAAAAuB2CDgAAAAC3Q9ABAAAA4HYIOgAAAADcDkEHAAAAgNsh6AAAAABwOwQdAAAAAG6HoAMAAADA7Xi7ugAAAAA0v4h5m116/uKl4116frg/rugAAAAAcDsEHQAAAABu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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x300 with 2 Axes>"
            ],
            "image/png": "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fPXVV8ZDDz1ktG3b1igoKDAMwzAmTZpkPPnkk/b+n3zyieHl5WW88MILxsGDB42EhASjRYsWxoEDB9w1hDpxdvxLly41vL29jU2bNhmnTp2ybyUlJe4aQp04O/5fauqrrjk7/vz8fMPPz8+YPn26kZeXZ/z1r381OnXqZDz99NPuGkKdOfsaJCQkGH5+fsaf//xn49ixY8b7779vXHfddca9997rriHUWklJibF//35j//79hiQjKSnJ2L9/v/Htt98ahmEYTz75pDFp0iR7/2PHjhm+vr7GH/7wB+PgwYNGSkqK4enpaWzbtq3OtRB0gH8aNmyY8cgjjxjTpk0z/P39jXbt2hlPPfWUw/LSvww6hvGv5aVbtGhhdO/e3Xj++ecdnq9r0DEMw9i7d69xxx13GK1btzZatWpl9OvXz3jmmWfqa+gAXOB///d/je7duxve3t7GoEGDjD179tifGzZsmH2J+svefPNNo3fv3oa3t7dxww03GO+++24DV1y/nBn/NddcY0i6YktISGj4wuuJs//+/66pBx3DcH78u3fvNiIiIgyr1Wpce+21xjPPPGNcunSpgauuX868BhUVFcYf//hH47rrrjN8fHyMoKAg45FHHjF+/PHHhi+8jnbu3Fnt/+fL442JiTGGDRt2xT79+/c3vL29jWuvvdbhF8Z1YTEMk8+HATV06623qn///kpOTnZ3KQAAAKgjPqMDAAAAwHQIOgAAAABMh1vXAAAAAJgOMzoAAAAATIegAwAAAMB0CDoAAAAATIegAwAAAMB0CDoAAAAATIegAwAAAMB0CDoAAAAATIegAwAAAMB0/j/vBU+q1uI6sgAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.preprocessing import StandardScaler\n",
        "\n",
        "# Instantiate scaler and fit on features\n",
        "scaler = StandardScaler()\n",
        "scaler.fit(X)\n",
        "\n",
        "# Transform features\n",
        "X_scaled = scaler.transform(X)\n",
        "\n",
        "# Plot\n",
        "X_scaled_0 = pd.Series(X_scaled[:,0], name=\"alcohol\")\n",
        "X_scaled_12 = pd.Series(X_scaled[:,12], name=\"proline\")\n",
        "\n",
        "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n",
        "X_scaled_0.plot(kind=\"box\", ax=axs[0])\n",
        "X_scaled_0.plot(kind=\"hist\", ax=axs[1])\n",
        "plt.show()\n",
        "\n",
        "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n",
        "X_scaled_12.plot(kind=\"box\", ax=axs[0], color=\"red\")\n",
        "X_scaled_12.plot(kind=\"hist\", ax=axs[1], color=\"red\")\n",
        "plt.show()"
      ],
      "metadata": {
        "id": "Yhtt9Rd4UZ1C",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 565
        },
        "outputId": "149ad4ce-c1ad-4dab-a196-73f540b89dc0"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x300 with 2 Axes>"
            ],
            "image/png": "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WrlypdLS0nTPPffo2rVrmjFjhk6dOqUuXbro3/7t38wuDwDQyvh0JCckJET9+/dXQUGBZ1t9fb0KCgo0ePBgX3YNAGhF4uPjdezYMT311FNasGCBvve97+nFF1/U0aNHmYkTANBkPp9dLTMzU+np6br//vs1cOBA5eTkyOVyeWZbAwBAktq2batHHnnE7DIAABbg85AzdepUXb58Wc8884wqKirUr18/7d69+7rJCAAAgWvjxo033f/oo4/6qRIAgBX4PORI0ty5czV37lx/dAUAaIWeeOIJr/Xa2lr99a9/VUhIiNq3b0/IAQA0SYuaXQ0AEJi++uorr6W6ulolJSUaOnQoEw8AAJqMkAMAaJF69+6tF1988bpRHgAAvgshBwDQYrVt21bl5eWNbn/gwAFNmDBBcXFxstls2r59u9f+mTNnymazeS1jx45t5qoBAGbzyzM5AADczH/+5396rRuGoYsXL+q1117TkCFDGn0el8ulvn376ic/+YkmTZrUYJuxY8cqLy/Ps8772QDAegg5AADTTZw40WvdZrMpKipKI0eO1MqVKxt9nnHjxmncuHE3bWO32xt8ITUAwDoIOQAA09XX1/utr3379ik6OlqdOnXSyJEj9fzzz6tz5843bO92u+V2uz3rTqfTH2UCAG4Dz+QAAALG2LFjtXHjRhUUFOill17S/v37NW7cONXV1d3wmOzsbDkcDs+SkJDgx4oBALeCkRwAgOkyMzMb3XbVqlW33M+0adM8f77vvvuUkpKinj17at++fRo1alSDx2RlZXnV53Q6CToA0MIRcgAApjt69KiOHj2q2tpa3XnnnZKkTz/9VG3atNH3v/99Tzubzdas/fbo0UNdunRRaWnpDUOO3W5ncgIAaGUIOQAA002YMEHh4eHasGGDOnXqJOmbF4TOmjVLw4YN08KFC33S7/nz5/XFF1+oa9euPjk/AMAchBwAgOlWrlypP/7xj56AI0mdOnXS888/rzFjxjQ65FRXV6u0tNSzfubMGRUXFysyMlKRkZFaunSpJk+erNjYWJ0+fVpPPvmkevXqpbS0tGb/TAAA8xByAACmczqdunz58nXbL1++rKtXrzb6PEeOHNGIESM8698+S5Oenq41a9bo+PHj2rBhg65cuaK4uDiNGTNGzz33HLejAYDFEHIAAKZ7+OGHNWvWLK1cuVIDBw6UJL3//vv6+c9/fsOXejYkNTVVhmHccP8777xz27UCAFo+Qg4AwHRr167VokWLNGPGDNXW1kqS2rZtq9mzZ2v58uUmVwcAaG0IOQAA07Vv316vv/66li9frtOnT0uSevbsqQ4dOphcGQCgNeJloACAFuPixYu6ePGievfurQ4dOtz01jMAAG6EkAMAMN0XX3yhUaNGqU+fPnrwwQd18eJFSdLs2bN9Nn00AMC6CDkAANMtWLBAwcHBKisrU/v27T3bp06dqt27d5tYGQCgNeKZHACA6f74xz/qnXfeUXx8vNf23r1767PPPjOpKgBAa8VIDgDAdC6Xy2sE51tffvkl77ABADQZIQcAYLphw4Zp48aNnnWbzab6+notW7bM6+WeAAA0BrerAQBMt2zZMo0aNUpHjhxRTU2NnnzySX388cf68ssvdejQIbPLAwC0MozkAABMl5ycrE8//VRDhw7VQw89JJfLpUmTJuno0aPq2bOn2eUBAFoZRnIAAKaqra3V2LFjtXbtWv3yl780uxwAgAUwkgMAMFVwcLCOHz9udhkAAAsh5AAATPfII49o3bp1ZpcBALAIblcDAJju66+/1vr16/Xuu++qf//+6tChg9f+VatWmVQZAKA1IuQg4Pyttk6SdOJClU/7uVZbp/Nf/U3xnULVLriNT/sqvVTt0/MDvvKXv/xFiYmJOnHihL7//e9Lkj799FOvNjabzYzSAACtGCEHAef0/w8Ei9/6yORKml8HO/9Jo3Xp3bu3Ll68qL1790qSpk6dqldffVUxMTEmVwYAaM34PyIEnDH3xkqSekaHKdSHIyyll6o1f0uxcqb2U6/oMJ/1860O9rZK6tLhuxsCLYhhGF7ru3btksvlMqkaAIBVEHIQcCI7hGjawG5+669XdJiS73D4rT+gNfu/oQcAgFvB7GoAANPYbLbrnrnhGRwAwO1iJAcAYBrDMDRz5kzZ7XZJ0rVr1/TYY49dN7vaW2+9ZUZ5AIBWipADADBNenq61/ojjzxiUiUAACvxWch54YUXtHPnThUXFyskJERXrlzxVVcAgFYqLy/P7BICUuLinWaXAAA+5bNncmpqajRlyhQ9/vjjvuoCAAAAAK7js5GcpUuXSpLy8/N91QUAAAAAXKdFPZPjdrvldrs9606n08RqAAAAALRGLWoK6ezsbDkcDs+SkJBgdkkAgFbkwIEDmjBhguLi4mSz2bR9+3av/YZh6JlnnlHXrl0VGhqq0aNH69SpU+YUCwDwmSaFnMWLF3veaXCj5eTJk7dcTFZWlqqqqjzLuXPnbvlcAIDA43K51LdvX+Xm5ja4f9myZXr11Ve1du1avf/+++rQoYPS0tJ07do1P1cKAPClJt2utnDhQs2cOfOmbXr06HHLxdjtds+7EgAAaKpx48Zp3LhxDe4zDEM5OTn61a9+pYceekiStHHjRsXExGj79u2aNm1ag8dxKzUAtD5NCjlRUVGKioryVS0AAPjMmTNnVFFRodGjR3u2ORwODRo0SIcPH75hyMnOzvZMpgMAaB189kxOWVmZiouLVVZWprq6OhUXF6u4uFjV1dW+6hIAgBuqqKiQJMXExHhtj4mJ8exrCLdSA0Dr47PZ1Z555hlt2LDBs/69731PkrR3716lpqb6qlsAAJoVt1IDQOvjs5Gc/Px8GYZx3ULAAQCYITY2VpJUWVnptb2ystKzDwBgDS1qCmkAAHwlKSlJsbGxKigo8GxzOp16//33NXjwYBMrAwA0txb1MlAAAG5HdXW1SktLPetnzpxRcXGxIiMj1a1bN82fP1/PP/+8evfuraSkJD399NOKi4vTxIkTzSsaANDsCDkAAMs4cuSIRowY4VnPzMyUJKWnpys/P19PPvmkXC6XfvrTn+rKlSsaOnSodu/erXbt2plVMgDABwg5AADLSE1NlWEYN9xvs9n061//Wr/+9a/9WBUAwN94JgcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAAACApRByAAAAAFgKIQcAEFCeffZZ2Ww2r+Wuu+4yuywAQDNqa3YBAAD427333qt3333Xs962LZdDALASftUBAAGnbdu2io2NNbsMAICPcLsaACDgnDp1SnFxcerRo4f+6Z/+SWVlZTds63a75XQ6vRYAQMtGyAEABJRBgwYpPz9fu3fv1po1a3TmzBkNGzZMV69ebbB9dna2HA6HZ0lISPBzxQCApiLkAAACyrhx4zRlyhSlpKQoLS1N//Vf/6UrV67o97//fYPts7KyVFVV5VnOnTvn54oBAE3ls5Bz9uxZzZ49W0lJSQoNDVXPnj21ZMkS1dTU+KpLAACarGPHjurTp49KS0sb3G+32xUREeG1AABaNp9NPHDy5EnV19frt7/9rXr16qUTJ05ozpw5crlcWrFiha+6BQCgSaqrq3X69Gn98z//s9mlAACaic9CztixYzV27FjPeo8ePVRSUqI1a9bcMOS43W653W7POg93AgCa26JFizRhwgR1795d5eXlWrJkidq0aaPp06ebXRoAoJn49ZmcqqoqRUZG3nA/D3cCAHzt/Pnzmj59uu688079+Mc/VufOnVVYWKioqCizSwMANBO/vSentLRUq1evvumtallZWcrMzPSsO51Ogg4AoFlt3rzZ7BIAAD7W5JGcxYsXy2az3XQ5efKk1zEXLlzQ2LFjNWXKFM2ZM+eG5+bhTgAAAAC3q8kjOQsXLtTMmTNv2qZHjx6eP5eXl2vEiBF64IEH9MYbbzS5QAAAAABoiiaHnKioqEbft3zhwgWNGDFC/fv3V15enoKCeC0PAAAAAN/y2TM5Fy5cUGpqqrp3764VK1bo8uXLnn2xsbG+6hYAAABAgPNZyNmzZ49KS0tVWlqq+Ph4r32GYfiqWwAAAAABzmf3j82cOVOGYTS4AAAAAICv8JAMAAAAAEsh5AAAAACwFEIOAAAAAEsh5AAAAACwFEIOAAAAAEsh5AAAAACwFEIOAAAAAEsh5AAAAACwlLZmFwAAAADAPxIX7zS1/7MvjvdLP4zkAAAAALAUQg4AAAAAS+F2NaAR/lZTp9OXq5t0TOmlaq9/NlXPqDCFhrS5pWMBAAACGSEHaITTl6v1o9UHb+nY+VuKb+m4HfOGKvkOxy0dCwAAEMgIOUAj9IwK0455Q5t0zLXaOp3/6m+K7xSqdsFNH5HpGRXW5GMAAABAyAEaJTSkzS2Nqtyf2Py1AAAA4OYIOQAA+JnZU7gCgNUxuxoAAAAASyHkAAAAALAUQg4AAAAASyHkAAACTm5urhITE9WuXTsNGjRIH3zwgdklAQCaESEHABBQtmzZoszMTC1ZskQffvih+vbtq7S0NF26dMns0gAAzaRFz65mGIYkyel0mlwJAASWb393v/0dtpJVq1Zpzpw5mjVrliRp7dq12rlzp9avX6/Fixdf197tdsvtdnvWq6qqJN3etane/ddbPhYAWrPb+e1syrWpRYecq1evSpISEhJMrgQAAtPVq1flcDT9HVEtVU1NjYqKipSVleXZFhQUpNGjR+vw4cMNHpOdna2lS5det51rEwA0nSPn9s/RmGtTiw45cXFxOnfunMLDw2Wz2cwuB2gSp9OphIQEnTt3ThEREWaXAzSJYRi6evWq4uLizC6lWX3++eeqq6tTTEyM1/aYmBidPHmywWOysrKUmZnpWa+vr9eXX36pzp07t6prE79J3vg+vPF9eOP78NZSvo+mXJtadMgJCgpSfHy82WUAtyUiIoIfSLRKVhrBuR12u112u91rW8eOHc0pphnwm+SN78Mb34c3vg9vLeH7aOy1iYkHAAABo0uXLmrTpo0qKyu9tldWVio2NtakqgAAzY2QAwAIGCEhIerfv78KCgo82+rr61VQUKDBgwebWBkAoDm16NvVgNbMbrdryZIl193mAsBcmZmZSk9P1/3336+BAwcqJydHLpfLM9uaVfGb5I3vwxvfhze+D2+t8fuwGVacHxQAgJt47bXXtHz5clVUVKhfv3569dVXNWjQILPLAgA0E0IOAAAAAEvhmRwAAAAAlkLIAQAAAGAphBwAAAAAlkLIAW7i7NmzstlsKi4ublHnS0xMVE5OTrPUBAAAYDWEHAAAAsjZs2c1e/ZsJSUlKTQ0VD179tSSJUtUU1NjdmmmeeGFF/TAAw+offv26tixo9nlmCI3N1eJiYlq166dBg0apA8++MDskkxx4MABTZgwQXFxcbLZbNq+fbvZJZkqOztbAwYMUHh4uKKjozVx4kSVlJSYXVajEHIAAAggJ0+eVH19vX7729/q448/1ssvv6y1a9fqqaeeMrs009TU1GjKlCl6/PHHzS7FFFu2bFFmZqaWLFmiDz/8UH379lVaWpouXbpkdml+53K51LdvX+Xm5ppdSouwf/9+ZWRkqLCwUHv27FFtba3GjBkjl8tldmnfzQAC3K5du4whQ4YYDofDiIyMNMaPH2+UlpYahmEYZ86cMSQZR48e9bQ/ceKEMX78eCM8PNwICwszhg4d6mlfV1dnLF261LjjjjuMkJAQo2/fvsauXbs8x357vv/4j/8wUlNTjdDQUCMlJcX405/+5FXTv//7vxv33HOPERISYnTv3t1YsWKF1/7u3bsbL7/8sm++EAABZ9myZUZSUpLZZZguLy/PcDgcZpfhdwMHDjQyMjI863V1dUZcXJyRnZ1tYlXmk2Rs27bN7DJalEuXLhmSjP3795tdyndiJAcBz+VyKTMzU0eOHFFBQYGCgoL08MMPq76+/rq2Fy5c0PDhw2W32/Xee++pqKhIP/nJT/T1119Lkl555RWtXLlSK1as0PHjx5WWlqZ//Md/1KlTp7zO88tf/lKLFi1ScXGx+vTpo+nTp3vOUVRUpB//+MeaNm2aPvroIz377LN6+umnlZ+f7/PvAkBgqqqqUmRkpNllwAQ1NTUqKirS6NGjPduCgoI0evRoHT582MTK0BJVVVVJUqv4vWhrdgGA2SZPnuy1vn79ekVFRemTTz5RWFiY177c3Fw5HA5t3rxZwcHBkqQ+ffp49q9YsUK/+MUvNG3aNEnSSy+9pL179yonJ8dr6HvRokUaP368JGnp0qW69957VVpaqrvuukurVq3SqFGj9PTTT3vO/8knn2j58uWaOXNms39+AIGttLRUq1ev1ooVK8wuBSb4/PPPVVdXp5iYGK/tMTExOnnypElVoSWqr6/X/PnzNWTIECUnJ5tdzndiJAcB79SpU5o+fbp69OihiIgIJSYmSpLKysqua1tcXKxhw4Z5As7fczqdKi8v15AhQ7y2DxkyRH/+85+9tqWkpHj+3LVrV0ny3Pv85z//ucFznDp1SnV1dU3/gAACwuLFi2Wz2W66/N//ab1w4YLGjh2rKVOmaM6cOSZV7hu38n0AuLGMjAydOHFCmzdvNruURmEkBwFvwoQJ6t69u373u98pLi5O9fX1Sk5ObnCmodDQ0Gbp8+9Dks1mk6QGb48DgMZauHDhd4729ujRw/Pn8vJyjRgxQg888IDeeOMNH1fnf039PgJVly5d1KZNG1VWVnptr6ysVGxsrElVoaWZO3euduzYoQMHDig+Pt7schqFkIOA9sUXX6ikpES/+93vNGzYMEnSwYMHb9g+JSVFGzZsUG1t7XWjOREREYqLi9OhQ4f0D//wD57thw4d0sCBAxtd0913361Dhw55bTt06JD69OmjNm3aNPo8AAJLVFSUoqKiGtX2woULGjFihPr376+8vDwFBVnvxo6mfB+BLCQkRP3791dBQYEmTpwo6Zu/dCsoKNDcuXPNLQ6mMwxD8+bN07Zt27Rv3z4lJSWZXVKjEXIQ0Dp16qTOnTvrjTfeUNeuXVVWVqbFixffsP3cuXO1evVqTZs2TVlZWXI4HCosLNTAgQN155136uc//7mWLFminj17ql+/fsrLy1NxcbHefPPNRte0cOFCDRgwQM8995ymTp2qw4cP67XXXtPrr7/eHB8ZQIC7cOGCUlNT1b17d61YsUKXL1/27AvUv7kvKyvTl19+qbKyMtXV1Xle2NyrV6/rns20oszMTKWnp+v+++/XwIEDlZOTI5fLpVmzZpldmt9VV1ertLTUs37mzBkVFxcrMjJS3bp1M7Eyc2RkZGjTpk16++23FR4eroqKCkmSw+FotrtbfMbs6d0As+3Zs8e4++67DbvdbqSkpBj79u3zTBvZ0BTSx44dM8aMGWO0b9/eCA8PN4YNG2acPn3aMIxvpt189tlnjTvuuMMIDg6+4RTSf3++r776ypBk7N2717Pt2ymkg4ODjW7duhnLly/3qpkppAHcqry8PENSg0ugSk9Pb/D7+PvfZatbvXq10a1bNyMkJMQYOHCgUVhYaHZJpti7d2+D/y6kp6ebXZopbvRbkZeXZ3Zp38lmGIbhr0AFAAAAAL5mvZtwAQAAAAQ0Qg4AAAAASyHkAAAAALAUQg4AAAAASyHkAAAAALAUQg4AAAAASyHkAAAAALAUQg4AAAAASyHkAAAAALAUQg4AAAAASyHkAAAAALCU/wea86ZdmkFM0QAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x300 with 2 Axes>"
            ],
            "image/png": "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Cy+8oIaGBqvjAAACHCUHAGC548ePKzk5WR6PR3FxcXrggQf01ltvWR0LABCgKDkAAMuNGjVKmzdvVnl5uZ577jlVVFRowoQJGjFihDZs2KCLFy9aHREAEEAoOQCATiMkJESzZ8/W7t279etf/1rnzp3TqlWrlJCQoAULFqiiosLqiACAAEDJAQB0GseOHdNPf/pT9e3bVxs2bNCqVav04Ycf6sCBAyovL9fMmTOtjggACAAhVgcAAGDDhg3Kzc3VmTNnNH36dD3//POaPn26unT54m9xAwcOVF5enhITE60NCgAICJQcAIDlcnJy9MMf/lALFy5U3759r7hPnz59tH379g5OBgAIRJQcAIDlzp49+7X7hIaGKj09vQPSAAACHffkAAAsl5ubq927d7favnv3bu3YscOCRACAQEbJAQBYLisrS7169Wq1vU+fPvrVr35lQSIAQCCj5AAALFdaWqqBAwe22j5gwACVlpZakAgAEMgoOQAAy/Xp00fvvPNOq+0nTpxQz549LUgEAAhklBwAgOW+//3v62c/+5kOHjyo5uZmNTc3689//rOWL1+u++67z+p4AIAAw+xqAADLPf7447pw4YKmTJmikJAvPppaWlq0YMEC7skBALQZJQcAYLnQ0FDt2rVLjz/+uE6cOKHw8HB985vf1IABA6yOBgAIQJQcAECnMWTIEA0ZMsTqGACAAGdqyTl8+LDWr1+v4uJiVVRUaM+ePZo1a5aZQwIAAlBzc7Py8vJUUFCg6upqtbS0+D3+5z//2aJkAIBAZGrJqa+v18iRI/XDH/5Qs2fPNnMoAEAAW758ufLy8nTPPfdoxIgRcjgcVkcCAAQwU0vOtGnTNG3aNDOHAADYQH5+vn7/+99r+vTpVkcBANhAp7onx+v1yuv1+tZra2stTAMA6CihoaEaNGiQ1TEAADbRqb4nJysrS9HR0b4lISHB6kgAgA6wcuVKbd68WYZhWB0FAGADnepMTmZmpjwej2+9traWogMAQeD111/XwYMHtXfvXt12223q1q2b3+MvvfSSRckAAIGoU5Ucp9Mpp9NpdQwAQAfr0aOH7r33XqtjAABsolOVHABAcMrNzbU6AgDARkwtOXV1dTp37pxv/fz58yopKVFMTIz69+9v5tAAgADz+eef69ChQ/rwww91//33y+Vyqby8XFFRUYqMjLQ6HgAggJhaco4dO6ZJkyb51r+63yY9PV15eXlmDg0ACCB///vfdffdd6u0tFRer1d33XWXXC6Xfv3rX8vr9Wrbtm1WRwQABBBTS87EiROZKQcA8LWWL1+uMWPG6MSJE+rZs6dv+7333qslS5ZYmAwAEIi4JwcAYLm//OUv+utf/6rQ0FC/7YmJifrv//5vi1IBAAJVp/qeHABAcGppaVFzc3Or7R999JFcLpcFiQAAgYySAwCw3NSpU7Vp0ybfusPhUF1dndasWaPp06dbF8wsDoe1CwDYHJerITidPStdvmzuGKdO+f9rNpdLGjy4Y8YC2tnTTz+ttLQ0DR8+XA0NDbr//vt19uxZ9erVS//xH/9hdTwAQICh5CD4nD0rDRnScePNn99xY33wAUUHASk+Pl4nTpxQfn6+3nnnHdXV1Wnx4sWaN2+ewsPDrY4HAAgwlBwEn6/O4LzwgpSUZN44n30mXbggJSZKZv+SdurUF2XK7LNTgIlCQkI0vyP/KAAAsC1KDoJXUpI0erS5Y4wfb+7xAZt4/vnnr/n4ggULOigJAMAOKDkAAMstX77cb72pqUmffvqpQkNDFRERQckBALQJs6sBACz3v//7v35LXV2dzpw5owkTJjDxAACgzSg5AIBOafDgwVq3bl2rszzXkpWVpdtvv10ul0t9+vTRrFmzdObMGb99GhoalJGRoZ49eyoyMlJz5sxRVVVVe8cHAFiIkgMA6LRCQkJUXl5+3fsXFhYqIyNDRUVFOnDggJqamjR16lTV19f79nnooYf06quvavfu3SosLFR5eblmz55tRnwAgEW4JwcAYLn//M//9Fs3DEMVFRV65plnNL4NE3js27fPbz0vL099+vRRcXGxvvOd76impkbbt2/Xzp07NXnyZElSbm6ukpKSVFRUpHHjxt38iwEAWI6SAwCw3KxZs/zWHQ6HevfurcmTJ+vpp5++4ePW1NRIkmJiYiRJxcXFampqUmpqqm+fYcOGqX///jpy5MgVS47X65XX6/Wt19bW3nAeAEDHoOQAACzX0tJiyjFXrFih8ePHa8SIEZKkyspKhYaGqkePHn77xsbGqrKy8orHycrK0tq1a9s9HwDAPNyTAwCwpYyMDL377rvKz8+/qeNkZmaqpqbGt5SVlbVTQgCAWTiTAwCwnMfjue59N2zY8LX7LF26VK+99poOHz6s+Ph43/a4uDg1Njbqk08+8TubU1VVpbi4uCsey+l0yul0Xnc+AID1KDkAAMu9/fbbevvtt9XU1KShQ4dKkj744AN17dpVo0eP9u3ncDiueRzDMLRs2TLt2bNHhw4d0sCBA/0eT0lJUbdu3VRQUKA5c+ZIks6cOaPS0lK53e52flUAAKtQcgAAlpsxY4ZcLpd27NihW265RdIXXxC6aNEi3XnnnVq5cuV1HScjI0M7d+7UK6+8IpfL5bvPJjo6WuHh4YqOjtbixYvl8XgUExOjqKgoLVu2TG63m5nVAMBGKDkAAMs9/fTT+uMf/+grOJJ0yy236IknntDUqVOvu+Tk5ORIkiZOnOi3PTc3VwsXLpQkbdy4UV26dNGcOXPk9XqVlpamrVu3tsvrQID4mjOCpjMMa8cP9tePoEDJAQBYrra2VhcvXmy1/eLFi7p8+fJ1H8e4jl+ewsLClJ2drezs7DZlBAAEDmZXAwBY7t5779WiRYv00ksv6aOPPtJHH32kP/zhD1q8eLFmz55tdTwAQIDhTA4AwHLbtm3TqlWrdP/996upqUmSFBISosWLF2v9+vUWpwMABBpKDgDAchEREdq6davWr1+vDz/8UJJ06623qnv37hYnAwAEIi5XAwB0GhUVFaqoqNDgwYPVvXv367rHBgCAf0bJAQBY7n/+5380ZcoUDRkyRNOnT1dFRYUkafHixdc9sxoAAF+h5AAALPfQQw+pW7duKi0tVUREhG/73LlztW/fPguTAQACEffkAAAs98c//lH79+9XfHy83/bBgwfr73//u0WpAACBijM5AADL1dfX+53B+cqlS5fkdDotSAQACGSUHACA5e688049//zzvnWHw6GWlhY99dRTmjRpkoXJAACBiMvVAACWe+qppzRlyhQdO3ZMjY2N+vnPf6733ntPly5d0htvvGF1PABAgOFMDgDAciNGjNAHH3ygCRMmaObMmaqvr9fs2bP19ttv69Zbb7U6HgAgwHAmBwBgqaamJt19993atm2bHnnkEavjAABsgDM5AABLdevWTe+8847VMQAANkLJAQBYbv78+dq+fbvVMQAANsHlagAAy33++ed67rnn9Kc//UkpKSnq3r273+MbNmywKBkAIBBRcgAAlvnb3/6mxMREvfvuuxo9erQk6YMPPvDbx+FwWBENABDAOqTkZGdna/369aqsrNTI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9eyzz7brOJQc4Etvvvmm33pRUZEGDx6srl27XnH/pKQkvfHGG37b3njjDQ0ZMuSqz2mr0aNH6/333/f9MACAturdu7d69+5tdYyAEhoaqpSUFBUUFGjWrFmSvvjjU0FBAfdE4poMw9CyZcu0Z88eHTp0SAMHDrQ6UqfX0tIir9fb7sel5ABfKi0tlcfj0QMPPKDjx4/rt7/9rZ5++umr7r9y5UrdfvvtevzxxzV37lwdOXJEzzzzjLZu3dpumX7xi19o3LhxWrp0qX70ox+pe/fuev/993XgwAE988wz7TYOAEhf/By8dOmSSktL1dzcrJKSEknSoEGDFBkZaW24DubxeJSenq4xY8Zo7Nix2rRpk+rr67Vo0SKro1murq5O586d862fP39eJSUliomJCfqrDDIyMrRz50698sorcrlcqqyslCRFR0crPDzc4nTWy8zM1LRp09S/f39dvnxZO3fu1KFDh7R///52H4uSA3xpwYIF+uyzzzR27Fh17dpVy5cv149//OOr7j969Gj9/ve/1+rVq/X444+rb9++euyxx9o06cDXSU5OVmFhoR555BHdeeedMgxDt956q+bOndtuYwDAV1avXq0dO3b41r/1rW9Jkg4ePKiJEydalMoac+fO1cWLF7V69WpVVlZq1KhR2rdvX6vJCILRsWPHNGnSJN+6x+ORJKWnp7d5hlG7ycnJkaRW/7/k5ua26+8Hgaq6uloLFixQRUWFoqOjlZycrP379+uuu+5q97EchmEY7X5UIMBMnDhRo0aN0qZNm6yOAgAAgJvE7GoAAAAAbIWSAwAAAMBWuFwNAAAAgK1wJgcAAACArVByAAAAANgKJQcAAACArVByAAAAANgKJQcAAACArVByAAAAANgKJQcAAACArVByAAAAANjK/wHfAGsMXJTWLwAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.preprocessing import QuantileTransformer\n",
        "\n",
        "# Instantiate scaler and fit on features\n",
        "scaler = QuantileTransformer()\n",
        "scaler.fit(X)\n",
        "\n",
        "# Transform features\n",
        "X_scaled = scaler.transform(X)\n",
        "\n",
        "# Plot\n",
        "X_scaled_0 = pd.Series(X_scaled[:,0], name=\"alcohol\")\n",
        "X_scaled_12 = pd.Series(X_scaled[:,12], name=\"proline\")\n",
        "\n",
        "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n",
        "X_scaled_0.plot(kind=\"box\", ax=axs[0])\n",
        "X_scaled_0.plot(kind=\"hist\", ax=axs[1])\n",
        "plt.show()\n",
        "\n",
        "fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10,3))\n",
        "X_scaled_12.plot(kind=\"box\", ax=axs[0], color=\"red\")\n",
        "X_scaled_12.plot(kind=\"hist\", ax=axs[1], color=\"red\")\n",
        "plt.show()"
      ],
      "metadata": {
        "id": "ceVuEouPtc3K",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 620
        },
        "outputId": "5d80b90b-08f7-447c-9c60-2f9bcb772178"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.11/dist-packages/sklearn/preprocessing/_data.py:2829: UserWarning: n_quantiles (1000) is greater than the total number of samples (178). n_quantiles is set to n_samples.\n",
            "  warnings.warn(\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x300 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x300 with 2 Axes>"
            ],
            "image/png": "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maLevXsrLS1NLVq00Lp166rtv27dOv3000/avn27Bg0apNDQUA0dOlTh4eF1Lh4AYC5JSUkKCAi4rr19+/ZasmSJCyoCALgrh4JORUWFsrOzFR0d/c8H8PBQdHS0srKyqh3z/vvvKyoqSnFxcQoMDFSfPn20ZMkSVVZW3nA/5eXlKi4utrsBAMwvLy9PXbp0ua69c+fOysvLc0FFAAB35VDQOX/+vCorKxUYGGjXHhgYqIKCgmrHnDhxQu+9954qKyu1c+dOzZ8/X8uXL9eLL754w/0kJSXJ39/fdgsJCXGkTACAm2rfvr2++uqr69q//PJLtWvXzgUVAQDcldO/R6eqqkrt27fXG2+8oYiICI0bN05z585VWlraDcckJCSoqKjIdjt9+rSzywQANALjx4/X008/rV27dqmyslKVlZX65JNPNGPGDD300EOuLg8A4EYcWl46ICBAnp6eKiwstGsvLCxUUFBQtWOCg4PVrFkzeXp62trCwsJUUFCgiooKeXt7XzfGarXKarU6UhoAwAQWL16sU6dO6e6775aX19VDVFVVlSZPnsxndAAADnHojI63t7ciIiKUmZlpa6uqqlJmZqaioqKqHTNo0CAdO3ZMVVVVtrYjR44oODi42pADAGi6vL29tXnzZuXm5up//ud/tHXrVh0/flzr1q3jmAEAcIjDXxgaHx+v2NhYDRgwQAMHDlRKSorKyso0ZcoUSdLkyZPVsWNHJSUlSZL+8z//UytXrtSMGTP01FNP6ejRo1qyZImefvrp+p0JAMA0evTooR49eri6DACAG3M46IwbN07nzp3TggULVFBQoH79+ikjI8O2QEFeXp48PP55oigkJEQffvihZs2apb59+6pjx46aMWOGnnvuufqbBQDAFCorK5Wenq7MzEydPXvW7moASfrkk09cVBkAwN04HHQkafr06Zo+fXq19+3evfu6tqioKH3++ee12RUAoAmZMWOG0tPTNXr0aPXp00cWi8XVJQEA3FStgg4AAM6wadMmvfvuuxo1apSrSwEAuDmnLy8NAEBNeXt7q1u3bq4uAwBgAgQdAECj8cwzz2jFihUyDMPVpQAA3ByXrgEAGo09e/Zo165d+uCDD3TrrbeqWbNmdvdv3brVRZUBANwNQQcA0Gi0bt1a9913n6vLAACYAEEHANBorF+/3tUlAABMgs/oAAAa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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Train/test split\n",
        "\n",
        "There are several ways to split data into train and test sets, but scikit-learn has a built-in function to do this on our behalf called train_test_split().\n",
        "\n",
        "We’ll use this function to split our data such that 70% is used to train the model and 30% is used to evaluate the model's ability to generalize to unseen instances."
      ],
      "metadata": {
        "id": "MX9hEqucVs1k"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.preprocessing import StandardScaler\n",
        "\n",
        "# Instantiate scaler and fit on features\n",
        "scaler = StandardScaler()\n",
        "scaler.fit(X)\n",
        "# Transform features\n",
        "X_scaled = scaler.transform(X)\n",
        "\n",
        "# Split data into train and test\n",
        "X_train_scaled, X_test_scaled, y_train, y_test = train_test_split(\n",
        "    X_scaled,\n",
        "    y,\n",
        "    train_size=.7,\n",
        "    random_state=25\n",
        ")\n",
        "\n",
        "# Check the splits are correct\n",
        "print(f\"Train size: {round(len(X_train_scaled) / len(X) * 100)}% \\n\\\n",
        "Test size: {round(len(X_test_scaled) / len(X) * 100)}%\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "AQiYjODbVnZa",
        "outputId": "6e99aa84-63b8-49d1-d64f-7cd6f49a41aa"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Train size: 70% \n",
            "Test size: 30%\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## example: Model training"
      ],
      "metadata": {
        "id": "gyWKNHKSWGyL"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Thanks to sklearn, building a machine learning model is extremely simple!\n",
        "\n",
        "sklearn has an incredibly wide array of models available and, in most of the cases, the code will work on all the models in the same way!"
      ],
      "metadata": {
        "id": "5sfT7TgQWRzh"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## List of model types according to the documentation\n",
        "(https://scikit-learn.org/stable/supervised_learning.html)\n",
        "\n",
        "1. Supervised learning\n",
        "  1. Linear Models\n",
        "  2. Linear and Quadratic Discriminant Analysis\n",
        "  3. Kernel ridge regression\n",
        "  4. Support Vector Machines\n",
        "  5. Stochastic Gradient Descent\n",
        "  6. Nearest Neighbors\n",
        "  7. Gaussian Processes\n",
        "  8. Cross decomposition\n",
        "  9. Naive Bayes\n",
        "  10. Decision Trees\n",
        "  11. Ensembles: Gradient boosting, random forests, bagging, voting, stacking\n",
        "  12. Multiclass and multioutput algorithms\n",
        "  13. Feature selection\n",
        "  14. Semi-supervised learning\n",
        "  15. Isotonic regression\n",
        "  16. Probability calibration\n",
        "  17. Neural network models (supervised)\n",
        "2. Unsupervised learning\n",
        "  1. Gaussian mixture models\n",
        "  2. Manifold learning\n",
        "  3. Clustering\n",
        "  4. Biclustering\n",
        "  5. Decomposing signals in components (matrix factorization problems)\n",
        "  6. Covariance estimation\n",
        "  7. Novelty and Outlier Detection\n",
        "  8. Density Estimation\n",
        "  9. Neural network models (unsupervised)"
      ],
      "metadata": {
        "id": "URfag_reYJ_-"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## But the individual models are even more!\n",
        "\n",
        "1. Supervised learning\n",
        " 1. Linear Models\n",
        "    1. Ordinary Least Squares\n",
        "    2. Ridge regression and classification\n",
        "    3. Lasso\n",
        "    4. Multi-task Lasso\n",
        "    5. Elastic-Net\n",
        "    6. Multi-task Elastic-Net\n",
        "    7. Least Angle Regression\n",
        "    8. LARS Lasso\n",
        "    9. Orthogonal Matching Pursuit (OMP)\n",
        "    10. Bayesian Regression\n",
        "    11. Logistic regression\n",
        "    12. Generalized Linear Models\n",
        "    13. Stochastic Gradient Descent - SGD\n",
        "    14. Perceptron\n",
        "    15. Passive Aggressive Algorithms\n",
        "    16. Robustness regression: outliers and modeling errors\n",
        "    17. Quantile Regression\n",
        "    18. Polynomial regression: extending linear models with basis functions\n",
        "  2. Linear and Quadratic Discriminant Analysis\n",
        "    1. ...\n",
        "    2. ...\n",
        "  3. ..."
      ],
      "metadata": {
        "id": "1WRUYJscYPQw"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Let's try and train/test a simple LogisticRegression model"
      ],
      "metadata": {
        "id": "wfSEGS_SZ6IF"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"X_train and y_train\")\n",
        "display(X_train_scaled)\n",
        "display(y_train.values)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 364
        },
        "id": "NzjhwH4MaetD",
        "outputId": "b1493a0d-73c9-4f74-c461-d344f4c5fcff"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "X_train and y_train\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "array([[-0.6801591 ,  0.62266555,  0.99967413, ..., -1.26113805,\n",
              "        -1.2453302 ,  0.42387759],\n",
              "       [-1.13720713, -0.23011443, -2.43634632, ...,  1.37126518,\n",
              "         0.49197446, -0.11748635],\n",
              "       [ 0.09805783,  1.40363249, -0.02382132, ..., -1.69987192,\n",
              "        -1.81030733, -0.62700535],\n",
              "       ...,\n",
              "       [ 0.76510091,  2.34617879, -0.06037473, ..., -0.20817676,\n",
              "        -0.7933485 , -0.62700535],\n",
              "       [ 0.82686416, -0.97517485, -1.63217132, ...,  1.19577163,\n",
              "        -0.21424694, -0.37224585],\n",
              "       [-0.23546371, -0.02365191,  0.12239231, ..., -1.30501144,\n",
              "        -1.76793404, -0.59516041]])"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "array([2, 1, 2, 0, 1, 0, 1, 0, 1, 2, 2, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1,\n",
              "       1, 2, 0, 1, 0, 1, 0, 1, 0, 2, 2, 1, 0, 0, 1, 0, 2, 0, 1, 2, 0, 2,\n",
              "       1, 0, 1, 1, 1, 0, 0, 2, 1, 1, 0, 2, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0,\n",
              "       2, 0, 1, 1, 0, 2, 2, 1, 2, 0, 2, 2, 0, 2, 1, 0, 0, 0, 0, 0, 2, 1,\n",
              "       1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 0, 0, 1, 2, 0, 0, 2, 0, 2, 0, 1, 2,\n",
              "       1, 0, 1, 2, 1, 2, 2, 2, 2, 1, 1, 2, 1, 2])"
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.linear_model import LogisticRegression\n",
        "\n",
        "# Instatiating the model\n",
        "logistic_regression = LogisticRegression()\n",
        "display(logistic_regression)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 79
        },
        "id": "QDJvdqJ9aiPG",
        "outputId": "93c19622-e1ea-4fc5-a3ed-feb68b594371"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "LogisticRegression()"
            ],
            "text/html": [
              "<style>#sk-container-id-2 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-2 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-2 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-2 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-2 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-2 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-2 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-2 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-2 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-2 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator  sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label  sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link \" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link \">i<span>Not fitted</span></span></div></label><div class=\"sk-toggleable__content \"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Training the model\n",
        "logistic_regression.fit(X_train_scaled, y_train)\n",
        "display(logistic_regression)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 79
        },
        "id": "gpviJ99_akoy",
        "outputId": "a8e491c8-2bba-4381-ced9-d77e787cb263"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "LogisticRegression()"
            ],
            "text/html": [
              "<style>#sk-container-id-3 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-3 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-3 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-3 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-3 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-3 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-3 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-3 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-3 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Making predictions with the model\n",
        "log_reg_preds = logistic_regression.predict(X_test_scaled)\n",
        "\n",
        "print(\"y_test\")\n",
        "display(y_test.values)\n",
        "\n",
        "print(\"\\nPredictions for y_test\")\n",
        "display(log_reg_preds)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 173
        },
        "id": "yFVvOJlsWzHR",
        "outputId": "bf29c8e2-dd5e-4089-cc76-dfc626881175"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "y_test\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "array([1, 0, 0, 0, 1, 1, 0, 2, 1, 2, 1, 1, 0, 1, 1, 1, 2, 0, 1, 1, 2, 2,\n",
              "       0, 0, 2, 0, 1, 0, 2, 1, 0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 1, 1, 0, 1,\n",
              "       1, 2, 1, 0, 2, 0, 2, 2, 1, 1])"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Predictions for y_test\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "array([1, 0, 0, 0, 1, 1, 0, 2, 1, 2, 1, 1, 0, 1, 1, 1, 2, 0, 1, 1, 2, 2,\n",
              "       0, 0, 2, 0, 1, 0, 2, 1, 0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 1, 1, 0, 1,\n",
              "       1, 2, 2, 0, 2, 0, 2, 2, 2, 1])"
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# All in one cell!\n",
        "\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "\n",
        "logistic_regression = LogisticRegression()                 # create the \"empty\" model\n",
        "logistic_regression.fit(X_train_scaled, y_train)           # \"fit\": train the model on the training data\n",
        "log_reg_preds = logistic_regression.predict(X_test_scaled) # \"predict\": test the model on the test data\n",
        "\n",
        "print(y_test.values)\n",
        "print(log_reg_preds)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "GiEN_BZTbGrn",
        "outputId": "07bf2d98-0512-45e1-e1fa-c60038a38eb8"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[1 0 0 0 1 1 0 2 1 2 1 1 0 1 1 1 2 0 1 1 2 2 0 0 2 0 1 0 2 1 0 1 1 1 1 1 0\n",
            " 2 0 0 1 1 0 1 1 2 1 0 2 0 2 2 1 1]\n",
            "[1 0 0 0 1 1 0 2 1 2 1 1 0 1 1 1 2 0 1 1 2 2 0 0 2 0 1 0 2 1 0 1 1 1 1 1 0\n",
            " 2 0 0 1 1 0 1 1 2 2 0 2 0 2 2 2 1]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "Try and do the same for two other models:\n",
        "- Support vector machine / support vector classifier\\\n",
        "  (`from sklearn.svm import SVC`)\n",
        "- Decision tree\\\n",
        "  (`from sklearn.tree import DecisionTreeClassifier`)\n",
        "- ... one or more classifiers of your choice!\\\n",
        "  https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html#sphx-glr-auto-examples-classification-plot-classifier-comparison-py"
      ],
      "metadata": {
        "id": "OlWceYQ_bnjg"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"---------------- SVC ------------------\")\n",
        "\n",
        "from sklearn.svm import SVC\n",
        "\n",
        "# --------- SVC --------------\n",
        "# create the \"empty\" model\n",
        "new_model = SVC()\n",
        "# \"fit\": train the model on the training data\n",
        "new_model.fit(X_train_scaled, y_train)\n",
        "# \"predict\": test the model on the test data\n",
        "svm_preds = new_model.predict(X_test_scaled)\n",
        "# print the real y_test and the predictions of the model\n",
        "print(y_test.values)\n",
        "print(svm_preds)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ZWM6aSp8nUTJ",
        "outputId": "144928c8-0ebd-4b7b-948d-138b6f4880ba"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "---------------- SVC ------------------\n",
            "[1 0 0 0 1 1 0 2 1 2 1 1 0 1 1 1 2 0 1 1 2 2 0 0 2 0 1 0 2 1 0 1 1 1 1 1 0\n",
            " 2 0 0 1 1 0 1 1 2 1 0 2 0 2 2 1 1]\n",
            "[1 0 0 0 1 1 0 2 1 2 1 1 0 1 1 1 2 0 1 1 2 2 0 0 2 0 1 0 2 1 0 1 1 1 1 1 0\n",
            " 2 0 0 1 1 0 1 1 2 1 0 2 0 2 2 1 1]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"\\n=======================================\\n\")\n",
        "print(\"------ DecisionTreeClassifier ---------\")\n",
        "\n",
        "from sklearn.tree import DecisionTreeClassifier\n",
        "\n",
        "# --------- DecisionTreeClassifier --------------\n",
        "# create the \"empty\" model\n",
        "model = DecisionTreeClassifier()\n",
        "# \"fit\": train the model on the training data\n",
        "model.fit(X_train_scaled, y_train)\n",
        "# \"predict\": test the model on the test data\n",
        "tree_preds = model.predict(X_test_scaled)\n",
        "# print the real y_test and the predictions of the model\n",
        "print(y_test.values)\n",
        "print(tree_preds)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "IwNaB_XKoKuP",
        "outputId": "19028f29-ae96-4d99-ac3f-782f0fd663db"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "=======================================\n",
            "\n",
            "------ DecisionTreeClassifier ---------\n",
            "[1 0 0 0 1 1 0 2 1 2 1 1 0 1 1 1 2 0 1 1 2 2 0 0 2 0 1 0 2 1 0 1 1 1 1 1 0\n",
            " 2 0 0 1 1 0 1 1 2 1 0 2 0 2 2 1 1]\n",
            "[1 0 1 0 1 1 0 2 1 2 1 1 0 0 1 1 2 0 1 1 2 2 0 0 2 0 1 0 2 1 0 1 2 1 1 1 0\n",
            " 2 0 0 1 1 0 1 1 2 1 0 2 0 2 2 1 1]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "\n",
        "\n",
        "print(\"\\n=======================================\\n\")\n",
        "print(\"---- Your chosen classifier (1) -------\")\n",
        "\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "\n",
        "model = RandomForestClassifier(random_state=0)\n",
        "model.fit(X_train_scaled, y_train)\n",
        "pred_rf = model.predict(X_test_scaled)\n",
        "\n",
        "print(\"\\n=======================================\\n\")\n",
        "print(\"---- Your chosen classifier (2) -------\")\n",
        "\n",
        "from sklearn.neural_network import MLPClassifier\n",
        "\n",
        "model = MLPClassifier(random_state=0)\n",
        "model.fit(X_train_scaled, y_train)\n",
        "pred_mlp = model.predict(X_test_scaled)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "EzLzpRoUaBIp",
        "outputId": "f2b86cc5-499c-4521-b02c-f10b340c01fb"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "=======================================\n",
            "\n",
            "---- Your chosen classifier (1) -------\n",
            "\n",
            "=======================================\n",
            "\n",
            "---- Your chosen classifier (2) -------\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.11/dist-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
            "  warnings.warn(\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## example: Model evaluation\n",
        "\n",
        "Model evaluation is done to test how well the model generalizes to unseen instances. Scikit-learn provides an array of classification and regression metrics to evaluate a trained model's performance.\n",
        "\n",
        "For our use case, we are going to use classification_report() from the metrics module to build a text report showing the main classification metrics such as precision, recall, f1_score, accuracy, etc."
      ],
      "metadata": {
        "id": "QQOT2VIAcqd5"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.metrics import classification_report\n",
        "\n",
        "report = classification_report(y_test, log_reg_preds)\n",
        "print(report)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "9AZgG9qTdwpg",
        "outputId": "bb520d41-a8c7-46cd-866d-990f0fc3ab22"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       1.00      1.00      1.00        17\n",
            "           1       1.00      0.92      0.96        25\n",
            "           2       0.86      1.00      0.92        12\n",
            "\n",
            "    accuracy                           0.96        54\n",
            "   macro avg       0.95      0.97      0.96        54\n",
            "weighted avg       0.97      0.96      0.96        54\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model = LogisticRegression(random_state=0)\n",
        "model.fit(X_train_scaled, y_train)\n",
        "pred_rf_train = model.predict(X_train_scaled)\n",
        "pred_rf = model.predict(X_test_scaled)\n",
        "print(classification_report(y_train, pred_rf_train))\n",
        "print(classification_report(y_test, pred_rf))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Qd8M9_CB4cV2",
        "outputId": "156d48e9-df4e-403d-b4ee-ff35c2c100c8"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       1.00      1.00      1.00        42\n",
            "           1       1.00      1.00      1.00        46\n",
            "           2       1.00      1.00      1.00        36\n",
            "\n",
            "    accuracy                           1.00       124\n",
            "   macro avg       1.00      1.00      1.00       124\n",
            "weighted avg       1.00      1.00      1.00       124\n",
            "\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       1.00      1.00      1.00        17\n",
            "           1       1.00      0.92      0.96        25\n",
            "           2       0.86      1.00      0.92        12\n",
            "\n",
            "    accuracy                           0.96        54\n",
            "   macro avg       0.95      0.97      0.96        54\n",
            "weighted avg       0.97      0.96      0.96        54\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Store model predictions in a dictionary\n",
        "# this makes it easier to iterate through each model\n",
        "# and print the results.\n",
        "model_preds = {\n",
        "    \"Logistic Regression\": log_reg_preds,\n",
        "    \"Support Vector Machine\": svm_preds,\n",
        "    \"Decision Tree\": tree_preds,\n",
        "    \"Random Forest\": pred_rf,\n",
        "    \"MLP\": pred_mlp\n",
        "    # ADD YOUR OWN CLASSIFIERS HERE!\n",
        "}\n",
        "\n",
        "for model, preds in model_preds.items():\n",
        "    print(f\"{model} Results:\\n{classification_report(y_test, preds)}\", sep=\"\\n\\n\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "2jtNJad-cNRg",
        "outputId": "eeebc681-843f-4692-8361-26ff9f48aca4"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Logistic Regression Results:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       1.00      1.00      1.00        17\n",
            "           1       1.00      0.92      0.96        25\n",
            "           2       0.86      1.00      0.92        12\n",
            "\n",
            "    accuracy                           0.96        54\n",
            "   macro avg       0.95      0.97      0.96        54\n",
            "weighted avg       0.97      0.96      0.96        54\n",
            "\n",
            "Support Vector Machine Results:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       1.00      1.00      1.00        17\n",
            "           1       1.00      1.00      1.00        25\n",
            "           2       1.00      1.00      1.00        12\n",
            "\n",
            "    accuracy                           1.00        54\n",
            "   macro avg       1.00      1.00      1.00        54\n",
            "weighted avg       1.00      1.00      1.00        54\n",
            "\n",
            "Decision Tree Results:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.94      0.94      0.94        17\n",
            "           1       0.96      0.92      0.94        25\n",
            "           2       0.92      1.00      0.96        12\n",
            "\n",
            "    accuracy                           0.94        54\n",
            "   macro avg       0.94      0.95      0.95        54\n",
            "weighted avg       0.95      0.94      0.94        54\n",
            "\n",
            "Random Forest Results:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       1.00      1.00      1.00        17\n",
            "           1       1.00      1.00      1.00        25\n",
            "           2       1.00      1.00      1.00        12\n",
            "\n",
            "    accuracy                           1.00        54\n",
            "   macro avg       1.00      1.00      1.00        54\n",
            "weighted avg       1.00      1.00      1.00        54\n",
            "\n",
            "MLP Results:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       1.00      1.00      1.00        17\n",
            "           1       1.00      0.96      0.98        25\n",
            "           2       0.92      1.00      0.96        12\n",
            "\n",
            "    accuracy                           0.98        54\n",
            "   macro avg       0.97      0.99      0.98        54\n",
            "weighted avg       0.98      0.98      0.98        54\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "There are other functions to calculate *a single metric* instead of a bunch of them.\n",
        "\n",
        "A complete list (with explanations and examples) can be found in the user guide, divided according to the kind of model you are training\n",
        "\n",
        "- Classification metrics\\\n",
        "  https://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics\n",
        "- Multilabel ranking metrics\\\n",
        "  https://scikit-learn.org/stable/modules/model_evaluation.html#multilabel-ranking-metrics\n",
        "- Regression metrics\\\n",
        "  https://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics\n",
        "- Clustering metrics\\\n",
        "  https://scikit-learn.org/stable/modules/model_evaluation.html#clustering-metrics\n",
        "\n",
        "\n"
      ],
      "metadata": {
        "id": "5aWeNlCEeQ1D"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.metrics import f1_score\n",
        "\n",
        "score = f1_score(y_test, log_reg_preds, average=\"weighted\")\n",
        "print(score)\n",
        "\n",
        "from sklearn.metrics import balanced_accuracy_score\n",
        "ss = balanced_accuracy_score(y_test, log_reg_preds)\n",
        "print(ss)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "z6P6KpKOfMkz",
        "outputId": "f9457273-a7ef-4dba-e08e-0cfa7b76f235"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.9636158594491927\n",
            "0.9733333333333333\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.metrics import confusion_matrix\n",
        "\n",
        "confmat = confusion_matrix(y_test, log_reg_preds)\n",
        "confmat"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "7RKlo_sHc811",
        "outputId": "d4230539-9368-4864-cbf9-64d93a73f761"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[17,  0,  0],\n",
              "       [ 0, 23,  2],\n",
              "       [ 0,  0, 12]])"
            ]
          },
          "metadata": {},
          "execution_count": 40
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.metrics import ConfusionMatrixDisplay\n",
        "\n",
        "disp = ConfusionMatrixDisplay(\n",
        "    confusion_matrix=confmat,\n",
        ")\n",
        "disp.plot()\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 449
        },
        "id": "O2G8TeLNdVkx",
        "outputId": "f2d5be7d-0090-4d5f-e183-769d32148ea4"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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AIB9Reqs9Tol8pUrV9b5hNdff329gwEAAP6pUyIfMWJEnU7mcrnk8XisxAMAQPCEaXvcijolcsMwgh0HAABBFamtdUuz1isqKgIVBwAAwWUGYAtDfidyj8ej2bNnq1WrVmrSpIn27t0rSZo2bZpeeumlgAcIAADOze9E/vjjjysvL09PPvmkYmNjvfu7deumF198MaDBAQAQOK4AbOHH70S+ePFi/eEPf9Do0aMVHR3t3d+jRw99/vnnAQ0OAICAobVe6+uvv1aHDh3O2G8YhqqrqwMSFAAAqBu/E3nXrl21cePGM/b/5S9/0SWXXBKQoAAACLgIrcj9frLb9OnTlZ2dra+//lqGYeiNN95QQUGBFi9erNWrVwcjRgAArIvQ1c/8rsiHDx+uVatW6Z133lHjxo01ffp07dq1S6tWrdK1114bjBgBAMA51OtZ61dffbXWrl0b6FgAAAiaSF3GtN6Lpmzbtk27du2SVDtu3qtXr4AFBQBAwLH6Wa39+/dr1KhRev/999W0aVNJ0vHjx/Wzn/1MS5cuVevWrQMdIwAAOAe/x8hvv/12VVdXa9euXSopKVFJSYl27dolwzB0++23ByNGAACsOz3ZzcoWhvyuyPPz87V582Z16tTJu69Tp0569tlndfXVVwc0OAAAAsVl1m5Wjg9HfifyrKyssz74xePxKDMzMyBBAQAQcBE6Ru53a/2pp57SxIkTtW3bNu++bdu26d5779X//d//BTQ4AABwfnWqyFNSUuRy/TA2UF5ert69eysmpvbwmpoaxcTE6LbbbtOIESOCEigAAJZE6ANh6pTI586dG+QwAAAIsghtrdcpkWdnZwc7DgAAUA/1fiCMJFVUVKiqqspnX1JSkqWAAAAIigityP2e7FZeXq4JEyYoLS1NjRs3VkpKis8GAEBYitDVz/xO5A8++KDeffddLViwQG63Wy+++KJmzZqlzMxMLV68OBgxAgCAc/C7tb5q1SotXrxY/fv319ixY3X11VerQ4cOatu2rV599VWNHj06GHECAGBNhM5a97siLykpUfv27SXVjoeXlJRIkq666ipt2LAhsNEBABAgp5/sZmULR35X5O3bt1dRUZHatGmjzp0767XXXtMVV1yhVatWeRdRQfAMG3NUv7jrG6W2qNHez+L1/K9bqWBHQqjDggVLn03T+281VXGhW7FxhrpedkrjHjmgrA6V3s/87sHW+mhjoo4dbqT4BENdLivXuEcOqM1Flec5M+zgv35ZqJ/1O6jWbctUVRmtXf9M0aLnu+jrfU1CHRpswu+KfOzYsfr4448lSQ8//LDmz5+vuLg4TZo0SQ888IBf59qwYYOGDRumzMxMuVwurVixwt9wHKXf9d/qjhkH9OozGcoZ3FF7P4vT40v2KrnZmY/MhX18sqWJho05qrmrdyt36R55aqRfjbpQFad++PW86OLvdP+cfXoh/3M9vmSPZNZ+xuMJYeAIiO6XHNNfX79A94+/Sr++96eKiTH12NwP5I6rCXVokSdCJ7v5XZFPmjTJ+++BAwfq888/1/bt29WhQwddfPHFfp2rvLxcPXr00G233aaRI0f6G4rjjLzjqNYsSdXfl6VKkuY91FpXXFOqwaNK9Npz6SGODvX1xJK9Pq/vn7tPN3fvrt2fxKv7T8slSdfdesz7fkaWlP3QQd01sLMOF8cq8wLfW0BhL9Mn9fZ5/cxjPfSnv61Vh84n9OmOZiGKCnZi6T5ySWrbtq3atm1br2OHDh2qoUOHWg3BEWIaGbro4lNa+lyad59puvTRxkR17XUqhJEh0MpLoyVJiU3PXm5XnIrS35elKqNNpVpk0o2JNI2b1FbiZaWNQhxJ5HHJ4upnAYsksOqUyOfNm1fnE95zzz31DubfqaysVGXlD2OCpaWlQbtWuElK9Sg6Rjp+xPcr+/ZojM9YKuzNMKSFM1rpJ5eX6YLOFT7vrcprphcfy1TFqWi1vrBCuUv3qFFsmPb6UC8ul6k77vtUn36coq/28nAt1E2dEvmcOXPqdDKXyxXURJ6bm6tZs2YF7fxAqD33q9b66vN4Pb1i9xnv/Xzkt7q070mVfNNIf1mQpsf/9wLNeXO3YuNI5pHirik71bb9ST3wvz8LdSiRKUJvP6tTIi8qKgp2HHUydepUTZ482fu6tLRUWVlZIYyo4ZSWRMtTIzVt4TsBJqV5jb49YnmEBGHguV+10gdrk/T08sKztswbJxlqnFSlVu2r1PnSL3Vjl256/2/JGnDD8YYPFgF35/3/1BVXHtZDd/1Mx47EhzqcyMQjWkPP7XYrKSnJZ3OKmuoo7f4kQZdcddK7z+Uy1fOqMn22ndvP7Mw0a5P45jXJevLPhcpo8+8nr5mmJNOl6ipb/QrjrEzdef8/1affIf1qwk91+CC/z/APpZyNvPGH5poyt1hffJyggo8SdMP4I4pLMPT3pamhDg0WPPer1npveYpmLtqr+CaGSr6p/bVsnOiRO97Uwa9ilb+yqXr1O6nk1BodOdhIrz2Xrth4Q1dc45x5IpHq7ik71W/Q15r90OX67lSMUlJr50aUlzdSVWV0iKOLMBFakYc0kZeVlamwsND7uqioSDt27FBqaqratGkTwsjCU/7KFCU38+iXDxxSSosa7f00Xo+MbqfjR5ndamerX2kuSXrgxot89t8/Z58G3VyiWLehnR800fIXWqjsRLSaNq9R95+Wac6bu9W0Ofca291/3PiVJOm3z2/x2T9ndg+985Yzhg4bitWns0XMk90Cadu2bRowYID39enx7+zsbOXl5YUoqvC2clFzrVzUPNRhIIDePrDjvO83y6jRY/9v73k/A/v6jz7/GeoQYHMhTeT9+/eXaYbpnzgAgMgSoa31es2U2bhxo2699Vb16dNHX3/9tSTpj3/8ozZt2hTQ4AAACJgIfUSr34n89ddf1+DBgxUfH6+PPvrI+4CWEydO6Iknngh4gAAA4Nz8TuSPPfaYFi5cqBdeeEGNGv0wyerKK6/Uhx9+GNDgAAAIFJYx/V5BQYH69u17xv7k5GQdP348EDEBABB4EfpkN78r8oyMDJ9bxk7btGmT2rdvH5CgAAAIOMbIa40fP1733nuvPvjgA7lcLh04cECvvvqqpkyZorvuuisYMQIAgHPwu7X+8MMPyzAMXXPNNTp16pT69u0rt9utKVOmaOLEicGIEQAAy3ggzPdcLpceeeQRPfDAAyosLFRZWZm6du2qJk2aBCM+AAACI0LvI6/3A2FiY2PVtWvXQMYCAAD85HciHzBggFyuc8/ce/fddy0FBABAUFi9hSxSKvKePXv6vK6urtaOHTu0c+dOZWdnByouAAACi9Z6rTlz5px1/8yZM1VWVmY5IAAAUHf1etb62dx66616+eWXA3U6AAACi/vIz2/Lli2Ki4sL1OkAAAiohn5E64YNGzRs2DBlZmbK5XJpxYoVPu+bpqnp06erZcuWio+P18CBA7V7926/fy6/W+sjR448I5CDBw9q27ZtmjZtmt8BAAAQicrLy9WjRw/ddtttZ+ROSXryySc1b948vfLKK2rXrp2mTZumwYMH67PPPvOrMPY7kScnJ/u8joqKUqdOnfToo49q0KBB/p4OAICINHToUA0dOvSs75mmqblz5+rXv/61hg8fLklavHix0tPTtWLFCt1yyy11vo5fidzj8Wjs2LHq3r27UlJS/DkUAIDQCtCs9dLSUp/dbrdbbrfbr1MVFRXp0KFDGjhwoHdfcnKyevfurS1btviVyP0aI4+OjtagQYNY5QwAYDuBGiPPyspScnKyd8vNzfU7lkOHDkmS0tPTffanp6d736srv1vr3bp10969e9WuXTt/DwUAwPaKi4uVlJTkfe1vNR5ofs9af+yxxzRlyhStXr1aBw8eVGlpqc8GAEDYCsCtZ0lJST5bfRJ5RkaGJOnw4cM++w8fPux9r67qnMgfffRRlZeX67rrrtPHH3+s66+/Xq1bt1ZKSopSUlLUtGlTxs0BAOErjO4jb9eunTIyMrRu3TrvvtLSUn3wwQfq06ePX+eqc2t91qxZuvPOO/Xee+/5dQEAAJyorKxMhYWF3tdFRUXasWOHUlNT1aZNG91333167LHHdNFFF3lvP8vMzNSIESP8uk6dE7lp1v4p0q9fP78uAABAOGjo9ci3bdumAQMGeF9PnjxZkpSdna28vDw9+OCDKi8v1x133KHjx4/rqquu0po1a/x+uJpfk93Ot+oZAABhrYEXTenfv7+3CD4bl8ulRx99VI8++qiFoPxM5B07dvy3ybykpMRSQAAAoO78SuSzZs0648luAADYQUO31huKX4n8lltuUVpaWrBiAQAgeCJ0PfI6337G+DgAAOHH71nrAADYUoRW5HVO5IZhBDMOAACCijFyAADsLEIrcr+ftQ4AAMIHFTkAwBkitCInkQMAHCFSx8hprQMAYGNU5AAAZ6C1DgCAfdFaBwAAYYeKHADgDLTWAQCwsQhN5LTWAQCwMSpyAIAjuL7frBwfjkjkAABniNDWOokcAOAI3H4GAADCDhU5AMAZaK0DAGBzYZqMraC1DgCAjVGRAwAcIVInu5HIAQDOEKFj5LTWAQCwMSpyAIAj0FoHAMDOaK0DAIBwQ0UO2xic2TPUIaAB7X4uM9QhoAEY31VIUxrmWrTWAQCwswhtrZPIAQDOEKGJnDFyAABsjIocAOAIjJEDAGBntNYBAEC4oSIHADiCyzTlMutfVls5NphI5AAAZ6C1DgAAwg0VOQDAEZi1DgCAndFaBwAA4YaKHADgCLTWAQCwswhtrZPIAQCOEKkVOWPkAADYGBU5AMAZaK0DAGBv4doet4LWOgAANkZFDgBwBtOs3awcH4ZI5AAAR2DWOgAACDtU5AAAZ2DWOgAA9uUyajcrx4cjWusAANgYFTkAwBlorQMAYF+ROmudRA4AcIYIvY+cMXIAAGyMihwA4Ai01gEAsLMInexGax0AABujIgcAOAKtdQAA7IxZ6wAAINxQkQMAHIHWOgAAdsasdQAAEG6oyAEAjhCprXUqcgCAMxim9c0PM2fOlMvl8tk6d+4c8B+LihwA4AwhGCP/yU9+onfeecf7OiYm8GmXRA4AgB9KS0t9Xrvdbrnd7rN+NiYmRhkZGUGNh9Y6AMARXPphnLxe2/fnycrKUnJysnfLzc095zV3796tzMxMtW/fXqNHj9a+ffsC/nNRkQMAnCFAT3YrLi5WUlKSd/e5qvHevXsrLy9PnTp10sGDBzVr1ixdffXV2rlzpxITE+sfx4+QyAEA8ENSUpJPIj+XoUOHev998cUXq3fv3mrbtq1ee+01jRs3LmDxkMgBAI4Q6tvPmjZtqo4dO6qwsNDaiX6EMXIAgDOYAdgsKCsr0549e9SyZUtrJ/oREjkAAEEwZcoU5efn68svv9TmzZt1ww03KDo6WqNGjQrodWitAwAcwWWaclmY7Obvsfv379eoUaN07NgxtWjRQldddZW2bt2qFi1a1DuGsyGRAwCcwfh+s3K8H5YuXWrhYnVHax0AABujIgcAOEJDt9YbCokcAOAMEboeOYkcAOAMAXqyW7hhjBwAABujIgcAOEKon+wWLCRymxk25qh+cdc3Sm1Ro72fxev5X7dSwY6EUIeFIOC7jkxxhaVKeeeg4vaVK6a0WgfGX6TyHqm1b3oMNVu1X40/Pa5GxyplxEXrVOdkHb0+S56msaENPBLQWkeo9bv+W90x44BefSZDOYM7au9ncXp8yV4lN6sOdWgIML7ryBVVaaiqVYK+ufmCM9+rMhRXXK6Soa2076FuOjj+IsUe/k6Zv/+i4QOFbYQ0kefm5uryyy9XYmKi0tLSNGLECBUUFIQypLA28o6jWrMkVX9flqp9u+M076HWqvzOpcGjSkIdGgKM7zpynfpJUx0blvVDFf4vjPgYfT2xi8oubabq9HhVtEvUNzddoLjicsWUVIYg2sjiMqxv4SikiTw/P185OTnaunWr1q5dq+rqag0aNEjl5eWhDCssxTQydNHFp/Thxh/WsDVNlz7amKiuvU6FMDIEGt81/lXUdx6ZLsmIjw51KPZ3urVuZQtDIR0jX7Nmjc/rvLw8paWlafv27erbt+8Zn6+srFRl5Q9/lZaWlgY9xnCRlOpRdIx0/IjvV/bt0RhldeAv9UjCd43TXNWGmr+5Tyd7NZMRz5QmnF1YjZGfOHFCkpSaembLSaptxScnJ3u3rKyshgwPABqOx1DGS7slUzpylvF01EOIlzENlrBJ5IZh6L777tOVV16pbt26nfUzU6dO1YkTJ7xbcXFxA0cZOqUl0fLUSE1b1PjsT2leo2+P8Jd6JOG7hjyGWr5UqEbfVunrCZ2pxgPk9CNarWzhKGwSeU5Ojnbu3Hne1WLcbreSkpJ8NqeoqY7S7k8SdMlVJ737XC5TPa8q02fbuSUpkvBdO9zpJH6kojaJN2kU6ogQ5sLiz7wJEyZo9erV2rBhg1q3bh3qcMLWG39orilzi/XFxwkq+ChBN4w/orgEQ39fevahCNgX33XkclV61OhIhfd1o2OVit1fLiMhRjXJjdTyxd1yF5/SgTs7Sqap6NIqSZInIUaKCZvay54i9D7ykCZy0zQ1ceJELV++XOvXr1e7du1CGU7Yy1+ZouRmHv3ygUNKaVGjvZ/G65HR7XT8KH+xRxq+68gV91W5Ws/b5X3d4o19kqTS3s117LrWavLP45Kktr/Z6XPc/nu66LuOzulCBoUpa+uRh2ceD20iz8nJ0ZIlS/Tmm28qMTFRhw4dkiQlJycrPj4+lKGFrZWLmmvlouahDgMNgO86Mn3XMUm7n+t9zvfP9x6sidRlTEPap1mwYIFOnDih/v37q2XLlt5t2bJloQwLAADbCHlrHQCABmHK4hh5wCIJqLCY7AYAQNBF6GQ3pkACAGBjVOQAAGcwJLksHh+GSOQAAEdg1joAAAg7VOQAAGeI0MluJHIAgDNEaCKntQ4AgI1RkQMAnCFCK3ISOQDAGbj9DAAA++L2MwAAEHaoyAEAzsAYOQAANmaYkstCMjbCM5HTWgcAwMaoyAEAzkBrHQAAO7OYyBWeiZzWOgAANkZFDgBwBlrrAADYmGHKUnucWesAACDQqMgBAM5gGrWblePDEIkcAOAMjJEDAGBjjJEDAIBwQ0UOAHAGWusAANiYKYuJPGCRBBStdQAAbIyKHADgDLTWAQCwMcOQZOFecCM87yOntQ4AgI1RkQMAnIHWOgAANhahiZzWOgAANkZFDgBwhgh9RCuJHADgCKZpyLSwgpmVY4OJRA4AcAbTtFZVM0YOAAACjYocAOAMpsUx8jCtyEnkAABnMAzJZWGcO0zHyGmtAwBgY1TkAABnoLUOAIB9mYYh00JrPVxvP6O1DgCAjVGRAwCcgdY6AAA2ZpiSK/ISOa11AABsjIocAOAMpinJyn3k4VmRk8gBAI5gGqZMC611k0QOAEAImYasVeTcfgYAgOPMnz9fF1xwgeLi4tS7d2/94x//COj5SeQAAEcwDdPy5q9ly5Zp8uTJmjFjhj788EP16NFDgwcP1jfffBOwn4tEDgBwBtOwvvnpmWee0fjx4zV27Fh17dpVCxcuVEJCgl5++eWA/Vi2HiM/PfGgRtWW7vEHEH6M7ypCHQIagFFR+z03xEQyq7miRtWSpNLSUp/9brdbbrf7jM9XVVVp+/btmjp1qndfVFSUBg4cqC1bttQ/kB+xdSI/efKkJGmT3gpxJAACbsqboY4ADejkyZNKTk4OyrljY2OVkZGhTYes54omTZooKyvLZ9+MGTM0c+bMMz579OhReTwepaen++xPT0/X559/bjmW02ydyDMzM1VcXKzExES5XK5Qh9NgSktLlZWVpeLiYiUlJYU6HAQR37VzOPW7Nk1TJ0+eVGZmZtCuERcXp6KiIlVVVVk+l2maZ+Sbs1XjDcnWiTwqKkqtW7cOdRghk5SU5KhfeCfju3YOJ37XwarE/1VcXJzi4uKCfp1/1bx5c0VHR+vw4cM++w8fPqyMjIyAXYfJbgAABEFsbKx69eqldevWefcZhqF169apT58+AbuOrStyAADC2eTJk5Wdna3LLrtMV1xxhebOnavy8nKNHTs2YNcgkduQ2+3WjBkzQj4ug+Dju3YOvuvIdPPNN+vIkSOaPn26Dh06pJ49e2rNmjVnTICzwmWG68NjAQDAv8UYOQAANkYiBwDAxkjkAADYGIkcAAAbI5HbTLCXw0N42LBhg4YNG6bMzEy5XC6tWLEi1CEhSHJzc3X55ZcrMTFRaWlpGjFihAoKCkIdFmyERG4jDbEcHsJDeXm5evToofnz54c6FARZfn6+cnJytHXrVq1du1bV1dUaNGiQysvLQx0abILbz2ykd+/euvzyy/Xcc89Jqn1CUFZWliZOnKiHH344xNEhWFwul5YvX64RI0aEOhQ0gCNHjigtLU35+fnq27dvqMOBDVCR28Tp5fAGDhzo3ReM5fAAhNaJEyckSampqSGOBHZBIreJ8y2Hd+jQoRBFBSCQDMPQfffdpyuvvFLdunULdTiwCR7RCgBhIicnRzt37tSmTZtCHQpshERuEw21HB6A0JgwYYJWr16tDRs2OHp5ZviP1rpNNNRyeAAalmmamjBhgpYvX653331X7dq1C3VIsBkqchtpiOXwEB7KyspUWFjofV1UVKQdO3YoNTVVbdq0CWFkCLScnBwtWbJEb775phITE71zXpKTkxUfHx/i6GAH3H5mM88995yeeuop73J48+bNU+/evUMdFgJs/fr1GjBgwBn7s7OzlZeX1/ABIWhcLtdZ9y9atEhjxoxp2GBgSyRyAABsjDFyAABsjEQOAICNkcgBALAxEjkAADZGIgcAwMZI5AAA2BiJHAAAGyORAwBgYyRywKIxY8ZoxIgR3tf9+/fXfffd1+BxrF+/Xi6XS8ePHz/nZ1wul1asWFHnc86cOVM9e/a0FNeXX34pl8ulHTt2WDoPgLMjkSMijRkzRi6XSy6XS7GxserQoYMeffRR1dTUBP3ab7zxhmbPnl2nz9Yl+QLA+bBoCiLWkCFDtGjRIlVWVuqtt95STk6OGjVqpKlTp57x2aqqKsXGxgbkuqmpqQE5DwDUBRU5Ipbb7VZGRobatm2ru+66SwMHDtTKlSsl/dAOf/zxx5WZmalOnTpJkoqLi3XTTTepadOmSk1N1fDhw/Xll196z+nxeDR58mQ1bdpUzZo104MPPqgfL1fw49Z6ZWWlHnroIWVlZcntdqtDhw566aWX9OWXX3oXRklJSZHL5fIukmEYhnJzc9WuXTvFx8erR48e+stf/uJznbfeeksdO3ZUfHy8BgwY4BNnXT300EPq2LGjEhIS1L59e02bNk3V1dVnfO73v/+9srKylJCQoJtuukknTpzwef/FF19Uly5dFBcXp86dO+v555/3OxYA9UMih2PEx8erqqrK+3rdunUqKCjQ2rVrtXr1alVXV2vw4MFKTEzUxo0b9f7776tJkyYaMmSI97inn35aeXl5evnll7Vp0yaVlJRo+fLl573uL3/5S/3pT3/SvHnztGvXLv3+979XkyZNlJWVpddff12SVFBQoIMHD+p3v/udJCk3N1eLFy/WwoUL9emnn2rSpEm69dZblZ+fL6n2D46RI0dq2LBh2rFjh26//XY9/PDDfv9vkpiYqLy8PH322Wf63e9+pxdeeEFz5szx+UxhYaFee+01rVq1SmvWrNFHH32ku+++2/v+q6++qunTp+vxxx/Xrl279MQTT2jatGl65ZVX/I4HQD2YQATKzs42hw8fbpqmaRqGYa5du9Z0u93mlClTvO+np6eblZWV3mP++Mc/mp06dTINw/Duq6ysNOPj4823337bNE3TbNmypfnkk09636+urjZbt27tvZZpmma/fv3Me++91zRN0ywoKDAlmWvXrj1rnO+9954pyfz222+9+yoqKsyEhARz8+bNPp8dN26cOWrUKNM0TXPq1Klm165dfd5/6KGHzjjXj0kyly9ffs73n3rqKbNXr17e1zNmzDCjo6PN/fv3e/f97W9/M6OiosyDBw+apmmaF154oblkyRKf88yePdvs06ePaZqmWVRUZEoyP/roo3NeF0D9MUaOiLV69Wo1adJE1dXVMgxD//3f/62ZM2d63+/evbvPuPjHH3+swsJCJSYm+pynoqJCe/bs0YkTJ3Tw4EGf9d9jYmJ02WWXndFeP23Hjh2Kjo5Wv3796hx3YWGhTp06pWuvvdZnf1VVlS655BJJ0q5du85Yh75Pnz51vsZpy5Yt07x587Rnzx6VlZWppqZGSUlJPp9p06aNWrVq5XMdwzBUUFCgxMRE7dmzR+PGjdP48eO9n6mpqVFycrLf8QDwH4kcEWvAgAFasGCBYmNjlZmZqZgY3/+7N27c2Od1WVmZevXqpVdfffWMc7Vo0aJeMcTHx/t9TFlZmSTpr3/9q08ClWrH/QNly5YtGj16tGbNmqXBgwcrOTlZS5cu1dNPP+13rC+88MIZf1hER0cHLFYA50YiR8Rq3LixOnToUOfPX3rppVq2bJnS0tLOqEpPa9mypT744AP17dtXUm3luX37dl166aVn/Xz37t1lGIby8/M1cODAM94/3RHweDzefV27dpXb7da+ffvOWcl36dLFO3HvtK1bt/77H/JfbN68WW3bttUjjzzi3ffVV1+d8bl9+/bpwIEDyszM9F4nKipKnTp1Unp6ujIzM7V3716NHj3ar+sDCAwmuwHfGz16tJo3b67hw4dr48aNKioq0vr163XPPfdo//79kqR7771Xv/nNb7RixQp9/vnnuvvuu897D/gFF1yg7Oxs3XbbbVqxYoX3nK+99pokqW3btnK5XFq9erWOHDmisrIyJSYmasqUKZo0aZJeeeUV7dmzRx9++KGeffZZ7wSyO++8U7t379YDDzyggoICLVmyRHl5eX79vBdddJH27dunpUuXas+ePZo3b95ZJ+7FxcUpOztbH3/8sTZu3Kh77rlHN910kzIyMiRJs2bNUm5urubNm6cvvvhC//znP7Vo0SI988wzfsUDoH5I5MD3EhIStGHDBrVp00YjR45Uly5dNG7cOFVUVHgr9Pvvv1//8z//o+zsbPXp00eJiYm64YYbznveBQsW6Be/+IXuvvtude7cWePHj1d5ebkkqVWrVpo1a5Yefvhhpaena8KECZKk2bNna9q0acrNzVWXLl00ZMgQ/fWvf1W7du0k1Y5bv/7661qxYoV69OihhQsX6oknnvDr573++us1adIkTZgwQT179tTmzZs1bdq0Mz7XoUMHjRw5Utddd50GDRqkiy++2Of2sttvv10vvviiFi1apO7du6tfv37Ky8vzxgoguFzmuWbpAACAsEdFDgCAjZHIAQCwMRI5AAA2RiIHAMDGSOQAANgYiRwAABsjkQMAYGMkcgAAbIxEDgCAjZHIAQCwMRI5AAA29v8BRgUJqLjxyf0AAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# we can change the colomap (cmap) to have a monochromatic color\n",
        "disp = ConfusionMatrixDisplay(\n",
        "    confusion_matrix=confmat,\n",
        ")\n",
        "disp.plot(cmap = \"Reds\")\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 449
        },
        "id": "8CZWBDvwgL6o",
        "outputId": "7d2e0edc-711b-4d7d-98fd-b50330cf3bc5"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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X1RCQoIyMzP19ttvS5Ly8vJ06NAhPffcc5KknJwcLVy4UPPmzdNf/vIX3X///br99tu1bt06SVU/OIYOHaqBAwdq586duuuuuzRp0qSA/zdJTExUbm6u/vrXv+q5557TSy+9pFmzZvlts3fvXr3xxhtavny5Vq5cqR07dujee+/1vf/666/rkUce0WOPPabdu3fr8ccf15QpU7RgwYKA4wFQCyYQhbKysszBgwebpmmaXq/XXLVqlel2u82JEyf63k9LSzPLysp8+7z22mtm27ZtTa/X61tXVlZmxsfHmx9++KFpmqbZtGlT88knn/S9X1FRYTZr1sx3LtM0zeuvv94cN26caZqmmZeXZ0oyV61adc44P/74Y1OS+f333/vWlZaWmg0aNDA3b97st+2oUaPMYcOGmaZpmpMnTzbbt2/v9/5DDz101rH+lSRz6dKl533/qaeeMrt27ep7PXXqVDMmJsY8cOCAb90HH3xgulwu89ChQ6ZpmuYll1xiLlq0yO84M2fONHv06GGapmnm5+ebkswdO3ac97wAao9r5IhaK1asUEJCgioqKuT1evWLX/xC06ZN873fsWNHv+vin3/+ufbu3avExES/45SWlmrfvn0qLCzUoUOH/OZ/r1evnrp163ZWe73azp07FRMTo+uvv77Gce/du1enT5/Wz372M7/15eXluvzyyyVJu3fvPmse+h49etT4HNWWLFmi2bNna9++fSouLtaZM2eUlJTkt03z5s110UUX+Z3H6/UqLy9PiYmJ2rdvn0aNGqXRo0f7tjlz5oySk5MDjgdA4EjkiFq9e/fW3LlzFRsbq4yMDNWr5/9/94YNG/q9Li4uVteuXfX666+fdawLL7ywVjHEx8cHvE9xcbEk6c9//rNfApWqrvsHy5YtWzR8+HBNnz5d/fr1U3JyshYvXqynn3464Fhfeumls35YxMTEBC1WAOdHIkfUatiwoVq3bl3j7a+44gotWbJEqampZ1Wl1Zo2bapPPvlEPXv2lFRVeW7fvl1XXHHFObfv2LGjvF6v1q1bpz59+pz1fnVHoLKy0reuffv2crvd2r9//3kr+Xbt2vkG7lXbunXrv/+Q/2Tz5s1q0aKFHn74Yd+6b7/99qzt9u/fr4MHDyojI8N3HpfLpbZt2yotLU0ZGRn6+uuvNXz48IDODyA4GOwG/N3w4cPVpEkTDR48WBs2bFB+fr7Wrl2r++67TwcOHJAkjRs3Tk888YSWLVumPXv26N577/3Re8AvvvhiZWVl6c4779SyZct8x3zjjTckSS1atJBhGFqxYoWOHTum4uJiJSYmauLEibr//vu1YMEC7du3T5999pmef/553wCyu+++W1999ZUeeOAB5eXladGiRcrNzQ3o8/7kJz/R/v37tXjxYu3bt0+zZ88+58C9uLg4ZWVl6fPPP9eGDRt033336ZZbblF6erokafr06crJydHs2bP1t7/9TV9++aXmz5+vZ555JqB4ANQOiRz4uwYNGmj9+vVq3ry5hg4dqnbt2mnUqFEqLS31Vei/+c1vdMcddygrK0s9evRQYmKibrzxxh897ty5c3XzzTfr3nvv1aWXXqrRo0erpKREknTRRRdp+vTpmjRpktLS0jRmzBhJ0syZMzVlyhTl5OSoXbt26t+/v/785z+rZcuWkqquW7/99ttatmyZOnfurHnz5unxxx8P6PMOGjRI999/v8aMGaMuXbpo8+bNmjJlylnbtW7dWkOHDtXPf/5z9e3bV506dfK7veyuu+7Syy+/rPnz56tjx466/vrrlZub64sVQGgZ5vlG6QAAgLBHRQ4AQAQjkQMAEMFI5AAARDASOQAAEYxEDgBABCORAwAQwUjkAABEMBI5AAARjEQOAEAEI5EDABDBSOQAAESw/w8Ru5KHvICTCwAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# we can change the colomap (cmap) to have a diverging scale\n",
        "disp = ConfusionMatrixDisplay(\n",
        "    confusion_matrix=confmat,\n",
        ")\n",
        "disp.plot(cmap = \"inferno_r\")\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 449
        },
        "id": "Q2PjY8_CgVMt",
        "outputId": "7d80e678-2b6a-45e6-de5d-f0e372828558"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ],
            "image/png": "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8cYbys/P10UXXaQpU6acc2xlZaUSEhLCct/09PSwXAcAaoOKHDErMTFRWVlZatmype666y4NHDhQf/rTnyT9qzn84YcfVnZ2ttq3by9JKi4u1s0336xGjRopPT1dw4YN0/79+wPXrK6u1sSJE9WoUSNdfPHFeuCBB/Tvjyv496b1iooKPfjgg8rJyVFiYqLatm2rF154Qfv37w88GKVx48YyDCPwkAy/36+CggK1bt1aycnJys3N1R/+8Ieg+7zxxhtq166dkpOTNWDAgKA4a+vBBx9Uu3btlJKSojZt2mjq1Kmqqqo657jnnntOOTk5SklJ0c0336zS0tKg9xcuXKiOHTsqKSlJHTp00LPPPhtyLADqhkQO10hOTlZlZWXg9bp161RYWKi1a9dq9erVqqqq0uDBg5WamqrNmzfrnXfeUcOGDTVkyJDAeb/+9a+1ePFivfjii9qyZYtOnDihFStWfOt9f/rTn+p3v/ud5s6dqz179ui5555Tw4YNlZOTo1dffVWSVFhYqMOHD+upp56SJBUUFGjJkiVasGCBPvroI02YMEG33XabNm7cKKnmB8eIESN0/fXXa9euXRozZowmT54c8v8nqampWrx4sT7++GM99dRTev755zVnzpygY4qKivTKK69o1apVWrNmjT744APdfffdgfdffvllTZs2TQ8//LD27NmjRx55RFOnTtVLL70UcjwA6sAEYlBeXp45bNgw0zRN0+/3m2vXrjUTExPNSZMmBd7PzMw0KyoqAuf89re/Ndu3b2/6/f7AvoqKCjM5Odl86623TNM0zWbNmpmPPvpo4P2qqiqzefPmgXuZpmn269fPvPfee03TNM3CwkJTkrl27drzxvmXv/zFlGT+4x//COw7ffq0mZKSYr777rtBx95xxx3mrbfeapqmaU6ZMsXs1KlT0PsPPvjgOdf6d5LMFStWXPD9xx57zOzevXvg9fTp0824uDjz4MGDgX1vvvmm6fF4zMOHD5umaZqXXnqpuXTp0qDrzJ492+zdu7dpmqa5b98+U5L5wQcfXPC+AOqOPnLErNWrV6thw4aqqqqS3+/Xj3/8Y82YMSPwfpcuXYL6xT/88EMVFRUpNTU16DqnT5/W3r17VVpaqsOHDwc9/z0+Pl49evQ4p3n9rF27dikuLk79+vWrddxFRUX66quvdO211wbtr6ys1GWXXSZJ2rNnzznPoe/du3et73HW8uXLNXfuXO3du1dlZWU6c+aM0tLSgo5p0aKFLrnkkqD7+P1+FRYWKjU1VXv37tUdd9yhO++8M3DMmTNn5PV6Q44HQOhI5IhZAwYM0Pz585WQkKDs7GzFxwf/cW/QoEHQ67KyMnXv3l0vv/zyOddq2rRpnWJITk4O+ZyysjJJ0uuvvx6UQKWafv9w2bp1q0aOHKmZM2dq8ODB8nq9WrZsmX7961+HHOvzzz9/zg+LuLi4sMUK4MJI5IhZDRo0UNu2bWt9/OWXX67ly5crIyPjnKr0rGbNmum9995T3759JdVUnjt27NDll19+3uO7dOkiv9+vjRs3auDAgee8f7ZFoLq6OrCvU6dOSkxM1IEDBy5YyXfs2DEwcO+sbdu2ffeH/IZ3331XLVu21C9+8YvAvr///e/nHHfgwAEdOnRI2dnZgft4PB61b99emZmZys7O1ueff66RI0eGdH8A4cFgN+BrI0eOVJMmTTRs2DBt3rxZ+/bt04YNG3TPPffo4MGDkqR7771Xv/zlL7Vy5Up98sknuvvuu791DnirVq2Ul5en22+/XStXrgxc85VXXpEktWzZUoZhaPXq1Tp27JjKysqUmpqqSZMmacKECXrppZe0d+9e7dy5U08//XRgANnPf/5zffbZZ7r//vtVWFiopUuXavHixSF93u9973s6cOCAli1bpr1792ru3LnnHbiXlJSkvLw8ffjhh9q8ebPuuece3XzzzcrKypIkzZw5UwUFBZo7d64+/fRT/e///q8WLVqkJ554IqR4ANQNiRz4WkpKijZt2qQWLVpoxIgR6tixo+644w6dPn06UKHfd999+slPfqK8vDz17t1bqampuvHGG7/1uvPnz9d//dd/6e6771aHDh105513qry8XJJ0ySWXaObMmZo8ebIyMzM1duxYSdLs2bM1depUFRQUqGPHjhoyZIhef/11tW7dWlJNv/Wrr76qlStXKjc3VwsWLNAjjzwS0ue94YYbNGHCBI0dO1bdunXTu+++q6lTp55zXNu2bTVixAhdd911GjRokLp27Ro0vWzMmDFauHChFi1apC5duqhfv35avHhxIFYAkWWYFxqlAwAAbI+KHAAAByORAwDgYCRyAAAcjEQOAICDkcgBAHAwEjkAAA5GIgcAwMFI5AAAOBiJHAAAByORAwDgYCRyAAAc7P8DUe3qpC+2qSAAAAAASUVORK5CYII=\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "Try and compute the confusion matrix for some of the other models!"
      ],
      "metadata": {
        "id": "Og6Ayuz6uufQ"
      }
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "hdRvOIJ2uzFz"
      },
      "execution_count": null,
      "outputs": []
    }
  ]
}