{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data analysis: Velib"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Authors: J. Guérin (ANITI), O. Roustant (INSA Toulouse) and Amine Aziz Alaoui (IRT St-Exupéry). February 2022.  \n",
    "<br/>\n",
    "<div style=\"text-align: justify\">    \n",
    "We consider the ‘Vélib’ data set, related to the bike sharing system of Paris. The data are loading profiles of the bike stations over one week, collected every hour, from the period Monday 2nd Sept. - Sunday 7th Sept., 2014. The loading profile of a station, or simply loading, is defined as the ratio of number of available bikes divided by the number of bike docks. A loading of 1 means that the station is fully loaded, i.e. all bikes are available. A loading of 0 means that the station is empty, all bikes have been rent.\n",
    "</div>\n",
    "<br/>\n",
    "<div style=\"text-align: justify\">  \n",
    "From the viewpoint of data analysis, the individuals are the stations. The variables are the 168 time steps (hours in the week). The aim is to detect clusters in the data, corresponding to common customer usages. This clustering should then be used to predict the loading profile.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Preliminary: Load and visualize data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Lun-00</th>\n",
       "      <th>Lun-01</th>\n",
       "      <th>Lun-02</th>\n",
       "      <th>Lun-03</th>\n",
       "      <th>Lun-04</th>\n",
       "      <th>Lun-05</th>\n",
       "      <th>Lun-06</th>\n",
       "      <th>Lun-07</th>\n",
       "      <th>Lun-08</th>\n",
       "      <th>Lun-09</th>\n",
       "      <th>...</th>\n",
       "      <th>Dim-14</th>\n",
       "      <th>Dim-15</th>\n",
       "      <th>Dim-16</th>\n",
       "      <th>Dim-17</th>\n",
       "      <th>Dim-18</th>\n",
       "      <th>Dim-19</th>\n",
       "      <th>Dim-20</th>\n",
       "      <th>Dim-21</th>\n",
       "      <th>Dim-22</th>\n",
       "      <th>Dim-23</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.038462</td>\n",
       "      <td>0.038462</td>\n",
       "      <td>0.076923</td>\n",
       "      <td>0.038462</td>\n",
       "      <td>0.038462</td>\n",
       "      <td>0.038462</td>\n",
       "      <td>0.038462</td>\n",
       "      <td>0.038462</td>\n",
       "      <td>0.107143</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.296296</td>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.148148</td>\n",
       "      <td>0.307692</td>\n",
       "      <td>0.076923</td>\n",
       "      <td>0.115385</td>\n",
       "      <td>0.076923</td>\n",
       "      <td>0.153846</td>\n",
       "      <td>0.153846</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.478261</td>\n",
       "      <td>0.478261</td>\n",
       "      <td>0.478261</td>\n",
       "      <td>0.434783</td>\n",
       "      <td>0.434783</td>\n",
       "      <td>0.434783</td>\n",
       "      <td>0.434783</td>\n",
       "      <td>0.434783</td>\n",
       "      <td>0.260870</td>\n",
       "      <td>0.043478</td>\n",
       "      <td>...</td>\n",
       "      <td>0.043478</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.217391</td>\n",
       "      <td>0.130435</td>\n",
       "      <td>0.045455</td>\n",
       "      <td>0.173913</td>\n",
       "      <td>0.173913</td>\n",
       "      <td>0.173913</td>\n",
       "      <td>0.260870</td>\n",
       "      <td>0.391304</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.218182</td>\n",
       "      <td>0.145455</td>\n",
       "      <td>0.127273</td>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.054545</td>\n",
       "      <td>0.109091</td>\n",
       "      <td>...</td>\n",
       "      <td>0.259259</td>\n",
       "      <td>0.259259</td>\n",
       "      <td>0.203704</td>\n",
       "      <td>0.129630</td>\n",
       "      <td>0.148148</td>\n",
       "      <td>0.296296</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.370370</td>\n",
       "      <td>0.370370</td>\n",
       "      <td>0.407407</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.952381</td>\n",
       "      <td>0.952381</td>\n",
       "      <td>0.952381</td>\n",
       "      <td>0.952381</td>\n",
       "      <td>0.952381</td>\n",
       "      <td>0.952381</td>\n",
       "      <td>0.952381</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.904762</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.761905</td>\n",
       "      <td>0.761905</td>\n",
       "      <td>0.761905</td>\n",
       "      <td>0.761905</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.927536</td>\n",
       "      <td>0.811594</td>\n",
       "      <td>0.739130</td>\n",
       "      <td>0.724638</td>\n",
       "      <td>0.724638</td>\n",
       "      <td>0.724638</td>\n",
       "      <td>0.724638</td>\n",
       "      <td>0.724638</td>\n",
       "      <td>0.753623</td>\n",
       "      <td>0.971014</td>\n",
       "      <td>...</td>\n",
       "      <td>0.227273</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.590909</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.818182</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.712121</td>\n",
       "      <td>0.621212</td>\n",
       "      <td>0.575758</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 168 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Lun-00    Lun-01    Lun-02    Lun-03    Lun-04    Lun-05    Lun-06  \\\n",
       "1  0.038462  0.038462  0.076923  0.038462  0.038462  0.038462  0.038462   \n",
       "2  0.478261  0.478261  0.478261  0.434783  0.434783  0.434783  0.434783   \n",
       "3  0.218182  0.145455  0.127273  0.109091  0.109091  0.109091  0.090909   \n",
       "4  0.952381  0.952381  0.952381  0.952381  0.952381  0.952381  0.952381   \n",
       "5  0.927536  0.811594  0.739130  0.724638  0.724638  0.724638  0.724638   \n",
       "\n",
       "     Lun-07    Lun-08    Lun-09  ...    Dim-14    Dim-15    Dim-16    Dim-17  \\\n",
       "1  0.038462  0.107143  0.000000  ...  0.296296  0.111111  0.111111  0.148148   \n",
       "2  0.434783  0.260870  0.043478  ...  0.043478  0.000000  0.217391  0.130435   \n",
       "3  0.090909  0.054545  0.109091  ...  0.259259  0.259259  0.203704  0.129630   \n",
       "4  1.000000  1.000000  1.000000  ...  1.000000  1.000000  0.904762  0.857143   \n",
       "5  0.724638  0.753623  0.971014  ...  0.227273  0.454545  0.590909  0.833333   \n",
       "\n",
       "     Dim-18    Dim-19    Dim-20    Dim-21    Dim-22    Dim-23  \n",
       "1  0.307692  0.076923  0.115385  0.076923  0.153846  0.153846  \n",
       "2  0.045455  0.173913  0.173913  0.173913  0.260870  0.391304  \n",
       "3  0.148148  0.296296  0.314815  0.370370  0.370370  0.407407  \n",
       "4  0.857143  0.857143  0.761905  0.761905  0.761905  0.761905  \n",
       "5  1.000000  0.818182  0.636364  0.712121  0.621212  0.575758  \n",
       "\n",
       "[5 rows x 168 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%config Completer.use_jedi = False # To make sure that autocompletion will work \n",
    "\n",
    "import pandas as pd\n",
    "\n",
    "path    = ''  # If data already in current directory\n",
    "loading = pd.read_csv(path + 'velibLoading.csv', sep = \" \")\n",
    "\n",
    "loading.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>bonus</th>\n",
       "      <th>names</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.377389</td>\n",
       "      <td>48.886300</td>\n",
       "      <td>0</td>\n",
       "      <td>EURYALE DEHAYNIN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.317591</td>\n",
       "      <td>48.890020</td>\n",
       "      <td>0</td>\n",
       "      <td>LEMERCIER</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2.330447</td>\n",
       "      <td>48.850297</td>\n",
       "      <td>0</td>\n",
       "      <td>MEZIERES RENNES</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.271396</td>\n",
       "      <td>48.833734</td>\n",
       "      <td>0</td>\n",
       "      <td>FARMAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2.366897</td>\n",
       "      <td>48.845887</td>\n",
       "      <td>0</td>\n",
       "      <td>QUAI DE LA RAPEE</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   longitude   latitude  bonus              names\n",
       "1   2.377389  48.886300      0   EURYALE DEHAYNIN\n",
       "2   2.317591  48.890020      0          LEMERCIER\n",
       "3   2.330447  48.850297      0    MEZIERES RENNES\n",
       "4   2.271396  48.833734      0             FARMAN\n",
       "5   2.366897  48.845887      0   QUAI DE LA RAPEE"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "velibAdds = pd.read_csv(path + 'velibAdds.csv', sep = \" \")\n",
    "\n",
    "velibAdds.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Preliminary: plot the loading of the first station"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 89248 characters]\n",
      "text/plain": [
       "<Figure size 1440x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "sns.set_style(\"darkgrid\")\n",
    "\n",
    "i = 0\n",
    "\n",
    "loading_data = loading.to_numpy()\n",
    "\n",
    "n_steps = loading.shape[1]\n",
    "time    = np.linspace(1, n_steps, n_steps)\n",
    "\n",
    "plt.figure(figsize = (20, 6))\n",
    "\n",
    "plt.plot(time, loading_data[i, :], linewidth = 2, color = 'blue')\n",
    "plt.vlines(x = np.linspace(1, n_steps, 8), ymin = 0, ymax = 1, \n",
    "           colors = \"orange\", linestyle = \"dotted\", linewidth = 3)\n",
    "\n",
    "plt.xlabel('Time', fontsize = 20)\n",
    "plt.ylabel('Loading', fontsize = 20)\n",
    "plt.title(velibAdds.names[1 + i], fontsize = 25)\n",
    "plt.xticks(fontsize = 15)\n",
    "plt.yticks(fontsize = 15)\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Descriptive statistics.\n",
    "\n",
    "Some ideas : \n",
    "\n",
    "1. Draw a matrix of plots of size 4*4, corresponding to the first 16 stations. (Do not forget the vertical lines corresponding to days).\n",
    "2. Draw the boxplot of the variables, sorted in time order. \n",
    "What can you say about the distribution of the variables? \n",
    "Position, dispersion, symmetry? Can you see a difference between days?\n",
    "3. Plot the average hourly loading for each day (on a single graph).\n",
    "Comments? \n",
    "4. Plot the stations coordinates on a 2D map (latitude versus longitude). Use the package ggmap (function 'qmplot') to visualize the average loading for a given hour (6h, 12h, 23h) as a color scale.\n",
    "Comments ?\n",
    "5. Use a different color for stations which are located on a hill. (Use the basis 'plot' function, and the function 'qmplot' of R package ggmap).\n",
    "6. Redo questions 1-3 for the subset of stations which are located on a hill. Same questions for those who are not. Comment?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 1 \n",
    "Draw a matrix of plots of size 4*4 corresponding to the first 16 stations. (_Do not forget the vertical lines corresponding to days_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 305144 characters]\n",
      "text/plain": [
       "<Figure size 1080x864 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(4, 4, figsize = (15,12))\n",
    "for i in range(4):\n",
    "    for j in range(4):\n",
    "        k_station = 4 * i + j\n",
    "        axs[i, j].plot(time, loading_data[k_station, :], linewidth = 1, color = 'blue')\n",
    "        axs[i, j].set_title(velibAdds.names[1 + k_station], fontsize = 12)\n",
    "        axs[i, j].vlines(x = np.linspace(1, n_steps, 8), ymin = 0, ymax = 1, \n",
    "                         colors = \"orange\", linestyle = \"dotted\", linewidth = 3)\n",
    "\n",
    "for ax in axs.flat:\n",
    "    ax.set_xlabel('Time', fontsize = 12)\n",
    "    ax.set_ylabel('Loading', fontsize = 12)\n",
    "    ax.tick_params(axis='x', labelsize=10)\n",
    "    ax.tick_params(axis='y', labelsize=10)\n",
    "    \n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 2 \n",
    "Draw the boxplot of the variables, sorted in time order. What can you say about the distribution of the variables? Position, dispersion, symmetry?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 41104 characters]\n",
      "text/plain": [
       "<Figure size 1440x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (20,6))\n",
    "\n",
    "bp = plt.boxplot(loading_data, widths = 0.75, patch_artist = True)\n",
    "\n",
    "for median in bp['medians']:\n",
    "    median.set(linewidth=5)\n",
    "    \n",
    "plt.vlines(x = np.linspace(1, n_steps, 8), ymin = 0, ymax = 1, \n",
    "           colors = \"blue\", linestyle = \"dotted\", linewidth = 5)\n",
    "\n",
    "plt.xlabel('Time', fontsize = 20)\n",
    "plt.ylabel('Loading', fontsize = 20)\n",
    "plt.title(\"Boxplots\", fontsize = 25)\n",
    "plt.xticks(ticks = np.arange(0, 168, 5), labels=np.arange(0, 168, 5), fontsize = 15)\n",
    "plt.yticks(fontsize = 15)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Questions 3\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the average hourly loading for each day (on a single graph). Comments? "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 161240 characters]\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "hours = np.linspace(start = 1, stop = int(loading.shape[1]/7), \n",
    "                    num = int(loading.shape[1]/7))\n",
    "\n",
    "mean_per_hour = loading_data.mean(axis = 0)\n",
    "mean_per_hour_per_day = mean_per_hour.reshape((7, 24))\n",
    "\n",
    "days = [\"Monday\", \"Tuesday\", \"Wednesday\",\"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"]\n",
    "plt.figure(figsize = (15,10))\n",
    "plt.xlabel('Hourly loading, averaged over all stations', fontsize = 20)\n",
    "plt.ylabel('Loading', fontsize = 20)\n",
    "\n",
    "for i in range(0, 7):\n",
    "    plt.plot(hours, mean_per_hour_per_day[i,:], label = days[i])\n",
    "    plt.legend()\n",
    "    \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Questions 4"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " Plot the stations coordinates on a 2D map (latitude versus longitude). Use the package ggmap (function 'qmplot') to visualize the average loading for a given hour (6h, 12h, 23h) as a color scale."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.cm as cm\n",
    "import matplotlib.patches as mpatches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 226572 characters]\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize = (10, 10))\n",
    "\n",
    "#Choix de l'heure à afficher\n",
    "hour = 6\n",
    "\n",
    "scatter = ax.scatter(velibAdds['latitude'], velibAdds['longitude'], c = loading_data[:,hour], cmap = cm.Accent)\n",
    "\n",
    "legend1 = ax.legend(*scatter.legend_elements(num=5),\n",
    "                    loc=\"upper left\", title=\"Load\")\n",
    "ax.add_artist(legend1)\n",
    "\n",
    "ax.set_title(\"Stations coordinates\", fontsize = 12)\n",
    "ax.set_xlabel('Latitude', fontsize = 12)\n",
    "ax.set_ylabel('Longitude', fontsize = 12)\n",
    "ax.tick_params(axis='x', labelsize=10)\n",
    "ax.tick_params(axis='y', labelsize=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "    <div class=\"bk-root\">\n",
       "        <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
       "        <span id=\"1001\">Loading BokehJS ...</span>\n",
       "    </div>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "\n",
       "(function(root) {\n",
       "  function now() {\n",
       "    return new Date();\n",
       "  }\n",
       "\n",
       "  var force = true;\n",
       "\n",
       "  if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
       "    root._bokeh_onload_callbacks = [];\n",
       "    root._bokeh_is_loading = undefined;\n",
       "  }\n",
       "\n",
       "  var JS_MIME_TYPE = 'application/javascript';\n",
       "  var HTML_MIME_TYPE = 'text/html';\n",
       "  var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
       "  var CLASS_NAME = 'output_bokeh rendered_html';\n",
       "\n",
       "  /**\n",
       "   * Render data to the DOM node\n",
       "   */\n",
       "  function render(props, node) {\n",
       "    var script = document.createElement(\"script\");\n",
       "    node.appendChild(script);\n",
       "  }\n",
       "\n",
       "  /**\n",
       "   * Handle when an output is cleared or removed\n",
       "   */\n",
       "  function handleClearOutput(event, handle) {\n",
       "    var cell = handle.cell;\n",
       "\n",
       "    var id = cell.output_area._bokeh_element_id;\n",
       "    var server_id = cell.output_area._bokeh_server_id;\n",
       "    // Clean up Bokeh references\n",
       "    if (id != null && id in Bokeh.index) {\n",
       "      Bokeh.index[id].model.document.clear();\n",
       "      delete Bokeh.index[id];\n",
       "    }\n",
       "\n",
       "    if (server_id !== undefined) {\n",
       "      // Clean up Bokeh references\n",
       "      var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
       "      cell.notebook.kernel.execute(cmd, {\n",
       "        iopub: {\n",
       "          output: function(msg) {\n",
       "            var id = msg.content.text.trim();\n",
       "            if (id in Bokeh.index) {\n",
       "              Bokeh.index[id].model.document.clear();\n",
       "              delete Bokeh.index[id];\n",
       "            }\n",
       "          }\n",
       "        }\n",
       "      });\n",
       "      // Destroy server and session\n",
       "      var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
       "      cell.notebook.kernel.execute(cmd);\n",
       "    }\n",
       "  }\n",
       "\n",
       "  /**\n",
       "   * Handle when a new output is added\n",
       "   */\n",
       "  function handleAddOutput(event, handle) {\n",
       "    var output_area = handle.output_area;\n",
       "    var output = handle.output;\n",
       "\n",
       "    // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
       "    if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n",
       "      return\n",
       "    }\n",
       "\n",
       "    var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
       "\n",
       "    if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
       "      toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
       "      // store reference to embed id on output_area\n",
       "      output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
       "    }\n",
       "    if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
       "      var bk_div = document.createElement(\"div\");\n",
       "      bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
       "      var script_attrs = bk_div.children[0].attributes;\n",
       "      for (var i = 0; i < script_attrs.length; i++) {\n",
       "        toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
       "      }\n",
       "      // store reference to server id on output_area\n",
       "      output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
       "    }\n",
       "  }\n",
       "\n",
       "  function register_renderer(events, OutputArea) {\n",
       "\n",
       "    function append_mime(data, metadata, element) {\n",
       "      // create a DOM node to render to\n",
       "      var toinsert = this.create_output_subarea(\n",
       "        metadata,\n",
       "        CLASS_NAME,\n",
       "        EXEC_MIME_TYPE\n",
       "      );\n",
       "      this.keyboard_manager.register_events(toinsert);\n",
       "      // Render to node\n",
       "      var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
       "      render(props, toinsert[toinsert.length - 1]);\n",
       "      element.append(toinsert);\n",
       "      return toinsert\n",
       "    }\n",
       "\n",
       "    /* Handle when an output is cleared or removed */\n",
       "    events.on('clear_output.CodeCell', handleClearOutput);\n",
       "    events.on('delete.Cell', handleClearOutput);\n",
       "\n",
       "    /* Handle when a new output is added */\n",
       "    events.on('output_added.OutputArea', handleAddOutput);\n",
       "\n",
       "    /**\n",
       "     * Register the mime type and append_mime function with output_area\n",
       "     */\n",
       "    OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
       "      /* Is output safe? */\n",
       "      safe: true,\n",
       "      /* Index of renderer in `output_area.display_order` */\n",
       "      index: 0\n",
       "    });\n",
       "  }\n",
       "\n",
       "  // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
       "  if (root.Jupyter !== undefined) {\n",
       "    var events = require('base/js/events');\n",
       "    var OutputArea = require('notebook/js/outputarea').OutputArea;\n",
       "\n",
       "    if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
       "      register_renderer(events, OutputArea);\n",
       "    }\n",
       "  }\n",
       "\n",
       "  \n",
       "  if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
       "    root._bokeh_timeout = Date.now() + 5000;\n",
       "    root._bokeh_failed_load = false;\n",
       "  }\n",
       "\n",
       "  var NB_LOAD_WARNING = {'data': {'text/html':\n",
       "     \"<div style='background-color: #fdd'>\\n\"+\n",
       "     \"<p>\\n\"+\n",
       "     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
       "     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
       "     \"</p>\\n\"+\n",
       "     \"<ul>\\n\"+\n",
       "     \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
       "     \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
       "     \"</ul>\\n\"+\n",
       "     \"<code>\\n\"+\n",
       "     \"from bokeh.resources import INLINE\\n\"+\n",
       "     \"output_notebook(resources=INLINE)\\n\"+\n",
       "     \"</code>\\n\"+\n",
       "     \"</div>\"}};\n",
       "\n",
       "  function display_loaded() {\n",
       "    var el = document.getElementById(\"1001\");\n",
       "    if (el != null) {\n",
       "      el.textContent = \"BokehJS is loading...\";\n",
       "    }\n",
       "    if (root.Bokeh !== undefined) {\n",
       "      if (el != null) {\n",
       "        el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
       "      }\n",
       "    } else if (Date.now() < root._bokeh_timeout) {\n",
       "      setTimeout(display_loaded, 100)\n",
       "    }\n",
       "  }\n",
       "\n",
       "\n",
       "  function run_callbacks() {\n",
       "    try {\n",
       "      root._bokeh_onload_callbacks.forEach(function(callback) {\n",
       "        if (callback != null)\n",
       "          callback();\n",
       "      });\n",
       "    } finally {\n",
       "      delete root._bokeh_onload_callbacks\n",
       "    }\n",
       "    console.debug(\"Bokeh: all callbacks have finished\");\n",
       "  }\n",
       "\n",
       "  function load_libs(css_urls, js_urls, callback) {\n",
       "    if (css_urls == null) css_urls = [];\n",
       "    if (js_urls == null) js_urls = [];\n",
       "\n",
       "    root._bokeh_onload_callbacks.push(callback);\n",
       "    if (root._bokeh_is_loading > 0) {\n",
       "      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
       "      return null;\n",
       "    }\n",
       "    if (js_urls == null || js_urls.length === 0) {\n",
       "      run_callbacks();\n",
       "      return null;\n",
       "    }\n",
       "    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
       "    root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
       "\n",
       "    function on_load() {\n",
       "      root._bokeh_is_loading--;\n",
       "      if (root._bokeh_is_loading === 0) {\n",
       "        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
       "        run_callbacks()\n",
       "      }\n",
       "    }\n",
       "\n",
       "    function on_error() {\n",
       "      console.error(\"failed to load \" + url);\n",
       "    }\n",
       "\n",
       "    for (var i = 0; i < css_urls.length; i++) {\n",
       "      var url = css_urls[i];\n",
       "      const element = document.createElement(\"link\");\n",
       "      element.onload = on_load;\n",
       "      element.onerror = on_error;\n",
       "      element.rel = \"stylesheet\";\n",
       "      element.type = \"text/css\";\n",
       "      element.href = url;\n",
       "      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
       "      document.body.appendChild(element);\n",
       "    }\n",
       "\n",
       "    for (var i = 0; i < js_urls.length; i++) {\n",
       "      var url = js_urls[i];\n",
       "      var element = document.createElement('script');\n",
       "      element.onload = on_load;\n",
       "      element.onerror = on_error;\n",
       "      element.async = false;\n",
       "      element.src = url;\n",
       "      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
       "      document.head.appendChild(element);\n",
       "    }\n",
       "  };var element = document.getElementById(\"1001\");\n",
       "  if (element == null) {\n",
       "    console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n",
       "    return false;\n",
       "  }\n",
       "\n",
       "  function inject_raw_css(css) {\n",
       "    const element = document.createElement(\"style\");\n",
       "    element.appendChild(document.createTextNode(css));\n",
       "    document.body.appendChild(element);\n",
       "  }\n",
       "\n",
       "  \n",
       "  var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n",
       "  var css_urls = [];\n",
       "  \n",
       "\n",
       "  var inline_js = [\n",
       "    function(Bokeh) {\n",
       "      Bokeh.set_log_level(\"info\");\n",
       "    },\n",
       "    function(Bokeh) {\n",
       "    \n",
       "    \n",
       "    }\n",
       "  ];\n",
       "\n",
       "  function run_inline_js() {\n",
       "    \n",
       "    if (root.Bokeh !== undefined || force === true) {\n",
       "      \n",
       "    for (var i = 0; i < inline_js.length; i++) {\n",
       "      inline_js[i].call(root, root.Bokeh);\n",
       "    }\n",
       "    if (force === true) {\n",
       "        display_loaded();\n",
       "      }} else if (Date.now() < root._bokeh_timeout) {\n",
       "      setTimeout(run_inline_js, 100);\n",
       "    } else if (!root._bokeh_failed_load) {\n",
       "      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
       "      root._bokeh_failed_load = true;\n",
       "    } else if (force !== true) {\n",
       "      var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n",
       "      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
       "    }\n",
       "\n",
       "  }\n",
       "\n",
       "  if (root._bokeh_is_loading === 0) {\n",
       "    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
       "    run_inline_js();\n",
       "  } else {\n",
       "    load_libs(css_urls, js_urls, function() {\n",
       "      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
       "      run_inline_js();\n",
       "    });\n",
       "  }\n",
       "}(window));"
      ],
      "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force = true;\n\n  if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n    root._bokeh_onload_callbacks = [];\n    root._bokeh_is_loading = undefined;\n  }\n\n  \n\n  \n  if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n    root._bokeh_timeout = Date.now() + 5000;\n    root._bokeh_failed_load = false;\n  }\n\n  var NB_LOAD_WARNING = {'data': {'text/html':\n     \"<div style='background-color: #fdd'>\\n\"+\n     \"<p>\\n\"+\n     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n     \"</p>\\n\"+\n     \"<ul>\\n\"+\n     \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n     \"<li>use INLINE resources instead, as so:</li>\\n\"+\n     \"</ul>\\n\"+\n     \"<code>\\n\"+\n     \"from bokeh.resources import INLINE\\n\"+\n     \"output_notebook(resources=INLINE)\\n\"+\n     \"</code>\\n\"+\n     \"</div>\"}};\n\n  function display_loaded() {\n    var el = document.getElementById(\"1001\");\n    if (el != null) {\n      el.textContent = \"BokehJS is loading...\";\n    }\n    if (root.Bokeh !== undefined) {\n      if (el != null) {\n        el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n      }\n    } else if (Date.now() < root._bokeh_timeout) {\n      setTimeout(display_loaded, 100)\n    }\n  }\n\n\n  function run_callbacks() {\n    try {\n      root._bokeh_onload_callbacks.forEach(function(callback) {\n        if (callback != null)\n          callback();\n      });\n    } finally {\n      delete root._bokeh_onload_callbacks\n    }\n    console.debug(\"Bokeh: all callbacks have finished\");\n  }\n\n  function load_libs(css_urls, js_urls, callback) {\n    if (css_urls == null) css_urls = [];\n    if (js_urls == null) js_urls = [];\n\n    root._bokeh_onload_callbacks.push(callback);\n    if (root._bokeh_is_loading > 0) {\n      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n      return null;\n    }\n    if (js_urls == null || js_urls.length === 0) {\n      run_callbacks();\n      return null;\n    }\n    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n    root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n    function on_load() {\n      root._bokeh_is_loading--;\n      if (root._bokeh_is_loading === 0) {\n        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n        run_callbacks()\n      }\n    }\n\n    function on_error() {\n      console.error(\"failed to load \" + url);\n    }\n\n    for (var i = 0; i < css_urls.length; i++) {\n      var url = css_urls[i];\n      const element = document.createElement(\"link\");\n      element.onload = on_load;\n      element.onerror = on_error;\n      element.rel = \"stylesheet\";\n      element.type = \"text/css\";\n      element.href = url;\n      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n      document.body.appendChild(element);\n    }\n\n    for (var i = 0; i < js_urls.length; i++) {\n      var url = js_urls[i];\n      var element = document.createElement('script');\n      element.onload = on_load;\n      element.onerror = on_error;\n      element.async = false;\n      element.src = url;\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n  };var element = document.getElementById(\"1001\");\n  if (element == null) {\n    console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n    return false;\n  }\n\n  function inject_raw_css(css) {\n    const element = document.createElement(\"style\");\n    element.appendChild(document.createTextNode(css));\n    document.body.appendChild(element);\n  }\n\n  \n  var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n  var css_urls = [];\n  \n\n  var inline_js = [\n    function(Bokeh) {\n      Bokeh.set_log_level(\"info\");\n    },\n    function(Bokeh) {\n    \n    \n    }\n  ];\n\n  function run_inline_js() {\n    \n    if (root.Bokeh !== undefined || force === true) {\n      \n    for (var i = 0; i < inline_js.length; i++) {\n      inline_js[i].call(root, root.Bokeh);\n    }\n    if (force === true) {\n        display_loaded();\n      }} else if (Date.now() < root._bokeh_timeout) {\n      setTimeout(run_inline_js, 100);\n    } else if (!root._bokeh_failed_load) {\n      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n      root._bokeh_failed_load = true;\n    } else if (force !== true) {\n      var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n    }\n\n  }\n\n  if (root._bokeh_is_loading === 0) {\n    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n    run_inline_js();\n  } else {\n    load_libs(css_urls, js_urls, function() {\n      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n      run_inline_js();\n    });\n  }\n}(window));"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Ajout de Google Maps pour l'affichage\n",
    "\n",
    "from bokeh.io import output_notebook\n",
    "output_notebook()\n",
    "bokeh_width, bokeh_height = 500,400\n",
    "\n",
    "from bokeh.io import show\n",
    "\n",
    "from bokeh.plotting import gmap\n",
    "from bokeh.models import GMapOptions\n",
    "from bokeh.models import ColumnDataSource\n",
    "\n",
    "hour = 6\n",
    "load_per_hour = loading_data[:,hour]\n",
    "copy_velib = velibAdds \n",
    "copy_velib[\"load\"] = load_per_hour\n",
    "\n",
    "def plot(lat, lng, zoom=10, map_type='roadmap'):\n",
    "    gmap_options = GMapOptions(lat=lat, lng=lng, \n",
    "                               map_type=map_type, zoom=zoom)\n",
    "    p = gmap(\"AIzaSyDbC_3q317zMxxK5bcb4-GFo-YrEHHcfXI\", gmap_options, title=\"Paris\", \n",
    "             width=bokeh_width, height=bokeh_height)\n",
    "    # définition de la ColumnDataSource\n",
    "    source = ColumnDataSource(copy_velib)\n",
    "    center = p.circle('longitude', 'latitude', size=4, alpha=0.2, \n",
    "                  color=\"load\", source=source)\n",
    "    show(p)\n",
    "    return p\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "lat, lon = 48.886300, 2.377389"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "  <div class=\"bk-root\" id=\"c402f92f-fe0b-4fb8-84ca-78f44b4c0833\" data-root-id=\"1003\"></div>\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "(function(root) {\n",
       "  function embed_document(root) {\n",
       "    \n",
       "  var docs_json = {\"e0819443-5d44-4467-805f-127563f14842\":{\"roots\":{\"references\":[{\"attributes\":{\"api_key\":\"AIzaSyDbC_3q317zMxxK5bcb4-GFo-YrEHHcfXI\",\"below\":[{\"id\":\"1012\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"1017\",\"type\":\"LinearAxis\"}],\"map_options\":{\"id\":\"1002\",\"type\":\"GMapOptions\"},\"plot_height\":400,\"plot_width\":500,\"renderers\":[{\"id\":\"1033\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1004\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1024\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"1005\",\"type\":\"Range1d\"},\"x_scale\":{\"id\":\"1036\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1006\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"1035\",\"type\":\"LinearScale\"}},\"id\":\"1003\",\"subtype\":\"GMap\",\"type\":\"GMapPlot\"},{\"attributes\":{\"formatter\":{\"id\":\"1015\",\"type\":\"MercatorTickFormatter\"},\"ticker\":{\"id\":\"1016\",\"type\":\"MercatorTicker\"}},\"id\":\"1017\",\"type\":\"LinearAxis\"},{\"attributes\":{\"formatter\":{\"id\":\"1010\",\"type\":\"MercatorTickFormatter\"},\"ticker\":{\"id\":\"1011\",\"type\":\"MercatorTicker\"}},\"id\":\"1012\",\"type\":\"LinearAxis\"},{\"attributes\":{\"dimension\":\"lon\"},\"id\":\"1011\",\"type\":\"MercatorTicker\"},{\"attributes\":{},\"id\":\"1036\",\"type\":\"LinearScale\"},{\"attributes\":{\"dimension\":\"lat\"},\"id\":\"1015\",\"type\":\"MercatorTickFormatter\"},{\"attributes\":{\"text\":\"Paris\"},\"id\":\"1004\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"field\":\"load\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"field\":\"load\"},\"x\":{\"field\":\"longitude\"},\"y\":{\"field\":\"latitude\"}},\"id\":\"1031\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1029\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1031\",\"type\":\"Circle\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1032\",\"type\":\"Circle\"},\"selection_glyph\":null,\"view\":{\"id\":\"1034\",\"type\":\"CDSView\"}},\"id\":\"1033\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1035\",\"type\":\"LinearScale\"},{\"attributes\":{\"dimension\":\"lon\"},\"id\":\"1010\",\"type\":\"MercatorTickFormatter\"},{\"attributes\":{\"callback\":null},\"id\":\"1005\",\"type\":\"Range1d\"},{\"attributes\":{\"lat\":48.8863,\"lng\":2.377389,\"zoom\":10},\"id\":\"1002\",\"type\":\"GMapOptions\"},{\"attributes\":{},\"id\":\"1038\",\"type\":\"Selection\"},{\"attributes\":{\"dimension\":\"lat\"},\"id\":\"1016\",\"type\":\"MercatorTicker\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1039\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null},\"id\":\"1006\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1029\",\"type\":\"ColumnDataSource\"}},\"id\":\"1034\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"data\":{\"bonus\":[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0],\"index\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189],\"latitude\":{\"__ndarray__\":\"[encoded data, 12684 characters]\",\"dtype\":\"float64\",\"shape\":[1189]},\"load\":{\"__ndarray__\":\"[encoded data, 12684 characters]\",\"dtype\":\"float64\",\"shape\":[1189]},\"longitude\":{\"__ndarray__\":\"[encoded data, 12684 characters]\",\"dtype\":\"float64\",\"shape\":[1189]},\"names\":[\" EURYALE DEHAYNIN\",\" LEMERCIER\",\" MEZIERES RENNES\",\" FARMAN\",\" QUAI DE LA RAPEE\",\" CHOISY POINT D'IVRY\",\" PORTE DE VILLIERS\",\" STALINGRAD (FONTENAY SOUS BOIS)\",\" GARE RER (JOINVILLE)\",\" MOUFFETARD EPEE DE BOIS\",\" PELLEPORT\",\" TREMBLAY - INSEP\",\" RIVOLI MUSEE DU LOUVRE\",\" EVANGILE\",\" H\\u00d4PITAL BICHAT\",\" PLACE DES TERNES - 5\",\" BEAUBOURG\",\" PYR\\u00c9N\\u00c9ES-DAGORNO\",\" BEAUBOURG PLACE MICHELET\",\" MALON (GENTILLY)\",\" CHEMIN VERT BEAUMARCHAIS\",\" MARCHE AUX FLEURS\",\" SAINT PHILIPPE DU ROULE\",\" AVENUE DE LA PORTE D'ASNI\\u00c8RES\",\" WAGRAM COURCELLES\",\" REPOS\",\" VAVIN\",\" GAITE LYRIQUE\",\" CLICHY\",\" PLACE ST AUGUSTIN\",\" MAINE LIANCOURT\",\" CREVAUX\",\" MAIRIE DU 15EME\",\" GRENELLE VIOLET (PROP3)\",\" GERVAIS (PANTIN)\",\" J DUPRE\",\" PERI 2 (MONTROUGE)\",\" PLACE ETIENNE PERNET\",\" VERDUN (SURESNES)\",\" PARIS (MONTREUIL)\",\" CONSERVATOIRE\",\" DANTON\",\" CIT\\u00c9 DE LA MUSIQUE\",\" PLACE DU BATAILLON FRANCAIS DE L'ONU\",\" MARCEL (BAGNOLET)\",\" BELLEVILLE PRE SAINT GERVAIS\",\" POISSONNI\\u00c8RE - ENGHIEN\",\" PLACE BIENVENUE\",\" JAVEL\",\" TURBIGO\",\" VAUVENARGUES\",\" PORTE DOREE\",\" PORTE DE CLICHY FRAGONARD\",\" SUFFREN F\\u00c9D\\u00c9RATION\",\" TOLBIAC ALBERT\",\" HAUSSMANN COURCELLES\",\" CIT\\u00c9 UNIVERSITAIRE\",\" HARPIGNIES\",\" SIMON BOLIVAR\",\" BOURSE DU TRAVAIL\",\" MATHIS\",\" OPERA CASANOVA\",\" RUE DES BOULETS\",\" GODOT DE MAUROY\",\" FRANCAISE\",\" ARGENTINE\",\" MORLAND\",\" CHARTRES\",\" DOUDEAUVILLE STEPHENSON\",\" TERNES PEREIRE\",\" CUJAS\",\" ROND POINT DE LA CHAPELLE\",\" PARC DE CHOISY\",\" MAIRIE DU 18 EME\",\" GARE DE L'EST\",\" PORT DU GROS CAILLOU (STATION MOBILE)\",\" ROCHER\",\" MALESHERBES\",\" RUE DE PASSY\",\" CLIGNANCOURT MARCADET\",\" GARE D'AUSTERLITZ\",\" JULES FERRY FAUBOURG DU TEMPLE\",\" MAIRIE DU 3EME\",\" H\\u00d4PITAL GEORGES POMPIDOU (PROP 2)\",\" DE GAULLE (MONTREUIL)\",\" GARE (IVRY)\",\" MICHELET ASSAS\",\" SAINT GERMAIN HARPE\",\" RUE DE L OUEST CHATEAU\",\" MACDONALD\",\" BERTON (BAGNOLET)\",\" HERSCHEL\",\" PARMENTIER\",\" CHOISY VISTULE\",\" REAUMUR MONTORGUEIL\",\" DIDEROT 2 (SAINT OUEN)\",\" PLACE DES VICTOIRES\",\" VAUGIRARD CAMBRONNE\",\" PORTE MONTMARTRE\",\" LOURMEL\",\" SAINT VINCENT (ISSY LES MOULINEAUX)\",\" AVENUE DES PORTUGAIS\",\" CONVENTION (LE KREMLIN BICETRE)\",\" CLERY\",\" ALLERAY\",\" SAINT FARGEAU\",\" FAURE (AUBERVILLIERS)\",\" IVRY BRUNESEAU\",\" MOQUET (MALAKOFF)\",\" PARMENTIER FONTAINE AU ROI\",\" VICTOIR CHAUSSEE D ANTIN\",\" DUGOMMIER\",\" ABOUKIR\",\" ULM ERASME\",\" SAINT MARC\",\" BOULEVARD VOLTAIRE\",\" CHABANAIS\",\" CHARENTON\",\" BLEUZEN (VANVES)\",\" ARAGO 2\",\" GARE DE BERCY\",\" BELLEVILLE\",\" VIOLET\",\" MINIMES (VINCENNES)\",\" CIRQUE D HIVER\",\" VAUGIRARD PRINCE\",\" PLACE DU DOCTEUR YERSIN\",\" METALLOS\",\" BONAPARTE BEAUX ARTS\",\" BASTILLE RICHARD LENOIR\",\" MUTUALITE\",\" PORT ROYAL\",\" HOTEL DE VILLE\",\" JAURES 1 (PANTIN)\",\" BACHAUMONT\",\" RASPAIL VARENNE\",\" CARPEAUX\",\" HORTENSIAS (LES LILAS)\",\" QUATRE SEPTEMBRE\",\" MONTCALM\",\" MARAICHERS\",\" BOUCICAUT FAURE\",\" GOBELINS\",\" DODU\",\" PARIS 1 (VINCENNES)\",\" TRINITE\",\" DANTZIG\",\" REPUBLIQUE PIERRE LEVEE\",\" HENRI MARTIN\",\" MARCEAU\",\" FAUBOURG MONTMARTRE\",\" FONTAINEBLEAU (KREMLIN BICETRE)\",\" MARTYRS 2\",\" PETITES ECURIES\",\" PAUL DOUMER / LA TOUR\",\" PORTE DE SAINT OUEN\",\" DIDEROT BOURDAN\",\" SAINT FRANCOIS XAVIER\",\" PORTE DE COURCELLE\",\" PETIT HONNEGER\",\" SALENGRO (KREMLIN BICETRE)\",\" WASHINGTON\",\" LABROUSTE\",\" VITRY DESAULT\",\" SAINT JACQUES TOMBE ISSOIRE\",\" AQUEDUC\",\" EDISON\",\" BRUYERE PIGALLE\",\" PARIS 2 (MONTREUIL)\",\" LEIBNITZ\",\" MAC MAHON\",\" CHARONNE AVRON\",\" PLACE DE BUDAPEST\",\" LOLIVE 1 (PANTIN)\",\" MOUCHOTTE\",\" JEAN MOULIN\",\" PERGOLESE\",\" ROUGEMONT\",\" LACUEE\",\" SUFFREN\",\" BON MARCHE\",\" WATTIGNIES\",\" PLACE DE PASSY\",\" LENINE (GENTILLY)\",\" RIVOLI SAINT DENIS\",\" JACQUES CALLOT\",\" TOLBIAC WURTZ\",\" PASTEUR COTENTIN\",\" HOPITAL SAINT LOUIS\",\" NATION VOLAIRE\",\" HOPITAL ROBERT DEBRE\",\" FRANCS BOURGEOIS\",\" MONTEMPOIVRE\",\" MONTREUIL (VINCENNES)\",\" PONT SAINT LOUIS\",\" MONDRIAN\",\" PRIMO LEVI\",\" DESCARTES\",\" LORRAINE\",\" NATION TRONE\",\" PLACE FERNAND MOURLOT\",\" BOBILLOT TOLBIAC\",\" CLICHY PARME\",\" PIXERECOURT\",\" HAMEAU FLEURI (BOULOGNE-BILLANCOURT)\",\" VOLTAIRE (LEVALLOIS)\",\" SEBASTOPOL-GRENATA\",\" SAINT JACQUES VAL DE GRACE\",\" HOUSSAYE\",\" BELLEVILLE\",\" GRENIER SAINT LAZARE\",\" FRIEDLAND\",\" WAGRAM\",\" D'ARTOIS BERRY\",\" DE GAULLE 4 (NEUILLY)\",\" REPUBLIQUE 2 (AUBERVILLIERS)\",\" QUAI FRANCOIS MAURIAC TOLBIAC\",\" PORT SOLF\\u00c9RINO (STATION MOBILE)\",\" WILSON (LEVALLOIS)\",\" CHATEAU DE VINCENNES\",\" TRANSVAL (BOULOGNE-BILLANCOURT)\",\" BAYERN PEREIRE\",\" GRANDE TRUANDERIE\",\" PARC DE BELLEVILLE\",\" AVENUE HENRI MARTIN\",\" COUTURIER 2 (LEVALLOIS)\",\" RUE SAINT BLAISE\",\" ARAGO\",\" PARIS 1 (CHARENTON)\",\" CHARCOT (NEUILLY)\",\" PHILIPPE AUGUSTE\",\" BELIARD POISSONNIERS\",\" RUISSEAU\",\" PLACE DUNANT\",\" OLIVIER DE SERRE\",\" LIEGE\",\" PORTE D'IVRY\",\" BIBLIOTH\\u00c8QUE FRAN\\u00c7OIS MITTERAND\",\" SAINT CHARLES - CONVENTION\",\" PARIS 2 (VINCENNES)\",\" LA MOTTE PIQUET\",\" BARBES (MONTROUGE)\",\" BEFFROY (NEUILLY)\",\" SAINT MARCEL\",\"  PALAIS DES SPORTS\",\" CHARONNES VALLES\",\" PRE ST GERVAIS\",\" LAGROUA\",\" LES HALLES - SEBASTOPOL\",\" AVENUE D EYLAU\",\" STOCKOLM ROME\",\" PORTE DE CHARENTON\",\" EMERIAU\",\" LEON BLUM ROQUETTE\",\" NORD (MALAKOFF)\",\" CHAMPS ELYSEES CHARRON\",\" ROSSEL (LE KREMLIN BICETRE)\",\" VERSAILLES\",\" PONT NEUF - 14\",\" RENNES SABOT\",\" INVALIDES\",\" GUYNEMER LUXEMBOURG\",\" PORTE DE SAINT MANDE\",\" BOULEVARD LANNES\",\" SAINT PLACIDE CHERCHE MIDI\",\" MICHELET (SAINT OUEN)\",\" RIVOLI TUILERIE\",\" CHABROL SAINT QUENTIN\",\" METALLURGIE (SAINT DENIS)\",\" JULES (IVRY)\",\" CONTRESCARPE-THOUIN\",\" SAINT JACQUES FERRUS\",\" PORTE DE PANTIN\",\" RICHELIEU DROUOT\",\" TELEGRAPHE\",\" PLACE TREFOUEL\",\" HITTORFF\",\" CURIE (SAINT OUEN)\",\" PROCESSION\",\" MIRABEAU\",\" BREGUET SABIN\",\" PIROGUES DE BERCY\",\" ANDRE MALRAUX MUSEE DU LOUVRE\",\" GARIBALDI (SAINT OUEN)\",\" SQUARE BELA BARTOK\",\" BOURSE DU COMMERCE\",\" VILLENEUVE 2 (CLICHY)\",\" LESENNE (SAINT OUEN)\",\" VILLAGE SAINT PAUL\",\" TOLBIAC LERREDE\",\" NATIONS UNIES (CLICHY)\",\" PLANTES MOULIN VERT\",\" BIBLIOTHEQUE FAIDHERBE\",\" COMMERCE\",\" MARCHE SAINT GERMAIN - MABILLON\",\" MAZET SAINT ANDRE DES ARTS\",\" PLACE DE RUNGIS\",\" LOUIS BLANC\",\" COURS DE VINCENNES PYR\\u00c9N\\u00c9ES\",\" CROULEBARBE RECULETTES\",\" CHAMPS ELYSEES LINCOLN\",\" SAINT JACQUES GAY LUSSAC\",\" CUSTINE\",\" DE GAULLE 3 (NEUILLY)\",\" PORTE DE CHOISY\",\" SILLY (BOULOGNE BILLANCOURT)\",\" SQUARE D'ANVERS\",\" NATION PICPUS\",\" MONCLAR\",\" SENAT CONDE\",\" PORCHE POUCHET\",\" LAME\",\" MONTORGUEIL RUE MONTMARTRE VERSION 2\",\" BRUNE\",\" REPUBLIQUE FERRY\",\" ODESSA\",\" PAUL BERT (IVRY)\",\" BOURET PAILLERON\",\" PLACE MONGE\",\" GARE DE REUILLY\",\" BODIN AVENUE DE CLICHY\",\" LAMARTINE\",\" SAINT SEVERIN\",\" MIROMESNIL\",\" FLANDRIN\",\" ABBESSES\",\" LEON FRAPIE\",\" DAGUERRE GASSENDI\",\" PLACE D ITALIE AURIOL\",\" PLACE DE LA PORTE DE CHATILLON\",\" PARADIS\",\" MAUBEUGE CONDORCET\",\" OCTAVE FEUILLET\",\" PORTE DE CLICHY - AVENUE DE CLICHY\",\" LALLY TOLLENDAL\",\" SAINT MICHEL DANTON\",\" PERI (SAINT OUEN)\",\" DENFERT-ROCHEREAU CASSINI\",\" NECKER (CHARENTON)\",\" PETIT (CLICHY)\",\" RICHARD LENOIR VOLTAIRE NORD\",\" LEGENDRE\",\" BOUTROUX VITRY\",\" BROCHANT\",\" PARC DE BELLEVILLE\",\" L'ISLE ADAM PYREN\\u00c9ES\",\" DELIZY (PANTIN)\",\" PRAIRIE L INDRE\",\" IVRY TOLBIAC\",\" ITALIE MAISON BLANCHE\",\" ATHENES CLICHY\",\" LECOURBE\",\" MONTREUIL VOLTAIRE\",\" CHARONNE DU BUREAU\",\" REILLE MONTSOURIS\",\" COURCELLES - DEMOURES\",\" HOCHE ALBRECHT\",\" PLACE ANDRE MALRAUX\",\" LA FOURCHE RUE DE LA CONDAMINE\",\" MILLET - JEAN DE LA FONTAINE\",\" PORT ROYAL\",\" PORTE DES LILAS\",\" ST MANDE NETTER\",\" HAIES REUNION\",\" LEDRU ROLLIN-BASFROI\",\" IVRY BAUDICOURT\",\" GENERAL DE GAULLE 2 (SAINT MANDE)\",\" MORICE 2 (CLICHY)\",\" VERSAILLES EXELMANS\",\" TERNES COURCELLES\",\" GUY MOCQUET DAVY\",\" SIMPLON\",\" BAC\",\" PLACE SAINT FERDINAND\",\" MARIGNAN\",\" RIO\",\" PICPUS\",\" FRANCOIS 1ER LINCOLN\",\" AUBER\",\" LEGENDRE AVENUE DE CLICHY\",\" D'ORVES (MONTROUGE)\",\" NAVIER\",\"CAUMARTIN PROVENCE\",\" TARDIEU\",\" JOINEAU (PRE SAINT GERVAIS)\",\" RUE LOUIS LUMI\\u00c8RE\",\" CHARLES VALLIN\",\" ALESIA GERGOVIE\",\" PAUL VAL\\u00c9RY\",\" PLACE DE LEVIS\",\" CHARONNE FROT\",\" PROVENCE\",\" AVENUE RAPP\",\" LEPIC VERON\",\" BROCHANT\",\" MADEMOISELLE\",\" BOBILLOT MERY\",\" BARTHES TROYES\",\" CHARONNE PHILIPPE AUGUSTE\",\" BOLIVAR BURNOUF\",\" LEDIT DE NANTES\",\" AMETTE\",\" ROBESPIERRE (IVRY)\",\" LACEPEDE\",\" EMGP (AUBERVILLIERS)\",\" JAURES 1 (BOULOGNE-BILLANCOURT)\",\" BEL AIR\",\" ASSAS LUXEMBOURG\",\" COURS DE VINCENNES BD DAVOUT\",\" RUISSEAU ORDENER\",\" DENFERT ROCHEREAU\",\" COURTELINE\",\" CHANDON\",\" CLER\",\" BOURSE\",\" REPUBLIQUE 23\",\" SANZILLON (CLICHY)\",\" COURONNES\",\" DAMREMONT CAULAINCOURT\",\" LOSSERAND BOYER-BARRET\",\" CHARONNE SAINT ANTOINE\",\" BOBILLOT VERLAINE\",\" OPERA - CAPUCINES\",\" GARE EMGP\",\" RUE DU COMMERCE\",\" BERTHIER STUART MERRIL\",\" DIDOT CHATEAU\",\" PLACE DU CANADA\",\" PELLEPORT BELGRAND\",\" CIMETIERE DE GENTILLY\",\" BOIS DE VINCENNES\",\" MARTYRS CHORON\",\" EDGAR QUINET\",\" REUILLY DIDEROT\",\" HUGO (CLICHY)\",\" ROCHECHOUART GERANDO\",\" POULMARCH (LES LILAS)\",\" DAVOUT VOLGA\",\" BIR HAKEIM\",\" SAINT FARGEAU MORTIER\",\" CARDINAL LAVIGERIE\",\" PYRENEES ERMITAGE\",\" PORTE MOLITOR\",\" EMGP NORD (SAINT DENIS)\",\" BASSIN DE L'ARSENAL\",\" MENILMONTANT - PELLEPORT\",\" PEREIRE SAUSSURE\",\" CANDALE (PANTIN)\",\" RENNEQUIN PEREIRE\",\" PORTE DES LILAS\",\" MATHURINS\",\" RIVOLI SEBASTOPOL\",\" COTY TOMBE D'ISSOIRE\",\" SAINT AUGUSTIN\",\" THOREL\",\" SAINT MARCEL JEANNE D'ARC\",\" MAINE GAITE\",\" CHAMP DE MARS COTE 16EME\",\" LECORBUSIER (BOULOGNE-BILLANCOURT)\",\" SORBONNE\",\" BELLES FEUILLES\",\" ETIENNE MARCEL\",\" LECLERC (KREMLIN BICETRE)\",\" GARE DU NORD 2\",\" DAMREMONT ORDENER\",\" SULLY MORLAND\",\" COURS DE VINCENNES - BD SOULT\",\" PORTE DE MONTROUGE 2\",\" ESPACE CHAMPERRET\",\" THEATRE\",\" ST ANTOINE GONNET\",\" ILES (ISSY LES MOULINEAUX)\",\" GAY LUSSAC LE GOFF\",\" ROUVET DAMPIERRE\",\" OPERA PYRAMIDES\",\" PONT NEUF\",\" FAUBOURG DU TEMPLE PLACE DE LA REPUBLIQUE\",\" ROQUETTE THIERE\",\" LOSSERAND - PERNETY\",\" PIGALLE GERMAIN PILLON\",\" CHERCHE MIDI\",\" ANDRE MAUROIS\",\" MALESHERBES PASQUIER\",\" PARIS 3 (CHARENTON)\",\" SAINT SULPICE\",\" ST GERMAIN-DANTE\",\" ALLEE PIERRE LAZAEFF\",\" ALEXANDRE DUMAS\",\" JOURDAIN\",\" MONTAIGNE\",\" VASCO DE GAMA\",\" CONSERVATION\",\" CHERCHE MIDI\",\" CHARLES DE GAULLE (NOGENT)\",\" GRANDS MOULINS\",\" VINAIGRIERS\",\" FRUCTIDOR (SAINT OUEN)\",\" PONT DE L'ALMA\",\" EOLE\",\" CLICHY\",\" SAINT MICHEL HENRI BARBUSSE\",\" DIDEROT BERCY\",\" PONT CARDINET\",\" CARNOT\",\" SAINT MAUR OBERKAMPF\",\" RUE DE SIAM\",\" PLACE DE LA NATION\",\" GROULT\",\" BOIS DE BOULOGNE / PORTE DE LA MUETTE 2\",\" MURS DU PARC (VINCENNES)\",\" GUESDE (LEVALLOIS)\",\" FALGUIERE ARSONVAL\",\" ILE DE LA CITE PONT NEUF\",\" VERDIER (MONTROUGE)\",\" BROSSOLETTE (IVRY)\",\" BOETIE PONTHIEU\",\" BEAUMARCHAIS\",\" GALILEE KLEBER\",\" PIERRET (NEUILLY)\",\" MARCADET - RAMEY\",\" DESAIX\",\" KARMAN (AUBERVILLIERS)\",\" PYRENEES RENOUVIER\",\" MARCHE ST-PIERRE\",\" GUY MOCQUET\",\" PARADIS (BOULOGNE-BILLANCOURT)\",\" VILLENEUVE (CLICHY)\",\" DAVOUT VITRUVE\",\" ROMAIN ROLLAND\",\" MAIRIE DU 4 EME\",\" BOLIVAR\",\" ITALIE TOLBIAC\",\" MAIRIE DU 17EME\",\" PLACE BARB\\u00c8S\",\" ALEXANDRE DUMAS\",\" JACQUES BONSERGENT\",\" PORTE DE SAINT CLOUD\",\" FONTAINE DOUAI\",\" LAFITTE ROSSINI\",\" CACHIN (IVRY)\",\" JAURES VILLETTE\",\" CADET\",\" ROSIERS (SAINT OUEN)\",\" PARC DE BERCY\",\" WEISS\",\" AQUEDUC\",\" CLEMANCEAU (NOGENT)\",\" MAISON DE RADIO FRANCE\",\" PATAY REGNAULT\",\" KENNEDY RANELAGH\",\" PLACE GENERAL KOENIG\",\" VOLTAIRE\",\" HAVRE CAUMARTIN\",\" MARNE (MONTROUGE)\",\" ITALIE ROSALIE\",\" GERGOVIE VERCINGETORIX\",\" LAMENAIS WASHINGTON\",\" ASSEMBLEE NATIONALE\",\" CROIX NIVERT\",\" ARAGO CORDELIERE - VERSION 2\",\" ECOLE MILITAIRE\",\" DE RICARD (FONTENAY SOUS BOIS)\",\" PONTOISE\",\" REUILLY\",\" HECTOR MALOT\",\" METZ\",\" PORT ROYAL COCHIN\",\" PETIT PALAIS\",\" SQUARE ROQUETTE\",\" PORTE D'ORLEANS\",\" SERRES\",\" SQUARE DES C\\u00c9VENNES\",\" WAGRAM (17EME ARR.)\",\" RHIN DANUBE (BOULOGNE BILLANCOURT)\",\" PARMENTIER LOUVEL-TESSIER\",\" BARBES MARCADET\",\" TOLBIAC NATIONALE\",\" CITE VANEAU\",\" PLACE DE FINLANDE\",\" BINET\",\" AVENUE DE GRAVELLE\",\" ROQUEPINE\",\" JOHANN STRAUSS\",\" FRANCE (LEVALLOIS)\",\" MARGUERITE DE NAVARRE\",\" CHAROLAIS\",\" PALADINES\",\" GONCOURT\",\" PAILLERON\",\" PONT DE LODI DAUPHINE\",\" FALGUI\\u00c8RE LEBRUN\",\" MAAR (SAINT OUEN)\",\" STRASBOURG\",\" CADET LA FAYETTE\",\" HOSPICE DEBROUSSE\",\" POISSY\",\" LECLERC (BOULOGNE-BILLANCOURT)\",\" ALOUETTES\",\" GARE DU NORD 3\",\" TEMPLE 113\",\" PORTE DE BAGNOLET\",\" GARE SAINT LAZARE - COUR DU HAVRE\",\" VERDUN\",\" CLIGNANCOURT\",\" ALBERT KAHN\",\" GRENIER (BOULOGNE-BILLANCOURT)\",\" BERCY VILLOT\",\" AUBERVILLIERS\",\" HUGO (AUBERVILLIERS)\",\" MADAGASCAR\",\" LERICHE (CLICHY)\",\" LEPINE\",\" SAINT MAUR AVENUE DE LA REPUBLIQUE\",\" PYR\\u00c9N\\u00c9ES\",\" CALVIN\",\" GUICHET (CLICHY)\",\" PECQUEUR\",\" MANIN SIMON BOLIVAR\",\" GEOFFROY SAINT HILAIRE\",\" RENAN\",\" AMIRAUX\",\" CAMBRAI\",\" SAINT GERMAIN DES PRES\",\" BRIAND (LEVALLOIS)\",\" DE GAULLE 2 (NEUILLY)\",\" FOLIES BERGERES\",\" CONCORDE/BERGES DE SEINE (STATION MOBILE)\",\" EGLISE SAINT JUSTE (SAINT DENIS)\",\" RIVOLI CONCORDE\",\" PHILIPPE AUGUSTE (20EME ARR.)\",\" VIVALDI\",\" MASSENA\",\" NOTRE DAME\",\" JARRY (VINCENNES)\",\" POISSONNIERE\",\" MANIN CARRIERES\",\" CHAMPIONNET\",\" AURIOL CHEVALERET\",\" SAMBRE ET MEUSE\",\" TAITBOUT CH\\u00c2TEAUDUN\",\" SQUARE LOUIS XVI\",\" SQUARE VIVIANI\",\" ORTEAUX MOURAUD\",\" BOTZARIS\",\" RENAN (ARCUEIL)\",\" VARENNE\",\" HUGO (VANVES)\",\" CAIRE\",\" BASTILLE\",\" ALEXANDRE CHARPENTIER\",\" BUTTES CHAUMONT\",\" REUNION\",\" FRANCOIS 1 ER\",\" JEAN MOULIN ALESIA\",\" GARE DE MONTPARNASSE\",\" RUE FRANCOIS PONSARD\",\" CHATEAU (NEUILLY)\",\" JUSSIEU\",\" GAUMONT\",\" L'ISLY\",\" SIBELLE ALESIA\",\" DEPARTEMENT\",\" RECHAUSSIERE (AUBERVILLIERS)\",\" BRIAND (MONTROUGE)\",\" FAUBOURG SAINT JACQUES CASSINI\",\" VAUGIRARD PASTEUR\",\" CHATEAU (BAGNOLET)\",\" CHEVALERET TOLBIAC\",\" MAGENTA PARE\",\" MONTORGUEIL ETIENNE MARCEL\",\" ARCHIVES PASTOURELLE\",\" PLACE AIM\\u00c9E MAILLART\",\" HELIE\",\" HUMBERT\",\" BATIGNOLLES\",\" GARE D'AUSTERLITZ\",\" MONTPARNASSE\",\" SAINT P\\u00c8RES\",\" CARVES (MONTROUGE)\",\" INSTITUT\",\" ELUARD (CHARENTON)\",\" REPUBLIQUE (LEVALLOIS)\",\" GODARD\",\" DECAEN CANNEBIERE\",\" TURBIGO SAINTE ELISABETH\",\" SAINT AMBROISE\",\" OURCQ-FLANDRES\",\" PERI (MONTROUGE)\",\" BOUCICAUT\",\" DUBLIN\",\" PYR\\u00c9N\\u00c9ES - PLAINE\",\" JOSEPH DE MAISTRE LEPIC\",\" DODU\",\" BIZOT\",\" REPUBLIQUE (VANVES)\",\" ALMA MARCEAU\",\" VINCENNES (MONTREUIL)\",\" MOULIN DE LA POINTE\",\" VAILLANT (BAGNOLET)\",\" GEORGES POMPIDOU\",\" DE GAULLE (NEUILLY)\",\" GARE D'AUSTERLITZ\",\" PORTE D'ITALIE\",\" PLACE ADOLPHE CHERIOUX\",\" CHAPELLE LOUIS BLANC\",\" POLYGONE\",\" RUE DE SEVIGNE\",\" PLACE JOFFRE / ECOLE MILITAIRE\",\" RANELAGH\",\" PORTE D'AUTEUIL\",\" COLONEL FABIEN\",\" CITROEN\",\" ULM - LHOMOND\",\" PLACE DU CHATELET\",\" JAURES 2 (PANTIN)\",\" JACQUIER\",\" MAIRIE DU 20\\u00c8ME\",\" NATION\",\" BLANQUI CORVISART\",\" ETIENNE DOLET\",\" SORBIER - M\\u00c9NILMONTANT\",\" JAURES 2 (MONTROUGE)\",\" PETITS PONTS\",\" SERRURIER\",\" DOCTEUR DEJERINE\",\" GIDE\",\" BROSSOLETTE (MALAKOFF)\",\" PIERRE ET MARIE CURIE (IVRY)\",\" MUETTE NEUILLY\",\" MICHEL ANGE AUTEUIL\",\" GARE DE LYON CHALON\",\" BIBLIOTHEQUE NATIONALE\",\" HAUSSMANN ROME\",\" BASCH (VANVES)\",\" CRESSON 2 (ISSY LES MOULINEAUX)\",\" TOQUEVILLE\",\" RECOLLETS\",\" MOSKOWA\",\" ST DOMINIQUE\",\" VOLTAIRE (SAINT OUEN)\",\" BASSANO\",\" PERE LACHAISE\",\" CENSIER BUFFON\",\" MOSELLE JAURES\",\" TOUDOUZE CLAUZEL\",\" SAINT HONORE\",\" DAUMESNIL\",\" NICARAGUA\",\" RIQUET\",\" SAINT PAUL PAV\\u00c9E\",\" JAURES (MONTROUGE)\",\" RENNES - ASSAS\",\" LA TOUR MAUBOURG\",\" LAGNY (VINCENNES)\",\" SAINT DIDIER\",\" PARIS 1 (MONTREUIL)\",\" BRIAND (ARCUEIL)\",\" BRANCION\",\" MAIRIE DU 2EME\",\" VICTOR MASSE\",\" ALLENDE (PANTIN)\",\" PANTHEON CARMES\",\" MONTROSIER (NEUILLY)\",\" MANIN HAUTPOUL\",\" PLACE DES FETES\",\" HAUTEVILLE\",\" BUFFON\",\" JAURES (MALAKOFF)\",\" GOUTTE D' OR\",\" KOCK (LES LILAS)\",\" ROQUETTE DALLERY\",\" GOUTHIERE\",\" VAILLANT (PANTIN)\",\" LONGCHAMP\",\" BOURDON\",\" BOURDELLE\",\" MAIRIE DU 9EME\",\" MANIN SECRETAN\",\" CHATEAU LANDON\",\" VAILLANT (BOULOGNE-BILLANCOURT)\",\" DIGEON (SAINT MANDE)\",\" REPUBLIQUE PARMENTIER\",\" SAINT LAZARE RER\",\" OURCQ\",\" LEGENDRE\",\" CORENTIN CARIOU\",\" ITALIENS LAFFITE\",\" SQUARE BERLIOZ\",\" TRUDAINE MARTYRS\",\" FELIX (AUBERVILLIERS)\",\" GARE D'AUSTERLITZ 2\",\" TOUR MAUBOURG UNIVERSITE\",\" FREROT (GENTILLY)\",\" OP\\u00c9RA PYRAMIDES\",\" BUFFON AUSTERLITZ\",\" MONCEY BLANCHE\",\" TURENNE BRETAGNE\",\" ZOLA\",\" VALITON (CLICHY)\",\" BELLEVILLE RAMPAL\",\" ALMA\",\" CEVENNES\",\" AURIOL QUAI DE LA GARE\",\" PARIS 2 (CHARENTON)\",\" SAINT MICHEL SARRAZIN\",\" PARIS (LES LILAS)\",\" DESNOUETTES\",\" BUISSON SAINT LOUIS\",\" SAINTE CLOTHILDE\",\" PORTE D'ARCUEIL\",\" CITE UNIVERSITAIRE\",\" PORTE DE CHAMPERET\",\" MOUFFETARD SAINT MEDARD\",\" PORTE DE PASSY\",\" AVENUE DE TERNES\",\" CITE RIVERIN\",\" DUNANT\",\" GENERAL KOENIG\",\" SAINT GERMAIN COPEAU\",\" GEORGE V\",\" VERSION 2 JAURES\",\" PARIS (BOULOGNE-BILLANCOURT)\",\" GEORGES BRASSENS\",\" LA FAYETTE PROVENCE\",\" BAGNOLET-ORTEAUX\",\" RUE DE BASSANO\",\" SAINT GILLES\",\" JAURES 2 (PRE SAINT GERVAIS)\",\" LIART AMIRAL MOUCHEZ\",\" SAINT AUGUSTIN\",\" COLISEE\",\" COLONEL DRIANT\",\" DAREAU\",\" MAZAGRAND COUBERTIN\",\" LA PITIE-SALPETRIERE\",\" BOIS LE PR\\u00caTRE\",\" MARCHE ST QUENTIN\",\" JONCQUIERE\",\" COURCELLES\",\" PORTE DE VINCENNES\",\" BLUETS REPUBLIQUE\",\" TANGER\",\" AVIA\",\" QUAI DE LA LOIRE\",\" PLACE JUSSIEU\",\" JOURDAN LE BRIX ET MESNIN\",\" MOUTON DUVERNET\",\" ARRIVEE\",\" JAURES 2 (BOULOGNE-BILLANCOURT)\",\" LECOURBE VOLONTAIRE\",\" PLACE MONGOLFIER (SAINT MAURICE)\",\" SQUARE NORDLING\",\" LOBAU\",\" MENILMONTANT OBERKAMPF\",\" TRAVERSIERE\",\" CHEMIN VERT SAINT MAUR\",\" MORICE (CLICHY)\",\" RUE MOLITOR\",\" BONNE NOUVELLE SAINT FIACRE\",\" DIDEROT\",\" TEMPLE DE L'ORATOIRE\",\" PARIS 4 (CHARENTON)\",\" ECOUFFES RIVOLI\",\" FAURE (AUBERVILLIERS)\",\" BUTTE AUX CAILLES\",\" GARE DE L'EST SAINT LAURENT\",\" ALFRED ROLL\",\" CASANOVA (IVRY)\",\" QUAI MAURIAC  / PONT DE BERCY\",\" SELLIER (SURESNES)\",\" BOULEVARD MONTMARTRE\",\" BLANCHE\",\" MAIRIE DU 8 \\u00c8ME\",\" MICHEL BIZOT\",\" VICTOR HUGO RUE DE LA POMPE\",\" RONSARD (CHARENTON)\",\" NATIONALE DUCHAMP (PROP 1)\",\" CHAPTAL\",\" BERCY\",\" QUAI PANHARD ET LEVASSOR\",\" METRO ROME\",\" PERGOL\\u00c8SE/ MARBEAU\",\" PLAISANCE ALESIA\",\" OUDINE PATAY\",\" CHARLES HERMITE\",\" BOURSE DU TRAVAIL\",\" GEORGES SAND\",\" CARNOT (MONTREUIL)\",\" WALLACE (PUTEAUX)\",\" POISSONNIERS ORDENER\",\" SEVRES BABYLONE\",\" CONVENTION\",\" PORTE SAINT MARTIN\",\" SAINT MANDE - FAVRE\",\" NARVICK\",\" CURIE (IVRY)\",\" TRAKTIR\",\" JASMIN\",\" BARBES (IVRY)\",\" COUTURIER (IVRY)\",\" ABBE CARTON\",\" THIONVILLE\",\" PARIS 2  (MONTREUIL)\",\" TEMPLE REPUBLIQUE\",\" GARDE CHASSE (LES LILAS)\",\" MICHELIS (NEUILLY)\",\" VOLONTAIRES\",\" ARCHIVES BLANCS MANTEAUX\",\" HUGO (BOULOGNE-BILLANCOURT)\",\" THEBAUD RUE DE CAMBRONNE\",\" SILLY (BOULOGNE-BILLANCOURT)\",\" SAINT JACQUES SOUFFLOT\",\" BRIAND (ISSY LES MOULINEAUX)\",\" PASTEUR (VANVES)\",\" RUE JEAN BOLOGNE\",\" PLACE DE WAGRAM\",\" SAINT LOUIS\",\" SUFFREN TOUR EIFFEL\",\" DE GAULLE (MALAKOFF)\",\" DUNOIS CLISSON\",\" MENILMONTANT BOYER\",\" PLACE CHARLES VALLIN\",\" OBERKAMPF\",\" STALINGRAD (MONTREUIL)\",\" REPUBLIQUE 1 (BOULOGNE-BILLANCOURT)\",\" BOULEVARD FLANDRIN\",\" REPUBLIQUE 2 (BOULOGNE-BILLANCOURT)\",\" D'ORVES (PANTIN)\",\" PLACE DE LA REUNION\",\" RASPAIL QUINET\",\" PORTE DE VERSAILLES\",\" COMPO FORMIO\",\" STADE GEORGES CARPENTIER\",\" LE VAU BERTEAUX\",\" MUS\\u00c9E D'ORSAY\",\" GARE DE LYON\",\" PAU CASALS\",\" MESSINE\",\" AQUABOULEVARD\",\" GAMBETTA GATINES\",\" LOUVRE / COQUILLERE\",\" PLACE PIGALLE\",\" EUROPE\",\" FAIDHERBE PALAIS DE LA FEMME\",\" FONTAINE RAYNOUARD\",\" PLACE DU MAROC\",\" LAFAYETTE (ISSY LES MOULINEAUX)\",\" MARTINIE (VANVES)\",\" SINCHOLLE (CLICHY)\",\" MICHEL ANGE\",\" BROSSOLETTE 2 (MALAKOFF)\",\" JACQUES KELLNER\",\" PORTE DE MENILMONTANT\",\" NATIONALE (BOULOGNE-BILLANCOURT)\",\" POINT DU JOUR (BOULOGNE-BILLANCOURT)\",\" MAIRIE DU 19 EME\",\" PORTE DES LILAS\",\" SAINT HONORE VENDOME\",\" LOUIS GANNE\",\" MANIN CRIMEE\",\" VILLIERS\",\" MOUTON DUVERNET - MAIRIE DU 14EME\",\" RASPAIL 2 (GENTILLY)\",\" MORIZET (BOULOGNE-BILLANCOURT)\",\" STADE WILMILLE\",\" RUE MONTGALLET\",\" PLACE D'ESTIENNE D'ORVES\",\" VILLEMIN\",\" GARE DE LYON VAN GOGH\",\" BONNE NOUVELLE PROP2\",\" ROCHECHOUART MAUBEUGE\",\" DUNKERQUE\",\" ECOLES CARMES\",\" ECLUSES SAINT MARTIN\",\" GAMBETTA - P\\u00c8RE LACHAISE\",\" LOUVRE COQ HERON\",\" OURCQ CRIMEE\",\" DOM P\\u00c9RIGNON GRAVELLE\",\" PLACE JEANNE D'ARC\",\" PORTE DE BAGNOLET\",\" CONDORCET\",\" TELL (PANTIN)\",\" SEGUR ESTREES\",\" LOLIVE 2 (PANTIN)\",\" PORTE MAILLOT\",\" CHARMES (FONTENAY SOUS BOIS)\",\" PLACE DE ROUBAIX\",\" PLACE ROBERT GUILLEMARD\",\" PERLE\",\" VERDUN (SAINT MAURICE)\",\" ITALIE\",\" ROND POINT DES CHAMPS ELYSEES\",\" EXELMANS\",\" CHARTRES (18 ARR.)\",\" SQUARE DE MENILMONTANT\",\" LEO FROT ROQUETTE\",\" HORNET (BAGNOLET)\",\" BUZENVAL\",\" SAINTE FOY (NEUILLY)\",\" MONTPARNASSE CHEVREUSE\",\" PLACE DE CATALOGNE\",\" STADE DIDOT\",\" SEINE (BOULOGNE-BILLANCOURT)\",\" TRUDAINRE ROCHECHOUART\",\" DEBUSSY (CLICHY)\",\" CARDINAL LEMOINE\",\" VERDUN (IVRY)\",\" FOURCHE\",\" REPUBLIQUE (MONTREUIL)\",\" CHAPELLE\",\" MATIGNON\",\" RUE DES BOULETS ( COMPLEMENTAIRE )\",\" PLACE DE BRETEUIL\",\" RASSELINS\",\" PYRENEES VITRUVE\",\" SABLONS MAILLOT\",\" MONCEAU\",\" WILSON (LEVALLOIS)\",\" CHERNOVITZ\",\" LAMBERT\",\" BUZENVAL VIGNOLES\",\" HUGO (NEUILLY)\",\" FAIDHERBE CHALIGNY\",\" PLACE DE L'HOTEL DE VILLE\",\" MARCHAND SANTE\",\" MONTGALLET CHARENTON\",\" RICHARD LENOIR\",\" GIDE (LE KREMLIN BICETRE)\",\" FRIEDLAND CHATEAUBRIAND\",\" FONTENAY (VINCENNES)\",\" RAFFET\",\" SAINT GEORGES\",\" DURIS\",\" RUE DE LA PAIX\",\" CROZATIER\",\" NATIONALE\",\" REGARD\",\" SAINT JACQUES\",\" GLACIERE\",\" VANEAU\",\" BLEUE\",\" CENSIER\",\" BOULEVARD VICTOR\",\" GALILLE\",\" SABLONS\",\" PANTIN\",\" GARE DE L'EST\",\" FROMENT BREGUET\",\" GAMBETTA (ISSY LES MOULINEAUX)\",\" ALBAN SATRAGNE\",\" REIMS\",\" EGLISE D AUTEUIL\",\" BOYER (IVRY)\",\" GENERAL LECLERC (PANTIN)\",\" MARX DORMOY\",\" LACEPEDE\",\" LONDRES AMSTERDAM\",\" ARGENSON (NEUILLY)\",\" BOULARD DAGUERRE\",\" LAGNY (SAINT MANDE)\",\" VIVIENNE\",\" POTEAU\",\" POINCARE VICTOR HUGO\",\" RIQUET PAJOL\",\" BOURDONNAIS TOUR EIFFEL\",\" CHARENTON JARDINIER\",\" MADAULE (ISSY LES MOULINEAUX)\",\" FRANCOEUR CAULAINCOURT\",\" MALAKOFF\",\" ASSAS-VAUGIRARD\",\" CHABROL\",\" GANNERON\",\" QUAI DE SEINE\",\" BAGNOLET\",\" MALSHERBES MONCEAU\",\" JAURES 1 (PRE SAINT GERVAIS)\",\" LARMEROUX (VANVES)\",\" LAGNY (MONTREUIL)\",\" LAOS\",\" LARIBOISIERE\",\" PLACE HENOCQUE VERSION 2\",\" VAILLANT COUTURIER\",\" GENERAL DE GAULLE (SAINT MANDE)\",\" CHATEAU D'EAU\",\" BASTILLE\",\" VAN DYCK\",\" CHARLES DE GAULLE (NEUILLY)\",\" LEPIC\",\" BARON LE ROY TRUFFAUT\",\" MALAKOFF PINARD\",\" JOURDAIN\",\" AMANDIERS\",\" FELIZ ZIEM\",\" DENFERT ROCHEREAU (BOULOGNE-BILLANCOURT)\",\" LAUMIERE\",\" BINEAU (LEVALLOIS)\",\" BOSQUET SAINT DOMINIQUE\",\" PASTEUR (SAINT MANDE)\",\" JAURES (PUTEAUX)\",\" PROUDHON (SAINT DENIS)\",\" KLEBER (ISSY LES MOULINEAUX)\",\" RUE LAURISTON\",\" BOULAINVILLIERS\",\" PORTE DE SAINT OUEN\",\" BEAUBOURG SAINT MERRY\",\" CHATEAU ROUGE\",\" INSURRECTION AOUT 1944 (IVRY)\",\" SAINT ROMAIN CHERCHE MIDI\",\" GARE DU NORD DENAN\",\" NATIONALE BACH\",\" FRANCE (LEVALLOIS)\",\" BELGRADE\",\" RICHARD LENOIR\",\" JULES FERRY REPUBLIQUE\",\" CANAL SAINT DENIS - BD MACDONALD\",\" PORTE DE CLIGNANCOURT\",\" SOLJENITSYNE (PUTEAUX)\",\" GAMBETTA (IVRY)\",\" JOURDAN TOMBE ISSOIRE\",\" MENDES FRANCE\",\" CENTENAIRE (MONTREUIL)\",\" SAINT AMBROISE PARMENTIER\",\" DUTOT\",\" BARBUSSE (MALAKOFF)\",\" ROLLET\",\" BOIS DE BOULOGNE / PORTE DE LA MUETTE 1\",\" NOTRE DAME DES CHAMPS\",\" VAUGIRARD\",\" COUTURIER 1 (LEVALLOIS)\",\" ROME SAINT LAZARE\",\" DELESSERT (PANTIN)\",\" ODEON QUATRE VENTS\",\" ALEXANDER FLEMMING\",\" VAUGIRARD DESGOFFE\",\" TOCQUEVILLE\",\" CRESSON 1 (ISSY LES MOULINEAUX)\",\" SAINT EMILION\",\" PORTE DE MONTROUGE\",\" BAILLY (SAINT DENIS)\",\" BLUM (ISSY LES MOULINEAUX)\",\" BLANC\",\" BEAUREPAIRE\",\" SQUARE LEON\",\" LAFAYETTE TAITBOUT\",\" LE BRUN GOBELINS\",\" TEMPLE JEAN PIERRE TIMBAUD\",\" NOISY LE SEC\",\" SAINT SEBASTIEN FROISSARD\",\" CHARENTON PRAGUE\",\" BERGER\",\" PEREIRE LEVALLOIS\",\" S\\u00c8VRES NEUILLY\",\" DOUMER (ARCUEIL)\",\" JOURDAN BARBOUX\",\" ALESIA SARRETTE\",\" DOUDEAUVILLE LEON\",\" GARE DU NORD 1\",\" PLAINE\",\" SOLFERINO\",\" SARETTE GENERAL LECLERC\",\" REPUBLIQUE 2 (MONTREUIL)\",\" DECAEN\",\" RASPAIL SCHOELCHER\",\" IVRY POINTE D'IVRY\",\" PORTE DE LA VILLETTE\",\" DHALENNE (SAINT OUEN)\",\" BEAUBOURG RAMBUTEAU\",\" RAYMOND LOSSERAND\",\" PYRENEES\",\" GARE ROUTIERE ( SAINT CLOUD)\",\" SEINE FLANDRE\",\" LEDRU ROLLIN (SURESNES)\",\" RIVOLI MAIRIE DU 1ER\",\" BOUSSINGAULT - TOLBIAC\",\" CHARONNE\",\" MADELEINE\",\" OKABE (LE KREMLIN-BICETRE)\",\" PORTE DE VINCENNES BIS\",\" GAMBETTA MARTIN NADAUD\",\" SAINT MARCEL\",\" ST OUEN LAMARCK\",\" SAINT HONORE\",\" MOLITOR - MICHEL ANGE\",\" TOUR D'AUVERGNE\",\" CHAPELLE MARX DORMOY\",\" DUROC\",\" GEORGES MESSIER (MONTROUGE)\",\" VORGES (VINCENNES)\",\" QUAI VOLTAIRE\"]},\"selected\":{\"id\":\"1038\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1039\",\"type\":\"UnionRenderers\"}},\"id\":\"1029\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1020\",\"type\":\"PanTool\"},{\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"id\":\"1022\",\"type\":\"ResetTool\"},{\"id\":\"1023\",\"type\":\"HelpTool\"}]},\"id\":\"1024\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"longitude\"},\"y\":{\"field\":\"latitude\"}},\"id\":\"1032\",\"type\":\"Circle\"}],\"root_ids\":[\"1003\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n",
       "  var render_items = [{\"docid\":\"e0819443-5d44-4467-805f-127563f14842\",\"roots\":{\"1003\":\"c402f92f-fe0b-4fb8-84ca-78f44b4c0833\"}}];\n",
       "  root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
       "\n",
       "  }\n",
       "  if (root.Bokeh !== undefined) {\n",
       "    embed_document(root);\n",
       "  } else {\n",
       "    var attempts = 0;\n",
       "    var timer = setInterval(function(root) {\n",
       "      if (root.Bokeh !== undefined) {\n",
       "        clearInterval(timer);\n",
       "        embed_document(root);\n",
       "      } else {\n",
       "        attempts++;\n",
       "        if (attempts > 100) {\n",
       "          clearInterval(timer);\n",
       "          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
       "        }\n",
       "      }\n",
       "    }, 10, root)\n",
       "  }\n",
       "})(window);"
      ],
      "application/vnd.bokehjs_exec.v0+json": ""
     },
     "metadata": {
      "application/vnd.bokehjs_exec.v0+json": {
       "id": "1003"
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "p = plot(lat, lon)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 5\n",
    "\n",
    "Plot the stations coordinates on a 2D map (latitude versus longitude). Use a different color for stations which are located on a hill."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 207924 characters]\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10, 10))\n",
    "\n",
    "sctrplt = plt.scatter(velibAdds['latitude'], velibAdds['longitude'], c = velibAdds['bonus'], cmap = cm.Accent)\n",
    "\n",
    "plt.xlabel('Latitude', fontsize = 20)\n",
    "plt.ylabel('Longitude', fontsize = 20)\n",
    "plt.title('Stations coordinates', fontsize = 30)\n",
    "plt.xticks([])\n",
    "plt.yticks([])\n",
    "plt.legend(handles = sctrplt.legend_elements()[0], labels = [\"No hill\", \"Hill\"], fontsize = 20)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Question 6\n",
    "\n",
    "Redo questions 1-3 for the subset of stations which are located on a hill. Same questions for those who are not. Comment?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of stations on a hill: 127\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 268304 characters]\n",
      "text/plain": [
       "<Figure size 1080x864 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Q1\n",
    "\n",
    "data_hill = loading_data[velibAdds[\"bonus\"] == 1]\n",
    "dataAdds_hill = velibAdds.to_numpy()[velibAdds[\"bonus\"] == 1]\n",
    "\n",
    "print(\"Number of stations on a hill: %i\" % dataAdds_hill.shape[0])\n",
    "\n",
    "fig, axs = plt.subplots(4, 4, figsize = (15,12))\n",
    "for i in range(4):\n",
    "    for j in range(4):\n",
    "        k_station = 4 * i + j\n",
    "        axs[i, j].plot(time, data_hill[k_station, :], linewidth = 1, color = 'blue')\n",
    "        axs[i, j].set_title(dataAdds_hill[k_station, 3], fontsize = 12)\n",
    "        axs[i, j].vlines(x = np.linspace(1, n_steps, 8), ymin = 0, ymax = 1, \n",
    "                         colors = \"orange\", linestyle = \"dotted\", linewidth = 3)\n",
    "\n",
    "for ax in axs.flat:\n",
    "    ax.set_xlabel('Time', fontsize = 12)\n",
    "    ax.set_ylabel('Loading', fontsize = 12)\n",
    "    ax.tick_params(axis='x', labelsize=10)\n",
    "    ax.tick_params(axis='y', labelsize=10)\n",
    "    \n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 124404 characters]\n",
      "text/plain": [
       "<Figure size 1440x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Q2\n",
    "\n",
    "plt.figure(figsize = (20,6))\n",
    "\n",
    "bp = plt.boxplot(data_hill, widths = 0.75, patch_artist = True)\n",
    "\n",
    "for median in bp['medians']:\n",
    "    median.set(linewidth=5)\n",
    "    \n",
    "plt.vlines(x = np.linspace(1, n_steps, 8), ymin = 0, ymax = 1, \n",
    "           colors = \"blue\", linestyle = \"dotted\", linewidth = 5)\n",
    "\n",
    "plt.xlabel('Time', fontsize = 20)\n",
    "plt.ylabel('Loading', fontsize = 20)\n",
    "plt.title(\"Boxplots\", fontsize = 25)\n",
    "plt.xticks(ticks = np.arange(0, 168, 5), labels=np.arange(0, 168, 5), fontsize = 15)\n",
    "plt.yticks(fontsize = 15)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 137492 characters]\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Q3 \n",
    "\n",
    "data_hill = loading_data[velibAdds[\"bonus\"] == 1]\n",
    "dataAdds_hill = velibAdds.to_numpy()[velibAdds[\"bonus\"] == 1]\n",
    "\n",
    "\n",
    "hours = np.linspace(1, 24, 24)\n",
    "hours\n",
    "\n",
    "mean_per_hour = data_hill.mean(axis = 0)\n",
    "mean_per_hour_per_day = mean_per_hour.reshape((7,24))\n",
    "\n",
    "days = [\"Monday\", \"Tuesday\", \"Wednesday\",\"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"]\n",
    "plt.figure(figsize = (15,10))\n",
    "plt.xlabel('Hourly loading, averaged over stations on a hill', fontsize = 20)\n",
    "plt.ylabel('Loading', fontsize = 20)\n",
    "\n",
    "for i in range(0, 7):\n",
    "    plt.plot(hours, mean_per_hour_per_day[i,:], label = days[i])\n",
    "    plt.legend()\n",
    "    \n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of stations no hill: 1062\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 311352 characters]\n",
      "text/plain": [
       "<Figure size 1080x864 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Q1\n",
    "\n",
    "data_nohill = loading_data[velibAdds[\"bonus\"] == 0]\n",
    "dataAdds_nohill = velibAdds.to_numpy()[velibAdds[\"bonus\"] == 0]\n",
    "\n",
    "print(\"Number of stations no hill: %i\" % dataAdds_nohill.shape[0])\n",
    "\n",
    "fig, axs = plt.subplots(4, 4, figsize = (15,12))\n",
    "for i in range(4):\n",
    "    for j in range(4):\n",
    "        k_station = 4 * i + j\n",
    "        axs[i, j].plot(time, data_nohill[k_station, :], linewidth = 1, color = 'blue')\n",
    "        axs[i, j].set_title(dataAdds_nohill[k_station, 3], fontsize = 12)\n",
    "        axs[i, j].vlines(x = np.linspace(1, n_steps, 8), ymin = 0, ymax = 1, \n",
    "                         colors = \"orange\", linestyle = \"dotted\", linewidth = 3)\n",
    "\n",
    "for ax in axs.flat:\n",
    "    ax.set_xlabel('Time', fontsize = 12)\n",
    "    ax.set_ylabel('Loading', fontsize = 12)\n",
    "    ax.tick_params(axis='x', labelsize=10)\n",
    "    ax.tick_params(axis='y', labelsize=10)\n",
    "    \n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 40580 characters]\n",
      "text/plain": [
       "<Figure size 1440x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Q2\n",
    "\n",
    "plt.figure(figsize = (20,6))\n",
    "\n",
    "bp = plt.boxplot(data_nohill, widths = 0.75, patch_artist = True)\n",
    "\n",
    "for median in bp['medians']:\n",
    "    median.set(linewidth=5)\n",
    "    \n",
    "plt.vlines(x = np.linspace(1, n_steps, 8), ymin = 0, ymax = 1, \n",
    "           colors = \"blue\", linestyle = \"dotted\", linewidth = 5)\n",
    "\n",
    "plt.xlabel('Time', fontsize = 20)\n",
    "plt.ylabel('Loading', fontsize = 20)\n",
    "plt.title(\"Boxplots\", fontsize = 25)\n",
    "plt.xticks(ticks = np.arange(0, 168, 5), labels=np.arange(0, 168, 5), fontsize = 15)\n",
    "plt.yticks(fontsize = 15)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 172820 characters]\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Q3 \n",
    "\n",
    "data_hill = loading_data[velibAdds[\"bonus\"] == 0]\n",
    "dataAdds_hill = velibAdds.to_numpy()[velibAdds[\"bonus\"] == 0]\n",
    "\n",
    "\n",
    "hours = np.linspace(1, 24, 24)\n",
    "hours\n",
    "\n",
    "mean_per_hour = data_hill.mean(axis = 0)\n",
    "mean_per_hour_per_day = mean_per_hour.reshape((7,24))\n",
    "\n",
    "days = [\"Monday\", \"Tuesday\", \"Wednesday\",\"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"]\n",
    "plt.figure(figsize = (15,10))\n",
    "plt.xlabel('Hourly loading, averaged over stations which are not in a hill', fontsize = 20)\n",
    "plt.ylabel('Loading', fontsize = 20)\n",
    "\n",
    "for i in range(0, 7):\n",
    "    plt.plot(hours, mean_per_hour_per_day[i,:], label = days[i])\n",
    "    plt.legend()\n",
    "    \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
