{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Bike Pattern\n", "\n", "We used a little bit of machine learning on [Divvy Data](https://www.divvybikes.com/system-data) to dig into a better division of Chicago. We try to identify patterns among bike stations."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## The data\n", "\n", "[Divvy Data](https://www.divvybikes.com/system-data) publishes a sample of the data. "]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": ["from pyensae.datasource import download_data\n", "file = download_data(\"Divvy_Trips_2016_Q3Q4.zip\", url=\"https://s3.amazonaws.com/divvy-data/tripdata/\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We know the stations."]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": ["import pandas\n", "stations = pandas.read_csv(\"Divvy_Stations_2016_Q3.csv\")\n", "bikes = pandas.concat([pandas.read_csv(\"Divvy_Trips_2016_Q3.csv\"),\n", " pandas.read_csv(\"Divvy_Trips_2016_Q4.csv\")])"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["from datetime import datetime, time\n", "df = bikes\n", "df[\"dtstart\"] = pandas.to_datetime(df.starttime, infer_datetime_format=True)\n", "df[\"dtstop\"] = pandas.to_datetime(df.stoptime, infer_datetime_format=True)\n", "df[\"stopday\"] = df.dtstop.apply(lambda r: datetime(r.year, r.month, r.day))\n", "df[\"stoptime\"] = df.dtstop.apply(lambda r: time(r.hour, r.minute, 0))\n", "df[\"stoptime10\"] = df.dtstop.apply(lambda r: time(r.hour, (r.minute // 10)*10, 0)) # every 10 minutes"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": ["df['stopweekday'] = df['dtstop'].dt.dayofweek"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Normalize per week day (stop)"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["Index(['trip_id', 'starttime', 'stoptime', 'bikeid', 'tripduration',\n", " 'from_station_id', 'from_station_name', 'to_station_id',\n", " 'to_station_name', 'usertype', 'gender', 'birthyear', 'dtstart',\n", " 'dtstop', 'stopday', 'stoptime10', 'stopweekday'],\n", " dtype='object')"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["df.columns"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_id \n", " to_station_name \n", " stopweekday \n", " stoptime10 \n", " nb_trips \n", " \n", " \n", " \n", " \n", " 0 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:10:00 \n", " 2 \n", " \n", " \n", " 1 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:20:00 \n", " 2 \n", " \n", " \n", " 2 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:30:00 \n", " 2 \n", " \n", " \n", " 3 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 01:00:00 \n", " 3 \n", " \n", " \n", " 4 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 01:10:00 \n", " 2 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_id to_station_name stopweekday stoptime10 nb_trips\n", "0 2 Michigan Ave & Balbo Ave 0 00:10:00 2\n", "1 2 Michigan Ave & Balbo Ave 0 00:20:00 2\n", "2 2 Michigan Ave & Balbo Ave 0 00:30:00 2\n", "3 2 Michigan Ave & Balbo Ave 0 01:00:00 3\n", "4 2 Michigan Ave & Balbo Ave 0 01:10:00 2"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["key = [\"to_station_id\", \"to_station_name\", \"stopweekday\", \"stoptime10\"]\n", "keep = key + [\"trip_id\"]\n", "aggtime = df[keep].groupby(key, as_index=False).count()\n", "aggtime.columns = key + [\"nb_trips\"]\n", "aggtime.head()"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_id \n", " to_station_name \n", " stopweekday \n", " nb_trips \n", " \n", " \n", " \n", " \n", " 222 \n", " 35 \n", " Streeter Dr & Grand Ave \n", " 5 \n", " 15380 \n", " \n", " \n", " 223 \n", " 35 \n", " Streeter Dr & Grand Ave \n", " 6 \n", " 14680 \n", " \n", " \n", " 217 \n", " 35 \n", " Streeter Dr & Grand Ave \n", " 0 \n", " 9228 \n", " \n", " \n", " 221 \n", " 35 \n", " Streeter Dr & Grand Ave \n", " 4 \n", " 7945 \n", " \n", " \n", " 1741 \n", " 268 \n", " Lake Shore Dr & North Blvd \n", " 5 \n", " 7508 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_id to_station_name stopweekday nb_trips\n", "222 35 Streeter Dr & Grand Ave 5 15380\n", "223 35 Streeter Dr & Grand Ave 6 14680\n", "217 35 Streeter Dr & Grand Ave 0 9228\n", "221 35 Streeter Dr & Grand Ave 4 7945\n", "1741 268 Lake Shore Dr & North Blvd 5 7508"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["aggday = df[keep[:-2] + [\"trip_id\"]].groupby(key[:-1], as_index=False).count()\n", "aggday.columns = key[:-1] + [\"nb_trips\"]\n", "aggday.sort_values(\"nb_trips\", ascending=False).head()"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_id \n", " to_station_name \n", " stopweekday \n", " stoptime10 \n", " nb_trips \n", " nb_tripsday \n", " \n", " \n", " \n", " \n", " 0 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:10:00 \n", " 2 \n", " 913 \n", " \n", " \n", " 1 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:20:00 \n", " 2 \n", " 913 \n", " \n", " \n", " 2 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:30:00 \n", " 2 \n", " 913 \n", " \n", " \n", " 3 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 01:00:00 \n", " 3 \n", " 913 \n", " \n", " \n", " 4 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 01:10:00 \n", " 2 \n", " 913 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_id to_station_name stopweekday stoptime10 nb_trips \\\n", "0 2 Michigan Ave & Balbo Ave 0 00:10:00 2 \n", "1 2 Michigan Ave & Balbo Ave 0 00:20:00 2 \n", "2 2 Michigan Ave & Balbo Ave 0 00:30:00 2 \n", "3 2 Michigan Ave & Balbo Ave 0 01:00:00 3 \n", "4 2 Michigan Ave & Balbo Ave 0 01:10:00 2 \n", "\n", " nb_tripsday \n", "0 913 \n", "1 913 \n", "2 913 \n", "3 913 \n", "4 913 "]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["merge = aggtime.merge(aggday, on=key[:-1], suffixes=(\"\", \"day\"))\n", "merge.head()"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_id \n", " to_station_name \n", " stopweekday \n", " stoptime10 \n", " nb_trips \n", " nb_tripsday \n", " dist \n", " \n", " \n", " \n", " \n", " 0 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:10:00 \n", " 2 \n", " 913 \n", " 0.002191 \n", " \n", " \n", " 1 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:20:00 \n", " 2 \n", " 913 \n", " 0.002191 \n", " \n", " \n", " 2 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 00:30:00 \n", " 2 \n", " 913 \n", " 0.002191 \n", " \n", " \n", " 3 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 01:00:00 \n", " 3 \n", " 913 \n", " 0.003286 \n", " \n", " \n", " 4 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 01:10:00 \n", " 2 \n", " 913 \n", " 0.002191 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_id to_station_name stopweekday stoptime10 nb_trips \\\n", "0 2 Michigan Ave & Balbo Ave 0 00:10:00 2 \n", "1 2 Michigan Ave & Balbo Ave 0 00:20:00 2 \n", "2 2 Michigan Ave & Balbo Ave 0 00:30:00 2 \n", "3 2 Michigan Ave & Balbo Ave 0 01:00:00 3 \n", "4 2 Michigan Ave & Balbo Ave 0 01:10:00 2 \n", "\n", " nb_tripsday dist \n", "0 913 0.002191 \n", "1 913 0.002191 \n", "2 913 0.002191 \n", "3 913 0.003286 \n", "4 913 0.002191 "]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["merge[\"dist\"] = merge[\"nb_trips\"] / merge[\"nb_tripsday\"]\n", "merge.head()"]}, {"cell_type": "code", "execution_count": 12, "metadata": {"scrolled": false}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["merge[merge[\"to_station_id\"] == 2].plot(x=\"stoptime10\", y=\"dist\", figsize=(14,4), kind=\"area\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Clustering (stop)\n", "\n", "We cluster these distribution to find some patterns. But we need vectors of equal size which should be equal to 24*6."]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["['to_station_id', 'to_station_name', 'stopweekday', 'stoptime10']\n"]}, {"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_id \n", " to_station_name \n", " stopweekday \n", " stoptime10 \n", " nb_trips \n", " nb_tripsday \n", " dist \n", " \n", " \n", " \n", " \n", " 0 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 114 \n", " 114 \n", " 114 \n", " 114 \n", " \n", " \n", " 1 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 1 \n", " 109 \n", " 109 \n", " 109 \n", " 109 \n", " \n", " \n", " 2 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 2 \n", " 116 \n", " 116 \n", " 116 \n", " 116 \n", " \n", " \n", " 3 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 3 \n", " 112 \n", " 112 \n", " 112 \n", " 112 \n", " \n", " \n", " 4 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 4 \n", " 117 \n", " 117 \n", " 117 \n", " 117 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_id to_station_name stopweekday stoptime10 nb_trips \\\n", "0 2 Michigan Ave & Balbo Ave 0 114 114 \n", "1 2 Michigan Ave & Balbo Ave 1 109 109 \n", "2 2 Michigan Ave & Balbo Ave 2 116 116 \n", "3 2 Michigan Ave & Balbo Ave 3 112 112 \n", "4 2 Michigan Ave & Balbo Ave 4 117 117 \n", "\n", " nb_tripsday dist \n", "0 114 114 \n", "1 109 109 \n", "2 116 116 \n", "3 112 112 \n", "4 117 117 "]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["print(key)\n", "merge.groupby(key[:-1], as_index=False).count().head()"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_id \n", " to_station_name \n", " stopweekday \n", " stoptime10 \n", " nb_trips \n", " nb_tripsday \n", " dist \n", " \n", " \n", " \n", " \n", " 0 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 144 \n", " 144 \n", " 144 \n", " 144 \n", " \n", " \n", " 1 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 1 \n", " 144 \n", " 144 \n", " 144 \n", " 144 \n", " \n", " \n", " 2 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 2 \n", " 144 \n", " 144 \n", " 144 \n", " 144 \n", " \n", " \n", " 3 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 3 \n", " 144 \n", " 144 \n", " 144 \n", " 144 \n", " \n", " \n", " 4 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 4 \n", " 144 \n", " 144 \n", " 144 \n", " 144 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_id to_station_name stopweekday stoptime10 nb_trips \\\n", "0 2 Michigan Ave & Balbo Ave 0 144 144 \n", "1 2 Michigan Ave & Balbo Ave 1 144 144 \n", "2 2 Michigan Ave & Balbo Ave 2 144 144 \n", "3 2 Michigan Ave & Balbo Ave 3 144 144 \n", "4 2 Michigan Ave & Balbo Ave 4 144 144 \n", "\n", " nb_tripsday dist \n", "0 144 144 \n", "1 144 144 \n", "2 144 144 \n", "3 144 144 \n", "4 144 144 "]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["from ensae_projects.datainc.data_bikes import add_missing_time\n", "full = df = add_missing_time(merge, delay=10, column=\"stoptime10\", values=[\"nb_trips\", \"nb_tripsday\", \"dist\"])\n", "df.groupby(key[:-1], as_index=False).count().head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["This is much better."]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAAEKCAYAAAA/yuVcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XmUZWV5L/7vW1XdtITBK+LViLlFBM1FY4wSY5aJWYmYi4kBveAS43WKhkzeX2786S9lDEa5DnA1gl4BQZHJAbBlaCzobqChG7qb7q6eu3qssWue68zzfn9/nHOq99lnD++eztl1zvezFovqU/vs2jWdep/9PO/zCCkliIiIiIiI2klHsy+AiIiIiIio0RgIERERERFR22EgREREREREbYeBEBERERERtR0GQkRERERE1HYYCBERERERUdthIERERERERG2HgRAREREREbUdBkJERERERNR2upp9AW688pWvlN3d3c2+DCIiIiIiiqi9e/fOSykvdDpuVQVC3d3d6Ovra/ZlEBERERFRRAkhRlWOY2kcERERERG1HQZCRERERETUdhgIERERERFR21lVe4SIiIiIiMi9QqGA8fFxZLPZZl9KYNatW4eLLroIa9as8fR8BkJERERERC1ufHwc5557Lrq7uyGEaPbl+CalxMLCAsbHx3HxxRd7OgdL44iIiIiIWlw2m8UFF1zQEkEQAAghcMEFF/jKcDEQIiIiIiJqA60SBFX5/XwYCBERERERUdvhHiEiIiJquK/96ijGltK482OXN/tSiNrS5V97GvPJfGDne+U5a9H3b+9VPv4rX/kKzjnnHMTjcbz73e/GFVdcYXrcY489hje84Q247LLLgrrUFcwIERERUcMdmohh89EZZPKlZl8KUVsKMgjyc74bb7zRMggCyoHQ0aNHvV6WLaVASAhxpRDihBBiQAjRY/L+s4QQD1Xev0sI0V15/B1CiAOV/w4KIT6oek4iIiJqXYlMAVICErLZl0JEDfL1r38db3zjG3HFFVfgxIkTAIBPfvKTWL9+PQCgp6cHl112Gd7ylrfg85//PHbs2IENGzbgC1/4At761rdicHAw0OtxLI0TQnQCuA3AewGMA9gjhNggpdSHZp8GsCSlvEQIcR2AmwF8GMARAJdLKYtCiNcAOCiEeAKAVDgnERER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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["df[df[\"to_station_id\"] == 2].plot(x=\"stoptime10\", y=\"dist\", figsize=(14,4), kind=\"area\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Let's build the features."]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " stoptime10 \n", " to_station_id \n", " to_station_name \n", " stopweekday \n", " 00:00:00 \n", " 00:10:00 \n", " 00:20:00 \n", " 00:30:00 \n", " 00:40:00 \n", " 00:50:00 \n", " 01:00:00 \n", " ... \n", " 22:20:00 \n", " 22:30:00 \n", " 22:40:00 \n", " 22:50:00 \n", " 23:00:00 \n", " 23:10:00 \n", " 23:20:00 \n", " 23:30:00 \n", " 23:40:00 \n", " 23:50:00 \n", " \n", " \n", " \n", " \n", " 0 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 0 \n", " 0.000000 \n", " 0.002191 \n", " 0.002191 \n", " 0.002191 \n", " 0.000000 \n", " 0.000000 \n", " 0.003286 \n", " ... \n", " 0.004381 \n", " 0.002191 \n", " 0.004381 \n", " 0.002191 \n", " 0.004381 \n", " 0.004381 \n", " 0.005476 \n", " 0.002191 \n", " 0.000000 \n", " 0.005476 \n", " \n", " \n", " 1 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 1 \n", " 0.000000 \n", " 0.002677 \n", " 0.000000 \n", " 0.000000 \n", " 0.001339 \n", " 0.002677 \n", " 0.000000 \n", " ... \n", " 0.009371 \n", " 0.012048 \n", " 0.006693 \n", " 0.004016 \n", " 0.005355 \n", " 0.006693 \n", " 0.002677 \n", " 0.000000 \n", " 0.000000 \n", " 0.000000 \n", " \n", " \n", " 2 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 2 \n", " 0.002907 \n", " 0.002907 \n", " 0.002907 \n", " 0.004360 \n", " 0.001453 \n", " 0.007267 \n", " 0.002907 \n", " ... \n", " 0.002907 \n", " 0.002907 \n", " 0.015988 \n", " 0.005814 \n", " 0.001453 \n", " 0.001453 \n", " 0.011628 \n", " 0.000000 \n", " 0.000000 \n", " 0.007267 \n", " \n", " \n", " 3 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 3 \n", " 0.000000 \n", " 0.000000 \n", " 0.000000 \n", " 0.000000 \n", " 0.007728 \n", " 0.000000 \n", " 0.001546 \n", " ... \n", " 0.009274 \n", " 0.003091 \n", " 0.003091 \n", " 0.007728 \n", " 0.001546 \n", " 0.003091 \n", " 0.009274 \n", " 0.001546 \n", " 0.007728 \n", " 0.001546 \n", " \n", " \n", " 4 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 4 \n", " 0.002053 \n", " 0.000000 \n", " 0.000000 \n", " 0.002053 \n", " 0.000000 \n", " 0.002053 \n", " 0.003080 \n", " ... \n", " 0.008214 \n", " 0.001027 \n", " 0.006160 \n", " 0.004107 \n", " 0.015400 \n", " 0.006160 \n", " 0.002053 \n", " 0.006160 \n", " 0.007187 \n", " 0.000000 \n", " \n", " \n", "
\n", "
5 rows \u00d7 147 columns
\n", "
"], "text/plain": ["stoptime10 to_station_id to_station_name stopweekday 00:00:00 \\\n", "0 2 Michigan Ave & Balbo Ave 0 0.000000 \n", "1 2 Michigan Ave & Balbo Ave 1 0.000000 \n", "2 2 Michigan Ave & Balbo Ave 2 0.002907 \n", "3 2 Michigan Ave & Balbo Ave 3 0.000000 \n", "4 2 Michigan Ave & Balbo Ave 4 0.002053 \n", "\n", "stoptime10 00:10:00 00:20:00 00:30:00 00:40:00 00:50:00 01:00:00 \\\n", "0 0.002191 0.002191 0.002191 0.000000 0.000000 0.003286 \n", "1 0.002677 0.000000 0.000000 0.001339 0.002677 0.000000 \n", "2 0.002907 0.002907 0.004360 0.001453 0.007267 0.002907 \n", "3 0.000000 0.000000 0.000000 0.007728 0.000000 0.001546 \n", "4 0.000000 0.000000 0.002053 0.000000 0.002053 0.003080 \n", "\n", "stoptime10 ... 22:20:00 22:30:00 22:40:00 22:50:00 23:00:00 \\\n", "0 ... 0.004381 0.002191 0.004381 0.002191 0.004381 \n", "1 ... 0.009371 0.012048 0.006693 0.004016 0.005355 \n", "2 ... 0.002907 0.002907 0.015988 0.005814 0.001453 \n", "3 ... 0.009274 0.003091 0.003091 0.007728 0.001546 \n", "4 ... 0.008214 0.001027 0.006160 0.004107 0.015400 \n", "\n", "stoptime10 23:10:00 23:20:00 23:30:00 23:40:00 23:50:00 \n", "0 0.004381 0.005476 0.002191 0.000000 0.005476 \n", "1 0.006693 0.002677 0.000000 0.000000 0.000000 \n", "2 0.001453 0.011628 0.000000 0.000000 0.007267 \n", "3 0.003091 0.009274 0.001546 0.007728 0.001546 \n", "4 0.006160 0.002053 0.006160 0.007187 0.000000 \n", "\n", "[5 rows x 147 columns]"]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["features = df.pivot_table(index=[\"to_station_id\", \"to_station_name\", \"stopweekday\"],\n", " columns=\"stoptime10\", values=\"dist\").reset_index()\n", "features.head()"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"text/plain": ["Index([00:00:00, 00:10:00, 00:20:00, 00:30:00, 00:40:00, 00:50:00, 01:00:00,\n", " 01:10:00, 01:20:00, 01:30:00,\n", " ...\n", " 22:20:00, 22:30:00, 22:40:00, 22:50:00, 23:00:00, 23:10:00, 23:20:00,\n", " 23:30:00, 23:40:00, 23:50:00],\n", " dtype='object', name='stoptime10', length=144)"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["names = features.columns[3:]\n", "names"]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [{"data": {"text/plain": ["KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n", " n_clusters=8, n_init=10, n_jobs=1, precompute_distances='auto',\n", " random_state=None, tol=0.0001, verbose=0)"]}, "execution_count": 19, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.cluster import KMeans\n", "clus = KMeans(8)\n", "clus.fit(features[names])"]}, {"cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [{"data": {"text/plain": ["{0, 1, 2, 3, 4, 5, 6, 7}"]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["pred = clus.predict(features[names])\n", "set(pred)"]}, {"cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": ["features[\"cluster\"] = pred"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Let's see what it means accross day."]}, {"cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " stoptime10 \n", " to_station_id \n", " \n", " \n", " cluster \n", " stopweekday \n", " \n", " \n", " \n", " \n", " \n", " 0 \n", " 0 \n", " 304 \n", " \n", " \n", " 1 \n", " 348 \n", " \n", " \n", " 2 \n", " 337 \n", " \n", " \n", " 3 \n", " 315 \n", " \n", " \n", " 4 \n", " 275 \n", " \n", " \n", " 5 \n", " 36 \n", " \n", " \n", " 6 \n", " 46 \n", " \n", " \n", " 1 \n", " 0 \n", " 2 \n", " \n", " \n", " 1 \n", " 1 \n", " \n", " \n", " 2 \n", " 1 \n", " \n", " \n", " 6 \n", " 1 \n", " \n", " \n", " 2 \n", " 5 \n", " 2 \n", " \n", " \n", " 3 \n", " 0 \n", " 1 \n", " \n", " \n", " 2 \n", " 1 \n", " \n", " \n", " 3 \n", " 1 \n", " \n", " \n", " 4 \n", " 2 \n", " \n", " \n", " 4 \n", " 0 \n", " 1 \n", " \n", " \n", " 1 \n", " 1 \n", " \n", " \n", " 2 \n", " 1 \n", " \n", " \n", " 3 \n", " 1 \n", " \n", " \n", " 5 \n", " 0 \n", " 1 \n", " \n", " \n", " 6 \n", " 2 \n", " \n", " \n", " 6 \n", " 0 \n", " 123 \n", " \n", " \n", " 1 \n", " 133 \n", " \n", " \n", " 2 \n", " 143 \n", " \n", " \n", " 3 \n", " 137 \n", " \n", " \n", " 4 \n", " 147 \n", " \n", " \n", " 5 \n", " 13 \n", " \n", " \n", " 6 \n", " 11 \n", " \n", " \n", " 7 \n", " 0 \n", " 141 \n", " \n", " \n", " 1 \n", " 93 \n", " \n", " \n", " 2 \n", " 94 \n", " \n", " \n", " 3 \n", " 121 \n", " \n", " \n", " 4 \n", " 154 \n", " \n", " \n", " 5 \n", " 526 \n", " \n", " \n", " 6 \n", " 514 \n", " \n", " \n", "
\n", "
"], "text/plain": ["stoptime10 to_station_id\n", "cluster stopweekday \n", "0 0 304\n", " 1 348\n", " 2 337\n", " 3 315\n", " 4 275\n", " 5 36\n", " 6 46\n", "1 0 2\n", " 1 1\n", " 2 1\n", " 6 1\n", "2 5 2\n", "3 0 1\n", " 2 1\n", " 3 1\n", " 4 2\n", "4 0 1\n", " 1 1\n", " 2 1\n", " 3 1\n", "5 0 1\n", " 6 2\n", "6 0 123\n", " 1 133\n", " 2 143\n", " 3 137\n", " 4 147\n", " 5 13\n", " 6 11\n", "7 0 141\n", " 1 93\n", " 2 94\n", " 3 121\n", " 4 154\n", " 5 526\n", " 6 514"]}, "execution_count": 22, "metadata": {}, "output_type": "execute_result"}], "source": ["features[[\"cluster\", \"stopweekday\", \"to_station_id\"]].groupby([\"cluster\", \"stopweekday\"]).count()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Let's draw the clusters."]}, {"cell_type": "code", "execution_count": 22, "metadata": {"scrolled": false}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["centers = clus.cluster_centers_.T\n", "import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(centers.shape[1], 1, figsize=(10,10))\n", "x = list(range(0,centers.shape[0]))\n", "for i in range(centers.shape[1]):\n", " ax[i].bar (x, centers[:,i], width=1.0)\n", " ax[i].set_ylabel(\"cluster %d\" % i)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Three patterns emerge. However, small clusters are still annoying but let's show them on a map."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Graph\n", "\n", "We first need to get 7 clusters for each stations, one per day."]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " stopweekday \n", " 0 \n", " 1 \n", " 2 \n", " 3 \n", " 4 \n", " 5 \n", " 6 \n", " \n", " \n", " to_station_id \n", " to_station_name \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 7.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " \n", " \n", " 3 \n", " Shedd Aquarium \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " \n", " \n", " 4 \n", " Burnham Harbor \n", " 7.0 \n", " 7.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " \n", " \n", " 5 \n", " State St & Harrison St \n", " 0.0 \n", " 0.0 \n", " 0.0 \n", " 0.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " \n", " \n", " 6 \n", " Dusable Harbor \n", " 7.0 \n", " 7.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " \n", " \n", "
\n", "
"], "text/plain": ["stopweekday 0 1 2 3 4 5 6\n", "to_station_id to_station_name \n", "2 Michigan Ave & Balbo Ave 7.0 0.0 7.0 7.0 7.0 7.0 7.0\n", "3 Shedd Aquarium 7.0 7.0 7.0 7.0 7.0 7.0 7.0\n", "4 Burnham Harbor 7.0 7.0 0.0 7.0 7.0 7.0 7.0\n", "5 State St & Harrison St 0.0 0.0 0.0 0.0 0.0 7.0 7.0\n", "6 Dusable Harbor 7.0 7.0 0.0 7.0 7.0 7.0 7.0"]}, "execution_count": 24, "metadata": {}, "output_type": "execute_result"}], "source": ["piv = features.pivot_table(index=[\"to_station_id\",\"to_station_name\"], columns=\"stopweekday\", values=\"cluster\")\n", "piv.head()"]}, {"cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": ["piv[\"distincts\"] = piv.apply(lambda row: len(set(row[i] for i in range(0,7))), axis=1)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Let's see which station is classified in more than 4 clusters. NaN means no bikes stopped at this stations. They are mostly unused stations."]}, {"cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " stopweekday \n", " 0 \n", " 1 \n", " 2 \n", " 3 \n", " 4 \n", " 5 \n", " 6 \n", " distincts \n", " \n", " \n", " to_station_id \n", " to_station_name \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 384 \n", " Halsted St & 51st St \n", " NaN \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 0.0 \n", " 0.0 \n", " 6.0 \n", " 4 \n", " \n", " \n", " 386 \n", " Halsted St & 56th St \n", " 5.0 \n", " 7.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 6.0 \n", " 4 \n", " \n", " \n", " 409 \n", " Shields Ave & 43rd St \n", " 7.0 \n", " NaN \n", " 7.0 \n", " NaN \n", " 6.0 \n", " 0.0 \n", " 7.0 \n", " 5 \n", " \n", " \n", " 530 \n", " Laramie Ave & Kinzie St \n", " 3.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 0.0 \n", " 6.0 \n", " 7.0 \n", " 4 \n", " \n", " \n", " 538 \n", " Cicero Ave & Flournoy St \n", " 7.0 \n", " 6.0 \n", " NaN \n", " 6.0 \n", " 7.0 \n", " 7.0 \n", " 5.0 \n", " 4 \n", " \n", " \n", " 543 \n", " Laramie Ave & Gladys Ave \n", " 0.0 \n", " 7.0 \n", " 6.0 \n", " 6.0 \n", " 6.0 \n", " 6.0 \n", " NaN \n", " 4 \n", " \n", " \n", " 548 \n", " Morgan St & Pershing Rd \n", " NaN \n", " 7.0 \n", " 7.0 \n", " 6.0 \n", " 0.0 \n", " 7.0 \n", " 0.0 \n", " 4 \n", " \n", " \n", " 556 \n", " Throop St & 52nd St \n", " 7.0 \n", " 0.0 \n", " 7.0 \n", " 3.0 \n", " 0.0 \n", " 2.0 \n", " 7.0 \n", " 4 \n", " \n", " \n", " 557 \n", " Damen Ave & Garfield Blvd \n", " NaN \n", " 0.0 \n", " 3.0 \n", " NaN \n", " NaN \n", " NaN \n", " NaN \n", " 7 \n", " \n", " \n", " 558 \n", " Ashland Ave & Garfield Blvd \n", " NaN \n", " 7.0 \n", " 7.0 \n", " 0.0 \n", " 3.0 \n", " 7.0 \n", " NaN \n", " 5 \n", " \n", " \n", " 561 \n", " Damen Ave & 61st St \n", " 1.0 \n", " 6.0 \n", " 6.0 \n", " 0.0 \n", " NaN \n", " 7.0 \n", " 7.0 \n", " 5 \n", " \n", " \n", " 562 \n", " Racine Ave & 61st St \n", " NaN \n", " NaN \n", " NaN \n", " NaN \n", " 6.0 \n", " NaN \n", " NaN \n", " 7 \n", " \n", " \n", " 564 \n", " Racine Ave & 65th St \n", " 7.0 \n", " NaN \n", " NaN \n", " NaN \n", " 0.0 \n", " 2.0 \n", " 6.0 \n", " 7 \n", " \n", " \n", " 565 \n", " Ashland Ave & 66th St \n", " 7.0 \n", " 0.0 \n", " NaN \n", " 7.0 \n", " 7.0 \n", " NaN \n", " 0.0 \n", " 4 \n", " \n", " \n", " 567 \n", " May St & 69th St \n", " 1.0 \n", " 1.0 \n", " 6.0 \n", " 6.0 \n", " 6.0 \n", " NaN \n", " NaN \n", " 4 \n", " \n", " \n", " 569 \n", " Woodlawn Ave & 75th St \n", " NaN \n", " NaN \n", " 0.0 \n", " 7.0 \n", " 0.0 \n", " NaN \n", " NaN \n", " 6 \n", " \n", " \n", " 576 \n", " Greenwood Ave & 79th St \n", " 0.0 \n", " 0.0 \n", " 0.0 \n", " NaN \n", " 6.0 \n", " NaN \n", " 0.0 \n", " 4 \n", " \n", " \n", " 580 \n", " Exchange Ave & 79th St \n", " 4.0 \n", " NaN \n", " 0.0 \n", " 0.0 \n", " 0.0 \n", " 7.0 \n", " 0.0 \n", " 4 \n", " \n", " \n", " 581 \n", " Commercial Ave & 83rd St \n", " 7.0 \n", " NaN \n", " 0.0 \n", " NaN \n", " NaN \n", " 7.0 \n", " 0.0 \n", " 5 \n", " \n", " \n", " 582 \n", " Phillips Ave & 82nd St \n", " NaN \n", " NaN \n", " 7.0 \n", " 7.0 \n", " NaN \n", " 7.0 \n", " 0.0 \n", " 5 \n", " \n", " \n", " 584 \n", " Ellis Ave & 83rd St \n", " NaN \n", " 7.0 \n", " NaN \n", " 6.0 \n", " 6.0 \n", " 7.0 \n", " NaN \n", " 5 \n", " \n", " \n", " 586 \n", " MLK Jr Dr & 83rd St \n", " 7.0 \n", " 6.0 \n", " 1.0 \n", " 6.0 \n", " 6.0 \n", " 0.0 \n", " 0.0 \n", " 4 \n", " \n", " \n", " 587 \n", " Wabash Ave & 83rd St \n", " NaN \n", " NaN \n", " 7.0 \n", " NaN \n", " 7.0 \n", " 6.0 \n", " 0.0 \n", " 6 \n", " \n", " \n", " 588 \n", " South Chicago Ave & 83rd St \n", " NaN \n", " 0.0 \n", " 0.0 \n", " NaN \n", " 7.0 \n", " 7.0 \n", " 0.0 \n", " 4 \n", " \n", " \n", " 591 \n", " Kilbourn Ave & Milwaukee Ave \n", " 0.0 \n", " 6.0 \n", " 6.0 \n", " 6.0 \n", " 6.0 \n", " 7.0 \n", " NaN \n", " 4 \n", " \n", " \n", " 593 \n", " Halsted St & 59th St \n", " NaN \n", " 4.0 \n", " 7.0 \n", " 7.0 \n", " NaN \n", " 7.0 \n", " 5.0 \n", " 5 \n", " \n", " \n", "
\n", "
"], "text/plain": ["stopweekday 0 1 2 3 4 5 6 \\\n", "to_station_id to_station_name \n", "384 Halsted St & 51st St NaN 7.0 7.0 7.0 0.0 0.0 6.0 \n", "386 Halsted St & 56th St 5.0 7.0 0.0 7.0 7.0 7.0 6.0 \n", "409 Shields Ave & 43rd St 7.0 NaN 7.0 NaN 6.0 0.0 7.0 \n", "530 Laramie Ave & Kinzie St 3.0 7.0 7.0 7.0 0.0 6.0 7.0 \n", "538 Cicero Ave & Flournoy St 7.0 6.0 NaN 6.0 7.0 7.0 5.0 \n", "543 Laramie Ave & Gladys Ave 0.0 7.0 6.0 6.0 6.0 6.0 NaN \n", "548 Morgan St & Pershing Rd NaN 7.0 7.0 6.0 0.0 7.0 0.0 \n", "556 Throop St & 52nd St 7.0 0.0 7.0 3.0 0.0 2.0 7.0 \n", "557 Damen Ave & Garfield Blvd NaN 0.0 3.0 NaN NaN NaN NaN \n", "558 Ashland Ave & Garfield Blvd NaN 7.0 7.0 0.0 3.0 7.0 NaN \n", "561 Damen Ave & 61st St 1.0 6.0 6.0 0.0 NaN 7.0 7.0 \n", "562 Racine Ave & 61st St NaN NaN NaN NaN 6.0 NaN NaN \n", "564 Racine Ave & 65th St 7.0 NaN NaN NaN 0.0 2.0 6.0 \n", "565 Ashland Ave & 66th St 7.0 0.0 NaN 7.0 7.0 NaN 0.0 \n", "567 May St & 69th St 1.0 1.0 6.0 6.0 6.0 NaN NaN \n", "569 Woodlawn Ave & 75th St NaN NaN 0.0 7.0 0.0 NaN NaN \n", "576 Greenwood Ave & 79th St 0.0 0.0 0.0 NaN 6.0 NaN 0.0 \n", "580 Exchange Ave & 79th St 4.0 NaN 0.0 0.0 0.0 7.0 0.0 \n", "581 Commercial Ave & 83rd St 7.0 NaN 0.0 NaN NaN 7.0 0.0 \n", "582 Phillips Ave & 82nd St NaN NaN 7.0 7.0 NaN 7.0 0.0 \n", "584 Ellis Ave & 83rd St NaN 7.0 NaN 6.0 6.0 7.0 NaN \n", "586 MLK Jr Dr & 83rd St 7.0 6.0 1.0 6.0 6.0 0.0 0.0 \n", "587 Wabash Ave & 83rd St NaN NaN 7.0 NaN 7.0 6.0 0.0 \n", "588 South Chicago Ave & 83rd St NaN 0.0 0.0 NaN 7.0 7.0 0.0 \n", "591 Kilbourn Ave & Milwaukee Ave 0.0 6.0 6.0 6.0 6.0 7.0 NaN \n", "593 Halsted St & 59th St NaN 4.0 7.0 7.0 NaN 7.0 5.0 \n", "\n", "stopweekday distincts \n", "to_station_id to_station_name \n", "384 Halsted St & 51st St 4 \n", "386 Halsted St & 56th St 4 \n", "409 Shields Ave & 43rd St 5 \n", "530 Laramie Ave & Kinzie St 4 \n", "538 Cicero Ave & Flournoy St 4 \n", "543 Laramie Ave & Gladys Ave 4 \n", "548 Morgan St & Pershing Rd 4 \n", "556 Throop St & 52nd St 4 \n", "557 Damen Ave & Garfield Blvd 7 \n", "558 Ashland Ave & Garfield Blvd 5 \n", "561 Damen Ave & 61st St 5 \n", "562 Racine Ave & 61st St 7 \n", "564 Racine Ave & 65th St 7 \n", "565 Ashland Ave & 66th St 4 \n", "567 May St & 69th St 4 \n", "569 Woodlawn Ave & 75th St 6 \n", "576 Greenwood Ave & 79th St 4 \n", "580 Exchange Ave & 79th St 4 \n", "581 Commercial Ave & 83rd St 5 \n", "582 Phillips Ave & 82nd St 5 \n", "584 Ellis Ave & 83rd St 5 \n", "586 MLK Jr Dr & 83rd St 4 \n", "587 Wabash Ave & 83rd St 6 \n", "588 South Chicago Ave & 83rd St 4 \n", "591 Kilbourn Ave & Milwaukee Ave 4 \n", "593 Halsted St & 59th St 5 "]}, "execution_count": 26, "metadata": {}, "output_type": "execute_result"}], "source": ["piv[piv.distincts >= 4]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Let's draw a map on a week day."]}, {"cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " id \n", " name \n", " latitude \n", " longitude \n", " dpcapacity \n", " online_date \n", " to_station_id \n", " to_station_name \n", " 0 \n", " 1 \n", " 2 \n", " 3 \n", " 4 \n", " 5 \n", " 6 \n", " distincts \n", " \n", " \n", " \n", " \n", " 357 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 41.872638 \n", " -87.623979 \n", " 35 \n", " 5/8/2015 \n", " 2 \n", " Michigan Ave & Balbo Ave \n", " 7.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 2 \n", " \n", " \n", " 456 \n", " 3 \n", " Shedd Aquarium \n", " 41.867226 \n", " -87.615355 \n", " 31 \n", " 4/24/2015 \n", " 3 \n", " Shedd Aquarium \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 1 \n", " \n", " \n", " 53 \n", " 4 \n", " Burnham Harbor \n", " 41.856268 \n", " -87.613348 \n", " 23 \n", " 5/16/2015 \n", " 4 \n", " Burnham Harbor \n", " 7.0 \n", " 7.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 2 \n", " \n", " \n", " 497 \n", " 5 \n", " State St & Harrison St \n", " 41.874053 \n", " -87.627716 \n", " 23 \n", " 6/18/2013 \n", " 5 \n", " State St & Harrison St \n", " 0.0 \n", " 0.0 \n", " 0.0 \n", " 0.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " 2 \n", " \n", " \n", " 188 \n", " 6 \n", " Dusable Harbor \n", " 41.885042 \n", " -87.612795 \n", " 31 \n", " 4/24/2015 \n", " 6 \n", " Dusable Harbor \n", " 7.0 \n", " 7.0 \n", " 0.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 7.0 \n", " 2 \n", " \n", " \n", "
\n", "
"], "text/plain": [" id name latitude longitude dpcapacity \\\n", "357 2 Michigan Ave & Balbo Ave 41.872638 -87.623979 35 \n", "456 3 Shedd Aquarium 41.867226 -87.615355 31 \n", "53 4 Burnham Harbor 41.856268 -87.613348 23 \n", "497 5 State St & Harrison St 41.874053 -87.627716 23 \n", "188 6 Dusable Harbor 41.885042 -87.612795 31 \n", "\n", " online_date to_station_id to_station_name 0 1 2 3 \\\n", "357 5/8/2015 2 Michigan Ave & Balbo Ave 7.0 0.0 7.0 7.0 \n", "456 4/24/2015 3 Shedd Aquarium 7.0 7.0 7.0 7.0 \n", "53 5/16/2015 4 Burnham Harbor 7.0 7.0 0.0 7.0 \n", "497 6/18/2013 5 State St & Harrison St 0.0 0.0 0.0 0.0 \n", "188 4/24/2015 6 Dusable Harbor 7.0 7.0 0.0 7.0 \n", "\n", " 4 5 6 distincts \n", "357 7.0 7.0 7.0 2 \n", "456 7.0 7.0 7.0 1 \n", "53 7.0 7.0 7.0 2 \n", "497 0.0 7.0 7.0 2 \n", "188 7.0 7.0 7.0 2 "]}, "execution_count": 27, "metadata": {}, "output_type": "execute_result"}], "source": ["data = stations.merge(piv.reset_index(), left_on=[\"id\", \"name\"],\n", " right_on=[\"to_station_id\", \"to_station_name\"], suffixes=('', '_c'))\n", "data.sort_values(\"id\").head()"]}, {"cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [{"data": {"text/html": [""], "text/plain": [".CustomFoliumMap at 0x16204eba898>"]}, "execution_count": 28, "metadata": {}, "output_type": "execute_result"}], "source": ["from ensae_projects.datainc.data_bikes import folium_html_stations_map\n", "\n", "colors = [\"blue\", \"red\", \"yellow\", \"gray\", \"green\", \"black\", \"brown\"]\n", "xy = []\n", "for els in data.apply(lambda row: (row[\"latitude\"], row[\"longitude\"], row[1], row[\"name\"]), axis=1):\n", " try:\n", " cl = int(els[2])\n", " except:\n", " # NaN\n", " continue\n", " name = \"%s c%d\" % (els[3], cl)\n", " color = colors[cl % len(colors)]\n", " xy.append( ( (els[0], els[1]), (name, color)))\n", "folium_html_stations_map(xy, width=\"80%\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We notice than people got to the park after work. Let's see during the week-end."]}, {"cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [{"data": {"text/html": [""], "text/plain": [".CustomFoliumMap at 0x162056094a8>"]}, "execution_count": 29, "metadata": {}, "output_type": "execute_result"}], "source": ["from ensae_projects.datainc.data_bikes import folium_html_stations_map\n", "\n", "colors = [\"blue\", \"red\", \"yellow\", \"gray\", \"green\", \"black\", \"brown\"]\n", "xy = []\n", "for els in data.apply(lambda row: (row[\"latitude\"], row[\"longitude\"], row[5], row[\"name\"]), axis=1):\n", " try:\n", " cl = int(els[2])\n", " except:\n", " # NaN\n", " continue\n", " name = \"%s c%d\" % (els[3], cl)\n", " color = colors[cl % len(colors)]\n", " xy.append( ( (els[0], els[1]), (name, color)))\n", "folium_html_stations_map(xy, width=\"80%\")"]}, {"cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": []}, {"cell_type": "code", "execution_count": 30, "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.0"}}, "nbformat": 4, "nbformat_minor": 2}