{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bu6Par2Iu6Ug"
      },
      "source": [
        "# Build predictive Business Intelligence with Google Colab, Google Data Studio and Google Sheets"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gKrAyBGUvEql"
      },
      "source": [
        "Many of us are used to think that Business Intelligence is something that large companies use and that is created with tools that are expensive and often difficult to learn (although there are pleasant exceptions, such as Metabase and Superset). In my article I want to show that practically everyone can use the power of Business Intelligence, and even add some Predictive Analytics to it with generally available and free online tools, such as Google Colab and Google Data Studio. Database deployment is not required. All data for analysis and visualization we will store in Google Sheets.\n",
        "\n",
        "We will implement a machine learning model in Google Colab and based on the sales history of the products we will be able to predict future sales for several months and visualize our prediction in Google Data Studio.\n",
        "\n",
        "We will use the dataset with information about the list of products and the sales history for 12 months for each product.\n",
        "\n",
        "The model will analyze the sales history and changes in product features for each month, so that any change will dynamically affect the model predictions. This will allow us to quickly assess the consequences of certain decisions and adopt an optimal development strategy.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "IE9QknvsGcy8"
      },
      "source": [
        "## Load Data"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "oDjSa52iKPfa"
      },
      "source": [
        "We consider, that all operations we do in Google Colab. First of all we will use **kaggle** module to download needed dataset. You can read in more detail about module and how to get Kaggle API Token by this [link](https://github.com/Kaggle/kaggle-api)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RA-Zjo03CWm_"
      },
      "source": [
        "**Dataset description (https://www.kaggle.com/c/online-sales/data):**\n",
        "\n",
        "*We have the data in the comma separated values (CSV) format.  Each row in this data set represents a different consumer product.*\n",
        "\n",
        "*The first 12 columns (Outcome_M1 through Outcome_M12) contains the monthly online sales for the first 12 months after the product launches. *\n",
        "\n",
        "*Date_1 is the day number the major advertising campaign began and the product launched.  *\n",
        "\n",
        "*Date_2 is the day number the product was announced and a pre-release advertising campaign began.*\n",
        "\n",
        "*Other columns in the data set are features of the product and the advertising campaign.  Quan_x are quantitative variables and Cat_x are categorical variables. Binary categorical variables are measured as (1) if the product had the feature and (0) if it did not.*"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jhifueXN_7ud",
        "outputId": "5a44f85f-d07f-4d65-bd09-00d4116f2d36",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 208
        }
      },
      "source": [
        "!pip install kaggle"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Requirement already satisfied: kaggle in /usr/local/lib/python3.6/dist-packages (1.5.3)\n",
            "Requirement already satisfied: certifi in /usr/local/lib/python3.6/dist-packages (from kaggle) (2019.3.9)\n",
            "Requirement already satisfied: python-dateutil in /usr/local/lib/python3.6/dist-packages (from kaggle) (2.5.3)\n",
            "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from kaggle) (1.24.3)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from kaggle) (2.21.0)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from kaggle) (4.28.1)\n",
            "Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.6/dist-packages (from kaggle) (1.12.0)\n",
            "Requirement already satisfied: python-slugify in /usr/local/lib/python3.6/dist-packages (from kaggle) (3.0.2)\n",
            "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->kaggle) (3.0.4)\n",
            "Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->kaggle) (2.8)\n",
            "Requirement already satisfied: text-unidecode==1.2 in /usr/local/lib/python3.6/dist-packages (from python-slugify->kaggle) (1.2)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "oHZrnlmKNtBG"
      },
      "source": [
        "As we are using Google Colab, we will connect to Google Drive to copy Kaggle credentials."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LRha1rHlELUu",
        "outputId": "fe19e925-1a82-4d55-abcc-329c6bca5416",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 124
        }
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive/')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdocs.test%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.photos.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fpeopleapi.readonly&response_type=code\n",
            "\n",
            "Enter your authorization code:\n",
            "··········\n",
            "Mounted at /content/drive/\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "BXJ-HMa_EqjA"
      },
      "source": [
        "import os\n",
        "os.chdir(\"/content/drive/My Drive/Colab Notebooks\")"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-FkiHfVFFqB6"
      },
      "source": [
        "Copy credentials for Kaggle API."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5TWGzEoTwM-z"
      },
      "source": [
        "!mkdir ~/.kaggle\n",
        "!cp kaggle.json ~/.kaggle/kaggle.json"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "mPuiPh2EHKvv"
      },
      "source": [
        "Download dataset."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gE4_i7i2u45r",
        "outputId": "7183b288-c4b4-4e76-a83e-ee573b4e443e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 106
        }
      },
      "source": [
        "!kaggle competitions download -c online-sales"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "TestDataset.csv: Skipping, found more recently modified local copy (use --force to force download)\n",
            "TrainingDataset.csv: Skipping, found more recently modified local copy (use --force to force download)\n",
            "sample_submission_using_training_column_means.csv: Skipping, found more recently modified local copy (use --force to force download)\n",
            "sample_code.R: Skipping, found more recently modified local copy (use --force to force download)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "9dseBUqEI4M4"
      },
      "source": [
        "Load the dataset in the memory and explore its shape (number of rows and columns)."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "HRAOmVHhu_y8"
      },
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "from matplotlib import pyplot as plt"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fpqHCJhVGyM_"
      },
      "source": [
        "df = pd.read_csv(\"TrainingDataset.csv\")"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vjL-9_IIHAdu",
        "outputId": "6ab8f3c9-45ff-4fc9-be65-40252ea2f3c7",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "df.shape"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(751, 558)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "I5iAdsVeLyYG"
      },
      "source": [
        "Test it on the presence of the null values."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "R1SxCqjFIvnb"
      },
      "source": [
        "df.isnull().values.any()"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "cI3qoEBGJko4"
      },
      "source": [
        "For our purposes we can just replace null values with zeroes."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9Jl-SvBBJa85",
        "outputId": "e146d1b5-f096-4178-b8df-ee5e219c7e19",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "df = df.replace(np.nan, 0, regex=True)\n",
        "df.isnull().values.any()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "False"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gE9CebrlPD8y"
      },
      "source": [
        "Now we can preview the dataset."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RIwdokfaG-gz",
        "outputId": "67727276-0296-4528-d039-2cfde500e907",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 383
        }
      },
      "source": [
        "df.iloc[:, 0:15].tail(10)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Outcome_M1</th>\n",
              "      <th>Outcome_M2</th>\n",
              "      <th>Outcome_M3</th>\n",
              "      <th>Outcome_M4</th>\n",
              "      <th>Outcome_M5</th>\n",
              "      <th>Outcome_M6</th>\n",
              "      <th>Outcome_M7</th>\n",
              "      <th>Outcome_M8</th>\n",
              "      <th>Outcome_M9</th>\n",
              "      <th>Outcome_M10</th>\n",
              "      <th>Outcome_M11</th>\n",
              "      <th>Outcome_M12</th>\n",
              "      <th>Cat_1</th>\n",
              "      <th>Date_1</th>\n",
              "      <th>Quan_1</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>741</th>\n",
              "      <td>24000</td>\n",
              "      <td>31000.0</td>\n",
              "      <td>5000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>1</td>\n",
              "      <td>2142</td>\n",
              "      <td>1263700</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>742</th>\n",
              "      <td>2000</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2</td>\n",
              "      <td>2681</td>\n",
              "      <td>1252200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>743</th>\n",
              "      <td>21000</td>\n",
              "      <td>15000.0</td>\n",
              "      <td>6000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2</td>\n",
              "      <td>3038</td>\n",
              "      <td>1979900</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>744</th>\n",
              "      <td>23000</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>6000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>1</td>\n",
              "      <td>2072</td>\n",
              "      <td>1080000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>745</th>\n",
              "      <td>16000</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>1</td>\n",
              "      <td>1988</td>\n",
              "      <td>922700</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>746</th>\n",
              "      <td>45000</td>\n",
              "      <td>35000.0</td>\n",
              "      <td>6000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2</td>\n",
              "      <td>3339</td>\n",
              "      <td>2613200</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>747</th>\n",
              "      <td>2000</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2</td>\n",
              "      <td>2302</td>\n",
              "      <td>685300</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>748</th>\n",
              "      <td>10000</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>1</td>\n",
              "      <td>2347</td>\n",
              "      <td>1684000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>749</th>\n",
              "      <td>11000</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2</td>\n",
              "      <td>2618</td>\n",
              "      <td>1210500</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>750</th>\n",
              "      <td>18000</td>\n",
              "      <td>6000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>500.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>2000.0</td>\n",
              "      <td>3000.0</td>\n",
              "      <td>1</td>\n",
              "      <td>2569</td>\n",
              "      <td>2281200</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "     Outcome_M1  Outcome_M2  Outcome_M3  ...  Cat_1  Date_1   Quan_1\n",
              "741       24000     31000.0      5000.0  ...      1    2142  1263700\n",
              "742        2000       500.0       500.0  ...      2    2681  1252200\n",
              "743       21000     15000.0      6000.0  ...      2    3038  1979900\n",
              "744       23000      3000.0      3000.0  ...      1    2072  1080000\n",
              "745       16000      3000.0      2000.0  ...      1    1988   922700\n",
              "746       45000     35000.0      6000.0  ...      2    3339  2613200\n",
              "747        2000      2000.0      2000.0  ...      2    2302   685300\n",
              "748       10000      2000.0       500.0  ...      1    2347  1684000\n",
              "749       11000      3000.0      2000.0  ...      2    2618  1210500\n",
              "750       18000      6000.0      2000.0  ...      1    2569  2281200\n",
              "\n",
              "[10 rows x 15 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 111
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4JBOfipQIv6V"
      },
      "source": [
        "We will split our dataset into the training part (on which we will train our model) and the test part (on which we will test the correctness of our model)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "m2RsukM1Hcdq",
        "outputId": "8b309827-2e97-426b-9387-c166a579a1a3",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        }
      },
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "\n",
        "df_train, df_test = train_test_split(df, test_size=0.2)\n",
        "print(df_train.shape)\n",
        "print(df_test.shape)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(600, 558)\n",
            "(151, 558)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5jA431LELpZr"
      },
      "source": [
        "## Exploratory Data Analysis"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "X7xG-NLFMRXc"
      },
      "source": [
        "Let's visualize our data. We will show the price change dynamics for 10 random products."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "46oKmXaowQH-",
        "outputId": "44326ac4-3a7d-42f6-de55-f9b458074778",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "import random\n",
        "\n",
        "indexes = random.sample(range(len(df)), 10)\n",
        "indexes"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[638, 239, 361, 534, 101, 318, 258, 666, 563, 143]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 121
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "e4ZatUlVPGhK"
      },
      "source": [
        "df_plot = pd.DataFrame()\n",
        "\n",
        "for i in indexes:\n",
        "  df_plot[\"product_\"+str(i)] = df.iloc[i, 0:12]"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "_2ZvAoJ5F53b",
        "outputId": "1dfb9a90-cbe8-4eb3-c5c3-2c475ac2c759",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 270
        }
      },
      "source": [
        "df_plot.plot();"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nyYnfP/QE/mEXkfh/f+fwTw1L7NEW3N3dufXWW3FxcWH16tWcPHmyrZskhBD1ctgAAeDm4cnkBU/i\nExjEh//vb2T+8nNbN6lWXbt25ZZbbqGsrIzVq1dz+nTzpmFsKfn5+Q7TViFE86o3QCilXlNKHVVK\n/VSlrJtSaqNSKs3462uUK6XUIqXUfqVUqlIqvso+M4z6aUqpGVXKByuldhn7LFKNnA/q7uXN5Ief\nwsuvOx8+8zg5+/c2ZvdWFRgYyJQpUzh+/DjvvvsuVqu1rZtUq8zMTN555x3++c9/8tJLL5Gent7W\nTRJCtLKGXEGsBMaeUzYf+EJr3Rf4wngOMA7oazzuBJaBLaAAjwGXApcAj1UGFaPOHVX2O/e96uXh\n40vCI0/h7t2VtX9/lKPpBxt7iFbTq1cvJk2aRHp6OuvWrauWnaqtaa05cOAAq1at4tVXXyU9PZ1h\nw4bh7OzMqlWr+Oabb9pVe4UQLatBd1IrpcKB/2qtBxrP9wIjtdY5SqkgIElr3V8p9S9j++2q9Sof\nWuu7jPJ/AUnG4yut9QCj/Oaq9epS053UhXlHeefxBzhbWsqUx57GP/Siej9bW9m8eTOff/45l19+\nOaNHj27TtlRUVLBnzx42b95MTk4OXl5eXHbZZQwePBhXV1dKS0v5z3/+w08//USfPn244YYbmpS2\nUQjRNlprsb4ArXWOsX0ECDC2LUBGlXqZRlld5Zk1lNdIKXWnUipZKZWcl5d33uve3XuQ8MhCTGYz\na55cwInsrEZ+rNYzbNgwLr74Yr777ju2bt3aJm2wWq1s27aNJUuWsGbNGsrKypgwYQL33nsvl19+\nOa6urgC4urpy4403ct111/Hrr7+yfPlyDh8+3CZtFkK0niYPUmvbJUirLOiktX5Zaz1Eaz2ke/fu\nNdbxDQwm4eGFaK1Z89QCTh490hpNazSlFOPGjWPAgAF8+umn7N69u9Xeu7S0lO+++45//vOf/Oc/\n/8HV1ZWEhATmzJlDfHw8ZvP5t8copbj44ouZNWsWZrOZ119/nc2bN0uXkxAd2IUGiFyjawnj71Gj\nPAsIrVIvxCirqzykhvIm8QsJJeHhp7CWlvLe3xZQeOz8q432wMnJiRtvvJGQkBDWrl3b4r/Ki4uL\n+fLLL3nxxRfZsGED/v7+/OEPf+DOO+8kKiqqQYsKBgUFcddddxEREcHnn3/O22+/LUubC9FBXWiA\n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\n3BftWPtY+8UAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "859MIkwCPPYf"
      },
      "source": [],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Z-L-XPkRSd2G"
      },
      "source": [
        "As we see, sales are  declining throughout the year in most cases."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "H8onT0Fmy9HE"
      },
      "source": [
        "## Prepare data\n",
        "\n",
        "We need to prepare our data in a special way to load into our model. We will build a model that forecasts future month outcome based on previous values. For each month model will analyze product features and information about previous month outcome."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mzN7JZexRHCH",
        "outputId": "dfd6ccfa-14b1-4a5b-c02c-1a1a8096f808",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        }
      },
      "source": [
        "# firstly, we will separate product features and information about outcome per month\n",
        "\n",
        "y_train_real = df_train.iloc[:, 0:12].values\n",
        "print(y_train_real.shape)\n",
        "\n",
        "y_test_real = df_test.iloc[:, 0:12].values\n",
        "print(y_test_real.shape)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(600, 12)\n",
            "(151, 12)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ru7B8uSiTnx8",
        "outputId": "cbab6f14-d6cb-4783-e5a7-43cc4420125f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        }
      },
      "source": [
        "x_train_real = df_train.iloc[:, 12:].values\n",
        "x_test_real = df_test.iloc[:, 12:].values\n",
        "print(x_train_real.shape)\n",
        "print(x_test_real.shape)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(600, 546)\n",
            "(151, 546)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Rtc-j0o6wCLB"
      },
      "source": [
        "# scale values in one range for better predictions\n",
        "\n",
        "from sklearn.preprocessing import MinMaxScaler\n",
        "\n",
        "#scale datasets\n",
        "x_scaler = MinMaxScaler()\n",
        "x_scaler = x_scaler.fit(x_train_real)\n",
        "x_train = x_scaler.transform(x_train_real)\n",
        "x_test = x_scaler.transform(x_test_real)\n",
        "\n",
        "y_scaler = MinMaxScaler()\n",
        "y_scaler = y_scaler.fit(y_train_real)\n",
        "y_train = y_scaler.transform(y_train_real)\n",
        "y_test = y_scaler.transform(y_test_real)\n"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "PugM9aS4Ikj9"
      },
      "source": [],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7MNNEBg68Bgo"
      },
      "source": [
        "Now let us move to the most important step of this process: convert price history to multidimensional time series. For each product we will create TimeSeries with 1-12 timesteps with information about product features and previous timestep outcome. We do not know previous outcome for first timestep, so we will just take zero."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Cu3sJdMR0yxR"
      },
      "source": [
        "# Here we create lists for training and test data, each list will contain 12 3-dimensional numpy arrays.\n",
        "# Second dimension for each array will represent timesteps and gradually increases by 1.\n",
        "\n",
        "x_train_series = []\n",
        "x_test_series = []\n",
        "\n",
        "for k in range(len(y_train[0])):\n",
        "  x_train_series.append(np.zeros((x_train.shape[0], k+1, x_train.shape[1]+1)))\n",
        "\n",
        "for k in range(len(y_test[0])):\n",
        "  x_test_series.append(np.zeros((x_test.shape[0], k+1, x_test.shape[1]+1)))\n",
        ""
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MkX0Fmar4B6y"
      },
      "source": [
        "# Add to each timestep information about product features and previous timestep outcome.\n",
        "# Now we are using the same product features for each timestep,\n",
        "# but the model allows to track features changes on each timestep\n",
        "# to make more accurate predictions.\n",
        "\n",
        "for k in range(len(y_train[0])):\n",
        "  for i in range(len(x_train)):\n",
        "    for j in range(k + 1):\n",
        "      shifted_index = j - 1\n",
        "      if shifted_index < 0:\n",
        "        x_train_series[k][i, j] = np.append(x_train[i], 0)\n",
        "      else:\n",
        "        x_train_series[k][i, j] = np.append(x_train[i], y_train[i, shifted_index])"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "l1cYn16a4Bvs"
      },
      "source": [
        "# The same timesteps conversion for test data.\n",
        "\n",
        "for k in range(len(y_test[0])):\n",
        "  for i in range(len(x_test)):\n",
        "    for j in range(k + 1):\n",
        "      shifted_index = j - 1\n",
        "      if shifted_index < 0:\n",
        "        x_test_series[k][i, j] = np.append(x_test[i], 0)\n",
        "      else:\n",
        "        x_test_series[k][i, j] = np.append(x_test[i], y_test[i, shifted_index])"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jkUbsj6_GS_z"
      },
      "source": [
        "# Make 12 lists with information about outcome per TimeSerie, per product.\n",
        "\n",
        "y_train_series = []\n",
        "y_test_series = []\n",
        "\n",
        "for k in range(len(y_train[0])):\n",
        "  y_train_series.append(np.zeros((len(y_train), 1)))\n",
        "  y_test_series.append(np.zeros((len(y_test), 1)))\n",
        "\n",
        "\n",
        "for k in range(len(y_train[0])):\n",
        "  y_train_series[k] = y_train[:, k].reshape(-1, 1)\n",
        "  y_test_series[k] = y_test[:, k].reshape(-1, 1)\n",
        ""
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "h27Vjd0HSWCe"
      },
      "source": [
        "Review our lists with TimeSeries"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1yPkBtVn23w2",
        "outputId": "5fe88600-7ebf-4242-cc47-072033781e71",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 86
        }
      },
      "source": [
        "print(x_train_series[0].shape)\n",
        "print(x_test_series[0].shape)\n",
        "print(x_train_series[11].shape)\n",
        "print(x_test_series[11].shape)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(600, 1, 547)\n",
            "(151, 1, 547)\n",
            "(600, 12, 547)\n",
            "(151, 12, 547)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UFqlC5DVqCqs",
        "outputId": "f9ab88c8-3a16-47b9-fd1b-994f01f82d3e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 86
        }
      },
      "source": [
        "print(y_train_series[0].shape)\n",
        "print(y_test_series[0].shape)\n",
        "print(y_train_series[11].shape)\n",
        "print(y_test_series[11].shape)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(600, 1)\n",
            "(151, 1)\n",
            "(600, 1)\n",
            "(151, 1)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gF7eXNLPgW-X"
      },
      "source": [
        "## Building LSTM Neural Network\n",
        "\n",
        "We will use long short term memory (LSTM) network of the Recurrent neural network (RNN). You can read more about these types of NN here:\n",
        "\n",
        "* https://deeplearning4j.org/lstm.html\n",
        "* http://colah.github.io/posts/2015-08-Understanding-LSTMs/\n",
        "\n",
        "We use Keras framework for deep learning. Our model consists of just one LSTM layer with 256 units, one Dense layer with 128 units and the densely connected output layer with one neuron. We also added one Dropout layer to avoid overfitting. Model stays simple and quick, still able to make useful predictions."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2LvmCIP417E5"
      },
      "source": [
        "from keras.models import Sequential\n",
        "from keras.layers import Dense\n",
        "from keras.layers import LSTM\n",
        "from keras.layers import Dropout"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Xb8Z3Jq8iubw",
        "outputId": "c4b63970-4446-4d6e-966f-6e73f4972870",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 278
        }
      },
      "source": [
        "model = Sequential()\n",
        "model.add(LSTM(256, input_shape=(None, x_train.shape[1]+1)))\n",
        "model.add(Dropout(0.5))\n",
        "model.add(Dense(128, activation = \"relu\"))\n",
        "model.add(Dense(1))\n",
        "model.summary()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "lstm_2 (LSTM)                (None, 256)               823296    \n",
            "_________________________________________________________________\n",
            "dropout_2 (Dropout)          (None, 256)               0         \n",
            "_________________________________________________________________\n",
            "dense_3 (Dense)              (None, 128)               32896     \n",
            "_________________________________________________________________\n",
            "dense_4 (Dense)              (None, 1)                 129       \n",
            "=================================================================\n",
            "Total params: 856,321\n",
            "Trainable params: 856,321\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nOMh6r5AoyVW"
      },
      "source": [
        "model.compile(loss='mse', optimizer='rmsprop')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "aRZossw7EJG1"
      },
      "source": [
        "# use %timeit to measure learning time on standard Google Colab instance\n",
        "\n",
        "%%timeit -r 1 -n 1\n",
        "for i in range(len(x_train_series)):\n",
        "  print(i)\n",
        "  model.fit(x_train_series[i], y_train_series[i], epochs=10, validation_split=0.2)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "q0-3xrwi-JnR"
      },
      "source": [
        "  "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LeKmuM5irp4P",
        "outputId": "07eeb376-8e8b-4d08-ae5f-0e8cabfa700c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 434
        }
      },
      "source": [
        "## Evaluate model for prediction of outcome after several months\n",
        "\n",
        "for i in range(len(x_test_series)):\n",
        "  accr = model.evaluate(x_test_series[i], y_test_series[i])\n",
        "  print(\"Predicting outcome after {} months. MSE:\".format(i), accr)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "151/151 [==============================] - 0s 128us/step\n",
            "Predicting outcome after 0 months. MSE: 0.010366628150030083\n",
            "151/151 [==============================] - 0s 84us/step\n",
            "Predicting outcome after 1 months. MSE: 0.008765583182530885\n",
            "151/151 [==============================] - 0s 99us/step\n",
            "Predicting outcome after 2 months. MSE: 0.008588158744479844\n",
            "151/151 [==============================] - 0s 110us/step\n",
            "Predicting outcome after 3 months. MSE: 0.006344354214973205\n",
            "151/151 [==============================] - 0s 127us/step\n",
            "Predicting outcome after 4 months. MSE: 0.007653137693638044\n",
            "151/151 [==============================] - 0s 169us/step\n",
            "Predicting outcome after 5 months. MSE: 0.007342025674632843\n",
            "151/151 [==============================] - 0s 150us/step\n",
            "Predicting outcome after 6 months. MSE: 0.008044605565855636\n",
            "151/151 [==============================] - 0s 169us/step\n",
            "Predicting outcome after 7 months. MSE: 0.006842109683086935\n",
            "151/151 [==============================] - 0s 181us/step\n",
            "Predicting outcome after 8 months. MSE: 0.006986632537627161\n",
            "151/151 [==============================] - 0s 210us/step\n",
            "Predicting outcome after 9 months. MSE: 0.006796673496889062\n",
            "151/151 [==============================] - 0s 234us/step\n",
            "Predicting outcome after 10 months. MSE: 0.012409144253870904\n",
            "151/151 [==============================] - 0s 238us/step\n",
            "Predicting outcome after 11 months. MSE: 0.010652917116535026\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4iQYTuDnuGdu",
        "outputId": "1de795f2-6722-4d63-b0e1-db1f74aaa107",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "prediction = model.predict(x_test_series[11])\n",
        "prediction.shape"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(151, 1)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 138
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WpA5Ml8Zd_y8"
      },
      "source": [
        "## Outcome prediction function\n",
        "\n",
        "We will use our model to create a function that will take information about product features and outcome history during several months. As a result this function will predict future outcome for as many months as you wish."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qPwIxw23uuvg"
      },
      "source": [
        "# our function will take information about outcome during first m months and predict outcome for future months\n",
        "\n",
        "def predictor(features, history, future):\n",
        "  '''\n",
        "  features: list of product features\n",
        "  history: list with outcome per month\n",
        "  future: int, number of months to predict outcome\n",
        "  '''\n",
        "  if future == 0:\n",
        "    return history\n",
        "\n",
        "  p_serie = np.zeros((1, len(history), len(features)+1))\n",
        "\n",
        "  for j in range(len(history)):\n",
        "    shifted_index = j - 1\n",
        "    if shifted_index < 0:\n",
        "      p_serie[0, j] = np.append(features, 0)\n",
        "    else:\n",
        "      p_serie[0, j] = np.append(features, history[shifted_index])\n",
        "\n",
        "  prediction = model.predict(p_serie)\n",
        "\n",
        "  history.append(prediction[0][0])\n",
        "  future -= 1\n",
        "\n",
        "  return predictor(features, history, future)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "EtPId8ilhh3e",
        "outputId": "c20d987d-6d7d-4525-de00-b552534a8fc3",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 72
        }
      },
      "source": [
        "# we will test our function on a random product n\n",
        "# we will create two lists. First with outcome history for first m months, second with product features\n",
        "\n",
        "import random\n",
        "\n",
        "n = random.choice(range(len(x_test)-1))\n",
        "m = 6\n",
        "future = 6\n",
        "\n",
        "features = x_test[n].tolist()\n",
        "history = y_test[n, 0:m].tolist()\n",
        "\n",
        "print(\"Features: \", features[0:5])\n",
        "print(\"Scaled outcome history: \", history)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Features:  [1.0, 0.6532507739938082, 0.33716511676755334, 0.7604166666666667, 0.4594594594594595]\n",
            "Scaled outcome history:  [0.005044136191677175, 0.006349206349206349, 0.004629629629629629, 0.006756756756756756, 0.024691358024691357, 0.018518518518518517]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "zsKKBLHph_Ib"
      },
      "source": [
        "prediction = predictor(features, history, future)\n",
        "# print(prediction)\n",
        "# print(y_test[n, :m+future])"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "A8Q4uTp4MLFW",
        "outputId": "cfee3339-7fbd-47d0-c87d-a2153e656fe8",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 69
        }
      },
      "source": [
        "y_scaler.inverse_transform([prediction])"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[6000.        , 2000.        ,  500.        ,  500.        ,\n",
              "        2000.        ,  500.        ,  961.77857369,  873.31070378,\n",
              "         896.80594951,  862.35129088,  367.66000092,  365.23140967]])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 204
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0935ZKZ6vkPc",
        "outputId": "1796201d-3ce2-4515-8d16-60ad81c06db4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        }
      },
      "source": [
        "# plot results of prediction comparing real data\n",
        "plt.plot(y_scaler.inverse_transform([prediction])[0])\n",
        "plt.plot(y_scaler.inverse_transform([y_test[n, :m+future]])[0])\n",
        "plt.title('Predicted and real outcome')\n",
        "plt.legend(['predicted', 'real'], loc='upper left')\n",
        "axes = plt.gca()\n",
        "\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nAsvqYXKmAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Uv065OfnrYIJ"
      },
      "source": [
        "As we can see, our predicted values are close to real values.\n",
        "Let's try several other random products."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "rbupZ717r4ZN",
        "outputId": "131e0f48-d4af-4647-af12-1eda878c0c56",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 809
        }
      },
      "source": [
        "for i in range(3):\n",
        "  n = random.choice(range(len(x_test)-1))\n",
        "  m = 6\n",
        "  future = 6\n",
        "  features = x_test[n].tolist()\n",
        "  history = y_test[n, 0:m].tolist()\n",
        "\n",
        "  prediction = predictor(features, history, future)\n",
        "\n",
        "  # plot results of prediction comparing real data\n",
        "  plt.plot(y_scaler.inverse_transform([prediction])[0])\n",
        "  plt.plot(y_scaler.inverse_transform([y_test[n, :m+future]])[0])\n",
        "  plt.title('Predicted and real outcome')\n",
        "  plt.legend(['predicted', 'real'], loc='upper left')\n",
        "  axes = plt.gca()\n",
        "  plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEICAYAAAC0+DhzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xd4VGXax/HvnUlCCi2Q0JJAAkQ6\nKAQEsYAVFMW1V7CiYl9d+66uZd+tdtRlbagIKhaQKooVpASk1wABQg0QWkLazPP+cU5wSCFtkjMz\nuT/XlSszz2n3TGB+c85zznPEGINSSinlLcTpApRSSvkfDQellFKlaDgopZQqRcNBKaVUKRoOSiml\nStFwUEopVYqGg6oTIpIkIkZEQu3nM0RkZB1s9xkR+ai2t2NvK0NEzq2jbf0gIrfVxbZU/aThoI6x\nP9yOisgREdktIu+LSMPa2JYxZqgxZlwla6qTD1wF9t/8eafrUM7TcFAlXWyMaQj0BlKBp0rOIBb9\nt1MDIuJyugalTkT/g6syGWO2AzOA7nDsMMYLIjIXyAXai0gTEXlHRHaKyHYReb74Q09EXCLybxHZ\nKyKbgIu811/ysIiI3C4ia0TksIisFpHeIvIh0Bb42t6becSet7+IzBORAyKyTEQGea0nWUR+tNcz\nG4gt7zWKSIyITBWRLBHJth8nlKjxORGZa6/vGxGJ9Zp+o4hsEZF9IvLkid5P+xv5myIyXURygMEi\n0sB+j7bae2pviUhkZWqrYFsNRORlEdlh/7wsIg3saTeJyC8l5jci0lFERgHXA4/Y7/fX9vREEfnC\nrmWfiLxut4eIyFP2e7BHRD4QkSb2tOLDiDeLyDb7NdwpIn1FZLn9t3u9RB232P8GskVkloi0q8zr\nVbXEGKM/+oMxBiADONd+nAisAp6zn/8AbAW6AaFAGPAl8F8gGmgBLATusOe/E1hrr6cZ8D1ggFCv\n9d1mP74S2A70BQToCLQrWZP9PB7YB1yI9eXmPPt5nD39V+BFoAFwJnAY+Kic19scuByIAhoBnwFf\neU3/AdgInARE2s//bk/rChyxt9HA3maRd60ltvU+cBAYaNcdAbwETLHfn0bA18D/VaG228rZ1rPA\nfPtvEgfM8/o73gT8UmJ+A3T0qvN5r2kuYJlda7Rd9+n2tFuAdKA90BD4AvjQnpZkr/cte5nzgTzg\nK7uueGAPcJY9/3B7XV2w/n09Bcxz+v9Eff5xvAD98Z8f+4P4CHAA2AK8AUTa034AnvWatyWQXzzd\nbrsW+N5+PAe402va+ZQfDrOA+09Qk3c4PFr8AeTVNgsYibWXUQREe037mHLCoYxtnQxkez3/AXjK\n6/loYKb9+C/ARK9p0UABJw6HD7yeC5ADdPBqGwBsrkJt5YXDRuBCr+cXABn245uoWjgMALKK/24l\nlvsOGO31vBNQaH+4J9nrjfeavg+42uv558AD9uMZwK1e00Kw9lDbOf3/or7+hKLU8S41xnxbzrRt\nXo/bYe097BSR4rYQr3nalJh/ywm2mYj1gVYZ7YArReRir7YwrD2TNlgfoDkltptY1opEJArrG/EQ\nIMZubiQiLmOM236+y2uRXKxvyFDi9RljckRkXwW1e78fcVh7BYu93j/B+qZe2drK04bj3+8tdlt1\nJAJbjDFFldxOKNYXh2K7vR4fLeN58fvZDnhFRP7jNV2w9jBO9G9H1RINB1UV3kP4bsPac4gt54Nj\nJ8d/KLc9wXq3AR0qsc3ieT80xtxeckb7GHWMiER7BUTbMtZR7CGsb7unGmN2icjJwG9YH0oV2Yl1\nCKR421FYh4JOxLuOvVgfjt2M1b/jy9p2YH3YrrKft7XbwNpbifKqu9UJagTr/W4rIqFl/J2Lt1Os\neM9tN1Cp/pES23nBGDO+isupWqId0qpajDE7gW+A/4hIY7tzsoOInGXP8ilwn4gkiEgM8NgJVvc2\n8LCI9BFLR6/OyN1Yx7SLfQRcLCIXiNXpHSEig0QkwRizBUgD/ioi4SJyOnAx5WuE9QF9QESaAU9X\n4S2YBAwTkdNFJBzrOH+l/z8ZYzzA/4CXRKQFgIjEi8gFPqhtAvCUiMTZHeh/wXrfwOo/6CYiJ4tI\nBPBMiWVLvt8LsYLw7yISbb/fA72286BYJwE0BP4GfFLOl4WKvAU8LiLdAMQ62eHKaqxH+YiGg6qJ\nEUA4sBrIxvrAbG1P+x9WX8AyYAlWZ2WZjDGfAS9g9Q8cxuq0bGZP/j+sD7oDIvKwMWYbVuflE1jH\nwrcBf+L3f8vXAacC+7E+UD84Qf0vY3U078XqwJ1ZydeNMWYVcLdd806s159Z2eVtj2J1ws4XkUPA\nt1h7CzWqDXgeKySXAyuw3v/n7brXYwXZt8AG4JcSy74DdLXf76/sQ1gXY50ksNV+jVfb874LfAj8\nBGzG6nC+twp1HmOM+RL4BzDRfi9WAkOrsy7lG2J3/iillFLH6J6DUkqpUjQclFJKlaLhoJRSqhQN\nB6WUUqUE7HUOsbGxJikpyekylFIqoCxevHivMSauovkCNhySkpJIS0tzugyllAooIlKpK871sJJS\nSqlSNByUUkqVouGglFKqlIDtcyhLYWEhmZmZ5OXlOV1KQIuIiCAhIYGwsDCnS1FKOSSowiEzM5NG\njRqRlJSE1zDIqgqMMezbt4/MzEySk5OdLkcp5ZCgOqyUl5dH8+bNNRhqQERo3ry57n0pVc8FVTgA\nGgw+oO+hUirowsGfeDxucrJ343FXdOMupZTyLxoOtcTjcZO3O53oozvIPbin2utp2NC6i+KOHTu4\n4oorTjjvyy+/TG5ubpXW/8MPPzBs2LBq16eUCk4aDrXA47aCIcrk4jGCFBz/ge2uxp5EmzZtmDRp\n0gnnqU44KKVUWTQcfGzTxo106ZTC7aMfpNOgq7n8jscozNlHUlISjz76KL179+azzz5j48aNDBky\nhD59+nDGGWewdu1aADZv3syAAQPo0aMHTz311LH1ZmRk0L17d8AKl4cffpju3bvTs2dPXnvtNV59\n9VV27NjB4MGDGTx4MADffPMNAwYMoHfv3lx55ZUcOXIEgJkzZ9K5c2d69+7NF1+Ue4M2pVQ9FlSn\nsnr769erWL3jkE/X2bVNY56+uFu50z1uN/n7Mli/cTNjXnuF8UMv5sbrr+HtcRMAaN68OUuWLAHg\nnHPO4a233iIlJYUFCxYwevRo5syZw/33389dd93FiBEjGDNmTJnbGTt2LBkZGSxdupTQ0FD2799P\ns2bNePHFF/n++++JjY1l7969PP/883z77bdER0fzj3/8gxdffJFHHnmE22+/nTlz5tCxY0euvvrq\nMrehlKrfgjYc6prH7SZ/zwYiPHkkxMdz7lDrvvbXXXcd/33tJYzHc+yD+MiRI8ybN48rr/z9/un5\n+fkAzJ07l88//xyAG2+8kUcffbTUtr799lvuvPNOQkOtP1+zZs1KzTN//nxWr17NwIHWveALCgoY\nMGAAa9euJTk5mZSUFABuuOEGxo4d66u3QSkVJII2HE70Dd/X3O4iCvakE+E5ytGoloS4XMemhTWI\nBATwEB0dDYDH46Fp06YsXbq0zPX54lRSYwznnXceEyZMOK69vG0qpZQ37XOoIe9gyI2OJ6pxLFu3\nbuXXX38FYOLET+jfLxWMObZM48aNSU5O5rPPPgOsD/Jly5YBMHDgQCZOnAjA+PHjy9zmeeedx3//\n+1+KiooA2L9/PwCNGjXi8OHDAPTv35+5c+eSnp4OQE5ODuvXr6dz585kZGSwceNGgFLhoZRSoOFQ\nI8cHQwLRTVsA0KlTJ8aMGUOXLl3Izs7mlltuRjB4PJ5jy44fP5533nmHXr160a1bNyZPngzAK6+8\nwpgxY+jRowfbt28vc7u33XYbbdu2pWfPnvTq1YuPP/4YgFGjRjFkyBAGDx5MXFwc77//Ptdeey09\ne/Y8dkgpIiKCsWPHctFFF9G7d29atGhRy++SUioQifH6RhtIUlNTTcmb/axZs4YuXbrUyfatYLD6\nGKxgsG6slJGRwbBhw1i5cuWxeXMO7iU6Zxt5TToSEd2oTuqrqbp8L5VSdUdEFhtjUiuaT/ccqsFd\n5BUMDROPBUN5wiOtC9mK8o7URXlKKVVjQdshXVuKg6GBsYOhSexx05OSko7bawAIC4+gkFCkMKcu\nS1VKqWqrcM9BRN4VkT0isrKMaQ+JiBGRWPu5iMirIpIuIstFpLfXvCNFZIP9M9KrvY+IrLCXeVX8\neNQ3d1ERhXYw5JURDCdSEBJJuOdoLVanlFK+U5nDSu8DQ0o2ikgicD6w1at5KJBi/4wC3rTnbQY8\nDZwK9AOeFpEYe5k3gdu9liu1LX9QVFRI4Z71hJs88hq2JaoKwQBgwqIIo4jCgvxaqlAppXynwnAw\nxvwE7C9j0kvAI4B3j/Zw4ANjmQ80FZHWwAXAbGPMfmNMNjAbGGJPa2yMmW+snvEPgEtr9pJ8r6io\nkKI9Gwg3+eQ1aktUk+ZVXkdohNURXXD0sK/LU0opn6tWh7SIDAe2G2OWlZgUD2zzep5pt52oPbOM\n9vK2O0pE0kQkLSsrqzqlV9nvwVBAXqN2RDWuejAAhEdG4zGCydd+B6WU/6tyOIhIFPAE8Bffl3Ni\nxpixxphUY0xqXNyJzxDyheODoS1RjUsPU1FZISEh5Ic0ILToxKOm3nTTTRWOvqqUUrWtOnsOHYBk\nYJmIZAAJwBIRaQVsBxK95k2w207UnlBGu+OKCmseDMYcf+Gb2xVFuMnH49Gb/yil/FuVw8EYs8IY\n08IYk2SMScI6FNTbGLMLmAKMsM9a6g8cNMbsBGYB54tIjN0RfT4wy552SET622cpjQAm++i1VVtR\nYQFFWeutYGjcrkrBkJGRQadOnRgxYgTdu3fnww8/PDZs9o2j7iM3N4f8ozk8++yz9O3bl+7duzNq\n1CgC9WJEpVRwqvA6BxGZAAwCYkUkE3jaGPNOObNPBy4E0oFc4GYAY8x+EXkOWGTP96wxpriTezTW\nGVGRwAz7p+ZmPAa7VlR5MWM8hBQepQEGj6sBUa6w3ye26gFD/17hOjZs2MC4cePo2LEjl1122bFh\ns//2txd4cexH/PGxP3PPPffwl79YR+ZuvPFGpk6dysUXX1zlepVSqjZUGA7GmGsrmJ7k9dgAd5cz\n37vAu2W0pwHdK6qjLhjjwRQetcZBckXgclXvGsF27drRv39/pk6dWmrY7FN7dUYKc/h+7q/885//\nJDc3l/3799OtWzcNB6WU3wjeK6Qr8Q3fW2FhAZ6sDYSZQvIaJxHZqGm1N108NHdZw2bn7ErHk5vN\n6NGjSUtLIzExkWeeeYa8vLxqb08ppXxNx1YCCgvz8WRtINQUkt+kZsHgrcxhs7fuwp1vXSkdGxvL\nkSNH9OwkpZTfCd49h0oqLMjHs3cDoaaIgibJRDZs4rN1ew+bXXynt7/8+UlOGXgSI2+8nu7du9Oq\nVSv69u3rs20qpZQv1Oshu2szGMpjPB48O5dzNKwpDVsk1fr2qkuH7FYqOOmQ3RUoLMjH1HEwAEhI\nCAUhERVeDKeUUk6ql+FQWJCH2bsBVx0HQzF3qH0xnFsvhlNK+aegC4eKDpNZwZCOy7gpaNq+zoMB\nIKRBQ0IE8o/6581/AvVQo1LKd4IqHCIiIti3b1+5H24ejwfPsWBIJjK6cR1XaCm+M5zbD+8MZ4xh\n3759REREOF2KUspBQXW2UkJCApmZmZxoxNaCo0eRkFDCDhUP7eSMogP78cghwrMOOVZDeSIiIkhI\nSKh4RqVU0AqqcAgLCyM5OdnpMipl0UvP0OHgPGL+sgUJCaodOKVUENBPJYd4EvrSjENs37Ta6VKU\nUqoUDQeHtOh6BgA7V/3kcCVKKVWahoND2nbqwxETiWfrAqdLUUqpUjQcHOIKDWVzRGdiD5S806pS\nSjlPw8FBR1r0IakogyOHsp0uRSmljqPh4KDo9gNwiSFj+c9Ol6KUUsfRcHBQu15nAXB4w1yHK1FK\nqeNpODioSbM4MkISidqzxOlSlFLqOBWGg4i8KyJ7RGSlV9u/RGStiCwXkS9FpKnXtMdFJF1E1onI\nBV7tQ+y2dBF5zKs9WUQW2O2fiEi4L1+gv9vTpCdJR1fpIHxKKb9SmT2H94EhJdpmA92NMT2B9cDj\nACLSFbgG6GYv84aIuETEBYwBhgJdgWvteQH+AbxkjOkIZAO31ugVBRhJPJUm5LAtfYXTpSil1DEV\nhoMx5idgf4m2b4wxRfbT+UDxQDzDgYnGmHxjzGYgHehn/6QbYzYZYwqAicBwERHgbKD4PpnjgEtr\n+JoCSvHFcLtX68VwSin/4Ys+h1uAGfbjeGCb17RMu6289ubAAa+gKW4vk4iMEpE0EUk70eB6gSQx\npReHiAa9GE4p5UdqFA4i8iRQBIz3TTknZowZa4xJNcakxsXF1cUma12Iy8XmiK60OLjc6VKUUuqY\naoeDiNwEDAOuN7/fQGE7kOg1W4LdVl77PqCpiISWaK9Xclv2IcmzlYPZe50uRSmlgGqGg4gMAR4B\nLjHGeN8MeQpwjYg0EJFkIAVYCCwCUuwzk8KxOq2n2KHyPXCFvfxIYHL1XkrgatTxNAC2LPvR4UqU\nUspSmVNZJwC/Ap1EJFNEbgVeBxoBs0VkqYi8BWCMWQV8CqwGZgJ3G2Pcdp/CPcAsYA3wqT0vwKPA\nH0UkHasP4h2fvsIAkNTrTNxGyNn4q9OlKKUUUImb/Rhjri2judwPcGPMC8ALZbRPB6aX0b4J62ym\neqth4xg2udrRcM9ip0tRSilAr5D2G1kxJ5OUt0YvhlNK+QUNBz8RktiPRnKULet0KA2llPM0HPxE\nq+5nArBH7wynlPIDGg5+IqF9N7JpTMj2RU6XopRSGg7+QkJC2BLVjVYH9c5wSinnaTj4kaMt+5Bo\ndnBg7y6nS1FK1XMaDn6kccpAALYs/8HZQpRS9Z6Ggx9J7jmQIhNCrl4Mp5RymIaDH4lq2ITNoe1p\nnPWb06Uopeo5DQc/sz+mF8n5aykqLHC6FKVUPabh4GdcSf2JknwyVusprUop52g4+Jk23c8CYN/a\nXxyuRClVn2k4+JnWbVPYS1Nc2xc6XYpSqh7TcPAzEhLC1ugetD68wulSlFL1mIaDHypo3Yd4s5u9\nu7ZVPLNSStUCDQc/1NS+GG7bcr0znFLKGRoOfiip50AKjIu8zXoxnFLKGRoOfigiMprNYR1pulcv\nhlNKOUPDwU9lNz+F5IL1FOTnOV2KUqoeqjAcRORdEdkjIiu92pqJyGwR2WD/jrHbRUReFZF0EVku\nIr29lhlpz79BREZ6tfcRkRX2Mq+KiPj6RQaisHb9iZBCMlYtcLoUpVQ9VJk9h/eBISXaHgO+M8ak\nAN/ZzwGGAin2zyjgTbDCBHgaOBXoBzxdHCj2PLd7LVdyW/VSQk/rznD71/7scCVKqfqownAwxvwE\n7C/RPBwYZz8eB1zq1f6BscwHmopIa+ACYLYxZr8xJhuYDQyxpzU2xsw3xhjgA6911WstEzqwi1jC\ndqY5XYpSqh6qbp9DS2PMTvvxLqCl/Tge8D45P9NuO1F7ZhntZRKRUSKSJiJpWVlZ1Sw9cGxv2J14\nvRhOKeWAGndI29/4jQ9qqcy2xhpjUo0xqXFxcXWxSUcVtulLK/ayZ/tmp0tRStUz1Q2H3fYhIezf\ne+z27UCi13wJdtuJ2hPKaFdAs86nA5Cpd4ZTStWx6obDFKD4jKORwGSv9hH2WUv9gYP24adZwPki\nEmN3RJ8PzLKnHRKR/vZZSiO81lXvJXXrT54JoyBjvtOlKKXqmdCKZhCRCcAgIFZEMrHOOvo78KmI\n3ApsAa6yZ58OXAikA7nAzQDGmP0i8hxQfJOCZ40xxZ3co7HOiIoEZtg/CghvEMGa8JOI2bfU6VKU\nUvVMheFgjLm2nEnnlDGvAe4uZz3vAu+W0Z4GdK+ojvrqYPOT6b3zE/KO5hARGe10OUqpekKvkPZz\n4ckDCJciMlbMc7oUpVQ9ouHg59r2su4Md2D9XIcrUUrVJxoOfi62VVt2SEvC9WI4pVQd0nAIADsa\n9SAxZyXG43G6FKVUPaHhEADc8X2JI5td2zY4XYpSqp7QcAgAze2L4bav0DvDKaXqhoZDAEjq2o9c\n0wD3Fh2+WylVNzQcAkBoWDibG3Si2X69GE4pVTc0HALEobjeJBVt5mjOYadLUUrVAxoOASKy/QDC\nxM3m5b84XYpSqh7QcAgQ7XpaF8MdXK/hoJSqfRoOASImrjXbpA0Ru5c4XYpSqh7QcAgguxr3pF2u\nXgynlKp9Gg4BxJPQl2YcYvum1U6XopQKchoOAaRF1zMA2LnqJ4crUUoFOw2HANK2Ux+OmEg8W/Vi\nOKVU7dJwCCCu0FA2R3Qh9sAyp0tRSgU5DYcAc6RFb5KKMjhyKNvpUpRSQaxG4SAiD4rIKhFZKSIT\nRCRCRJJFZIGIpIvIJyISbs/bwH6ebk9P8lrP43b7OhG5oGYvKbhFtx+ASwwZy7TfQSlVe6odDiIS\nD9wHpBpjugMu4BrgH8BLxpiOQDZwq73IrUC23f6SPR8i0tVerhswBHhDRFzVrSvYtTt5EACH0/W2\noUqp2lPTw0qhQKSIhAJRwE7gbGCSPX0ccKn9eLj9HHv6OSIidvtEY0y+MWYzkA70q2FdQatJTCwZ\nIYlE7V7sdClKqSBW7XAwxmwH/g1sxQqFg8Bi4IAxpsieLROItx/HA9vsZYvs+Zt7t5exzHFEZJSI\npIlIWlZWVnVLD3h7mvQiKW81Hrfb6VKUUkGqJoeVYrC+9ScDbYBorMNCtcYYM9YYk2qMSY2Li6vN\nTfk1SexHE3LYlr7C6VKUUkGqJoeVzgU2G2OyjDGFwBfAQKCpfZgJIAHYbj/eDiQC2NObAPu828tY\nRpWh+GK4Pav0znBKqdpRk3DYCvQXkSi77+AcYDXwPXCFPc9IYLL9eIr9HHv6HGOMsduvsc9mSgZS\ngIU1qCvoJab04iDRmG36NimlakdoxbOUzRizQEQmAUuAIuA3YCwwDZgoIs/bbe/Yi7wDfCgi6cB+\nrDOUMMasEpFPsYKlCLjbGKMH008gxOUiI6IrLQ4ud7oUpVSQqnY4ABhjngaeLtG8iTLONjLG5AFX\nlrOeF4AXalJLfZPbsg+9trzFwey9NImJdbocpVSQ0SukA1SjjqcBsGWZ9jsopXxPwyFAJfU6E7cR\ncjbqxXBKKd/TcAhQDRvHkBGaRMM9emc4pZTvaTgEsL1Ne5GUtwZ3UVHFMyulVBVoOASwkMR+NJKj\nbF2nQ2kopXxLwyGAte5+FgB7Vv/icCVKqWCj4RDA4tt3JZvGhGTqxXBKKd/ScAhgEhJCRlR3Wh3S\ni+GUUr6l4RDg8lr2JtHsIDtrp9OlKKWCiIZDgGucMhCALcv1YjillO9oOAS49r3OoMiEcHTTr06X\nopQKIhoOAS4yuhGbQ9vTOOs3p0tRSgURDYcgsD+mF8n5aykqLHC6FKVUkNBwCAKupP5EST4Zqxc5\nXYpSKkhoOASBNvbFcPvW/uxwJUqpYKHhEARat00hixhc23XPQSnlGxoOQUBCQtgW3Z3Wh1c4XYpS\nKkhoOASJgtZ9iDe72btrm9OlKKWCgIZDkGh60ukAbNOL4ZRSPlCjcBCRpiIySUTWisgaERkgIs1E\nZLaIbLB/x9jzioi8KiLpIrJcRHp7rWekPf8GERlZ0xdVHyX1OI0C4yJ/k94ZTilVczXdc3gFmGmM\n6Qz0AtYAjwHfGWNSgO/s5wBDgRT7ZxTwJoCINAOeBk4F+gFPFweKqryIyGg2h6XQZN9Sp0tRSgWB\naoeDiDQBzgTeATDGFBhjDgDDgXH2bOOAS+3Hw4EPjGU+0FREWgMXALONMfuNMdnAbGBIdeuqz7Kb\nn0JKwRrmv3kne3dtdbocpVQAq8meQzKQBbwnIr+JyNsiEg20NMYUDxG6C2hpP44HvHtLM+228tpL\nEZFRIpImImlZWVk1KD04db7yGX5reh59d02k4Zu9mf/GKPbu2OJ0WUqpAFSTcAgFegNvGmNOAXL4\n/RASAMYYA5gabOM4xpixxphUY0xqXFycr1YbNJrGtqLvg5+y88ZfWBFzLqm7P6Phf/swf8xtZO3I\ncLo8pVQAqUk4ZAKZxpgF9vNJWGGx2z5chP17jz19O5DotXyC3VZeu6qmhI7d6fvARHaP/IXlMefR\nZ88XNP5vKgtev4XdmRudLk8pFQCqHQ7GmF3ANhHpZDedA6wGpgDFZxyNBCbbj6cAI+yzlvoDB+3D\nT7OA80Ukxu6IPt9uUzUU374b/R6YQNZN81jWfAi9s74i5n/9WPDaSHZtS3e6PKWUHxPryE81FxY5\nGXgbCAc2ATdjBc6nQFtgC3CVMWa/iAjwOlZncy5wszEmzV7PLcAT9mpfMMa8V9G2U1NTTVpaWrVr\nr492blnH1ikvcMreqQD8FjuMtpc8Set2nSpYUikVLERksTEmtcL5ahIOTtJwqL5dWzewZfLzdkgY\nlja/kIRL/kybJA0JpYJdZcNBr5Cuh1q1TeHUe8eRfftCfosbzsn7ZhD33gAWvnId2zetcbo8pZQf\n0HCox1omdODUe97jwKg0Fre4jF77v6HluNNY9PI1ZKavdLo8pZSDNBwULeKT6X/32xy+YzFpLa+k\nR/a3tPrwDBa9dBXb0nWkV6XqIw0HdUxsm3b0Hz2WI3ctIa3V1XQ/8D1tPjyDtBevYOt6HZZDqfpE\nw0GVEtuqLf3veoucu5awqPV1dD34E/HjB5H24uVsWbvE6fKUUnVAw0GVK7ZVIv3vfIOjo5ewsM31\ndD34M4kTzmbxfy4lY42eKaZUMNNwUBVq3jKBAXeMIf+eZSyIH0HnQ7/SduK5LPn3JUHbJ3EwO4sN\nabOdLqN2GAObf4aiAqcrUX5Mw0FVWkxcawaMepXCe5exIOEmTjq8kIYfDWXj8uC6h8TeXdvIfm0w\nKVOvYMf0fzpdjm8ZA9MfhnHDYNbjTlej/JiGg6qyprGtGHD7yxwc+R35NKD5F1eSvmyu02X5xN5d\nW8kZO5QW7j3MpwdtFr6A+eUVp8vyDY8Hpj0Ei96G2E7W700/OF2V8lMaDqra4tt3wz1iKnlEEvfl\nlWxY+rPTJdXI3h1byBk7lDiZsqrPAAAZv0lEQVT3HjYPGcfmCz5ginsA8u1f4OcXnS6vZjwemPYg\npL0DA++HO36E5h1h8j2Qd8jp6pQf0nBQNRLfvguekVPJJYqWX13Nht9+crqkasnakcHR/w0hzp1F\nxtAP6DZgKFedmsxbzR5ltusM+O6v8NO/nS6zejwemHo/LH4fTn8Qzv0rhEXCpW/Boe3wzVNOV6j8\nkIaDqrE2yZ0xN03jiETTcvLVrF/yo9MlVcme7ZvJ+99Qmnn2s+XCD+na37oRoStEeOriHtyZM4r1\nLYbCnOfgx385XG0VeTzw9b2w5AM44yE452kQsaYl9oXT7oUl4yD9W2frVH5Hw0H5RJukTshNUzki\njWg9+WrWpc1xuqRK2Z25kYK3hxLjyWbbRR/R5dQLjpt+WsdYzu7ahst3jeBo1yvh++fhh384VG0V\nedww5R747SM48xE4+8+/B0OxQU9Y/Q+T74WjB5ypU/klDQflM63bdSLklukcCmlMm6+vY+0i//42\numtbOoXvXEgTzwEyh42nc7/zypzviQu7kOeGv8rd0Os6+OFv8P3/1XG1VeRxW/0JS8fDWY/B2U+W\nDgaAsAj4w5twZDfMerLu61R+S8NB+VSrxI6E3jqDgyFNSJh6A2sX+ue1Aru2bsD97oU08Rxkx8Uf\n07nvOeXOmxwbzcgBSXyyZAcrU1+Ak2+AH/8Oc16wTg31Nx43fDUaln0Mgx6HwRWcshrfB05/AJZ+\nBOv1PlvKouGgfK5lQgfCb5tJdkgMidNuYO2Cb5wu6Tg7Mtbhee9CGpnD7Bw+kU6pZ1e4zL3npNA0\nMoznpq/DXPIqnHIj/PRPmPO8fwWEuwi+vAOWT4TBT8KgxypeBuCsR6FFN5hyHxzNrt0aVUDQcFC1\nokV8MhG3z2B/SDPaTr+B1fNnOl0SYAWDvH8RDU0Ou4d/wkm9B1VquSaRYfzx/E4s2LyfWauz4OJX\nofdI+Pnf8N2z/hEQxcGw4jOrf+GsRyq/bGgDuPQNyN0LMx6tvRpVwNBwULUmrk0SkbfPZK8rlqQZ\nI1g1b7qj9ezYvJaQ9y8iilx2X/opKaecWaXlr+2byEktG/K36WvI9xgY9jL0uRl+eRG+fcbZgHAX\nwRe3w8pJ1hlJZz5c9XW0ORnOeBiWfwJrpvq+RhVQahwOIuISkd9EZKr9PFlEFohIuoh8IiLhdnsD\n+3m6PT3Jax2P2+3rROSCsrekAlFsm3ZEjZpJliuO5Fk3sWruNEfq2L5pFSHjLiKCo2T94TNSTj69\nyusIdYXw1EVd2bo/l/fnZkBICFz0IqTeCnNfhtl/diYg3IXw+a2w6gvrGoYz/lj9dZ3xELTqAVMf\ngJx9vqtRBRxf7DncD3jfW/IfwEvGmI5ANnCr3X4rkG23v2TPh4h0Ba4BugFDgDdExOWDupSfiG3V\nluhRM9njakH7b25i5S9T6nT7mekrCf3gYiLIY99ln9Gx18Bqr+vMk+I4u3MLXpuTTtbhfDsg/gN9\nb4d5r1kXlNVlQLgLYdItsPorOP95q2O5JkLDrYvjjh6AGX/yTY0qINUoHEQkAbgIeNt+LsDZwCR7\nlnHApfbj4fZz7Onn2PMPByYaY/KNMZuBdKBfTepS/ie2VSINR81gt6sVHWbfysqfJ9fJdrelryD8\no4sJp4B9l39Oh56n1XidT1zYhbxCNy/OXm81iMCF/4J+d8Cvr8OsJ+omIIoK4LObYM0UuOBv1gVt\nvtCqOwx6FFZ+Dqu+8s06VcCp6Z7Dy8AjgMd+3hw4YIwpsp9nAvH243hgG4A9/aA9/7H2MpY5joiM\nEpE0EUnLysqqYemqrsW2SqTRHTPY5WpDx29vZcVPX9bq9rZtWEaDjy4hjCKyr/icDj36+2S9HVs0\n5MYB7fhk0VbW7LTHJRKBof+AU++C+W/AzMdqNyCKCmDSzbB2Kgz5Owy427frH/ggtD4Zpv0Rjuj/\ntfqo2uEgIsOAPcaYxT6s54SMMWONManGmNS4uLi62qzyoeYtE2hy53R2uOI56bvbWf7D57WynS3r\nlhIxfjihFHHgqi9o3/1Un67//nNSaBQRxvPTVmOKQ0AEhvwf9L8bFrwFMx6pnYAoyofPRlrBMPSf\n0P8u32/DFQp/eAvyD1sB4Q9nY6k6VZM9h4HAJSKSAUzEOpz0CtBURELteRKA7fbj7UAigD29CbDP\nu72MZVQQatYinpi7ZpIZmkCn7+9g+feTKl6oCrasXUL0hOGE4OHQ1V+S3LWvT9cP0DQqnAfPTWFu\n+j6+XbPn9wkicMELMOAeWDjWGiLb4yl/RVVVlA+fjoB10+HCf8Opd/hu3SW16AKDn7AOW62snRBX\n/qva4WCMedwYk2CMScLqUJ5jjLke+B64wp5tJFB8cHmK/Rx7+hxjfeWaAlxjn82UDKQAC6tblwoM\nMXGtaX7XTDJDE+n8wx0sm/OpT9a7Zc1ioif+AYAjV39JUpdUn6y3LNf3b0eHuGhemLaagiKvABCx\nOodPu88aInu6jwKiMA8+uQHWz7Q6wfvdXvN1VmTAvRCfat0g6PDu2t+e8hu1cZ3Do8AfRSQdq0/h\nHbv9HaC53f5H4DEAY8wq4FNgNTATuNsY466FupSfaRrbitjRM9ka2o4uP97F0u8m1mh9GWvSaPiJ\nFQw5106mXZc+viizXGGuEJ4a1pWMfbl88GvG8RNF4LxnrSGy09617qVQk4AoDoYN38Cwl6DvbTUp\nvfJcoXDpm1B4FKY+qIeX6hExAfrHTk1NNWlpepP7YHBwfxZ7xgyhXdFmVp8xhpPPvbbK69i8ehFN\nPr0MNy6OXvcVbU86uRYqLdvIdxeyZGs2P/5pMM2iw4+faIw11PfP/4HeI2DYK9bpr1VRmAcTr4ON\n38HFr0Cfm3xWe6XNex2+eRL+MBZ6XV3321c+IyKLjTEV7lLrFdLKcU2axdHinllkhHWg689389s3\nH1Vp+U0rF9D008soIpS86yfXaTAAPHVRF3IL3LxUfGqrNxFrKIsz/2TdU+Hre6u2B1F4FCZcAxvn\nwCWvORMMYHV6J/a3rn04tNOZGlSd0nBQfqFJTCwt755BRlgHus+9jyWzPqzUchtXzCdm0uUUEkr+\nDVNITOlVy5WWltKyEdef2pbxC7awbtfh0jOIWIPgnfWodW+FKfdYI6dWpCDXCoZNP8Dw1609D6eE\nuKyxl4oK4Ov79PBSPaDhoPxGk5hYWt0zk01hKfSYdz9LZr5/wvk3Lp9H888vp4BwCm74msSOPeqm\n0DI8cO5JNGwQevyprd5ErDN/Bj1u3WNh8t0nDoiCXJhwNWz60fpQPuWG2iu+spp3gHOfsfo9lo53\nuhpVyzQclF9p3LQ5be6dwcawk+j564Msnv5emfOlL/uF2C+uII8IikZMJaFj9zqu9HjNosO5/9yT\n+HnDXn5Yd4KLxgY9Zu1FLJsAX91VdkAU5MDHV0HGL9a1BidfV3uFV1W/UdDudJj5OBzMdLoaVYs0\nHJTfadSkGQn3zWBDeGd6Lfgji6e9fdz0DUt/psWXV5FLFJ6R04hv39WhSo93Y/92tI+N5rlpqyl0\nn6Bf4axH4OynrNFPv7zDGlG1WP4RGH8VbJkLf/gv9Lqm9guvipAQ6xCXxw1T7tXDS0FMw0H5pYaN\nY0i8dzobwrtw8sKHSZs6FoD1S36k5VdXk0MU5qZptEnu7HClvwsPDeGJC7uwKSuHj+ZvOfHMZ/4J\nzvmLde+FL0dZAZF/BMZfCVvnwWX/g55X1U3hVdUsGc5/1uokXzKu4vlVQAqteBalnNGwcQxt75vO\nulcv4pRFj/Dr7nV02/YxR6QhctNU2rTr5HSJpZzTpQWnd4zl5W83cOnJ8cSUPLXV2xkPgYRY94Lw\nuK37OG9bCJe/Dd0vr7Oaq6XPLbB6inXf6Q5nQ9O2TlekfEyvc1B+L+fwATJeG0a3ghVsl5a4bp5G\nq7YpTpdVrrW7DnHhKz8zYkASz1zSreIF5r5q3QtCXHDFO9DtD7VfpC8c2ApvDID43nDj5Kpfv+Fr\nxsDaadY1Jfs21t12Q1zW3+z0B6FpYsXzO6yy1zloOKiAkHvkIMu//A/Jg0fSMqGD0+VU6MkvVzBx\n0TZmPXAGHVs0qniBlZ9DZDPoMLj2i/Olxe/D1/db4zzVxXAeZfF4YO3X8OO/YPcKaNYeUs4HpG62\nn7sPVtkjDJ9yg3WzJT/ek9JwUMpB+47kM+hfP5CaFMN7Nwfx7UmMgY8uh62/wl3zrP6IuuLxwJrJ\nVijsWQXNO1p9Od2vsIb9qEsHtsEvL8FvH4LxWGeYnfEQxCTVbR2VoFdIK+Wg5g0bcO85Hfl+XRY/\nrNtT8QKBSsS6cjskzL52w4cj0JbH47b2tN48zbrZkbvA6sC/e6F1dlddBwNYh5OGvQj3LbXuK75s\nIrzWx3pP9m+u+3p8QMNBqVoy8rQk2jWP4vlpayg60amtga5JvHUfiy1zrWHKa4vHDcs/s/o5Jt1i\nfUO//B24e4F1ZleIH9xduEk8XPRvuH+ZNTji8s+skPhqdN32g/iAhoNStaRBqIsnLuxC+p4jfLxw\nq9Pl1K6Tr4OUC6wzr3z9IegugmWfwJhT4YvbrDO8rngPRs+HHlf4RyiU1LiNdWfAB5Zb99xY+Tm8\n3he+vBP2pjtdXaVoOChVi87v2pIB7Zvz0uz1HMwtdLqc2iNijRgbGl7+ld9V5S6CpRNgTD/rWhBX\nOFw5zurb6H6Z82dHVUajVtZe1f3LrcELV30FY/rC57dDVhkDNfqRAHh3lQpcIsJTw7pw4Gghr87Z\n4HQ5tatxaxj6L9i2wLqPdnW5i+C38daH6Fd3QlgUXPUh3PkLdLs0MEKhpEYtrTsEPrDcut/32qlW\n6E26FbLWOV1dmQLwXVYqsHRr04SrUxMZNy+DTVlHnC6ndvW8CjoPg++eq/o3Y3chLPkQXu8Dk0dD\neEO4ejzc8RN0vSQwQ6Gkhi2suwTevxwG3gfrZliHyz67Gfascbq64wTBu62U/3vo/E5EhLn423T/\n+gDwORHrTnXh0da3fu9xo8pTVGBdL/Fab2s484imcO1EKxS6DAuOUCipYZx1p8AHVsDpD1gj3b4x\nAD4dCbtXOV0doOGgVJ2Ia9SAuwd35Ns1e/hlw16ny6ldDVtYZ+xsXwy/vlb+fEUF1i1UX+tjXUgX\nFQvXfQqjfoBOQ62gCXbRza1h0B9YYV08l/6ddYruJzfArhWOllbtcBCRRBH5XkRWi8gqEbnfbm8m\nIrNFZIP9O8ZuFxF5VUTSRWS5iPT2WtdIe/4NIjKy5i9LKf9z88AkEptF8tzU1cF9aitAt8ug63D4\n/m+lD5cU5cOit+HVU6z7UjdsAddPgtvnwEkX1I9QKCmqmTUQ4wPL4cxHrPt4vHU6TLwedi5zpKSa\n7DkUAQ8ZY7oC/YG7RaQr8BjwnTEmBfjOfg4wFEixf0YBb4IVJsDTwKlAP+Dp4kBRKphEhLl4fGgX\n1u0+zCdp25wup3aJwEUvQoPG1umb7kLrXtgL/2eFwrSHrNM9b/gcbvsWUs6rn6FQUlQzOPtJKyTO\negw2/wz/PRMmXAs7fqvTUqodDsaYncaYJfbjw8AaIB4YDhSP4zsOuNR+PBz4wFjmA01FpDVwATDb\nGLPfGJMNzAaGVLcupfzZ0O6t6JfUjP98s55DeUF8aitAdKx11fDOpdax9FdPhukPW+MO3fgV3PoN\ndDxXQ6EskTEw+HErJAY9YV1gOHYQfHy1dbiuDvikz0FEkoBTgAVAS2NM8R3IdwEt7cfxgPfXpUy7\nrbx2pYKOiPDnYV3Jzi3g9TmBcTFUjXQdbo11tG6aNSDeiClw8wxrgEENhYpFNoVBj1p9EoOfgq3z\n4e3z4NCOWt90jQchEZGGwOfAA8aYQ+L1BzfGGBHx2ch+IjIK65AUbdv676iHSp1Ij4QmXNE7gffm\nbua6fm1Jio12uqTadekb1nDWrZy9lWtAi2gCZ/3Juto642frkFwtq9Geg4iEYQXDeGPMF3bzbvtw\nEfbv4lHHtgPeg50n2G3ltZdijBlrjEk1xqTGxcXVpHSlHPWnCzoR5grh/2YE+amtAKENNBh8JaIx\ndL6oTjZVk7OVBHgHWGOMedFr0hSg+IyjkcBkr/YR9llL/YGD9uGnWcD5IhJjd0Sfb7cpFbRaNI5g\n9KAOzFq1m3kbg/zUVhWQarLnMBC4EThbRJbaPxcCfwfOE5ENwLn2c4DpwCYgHfgfMBrAGLMfeA5Y\nZP88a7cpFdRuO6M98U0jeW7qGtyewLyvigpeerMfpRz09bId3DvhN/5+WQ+u6af9aKr26c1+lAoA\nw3q2pk+7GP79zXoOB/uprSqgOHDLJKVUMRHhL8O6MnzMXC5/cx7xTSOJCg8lKtxFdIPjf1s/oUQ3\nsH+HhxLVwKs93EWoq/a+73k8hvwiD0cL3eQVujla6OZowfGPi6flFXqOm17g9hAaIoS6Qgizf4e6\nhLAQ67d3e5hLCC1uP8Ey3vOFuUJ+n9clRIa5ED1VtkY0HJRyWK/Epvx5WFe+WbWLvUcKyC3IJbfA\nTU5+ETkF7ir1R4SHhhBth0VUuIuoBqHHnheHSlS4i8gwF4UeD3n2B/rRQs9xH/THfh+bbn3gV0dE\nWAhhISEUeQxFHg+F7to/lN22WRTX9Evkyj6JxDVqUOvbC0ba56CUHzPGUOD2kJvvJrfQTa4dGMd+\nFxQdC5LcAjc5BUXk5v/++7hlCorIybd+Hy10E+YKITLMCorIcBcRYS4iw0KItMMjIqy4zXv67/OU\nNS3Cfl683gahIYSESKnX5PYYijyGQreHIreh0GP99n5c6PZYgeK2AqWoRHvxssWBU2S35xd5+Gl9\nFgs27yc0RDi/W0uu7deWgR1iS9VSH1W2z0H3HJTyYyJCg1AXDUJd+HLAMWOMY4ddRMQ+lGSNN1Ub\n7h7ckfQ9R5i4cCufL8lk+opdx/YmruiTQItGEbWy3WCiew5KqaCWV+hm1qpdfLxg67G9ifO6tuS6\nU+vn3kRl9xw0HJRS9cbGLGtvYtLiTLJzC0lsFsk1fdtyZWr92ZvQcFBKqXLkF7mZuXIXExZuZf6m\n3/cmru3XltM7BvfehIaDUkpVwsasI3yyaBuTFmeyP6cg6PcmNByUUqoK8ovczFq1mwkLtvLrpn2E\nhgjndrH6JoJpb0LPVlJKqSpoEOrikl5tuKRXGzZlHWGivTcxc9WuoN+bKIvuOSilVDnyi9x8s2o3\nH5fYm7j21LacEaB7E7rnoJRSNdQg1MXFvdpwsb038cmibXxm700kxERybb+2XNkngRaNg29vQvcc\nlFKqCor3JiYs3Mq8jfsACHeFgECIgCCIQIgIAna71Sb8/phj8x2/DPD78l7LYD8WEabddzoNQqt3\nAaHuOSilVC3w3pvYvDeHact3cCTfjcFgjHX1uTHgMRxrA/DY7QZjTTMABo/n9/mMPR9ej0u3m2Mh\nUps0HJRSqpqSY6O55+wUp8uoFXo/B6WUUqVoOCillCpFw0EppVQpfhMOIjJERNaJSLqIPOZ0PUop\nVZ/5RTiIiAsYAwwFugLXikhXZ6tSSqn6yy/CAegHpBtjNhljCoCJwHCHa1JKqXrLX8IhHtjm9TzT\nbjuOiIwSkTQRScvKyqqz4pRSqr7xl3CoFGPMWGNMqjEmNS4uzulylFIqaPnLRXDbgUSv5wl2W7kW\nL168V0S2VHN7scDeai7r74L5tUFwvz59bYErkF5fu8rM5BdjK4lIKLAeOAcrFBYB1xljVtXS9tIq\nM7ZIIArm1wbB/fr0tQWuYHx9frHnYIwpEpF7gFmAC3i3toJBKaVUxfwiHACMMdOB6U7XoZRSKsA6\npH1orNMF1KJgfm0Q3K9PX1vgCrrX5xd9DkoppfxLfd1zUEopdQIaDkoppUqpV+EQzIP7iUiiiHwv\nIqtFZJWI3O90Tb4mIi4R+U1Epjpdiy+JSFMRmSQia0VkjYgMcLomXxKRB+1/kytFZIKIBOwNl0Xk\nXRHZIyIrvdqaichsEdlg/45xskZfqTfhUA8G9ysCHjLGdAX6A3cH2esDuB9Y43QRteAVYKYxpjPQ\niyB6jSISD9wHpBpjumOdqn6Ns1XVyPvAkBJtjwHfGWNSgO/s5wGv3oQDQT64nzFmpzFmif34MNYH\nTKnxqQKViCQAFwFvO12LL4lIE+BM4B0AY0yBMeaAs1X5XCgQaV/sGgXscLieajPG/ATsL9E8HBhn\nPx4HXFqnRdWS+hQOlRrcLxiISBJwCrDA2Up86mXgEcDjdCE+lgxkAe/Zh8zeFpFop4vyFWPMduDf\nwFZgJ3DQGPONs1X5XEtjzE778S6gpZPF+Ep9Cod6QUQaAp8DDxhjDjldjy+IyDBgjzFmsdO11IJQ\noDfwpjHmFCCHIDksAWAffx+OFYJtgGgRucHZqmqPsa4NCIrrA+pTOFR5cL9AIyJhWMEw3hjzhdP1\n+NBA4BIRycA6HHi2iHzkbEk+kwlkGmOK9/ImYYVFsDgX2GyMyTLGFAJfAKc5XJOv7RaR1gD27z0O\n1+MT9SkcFgEpIpIsIuFYnWJTHK7JZ0REsI5brzHGvOh0Pb5kjHncGJNgjEnC+rvNMcYExbdPY8wu\nYJuIdLKbzgFWO1iSr20F+otIlP1v9ByCqMPdNgUYaT8eCUx2sBaf8ZuxlWpbPRjcbyBwI7BCRJba\nbU/YY1Yp/3YvMN7+0rIJuNnhenzGGLNARCYBS7DOqPuNAB5qQkQmAIOAWBHJBJ4G/g58KiK3AluA\nq5yr0Hd0+AyllFKl1KfDSkoppSpJw0EppVQpGg5KKaVK0XBQSilVioaDUkqpUjQclFJKlaLhoJRS\nqpT/B0c6skutNmI0AAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "9b6pJy1qwUWb"
      },
      "source": [
        "As we can see it quite accurately showed sales change overall trend. Not bad result for a comparably simple model."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "U1-fysX1701X"
      },
      "source": [
        "## Display predictions in Google Data Studio\n",
        "\n",
        "Now, when we have our predicted data, we can display it in Google Data Studio (https://datastudio.google.com/), a Google's Business Intelligence solution. One of the advantages of this tool is that it can be used for free to make custom reports and dashboards.\n",
        "\n",
        "Google Data Studio can connect multiple data sources for reporting. Google Sheets as data source is suitable for our purposes. We will save our predictions as a Google Sheet, and Google Data Studio will display the data from it on the dashbord. Thus, we can easily integrate Google Collaboratory and Data Studio.\n",
        "\n",
        "I will not explain in detail Google Data Studio functionality. You can learn about it in the official documentation https://developers.google.com/datastudio/\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "U3Cof3hVAsKx"
      },
      "source": [
        "We will take three random products, save predictions and outcome history for each.\n",
        "To save our data to Google Spreadsheet we will use **gspread** library.\n",
        "\n",
        "Wee will need a client key to write on a Google Spreadsheet. How to get the key is described here https://gspread.readthedocs.io/en/latest/oauth2.html.\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ru-fkDuCyCIv",
        "outputId": "16f396ac-db43-4be3-84c0-9e1e40e949c4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 350
        }
      },
      "source": [
        "!pip install --upgrade oauth2client gspread"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Requirement already up-to-date: oauth2client in /usr/local/lib/python3.6/dist-packages (4.1.3)\n",
            "Collecting gspread\n",
            "  Downloading https://files.pythonhosted.org/packages/43/f8/45bd4a1419fd65ecc02eeaceb92f9dc72aca20c32e766a18d495c68006db/gspread-3.1.0-py3-none-any.whl\n",
            "Requirement already satisfied, skipping upgrade: rsa>=3.1.4 in /usr/local/lib/python3.6/dist-packages (from oauth2client) (4.0)\n",
            "Requirement already satisfied, skipping upgrade: pyasn1>=0.1.7 in /usr/local/lib/python3.6/dist-packages (from oauth2client) (0.4.5)\n",
            "Requirement already satisfied, skipping upgrade: six>=1.6.1 in /usr/local/lib/python3.6/dist-packages (from oauth2client) (1.12.0)\n",
            "Requirement already satisfied, skipping upgrade: httplib2>=0.9.1 in /usr/local/lib/python3.6/dist-packages (from oauth2client) (0.11.3)\n",
            "Requirement already satisfied, skipping upgrade: pyasn1-modules>=0.0.5 in /usr/local/lib/python3.6/dist-packages (from oauth2client) (0.2.5)\n",
            "Requirement already satisfied, skipping upgrade: requests>=2.2.1 in /usr/local/lib/python3.6/dist-packages (from gspread) (2.21.0)\n",
            "Requirement already satisfied, skipping upgrade: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests>=2.2.1->gspread) (2019.3.9)\n",
            "Requirement already satisfied, skipping upgrade: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests>=2.2.1->gspread) (2.8)\n",
            "Requirement already satisfied, skipping upgrade: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests>=2.2.1->gspread) (3.0.4)\n",
            "Requirement already satisfied, skipping upgrade: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests>=2.2.1->gspread) (1.24.3)\n",
            "Installing collected packages: gspread\n",
            "  Found existing installation: gspread 3.0.1\n",
            "    Uninstalling gspread-3.0.1:\n",
            "      Successfully uninstalled gspread-3.0.1\n",
            "Successfully installed gspread-3.1.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2bER3G7T2leC"
      },
      "source": [
        "# Connect to Google Sheets\n",
        "\n",
        "import gspread\n",
        "from oauth2client.service_account import ServiceAccountCredentials\n",
        "\n",
        "scope = ['https://spreadsheets.google.com/feeds',\n",
        "         'https://www.googleapis.com/auth/drive']\n",
        "\n",
        "credentials = ServiceAccountCredentials.from_json_keyfile_name('spreadkey.json', scope)\n",
        "\n",
        "gc = gspread.authorize(credentials)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zIYyQmkMM3DV"
      },
      "source": [
        "Make lists with real and predicted outcome history for three random products.\n",
        "For testing purposes we are using data from test dataset, but in real scenario you can insert any changes of product features in Google Sheets, load data from Google Sheets and make a prediction."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "h2m2W3hBmWTk"
      },
      "source": [
        "real_data = []\n",
        "predicted_data = []\n",
        "\n",
        "for i in range(3):\n",
        "  n = random.choice(range(len(x_test)-1))\n",
        "  m = 6\n",
        "  future = 6\n",
        "  features = x_test[n].tolist()\n",
        "  history = y_test[n, 0:m].tolist()\n",
        "\n",
        "  prediction = predictor(features, history, future)\n",
        "\n",
        "  predicted_data.append(y_scaler.inverse_transform([prediction])[0])\n",
        "  real_data.append(y_scaler.inverse_transform([y_test[n, :m+future]])[0])"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0pLRhcVwnQ12"
      },
      "source": [
        "# Open Google Sheet for saving real and predicted data.\n",
        "# We have two worksheets in it: \"real\" for real data, \"predicted\" for predicted data.\n",
        "\n",
        "ws = gc.open('TrainingDataset2')\n",
        "\n",
        "ws_predicted = ws.worksheet(\"predicted\")\n",
        "ws_real = ws.worksheet(\"real\")"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "WXt4bzzkpEAe",
        "outputId": "ead94ec2-7ff1-43c8-8e6f-29f69a4b7755",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 69
        }
      },
      "source": [
        "predicted_data[0]"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([31000.        ,  3000.        ,  2000.        ,  2000.        ,\n",
              "         500.        ,  2000.        ,  1038.33638504,   938.46688047,\n",
              "         932.24851787,   851.54785961,   340.53198993,   315.30641019])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 217
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6ylxrNQNtr7A"
      },
      "source": [
        "# Write our real and predicted data to Google Sheets.\n",
        "# We will write starting from  the second row, reserving first row for column names(Product1, Product2, Product3)\n",
        "\n",
        "for j in range(len(real_data)):\n",
        "  for i in range(len(real_data[0])):\n",
        "    ws_predicted.update_cell(i+2, j+1, float(predicted_data[j][i]))\n",
        "    ws_real.update_cell(i+2, j+1, float(real_data[j][i]))\n",
        "\n",
        "\n",
        "for i in range(len(real_data[0])):\n",
        "    # add index column\n",
        "    ws_predicted.update_cell(i+2, len(real_data)+1, i)\n",
        "    ws_real.update_cell(i+2, len(real_data)+1, i)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GS0FLiOB4GCa",
        "outputId": "2315ccce-9dc6-483e-a790-b7a31c235a47",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 104
        }
      },
      "source": [
        "# Review our data at Google Sheets\n",
        "\n",
        "ws_real.get_all_records()[6:11]"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[{'Index': 6, 'Product1': 2000, 'Product2': 500, 'Product3': 500},\n",
              " {'Index': 7, 'Product1': 500, 'Product2': 2000, 'Product3': 500},\n",
              " {'Index': 8, 'Product1': 500, 'Product2': 500, 'Product3': 500},\n",
              " {'Index': 9, 'Product1': 2000, 'Product2': 500, 'Product3': 500},\n",
              " {'Index': 10, 'Product1': 500, 'Product2': 500, 'Product3': 500}]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 221
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "BFXJuuOqzZ8Q",
        "outputId": "6164f0b3-fda3-4697-a8fd-2ef93eb866a9",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 364
        }
      },
      "source": [
        "ws_predicted.get_all_records()[6:11]"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[{'Index': 6,\n",
              "  'Product1': 1038.336385,\n",
              "  'Product2': 1005.46407,\n",
              "  'Product3': 891.3028389},\n",
              " {'Index': 7,\n",
              "  'Product1': 938.4668805,\n",
              "  'Product2': 888.1527856,\n",
              "  'Product3': 820.0542592},\n",
              " {'Index': 8,\n",
              "  'Product1': 932.2485179,\n",
              "  'Product2': 894.7545588,\n",
              "  'Product3': 856.9586575},\n",
              " {'Index': 9,\n",
              "  'Product1': 851.5478596,\n",
              "  'Product2': 850.0576839,\n",
              "  'Product3': 836.7278427},\n",
              " {'Index': 10,\n",
              "  'Product1': 340.5319899,\n",
              "  'Product2': 359.6523404,\n",
              "  'Product3': 360.9260917}]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 222
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "eMGuqLdZ3Bib"
      },
      "source": [
        "As we have Google Sheets filled with real and predicted outcome, now we can connect Google Sheets as a datasource  in Google Data Studio.\n",
        "\n",
        "In Google Data Studio, create new dashboard and create a Data Source for it. You will find a Google Sheets in sources list. Add your Google Sheet as a data source.\n",
        "\n",
        "Based on data from \"predicted\" and \"real\" worksheets we can make diagrams showing outcome change.\n",
        "\n",
        "That's it! Now you have AI Powered Dashboard, showing predictions about future outcome!"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ypU2KjJJC6-p"
      },
      "source": [
        "![Dashboard](https://drive.google.com/uc?export=view&id=1Od_8XH0WoEyRvBGxeuBFGt3LoPZG1LKA)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LDJ45ODxRy9k"
      },
      "source": [],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "8FbSk7CCz6kZ"
      },
      "source": [
        "## Conclusion\n",
        "\n",
        "The main idea of this article is that Business Intelligence with even some AI features is more accessible than we can think. You can create advanced analytics, embed proposed graphs into your analytics reports and have an idea of both the current situation and the near future. All changes, that you want to check can be quickly inserted in Google Sheets, predicted consequences will be calculated in Google Colab and shown in Google Data Studio.\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-ilY8G5i87Op"
      },
      "source": [],
      "execution_count": null,
      "outputs": []
    }
  ]
}