{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Ideas on City Bike Challenge\n", "\n", "Based on the data available at [Divvy Data](https://www.divvybikes.com/system-data), how to guess where people usually live and where the usually work? This notebook suggests some directions and shows some results."]}, {"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": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " id \n", " name \n", " latitude \n", " longitude \n", " dpcapacity \n", " online_date \n", " \n", " \n", " \n", " \n", " 0 \n", " 456 \n", " 2112 W Peterson Ave \n", " 41.991178 \n", " -87.683593 \n", " 15 \n", " 5/12/2015 \n", " \n", " \n", " 1 \n", " 101 \n", " 63rd St Beach \n", " 41.781016 \n", " -87.576120 \n", " 23 \n", " 4/20/2015 \n", " \n", " \n", " 2 \n", " 109 \n", " 900 W Harrison St \n", " 41.874675 \n", " -87.650019 \n", " 19 \n", " 8/6/2013 \n", " \n", " \n", " 3 \n", " 21 \n", " Aberdeen St & Jackson Blvd \n", " 41.877726 \n", " -87.654787 \n", " 15 \n", " 6/21/2013 \n", " \n", " \n", " 4 \n", " 80 \n", " Aberdeen St & Monroe St \n", " 41.880420 \n", " -87.655599 \n", " 19 \n", " 6/26/2013 \n", " \n", " \n", "
\n", "
"], "text/plain": [" id name latitude longitude dpcapacity \\\n", "0 456 2112 W Peterson Ave 41.991178 -87.683593 15 \n", "1 101 63rd St Beach 41.781016 -87.576120 23 \n", "2 109 900 W Harrison St 41.874675 -87.650019 19 \n", "3 21 Aberdeen St & Jackson Blvd 41.877726 -87.654787 15 \n", "4 80 Aberdeen St & Monroe St 41.880420 -87.655599 19 \n", "\n", " online_date \n", "0 5/12/2015 \n", "1 4/20/2015 \n", "2 8/6/2013 \n", "3 6/21/2013 \n", "4 6/26/2013 "]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["import pandas\n", "stations = df = pandas.read_csv(\"Divvy_Stations_2016_Q3.csv\")\n", "df.head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["And we know the trips."]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " trip_id \n", " starttime \n", " stoptime \n", " bikeid \n", " tripduration \n", " from_station_id \n", " from_station_name \n", " to_station_id \n", " to_station_name \n", " usertype \n", " gender \n", " birthyear \n", " \n", " \n", " \n", " \n", " 0 \n", " 12150160 \n", " 9/30/2016 23:59:58 \n", " 10/1/2016 00:04:03 \n", " 4959 \n", " 245 \n", " 69 \n", " Damen Ave & Pierce Ave \n", " 17 \n", " Wood St & Division St \n", " Subscriber \n", " Male \n", " 1988.0 \n", " \n", " \n", " 1 \n", " 12150159 \n", " 9/30/2016 23:59:58 \n", " 10/1/2016 00:04:09 \n", " 2589 \n", " 251 \n", " 383 \n", " Ashland Ave & Harrison St \n", " 320 \n", " Loomis St & Lexington St \n", " Subscriber \n", " Female \n", " 1990.0 \n", " \n", " \n", " 2 \n", " 12150158 \n", " 9/30/2016 23:59:51 \n", " 10/1/2016 00:24:51 \n", " 3656 \n", " 1500 \n", " 302 \n", " Sheffield Ave & Wrightwood Ave \n", " 334 \n", " Lake Shore Dr & Belmont Ave \n", " Customer \n", " NaN \n", " NaN \n", " \n", " \n", " 3 \n", " 12150157 \n", " 9/30/2016 23:59:51 \n", " 10/1/2016 00:03:56 \n", " 3570 \n", " 245 \n", " 475 \n", " Washtenaw Ave & Lawrence Ave \n", " 471 \n", " Francisco Ave & Foster Ave \n", " Subscriber \n", " Female \n", " 1988.0 \n", " \n", " \n", " 4 \n", " 12150156 \n", " 9/30/2016 23:59:32 \n", " 10/1/2016 00:26:50 \n", " 3158 \n", " 1638 \n", " 302 \n", " Sheffield Ave & Wrightwood Ave \n", " 492 \n", " Leavitt St & Addison St \n", " Customer \n", " NaN \n", " NaN \n", " \n", " \n", "
\n", "
"], "text/plain": [" trip_id starttime stoptime bikeid tripduration \\\n", "0 12150160 9/30/2016 23:59:58 10/1/2016 00:04:03 4959 245 \n", "1 12150159 9/30/2016 23:59:58 10/1/2016 00:04:09 2589 251 \n", "2 12150158 9/30/2016 23:59:51 10/1/2016 00:24:51 3656 1500 \n", "3 12150157 9/30/2016 23:59:51 10/1/2016 00:03:56 3570 245 \n", "4 12150156 9/30/2016 23:59:32 10/1/2016 00:26:50 3158 1638 \n", "\n", " from_station_id from_station_name to_station_id \\\n", "0 69 Damen Ave & Pierce Ave 17 \n", "1 383 Ashland Ave & Harrison St 320 \n", "2 302 Sheffield Ave & Wrightwood Ave 334 \n", "3 475 Washtenaw Ave & Lawrence Ave 471 \n", "4 302 Sheffield Ave & Wrightwood Ave 492 \n", "\n", " to_station_name usertype gender birthyear \n", "0 Wood St & Division St Subscriber Male 1988.0 \n", "1 Loomis St & Lexington St Subscriber Female 1990.0 \n", "2 Lake Shore Dr & Belmont Ave Customer NaN NaN \n", "3 Francisco Ave & Foster Ave Subscriber Female 1988.0 \n", "4 Leavitt St & Addison St Customer NaN NaN "]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["bikes = df = pandas.read_csv(\"Divvy_Trips_2016_Q3.csv\")\n", "df.head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## First assumption\n", "\n", "Which time do you go to work? How do you go to work? Maybe by bicycles, maybe in the morning, everyday... Let's see the distribution of the stop time in every station of one particular day of the week."]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": ["import pandas\n", "from datetime import datetime, time\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": 7, "metadata": {}, "outputs": [], "source": ["df['stopweekday'] = df['dtstop'].dt.dayofweek"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Big stations\n", "\n", "We average the number of the number of bicycles which stops at the station."]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_name \n", " to_station_id \n", " mean stops per day \n", " \n", " \n", " \n", " \n", " 0 \n", " 2112 W Peterson Ave \n", " 456 \n", " 2.532468 \n", " \n", " \n", " 1 \n", " 63rd St Beach \n", " 101 \n", " 6.316456 \n", " \n", " \n", " 2 \n", " 900 W Harrison St \n", " 109 \n", " 17.347826 \n", " \n", " \n", " 3 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 36.402174 \n", " \n", " \n", " 4 \n", " Aberdeen St & Monroe St \n", " 80 \n", " 40.793478 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_name to_station_id mean stops per day\n", "0 2112 W Peterson Ave 456 2.532468\n", "1 63rd St Beach 101 6.316456\n", "2 900 W Harrison St 109 17.347826\n", "3 Aberdeen St & Jackson Blvd 21 36.402174\n", "4 Aberdeen St & Monroe St 80 40.793478"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["key = [\"to_station_name\", \"to_station_id\", \"stopday\"]\n", "perday = df[key + [\"trip_id\"]].groupby(key, as_index=False).count()\n", "ave = perday.groupby(key[:-1], as_index=False).mean()\n", "ave.columns = \"to_station_name\", \"to_station_id\", \"mean stops per day\"\n", "ave.head()"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["ax = ave[\"mean stops per day\"].hist(bins=50, figsize=(14,4))\n", "ax.set_xlim([0, 300])\n", "ax.set_yscale(\"log\")\n", "ax.set_title(\"mean stops per day\")\n", "ax.set_xlabel(\"mean stops per day\")\n", "ax.set_ylabel(\"number of stations\");"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/plain": ["((236, 3), (581, 3))"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["ave[ave[\"mean stops per day\"] > 20].shape, ave.shape"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["(Timestamp('2016-07-01 00:03:37'), Timestamp('2016-10-01 09:24:02'))"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["df.dtstop.min(), df.dtstop.max()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["For about half of the stations, more than 20 bicycles stops between July and October of 2016. Let's take one of them."]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_name \n", " to_station_id \n", " mean stops per day \n", " \n", " \n", " \n", " \n", " 3 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 36.402174 \n", " \n", " \n", " 4 \n", " Aberdeen St & Monroe St \n", " 80 \n", " 40.793478 \n", " \n", " \n", " 5 \n", " Ada St & Washington Blvd \n", " 346 \n", " 34.728261 \n", " \n", " \n", " 6 \n", " Adler Planetarium \n", " 341 \n", " 114.478261 \n", " \n", " \n", " 9 \n", " Albany Ave & Bloomingdale Ave \n", " 511 \n", " 20.913043 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_name to_station_id mean stops per day\n", "3 Aberdeen St & Jackson Blvd 21 36.402174\n", "4 Aberdeen St & Monroe St 80 40.793478\n", "5 Ada St & Washington Blvd 346 34.728261\n", "6 Adler Planetarium 341 114.478261\n", "9 Albany Ave & Bloomingdale Ave 511 20.913043"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["ave[ave[\"mean stops per day\"] > 20].head()"]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_name \n", " to_station_id \n", " stopweekday \n", " stoptime10 \n", " nb_stops \n", " \n", " \n", " \n", " \n", " 925 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 0 \n", " 05:10:00 \n", " 4 \n", " \n", " \n", " 926 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 0 \n", " 06:00:00 \n", " 1 \n", " \n", " \n", " 927 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 0 \n", " 06:10:00 \n", " 4 \n", " \n", " \n", " 928 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 0 \n", " 06:20:00 \n", " 2 \n", " \n", " \n", " 929 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 0 \n", " 06:40:00 \n", " 1 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_name to_station_id stopweekday stoptime10 \\\n", "925 Aberdeen St & Jackson Blvd 21 0 05:10:00 \n", "926 Aberdeen St & Jackson Blvd 21 0 06:00:00 \n", "927 Aberdeen St & Jackson Blvd 21 0 06:10:00 \n", "928 Aberdeen St & Jackson Blvd 21 0 06:20:00 \n", "929 Aberdeen St & Jackson Blvd 21 0 06:40:00 \n", "\n", " nb_stops \n", "925 4 \n", "926 1 \n", "927 4 \n", "928 2 \n", "929 1 "]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["key = [\"to_station_name\", \"to_station_id\", \"stopweekday\", \"stoptime10\"]\n", "snippet = df[key + [\"trip_id\"]].groupby(key, as_index=False).count()\n", "snippet.columns = \"to_station_name\", \"to_station_id\", \"stopweekday\", \"stoptime10\", \"nb_stops\"\n", "snippet21 = snippet[snippet[\"to_station_id\"] == 21].copy()\n", "snippet21.head()"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " to_station_name \n", " to_station_id \n", " stopweekday \n", " stoptime10 \n", " nb_stops \n", " \n", " \n", " \n", " \n", " 1621 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 6 \n", " 22:10:00 \n", " 7 \n", " \n", " \n", " 1622 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 6 \n", " 22:20:00 \n", " 1 \n", " \n", " \n", " 1623 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 6 \n", " 22:30:00 \n", " 2 \n", " \n", " \n", " 1624 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 6 \n", " 22:50:00 \n", " 1 \n", " \n", " \n", " 1625 \n", " Aberdeen St & Jackson Blvd \n", " 21 \n", " 6 \n", " 23:40:00 \n", " 1 \n", " \n", " \n", "
\n", "
"], "text/plain": [" to_station_name to_station_id stopweekday stoptime10 \\\n", "1621 Aberdeen St & Jackson Blvd 21 6 22:10:00 \n", "1622 Aberdeen St & Jackson Blvd 21 6 22:20:00 \n", "1623 Aberdeen St & Jackson Blvd 21 6 22:30:00 \n", "1624 Aberdeen St & Jackson Blvd 21 6 22:50:00 \n", "1625 Aberdeen St & Jackson Blvd 21 6 23:40:00 \n", "\n", " nb_stops \n", "1621 7 \n", "1622 1 \n", "1623 2 \n", "1624 1 \n", "1625 1 "]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["snippet21.tail()"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["from ensae_projects.datainc.data_bikes import add_missing_time\n", "import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1,1, figsize=(14,4))\n", "full_snippet21 = add_missing_time(snippet21, \"stoptime10\", delay=10, values=\"nb_stops\")\n", "full_snippet21[\"rstops\"] = full_snippet21.nb_stops.rolling(7).mean()\n", "full_snippet21.plot(x=\"stoptime10\", y=\"rstops\", figsize=(14,4), kind=\"area\", ax=ax)\n", "ax.set_title(\"station 21\");"]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["from ensae_projects.datainc.data_bikes import add_missing_time\n", "import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1,1, figsize=(14,4))\n", "sni = snippet[snippet[\"to_station_id\"] == 341].copy()\n", "sni = add_missing_time(sni, \"stoptime10\", delay=10, values=\"nb_stops\")\n", "sni[\"rstops\"] = sni.nb_stops.rolling(7).mean()\n", "sni.plot(x=\"stoptime10\", y=\"rstops\", figsize=(14,4), kind=\"area\", ax=ax)\n", "ax.set_title(\"station 341\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Indicator\n", "\n", "If a station is inside working area, people will arrive in the morning and will leave in the evening. If it is a living area, people should leave in the morning and arrive in the evening. Let's note $L_t$ the number of bicyles leaving a station. Let's compute the ratio:\n", "\n", "$$R = \\frac{\\sum_{t=8am}^{12am} L_t}{\\sum_{t=0am}^{12pm} L_t}$$"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.1803523439832786"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["col = full_snippet21[\"stoptime10\"]\n", "R21 = full_snippet21.nb_stops[(col > time(8,0,0)) & (col < time(12,0,0))].sum() / \\\n", " full_snippet21.nb_stops[col >= time(0,0,0)].sum()\n", "R21"]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": ["key = [\"to_station_name\", \"to_station_id\", \"stopweekday\", \"stoptime10\"]\n", "agg = bikes[key + [\"trip_id\"]].groupby(key, as_index=False).count().copy()\n", "\n", "ratios = {}\n", "for ids in set(stations.id):\n", " sni = agg[agg[\"to_station_id\"] == ids]\n", " sni.columns = \"to_station_name\", \"to_station_id\", \"stopweekday\", \"stoptime10\", \"nb_stops\"\n", " num = sni.nb_stops[(sni[\"stoptime10\"] >= time(8,0,0)) & (sni[\"stoptime10\"] <= time(12,0,0))].sum()\n", " den = sni.nb_stops[sni[\"stoptime10\"] >= time(0,0,0)].sum()\n", " if den > 0:\n", " ratios[ids] = num * 1.0 / den"]}, {"cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " id \n", " name \n", " latitude \n", " longitude \n", " dpcapacity \n", " online_date \n", " ratio \n", " \n", " \n", " \n", " \n", " 0 \n", " 456 \n", " 2112 W Peterson Ave \n", " 41.991178 \n", " -87.683593 \n", " 15 \n", " 5/12/2015 \n", " 0.102564 \n", " \n", " \n", " 1 \n", " 101 \n", " 63rd St Beach \n", " 41.781016 \n", " -87.576120 \n", " 23 \n", " 4/20/2015 \n", " 0.254509 \n", " \n", " \n", " 2 \n", " 109 \n", " 900 W Harrison St \n", " 41.874675 \n", " -87.650019 \n", " 19 \n", " 8/6/2013 \n", " 0.392231 \n", " \n", " \n", " 3 \n", " 21 \n", " Aberdeen St & Jackson Blvd \n", " 41.877726 \n", " -87.654787 \n", " 15 \n", " 6/21/2013 \n", " 0.196178 \n", " \n", " \n", " 4 \n", " 80 \n", " Aberdeen St & Monroe St \n", " 41.880420 \n", " -87.655599 \n", " 19 \n", " 6/26/2013 \n", " 0.192379 \n", " \n", " \n", "
\n", "
"], "text/plain": [" id name latitude longitude dpcapacity \\\n", "0 456 2112 W Peterson Ave 41.991178 -87.683593 15 \n", "1 101 63rd St Beach 41.781016 -87.576120 23 \n", "2 109 900 W Harrison St 41.874675 -87.650019 19 \n", "3 21 Aberdeen St & Jackson Blvd 41.877726 -87.654787 15 \n", "4 80 Aberdeen St & Monroe St 41.880420 -87.655599 19 \n", "\n", " online_date ratio \n", "0 5/12/2015 0.102564 \n", "1 4/20/2015 0.254509 \n", "2 8/6/2013 0.392231 \n", "3 6/21/2013 0.196178 \n", "4 6/26/2013 0.192379 "]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["import numpy\n", "stations_ratio = stations.copy()\n", "stations_ratio[\"ratio\"] = stations.id.apply(lambda x: ratios.get(x, numpy.nan))\n", "stations_ratio.head()"]}, {"cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["stations_ratio[\"ratio\"].hist(bins=50);"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We choose the median."]}, {"cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.1648655139289145"]}, "execution_count": 22, "metadata": {}, "output_type": "execute_result"}], "source": ["stations_ratio.ratio.median()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["And we draw a map."]}, {"cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [{"data": {"text/html": [""], "text/plain": [".CustomFoliumMap at 0x1fa01cb0e48>"]}, "execution_count": 23, "metadata": {}, "output_type": "execute_result"}], "source": ["from ensae_projects.datainc.data_bikes import folium_html_stations_map\n", "xy = []\n", "for els in stations_ratio.apply(lambda row: (row[\"latitude\"], row[\"longitude\"], row[\"ratio\"], row[\"name\"]), axis=1):\n", " name = \"%s %1.2f\" % (els[3], els[2])\n", " color = \"red\" if els[2] >= 0.1648655139289145 else \"blue\"\n", " xy.append( ( (els[0], els[1]), (name, color)))\n", "folium_html_stations_map(xy, width=\"80%\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["If we assume that people have bigger flats than working space, we should assume there are more living areas than working areas."]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.18241042345276873"]}, "execution_count": 24, "metadata": {}, "output_type": "execute_result"}], "source": ["stations_ratio.ratio.quantile(0.6)"]}, {"cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [{"data": {"text/html": [""], "text/plain": [".CustomFoliumMap at 0x1fa02425358>"]}, "execution_count": 25, "metadata": {}, "output_type": "execute_result"}], "source": ["from ensae_projects.datainc.data_bikes import folium_html_stations_map\n", "xy = []\n", "for els in stations_ratio.apply(lambda row: (row[\"latitude\"], row[\"longitude\"], row[\"ratio\"], row[\"name\"]), axis=1):\n", " name = \"%s %1.2f\" % (els[3], els[2])\n", " color = \"red\" if els[2] >= 0.18241042345276873 else \"blue\"\n", " xy.append( ( (els[0], els[1]), (name, color)))\n", "folium_html_stations_map(xy, width=\"80%\")"]}, {"cell_type": "code", "execution_count": 25, "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}