{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "b16c5a59", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T15:16:24.872611Z", "start_time": "2023-11-10T15:16:17.544623Z" } }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from scipy import stats\n", "import sweetviz\n", "import folium\n", "import geopandas\n", "from geopy.distance import geodesic\n", "from datetime import datetime" ] }, { "cell_type": "code", "execution_count": 2, "id": "8f50b52d", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T15:21:51.826550Z", "start_time": "2023-11-10T15:21:10.232818Z" } }, "outputs": [ { "data": { "text/plain": [ "(5733451, 13)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = pd.read_csv('../../../Desktop/SamX/Bike_Study_Files/big_raw.csv')\n", "data.shape" ] }, { "cell_type": "code", "execution_count": 10, "id": "192bbebe", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T15:53:09.128514Z", "start_time": "2023-11-10T15:53:09.000650Z" } }, "outputs": [ { "data": { "text/plain": [ "(894, 902, 1001)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Counting unique stations for both start and end stations\n", "unique_start_stations = data['start_station_name'].nunique()\n", "unique_end_stations = data['end_station_name'].nunique()\n", "\n", "# Calculating the total number of unique stations\n", "# Assuming a station can be either a start or an end station\n", "unique_stations = data[['start_station_name', 'end_station_name']].stack().nunique()\n", "\n", "unique_start_stations, unique_end_stations, unique_stations" ] }, { "cell_type": "markdown", "id": "2eecc8dd", "metadata": {}, "source": [ "#### Note:\n", "For the purposes of this analysis, I do not need to be crunching through all 5 million rows of data. A sample of 50,000 is more than enough, and possibly too much for the heatmapping functions. I may need to tweak the parameters of the heatmap, or further restrict the sample size later down the road" ] }, { "cell_type": "code", "execution_count": 3, "id": "75b6b8f7", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T15:25:07.162102Z", "start_time": "2023-11-10T15:25:05.757351Z" } }, "outputs": [ { "data": { "text/plain": [ "(50000, 13)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = data.sample(n=50000, replace=False, random_state=42)\n", "data.shape" ] }, { "cell_type": "code", "execution_count": 4, "id": "25717c01", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T15:25:29.522553Z", "start_time": "2023-11-10T15:25:28.868730Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ride_idrideable_typemember_casualstarted_atended_atride_durationstart_datestart_hourday_of_weekweek_of_year
3479634DF3F95B75B6DFBBCelectric_bikemember2022-08-09 09:54:272022-08-09 09:57:363.1500002022-08-099Tuesday32
2954009E62A501C91C9283Aelectric_bikecasual2022-07-05 17:32:362022-07-05 17:39:246.8000002022-07-0517Tuesday27
42332892332C4F5E2EE3457classic_bikemember2022-09-15 17:05:352022-09-15 17:20:2214.7833332022-09-1517Thursday37
4282455063065272EF72853classic_bikemember2022-09-08 13:51:192022-09-08 13:55:264.1166672022-09-0813Thursday36
2265302AFC7A810123AB8EBclassic_bikecasual2022-06-19 11:36:212022-06-19 12:39:1062.8166672022-06-1911Sunday24
\n", "
" ], "text/plain": [ " ride_id rideable_type member_casual started_at \\\n", "3479634 DF3F95B75B6DFBBC electric_bike member 2022-08-09 09:54:27 \n", "2954009 E62A501C91C9283A electric_bike casual 2022-07-05 17:32:36 \n", "4233289 2332C4F5E2EE3457 classic_bike member 2022-09-15 17:05:35 \n", "4282455 063065272EF72853 classic_bike member 2022-09-08 13:51:19 \n", "2265302 AFC7A810123AB8EB classic_bike casual 2022-06-19 11:36:21 \n", "\n", " ended_at ride_duration start_date start_hour \\\n", "3479634 2022-08-09 09:57:36 3.150000 2022-08-09 9 \n", "2954009 2022-07-05 17:39:24 6.800000 2022-07-05 17 \n", "4233289 2022-09-15 17:20:22 14.783333 2022-09-15 17 \n", "4282455 2022-09-08 13:55:26 4.116667 2022-09-08 13 \n", "2265302 2022-06-19 12:39:10 62.816667 2022-06-19 11 \n", "\n", " day_of_week week_of_year \n", "3479634 Tuesday 32 \n", "2954009 Tuesday 27 \n", "4233289 Thursday 37 \n", "4282455 Thursday 36 \n", "2265302 Sunday 24 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Convert 'started_at' and 'ended_at' to datetime objects\n", "data['started_at'] = pd.to_datetime(data['started_at'])\n", "data['ended_at'] = pd.to_datetime(data['ended_at'])\n", "\n", "# Calculate ride duration in minutes\n", "data['ride_duration'] = (data['ended_at'] - data['started_at']).dt.total_seconds() / 60\n", "\n", "# Additional columns for temporal analysis\n", "data['start_date'] = data['started_at'].dt.date\n", "data['start_hour'] = data['started_at'].dt.hour\n", "data['day_of_week'] = data['started_at'].dt.day_name()\n", "data['week_of_year'] = data['started_at'].dt.isocalendar().week\n", "\n", "# Preview the data with new columns\n", "data[['ride_id', 'rideable_type', 'member_casual', 'started_at', 'ended_at', 'ride_duration', 'start_date', 'start_hour', 'day_of_week', 'week_of_year']].head()" ] }, { "cell_type": "code", "execution_count": 5, "id": "8bfa633c", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T15:25:32.489840Z", "start_time": "2023-11-10T15:25:32.471833Z" } }, "outputs": [ { "data": { "text/plain": [ "(50000, 18)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.shape" ] }, { "cell_type": "code", "execution_count": 13, "id": "65e05f6b", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T16:12:49.471950Z", "start_time": "2023-11-10T16:12:48.775058Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\sshanks\\AppData\\Local\\Temp\\ipykernel_18356\\3813941866.py:5: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " classic_bikes_members['day_of_week'] = classic_bikes_members['started_at'].dt.dayofweek\n", "C:\\Users\\sshanks\\AppData\\Local\\Temp\\ipykernel_18356\\3813941866.py:9: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " classic_bikes_members_weekdays['hour_of_day'] = classic_bikes_members_weekdays['started_at'].dt.hour\n" ] }, { "data": { "image/png": "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veb+Pn366Pjx4w5pCgAAAADcnd1hq2bNmtq4ceM193/wwQeqUaOGI3oCAAAAALdn92WEM2bM0IABAxQfH68uXbooODhYFotFKSkpiouL0+bNm7Vu3TozewUAAAAAt2F32PrrX/+qbdu2af78+ZozZ45SUlIk/f7Q4MjISMXHxysyMtK0RgEAAADAnRRr6ffIyEgCFQAAAADY4YYeapyfn6+0tDRZLBYFBATYPNMKAAAAAFCMBTIkacOGDWrTpo3Kli2r0NBQVa5cWWXLllWbNm3+dPEMAAAAAChp7A5bb775pgYMGKAmTZpo/fr12r59u7766iutX79eTZo00YABA7R06VIzewUAAAAAt2H3ZYSzZs3SokWLNHz48EL7+vTpo7vuuksvvfSSRowY4dAGAQAAAMAd2X1m66efflLbtm2vub9169b6+eefHdIUAAAAALg7u8NWw4YNtWTJkmvuX7p0qRo2bOiQpgAAAADA3dl9GeHs2bPVvXt3xcbGFvlQ45MnT+rTTz81s1cAAAAAcBt2h6327dvr4MGDWrx4sXbu3GnzUOMePXpo1KhRql69ull9AgAAAIBbKdZztqpXr65XXnnFrF4AAAAA4LZxQw81PnnypFJSUmSxWBQcHKxq1ao5ui8AAAAAcGvFeqjx3LlzFRYWpho1aigyMlL33HOPatSoobCwMM2bN8+kFgEAAADA/dh9ZuvFF1/Ua6+9pqefflpdu3ZVcHCwDMNQamqqNm3apOjoaGVmZurZZ581s18AAAAAcAt2h60lS5Zo5cqV6tOnj8320NBQNWvWTHXq1NETTzxB2AIAAAAAFeMywrNnz6pu3brX3F+nTh2lp6c7pCkAAAAAcHd2h627775bL730kvLy8grty8vL08yZM3X33Xc7tDkAAAAAcFd2X0a4YMECdenSRUFBQWrfvr3NQ423bdsmb29vxcXFmdkrAAAAALgNu89sNW7cWD/++KNeeukllS9fXklJSTpx4oTKly+vl156SYcPH1bDhg3N7BUAAAAA3EaxnrPl6+ur//u//9P//d//mdUPAAAAANwWivWcLQAAAACAfRwatkqVKqX77rtP+/btc+TXAgAAAIDbcWjYevvtt9W+fXuNGzfOkV8LAAAAAG6nWPdsXc+wYcMkSc8//7wjvxYAAAAA3A73bAEAAACACYoVtvbs2aNBgwYp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vPim69pT+5dfftGwYcMUGhqqsmXL6v7779fRo0dvuq49v0XMmMvsqWvWPHa92mbOZfYct5lzmaMRttzI+vXrFRUVpWeeeUbffvut/vKXv6hbt243PWnb49KlS2ratKkWLlxoeq0/io+P15gxY7Rz507FxcUpLy9PXbp00aVLl0yvXbVqVb388svau3ev9u7dq/vuu0+9e/d22A9Be+zZs0dLlixRkyZNnFazYcOGOnPmjPV14MAB02ump6erTZs28vLy0meffaYffvhBs2fPVoUKFUyvvWfPHpvjvfLw84ceesj02q+88oreeOMNLVy4UImJiXr11Vc1a9YsLViwwPTajz32mOLi4rR69WodOHBAXbp0UadOnfTTTz85tM715o5XX31Vc+bM0cKFC7Vnzx6FhISoc+fOunjxoum1L126pDZt2ujll1++6Vr21r18+bL279+v5557Tvv379f777+vH3/8Ub169TK9tiTVqVNHCxcu1IEDB7R9+3ZVr15dXbp00a+//mp67Ss2btyoXbt2KTQ09KZr2lv3/vvvt/nv/NNPP3VK7ePHj6tt27aqV6+evvzyS3333Xd67rnnVKZMGVPr/vFYz5w5o7ffflsWi0V//etfb6quPbUnTJig2NhYrVmzRomJiZowYYLGjh2rDz74wNTahmGoT58+OnHihD744AN9++23qlatmjp16nTTvxns+S1ixlxmT12z5rHr1TZzLrPnuM2cyxzOgNu4++67jVGjRtlsq1evnjF16lSn9iHJ2LBhg1NrXpGammpIMuLj411Sv2LFisZbb73llFoXL140ateubcTFxRnt27c3xo8fb3rN559/3mjatKnpda42ZcoUo23btk6vW5Tx48cbNWvWNAoKCkyv1b17d+PRRx+12da3b19j8ODBpta9fPmy4eHhYXz88cc225s2bWo888wzptW9eu4oKCgwQkJCjJdfftm67bfffjP8/PyMN954w9Taf5SUlGRIMr799luH1rxe3St2795tSDJOnjzp9NoZGRmGJGPLli1OqX369GmjSpUqxsGDB41q1aoZc+fONb3u0KFDjd69ezu0jr21+/fvb/p/z/b8e+7du7dx3333OaV2w4YNjRkzZthsu/POO41nn33W1NpHjhwxJBkHDx60bsvLyzP8/f2NpUuXOrT21b9FnDWX/dlvIDPnsevV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6t1339UPP/yg6dOn6+mnn9a7774rSWrXrp1q1Kih1atXW78jLy9Pa9as0SOPPFLs+gCAP+fp6gYAALevjz/+WHfccYfNtvz8fJv3c+bMUceOHfXcc89JkurUqaMffvhBs2bN0rBhw4pVLyoqSn379r3m/i1btuj7779XUlKSNUStXr1aDRs21J49e3TXXXcpICBAklSpUiWFhIQU+T2VKlWSJAUEBBQaU7FiRS1cuFAeHh6qV6+eunfvrs8//1wjRozQ8ePH9a9//UunT59WaGioJOnJJ59UbGysli9frpkzZxbreP39/RUUFGQ9++bl5aUXXnjBuj8iIkI7duzQu+++q379+kmShg8fruXLl2vy5MmSpE8++USXL1+27gcAOA5ntgAAprn33nuVkJBg83rrrbdsxiQmJqpNmzY229q0aaOjR48WCmbX07Jlyz/dn5iYqLCwMJuzVQ0aNFCFChWUmJhYrFrX0rBhQ3l4eFjfV65cWampqZKk/fv3yzAM1alTR3fccYf1FR8fr+PHj99QPcMwZLFYrO/feOMNtWzZUpUqVdIdd9yhpUuXKjk52bp/2LBhOnbsmHbu3ClJevvtt9WvXz+VK1fuhuoDAK6NM1sAANOUK1dOtWrVstl2+vRpm/dXh4Ur2/7IYrEU2lbUAhjXCwxF1fqz7TfCy8vL5r3FYlFBQYGk3y/z8/Dw0L59+2wCmaRCZwDtcfbsWf3666/We8jeffddTZgwQbNnz1ZkZKR8fX01a9Ys7dq1y/qZoKAg9ezZU8uXL1eNGjX06aef2nXPGACg+AhbAACXatCggbZv326zbceOHapTp441kFSqVElnzpyx7j969KguX758Q7WSk5N16tQp69mtH374QRkZGapfv77d31O6dGlJhS+JvJ7mzZsrPz9fqamp+stf/lKszxZl/vz5KlWqlHWJ/a+++kqtW7fW6NGjrWOKOmP22GOPacCAAapatapq1qxZ6MwiAMAxCFsAAJeaNGmS7rrrLr344ovq37+/vvnmGy1cuFCLFi2yjrnvvvu0cOFC3XPPPSooKNCUKVMKnUGyR6dOndSkSRMNGjRI8+bNU15enkaPHq327dtf9xLEPwoKCpKPj49iY2NVtWpVlSlTRn5+ftf9XJ06dTRo0CA9/PDDmj17tpo3b660tDR98cUXaty4sR544IFrfvbixYtKSUlRbm6ukpKStGbNGr311luKiYmxnj2sVauWVq1apU2bNikiIkKrV6/Wnj17rGe+rujatav8/Pz0j3/8QzNmzLD7uAEAxcM9WwAAl7rzzjv17rvvat26dWrUqJGmT5+uGTNm2CyOMXv2bIWFhaldu3YaOHCgnnzyyRt6/tWVJeQrVqyodu3aqVOnTqpRo4bWr19frO/x9PTU66+/rjfffFOhoaHq3bu33Z9dvny5Hn74YU2aNEl169ZVr169tGvXriJXPfyj6dOnq3LlyqpVq5aGDBmijIwMff7555oyZYp1zKhRo9S3b1/1799frVq10tmzZ23Ocl1RqlQpDRs2TPn5+Xr44YftP3AAQLFYjKsvggcAALe9ESNG6JdfftGHH37o6lYA4LbFZYQAAJQgGRkZ2rNnj9555x3r87kAAOYgbAEAUIL07t1bu3fv1siRI9W5c2dXtwMAtzUuIwQAAAAAE7BABgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJjg/wFjvIDt/l8XCgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Filter for only classic bikes used by members\n", "classic_bikes_members = data[(data['rideable_type'] == 'classic_bike') & (data['member_casual'] == 'member')]\n", "\n", "# Filter for Monday to Friday\n", "classic_bikes_members['day_of_week'] = classic_bikes_members['started_at'].dt.dayofweek\n", "classic_bikes_members_weekdays = classic_bikes_members[classic_bikes_members['day_of_week'] < 5]\n", "\n", "# Extract hour of day\n", "classic_bikes_members_weekdays['hour_of_day'] = classic_bikes_members_weekdays['started_at'].dt.hour\n", "\n", "# Plotting histogram\n", "plt.figure(figsize=(10, 6))\n", "sns.histplot(classic_bikes_members_weekdays['hour_of_day'], bins=24, kde=False, color='#a76046')\n", "#plt.title('Usage of Classic Bikes by Members (Monday-Friday)')\n", "plt.xlabel('Hour of the Day')\n", "plt.ylabel('Number of Rides (x10,000)')\n", "plt.xticks(range(0, 24))\n", "plt.grid(False)\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "id": "f8e23875", "metadata": {}, "source": [ "This histogram shows that there is clearly a bias toward afternoon rides among members. The strong spikes in the morning and late afternoon would be indicative of a strong culture of bicycyle-commuting. \n", "\n", "Testable Hypothesis: The significantly stronger spike in the afternoon might lead to a geographical re-distribution of classic cycles from the central areas of Chicago outward toward the more residential areas." ] }, { "cell_type": "code", "execution_count": 9, "id": "adba34b6", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T15:41:49.332752Z", "start_time": "2023-11-10T15:41:48.907946Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\sshanks\\AppData\\Local\\Temp\\ipykernel_18356\\471480448.py:5: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " classic_bikes_casual['day_of_week'] = classic_bikes_casual['started_at'].dt.dayofweek\n", "C:\\Users\\sshanks\\AppData\\Local\\Temp\\ipykernel_18356\\471480448.py:9: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " classic_bikes_casual_weekend['hour_of_day'] = classic_bikes_casual_weekend['started_at'].dt.hour\n" ] }, { "data": { "image/png": "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MZo0aZKKFy8uX19f1ahRQ99++22qujdu3NCQIUNUrVo15c2bVwEBAapTp46++uorh3aNGzdWuXLlZIxx2G6MUenSpdW6devbvjbnz5+Xh4eHChUqlOb9Hh7/99UvvemHt07Du3ma6dSpUxUaGqpcuXKpTp062rZtW6rHL1y4UGXLlrXvbxYvXpxmX0aPHq3atWsrICBAefLkUY0aNTRv3jyHsffq1UsBAQEOn+EUjz32mCpWrGi/7e3trU6dOmnu3LmpXj/AGTgiBbjBpEmTFB4ertdff13169dXQkKCfvvtN126dMne5s8//1RgYKAmTJigggUL6sKFC1q0aJFq166t3bt3q2zZspKk06dPq0GDBsqZM6dmz56tQoUK6eOPP1b//v1T1V26dKm6du2qtm3batGiRfLy8tKcOXPUvHlzrVmzRo0bN063z+fOnVPdunUVHx+vN998UyVKlNCqVas0dOhQHTlyRLNmzbJPP2vfvr1KlSplP7cjvSk5a9eulaQMHblKzx9//KGyZcuqc+fOCggI0OnTpzV79mw9+OCDOnDggAoUKCBJGjx4sJYsWaKxY8eqevXqun79uvbv36/z58/bn6tVq1ZKSkrSpEmTFBISoujoaG3dutXhfblVYmKiWrZsqe+//14DBw7UY489psTERG3btk1RUVGqW7fuHceQmJho/9/Dhw9r2LBhyp8//x2/MN3q008/VdeuXdWzZ0/NmDFDnp6eOnDggOrWrauQkBBNmTJFQUFBWrNmjV566SVFR0dr1KhRkjL2mbydESNGqEaNGvrwww91+fJlhYeHq2HDhtq9e7dKliypTp06afjw4XrvvfdUp04dh7HPmTNH7du3V3BwcJrPnZSUpA0bNqhmzZoZnpJ06NAhtWrVSgMHDlTOnDn122+/aeLEidq+fbt9KqV0d+95elLO0Ro1apSCgoJ07do1rVixQg0bNtR3333n9PNlUs5NfPTRRzV//nzly5dPp06d0urVqxUfHy9/f38lJyerbdu2+v777zV8+HDVrVtXx48f16hRo9SwYUPt2LHD4YjTrl27FBkZqddff12hoaHKmTOnfvrpJ3Xq1EmdOnVSeHi4fH19dfz4cYfXNT3ffPONqlevrnz58v2jsfbu3VutW7fWsmXLdOLECQ0bNkxPP/10hvqQnp49e6p169ZasmSJrl+/Li8vLz3zzDPatWuX3nrrLZUpU0aXLl3Srl27HPYbo0eP1ujRo9WrVy/9+9//1okTJ/Tss88qKSnJvp+W/v7B5cKFCxo6dKgeeOABxcfHa/369erQoYMWLFigrl27SpIGDBigtm3b6rvvvlOTJk3sj//222915MgRTZ8+/bbjqFOnjt577z116NBBgwcPVp06dZQnT567fl1u9t5776lcuXL285DeeOMNtWrVSseOHbP/ALRw4UL16NFDbdu21ZQpU+z7g7i4OIcQJ/39me3Tp4/9x7Jt27bpxRdf1KlTpzRy5Ej76zF//nwtW7ZMvXv3tj/2wIED2rhxY6ofhRo2bKjZs2dr//79qly5cqaMG0iXAfCPjRo1ykgy586dS/P+ihUrmgYNGthvP/7446ZatWqWaiQmJpr4+HgTFhZmBg0aZN8+bNgwY7PZzK+//urQvnnz5kaS2bhxozHGmOvXr5uAgADTpk0bh3ZJSUmmatWq5qGHHrpt/VdeecVIMj///LPD9hdeeMHYbDZz8OBB+7bixYub1q1b33FMzz//vJFkfvvttzu2NcaYjRs3OowpLYmJiebatWsmZ86c5t1337Vvr1SpkmnXrl26j4uOjjaSzLRp027bhwYNGji8l4sXLzaSzAcffJChMdysW7duRlKqf0WKFDE//PCDQ9u0xt6tWzeTM2dOY4wxEyZMMJ6enmbixIkOj2vevLkpWrSouXz5ssP2/v37G19fX3PhwgVjzN19Jm/uV40aNUxycrJ9+x9//GG8vLxM79697dtGjRplvL29zV9//WXf9sknnxhJZvPmzenWOHPmjJFkOnfubLl/xhiTnJxsEhISzObNm40k88svvxhjMv6eSzKjRo1Ktb148eKmW7du6T4uMTHRJCQkmMaNG5v27dtn6DlvduzYMSPJTJ48Oc37J0+ebCSZY8eOGWOM+e9//2skmT179qT7nB9//LGRZD7//HOH7REREUaSmTVrlsP4PD09Hf62jTHm7bffNpLMpUuXbtv/tPj7+5vnn3/+tm0aNGhgKlasmOZ9CxYsMJJM3759HbZPmjTJSDKnT5+2b8vo+5bynF27dk3VNleuXGbgwIHp9vXixYvG19c31fv7448/GkkO+4pbpXw+evXqZapXr27fnpSUZEqWLGnatm3r0L5ly5amVKlSDn9naUlOTjZ9+vQxHh4eRpKx2WymfPnyZtCgQfbPSopb92cpunXrZooXL26/nfJZrFy5sklMTLRv3759u5FkPv74Y3vfg4OD090f3Pyct0pKSjIJCQlmzJgxJjAw0OHxDRo0SLV/euGFF0yePHnM1atXHbYfOnTISDKzZ89OtxaQWZjaB7jBQw89pF9++UV9+/bVmjVrdOXKlVRtEhMTNW7cOFWoUEHe3t7KkSOHvL29dejQIUVGRtrbbd68WZUqVUp17s6TTz7pcHvr1q26cOGCunXrpsTERPu/5ORktWjRQhEREammPd1sw4YNqlChgh566CGH7d27d5cx5h/9EvxPXLt2TS+//LJKly6tHDlyKEeOHMqVK5euX7/u8Do99NBD+vbbb/XKK69o06ZNio2NdXiegIAAlSpVSpMnT9bUqVO1e/fuDJ1L8O2338rX1zdD05rS4ufnp4iICEVEROjnn3/WF198oTJlyqhVq1ZpToO7lTFGffr00ahRo7Rs2TINHz7cft+NGzf03XffqX379vL393d431u1aqUbN27Yp+Vk5DN5O126dHE4n6R48eKqW7euNm7caN/2wgsvSPr7HI4UM2fOVOXKlVW/fn1L9e7k6NGj6tKli4KCguTp6SkvLy81aNBAkuyfi7t9z2/n/fffV40aNeTr66scOXLIy8tL3333ncNn0VmqVasmb29vPffcc1q0aJGOHj2aqs2qVauUL18+tWnTxuHzUK1aNQUFBaWaOlqlShWVKVPGYduDDz4oSerYsaM+/fRTnTp1KkP9u3TpkmJiYtKdcmbFzdM4U/opKdWUXiv+9a9/pdr20EMPaeHChRo7dqy2bdumhIQEh/t/+ukn3bhxQ0899ZTD9rp166p48eKpnu+zzz5TvXr1lCtXLvvnY968eQ6fDw8PD/Xv31+rVq1SVFSUJOnIkSNavXq1+vbta/87u/n9S0xMtE9ls9lsev/993X06FHNmjVLPXr0UEJCgt555x1VrFjRYSVUq1q3bi1PT0/77Vtf94MHD+rPP/9Md39wqw0bNqhJkybKmzev/e905MiROn/+vM6ePWtvN2DAAO3Zs0c//vijJOnKlStasmSJunXrlmrl0pTPV0Y/l8A/QZACMkGOHH/Pkk1KSkrz/sTERIfzXV599VW9/fbb2rZtm1q2bKnAwEA1btzYYUnfwYMH64033lC7du309ddf6+eff1ZERISqVq3qEALOnz+vwoULp6p567a//vpLkvTvf/9bXl5eDv8mTpwoY8xtl48+f/58mlP0UqZj3TzVJaNSpnMcO3bM8mNTdOnSRTNnzlTv3r21Zs0abd++XRERESpYsKDD6zR9+nS9/PLL+vLLL9WoUSMFBASoXbt2OnTokKS/v3x89913at68uSZNmqQaNWqoYMGCeumll3T16tV06587d07BwcGppqxklIeHh2rVqqVatWrpoYceUvv27fW///1POXLk0ODBg+/4+Pj4eH3yySeqWLGiWrZs6XDf+fPnlZiYqBkzZqR6z1u1aiVJ9iX7M/KZvJ2goKA0t938uShcuLA6deqkOXPmKCkpSXv37tX333+f5jTUmxUoUED+/v4Z/pxcu3ZNjz76qH7++WeNHTtWmzZtUkREhL744gtJsn8u7vY9T8/UqVP1wgsvqHbt2vr888+1bds2RUREqEWLFqmCe0ZkZL8i/d+5dKVKldL69etVqFAh9evXT6VKlVKpUqUcznP766+/dOnSJXl7e6f6TJw5cybVJRzS+puvX7++vvzySyUmJqpr164qWrSoKlWq5HC+YVpSXgNfX98MvgLpu3VFtpTz5u7mdU6R1lg/+eQTdevWTR9++KHq1KmjgIAAde3aVWfOnJH0f/u99D7/N/viiy/UsWNHPfDAA1q6dKl++uknRUREqGfPnrpx44ZD2549e8rPz0/vv/++pL+n1Pn5+Tn8YHPr+7do0SKH5yhevLheeOEFzZs3T4cOHdInn3yiGzduaNiwYXfx6vztTq+7lddj+/btatasmaS/f1z58ccfFRERoddee83hOSWpbdu2KlGihH0a38KFC3X9+nX169cvVZ2Uz9c/+SwAGcU5UkAmSAktp06dShVgjDE6ffq0atWqZd+W8iV58ODBunTpktavX68RI0aoefPmOnHihPz9/e3nM40bN87h+aKjox3OLwgMDLSHpJul/Ic+Rcq5QjNmzEh3Nay0AtnNdU6fPp1qe8oJ3inPb0Xz5s01YsQIffnll2rRooXlx1++fFmrVq3SqFGj9Morr9i3p5yLcLOcOXPaz2X466+/7Een2rRpo99++03S31885s2bJ0n6/fff9emnnyo8PFzx8fH2LzS3KliwoH744QclJyffdZi6lb+/v0qVKqVffvnljm19fHy0ceNGNW/eXE2aNNHq1avtqxzmz59fnp6eeuaZZ9L8wiHJvqpXRj6Tt3Pr5y1l261fvAYMGKAlS5boq6++0urVq5UvX75Uv+bfytPTU40bN9a3336rkydPqmjRordtv2HDBv3555/atGmT/SiUpDTPe8rIe+7j46O4uLhUj731x4OlS5faz8+42d2EMunvvylPT890f1k/deqUPD09HV7jRx99VI8++qiSkpK0Y8cOzZgxQwMHDlThwoXVuXNn++IM6a1wmDt3bofb6a1a17ZtW7Vt21ZxcXHatm2bxo8fry5duqhEiRIO58DdLKWfrrreV0bftxRpjbVAgQKaNm2apk2bpqioKK1cuVKvvPKKzp49q9WrV9vHlN7n/+YFG5YuXarQ0FB98sknDrXS6mPevHntAW7o0KFasGCBunTp4rDvj4iIcHjMzSv0paVjx44aP368wzXqfH19dfny5VRt07sm4p3c6fW42fLly+Xl5aVVq1Y5hOsvv/wy1WM9PDzUr18/jRgxQlOmTNGsWbPUuHFjh3PQUqR8vu7mv0mAVRyRAjLBY489JpvNpk8++STVfatXr9aVK1ccThq+Wb58+fTvf/9b/fr104ULF+wr3KUsDXyzb775JtWXqgYNGmj//v06cOCAw/bly5c73K5Xr57y5cunAwcO2I+A3PrP29s73TE2btxYBw4c0K5duxy2L168WDabTY0aNUr3sempUaOGWrZsqXnz5qU7NXDHjh326S23stlsMsakep0+/PDDdH/Fl/4OjN27d9eTTz6pgwcPprkaVJkyZfT666+rcuXKqcZ8s5YtW+rGjRtauHBhum2sunbtmg4fPpzhKVDVq1fX5s2bdfLkSTVs2NA+Jcbf31+NGjXS7t27VaVKlTTf87SutZLeZ/J2Pv74Y4dVso4fP66tW7emWmChZs2aqlu3riZOnKiPPvpI3bt3V86cOe/4/K+++qqMMXr22WcVHx+f6v6EhAR9/fXXkv7vC/Gtn4s5c+bctkZ673mJEiW0d+9eh7YbNmzQtWvXHLal9Te7d+/eDE3RTIuvr6/q1aunlStXpjpicePGDa1cuVKPPPJImkd4PD09Vbt2bfsv+Cnjefzxx3X+/HklJSWl+XlI64vp7fj4+KhBgwaaOHGiJDms1Hgrb29vlSxZUkeOHLFU425l9H3LqJCQEPXv319Nmza1v54PP/ywfH19U13zauvWrammGdpsNnl7ezuEqDNnzqRatS9FyoIw//73v3Xp0qVUR27T+1tO6wcv6e/9yokTJxwWdSlRooR+//13hzB3/vz5u15xtGzZsipSpEi6+4Ob2Ww25ciRw2GqYGxsrJYsWZLmc/fu3Vve3t566qmndPDgwXSPZKdMac3O19yD63BECsgEpUqVUv/+/TV58mRdunRJrVq1sp/7MmHCBNWqVUtdunSxt2/Tpo0qVaqkWrVqqWDBgjp+/LimTZum4sWLKywsTNLfX3gWLlyocuXKqUqVKtq5c6cmT56c6tf4gQMHav78+WrZsqXGjBmjwoULa9myZfajLClHSXLlyqUZM2aoW7duunDhgv7973+rUKFCOnfunH755RedO3cu1S/pNxs0aJAWL16s1q1ba8yYMSpevLi++eYbzZo1Sy+88EKq8ygyavHixWrRooVatmypnj17qmXLlsqfP79Onz6tr7/+Wh9//LF27tyZ5hLoefLkUf369TV58mQVKFBAJUqU0ObNmzVv3rxUq4LVrl1bjz/+uKpUqaL8+fMrMjJSS5YsUZ06deTv76+9e/eqf//++s9//qOwsDB5e3trw4YN2rt3r8PRrls9+eSTWrBggZ5//nkdPHhQjRo1UnJysn7++WeVL19enTt3vu34k5OT7ecpJScn69SpU5o+fbouXryY5tLN6Slfvry+//57NWnSRPXr19f69etVtGhRvfvuu3rkkUf06KOP6oUXXlCJEiV09epVHT58WF9//bU9wGbkM3k7Z8+eVfv27fXss8/q8uXLGjVqlHx9ffXqq6+majtgwAB16tRJNptNffv2zdD46tSpo9mzZ6tv376qWbOmXnjhBVWsWFEJCQnavXu35s6dq0qVKqlNmzaqW7eu8ufPr+eff16jRo2Sl5eXPvroo1RH+DL6nj/zzDN64403NHLkSDVo0EAHDhzQzJkz7auUpXj88cf15ptvatSoUWrQoIEOHjyoMWPGKDQ01D4Nz6oJEyaoUaNGqlOnjgYOHKiQkBBFRUVp2rRp+uuvvxx+MHn//fe1YcMGtW7dWiEhIbpx44bmz58vSfYfcjp37qyPPvpIrVq10oABA/TQQw/Jy8tLJ0+e1MaNG9W2bVu1b9/+tn0aOXKkTp48qcaNG6to0aK6dOmS3n33XYfz0NLTsGHDNJcGd4aMvm/puXz5sho1aqQuXbqoXLlyyp07tyIiIrR69Wp16NBB0t9HfYcOHaqxY8eqd+/e+s9//qMTJ04oPDw81VS2lKXk+/bta1/d780331SRIkXsU4xvVqZMGbVo0ULffvutHnnkkQxflPytt97Sjz/+qE6dOqlatWry8/PTsWPHNHPmTJ0/f16TJ092eI3mzJmjp59+Ws8++6zOnz+vSZMm3fUqfx4eHnrzzTfVu3dv+/7g0qVLab4erVu31tSpU9WlSxc999xzOn/+vN5+++00L28g/f0DT9euXTV79mwVL15cbdq0SbPdtm3b5OnpmennXQJpctsyF8B9Jjk52cyePdvUqlXL+Pv7G29vbxMWFmZefvnlVKsKTZkyxdStW9cUKFDAeHt7m5CQENOrVy/zxx9/2NtcvHjR9OrVyxQqVMj4+/ubRx55xHz//fdprrK0f/9+06RJE+Pr62sCAgJMr169zKJFixxWKEuxefNm07p1axMQEGC8vLzMAw88YFq3bm0+++yzO47x+PHjpkuXLiYwMNB4eXmZsmXLmsmTJ5ukpCSHdhldtS9FbGysmT59uqlTp47JkyePyZEjhwkODjYdOnQw33zzjb1dWivXnTx50vzrX/8y+fPnN7lz5zYtWrQw+/fvT7Uy1yuvvGJq1apl8ufPb3x8fEzJkiXNoEGDTHR0tDHGmL/++st0797dlCtXzuTMmdPkypXLVKlSxbzzzjsOq1Sl9frHxsaakSNHmrCwMOPt7W0CAwPNY489ZrZu3Xrbcae1al+hQoVMgwYNzIoVKxza3mnVvptfj3LlypkSJUqYI0eOGGP+XnGrZ8+e5oEHHjBeXl6mYMGCpm7dumbs2LH2x2XkM5mWlH4tWbLEvPTSS6ZgwYLGx8fHPProo2bHjh1pPiYuLs74+PiYFi1a3Pa507Jnzx7TrVs3ExISYry9vU3OnDlN9erVzciRI83Zs2ft7bZu3Wrq1Klj/P39TcGCBU3v3r3Nrl27jCSzYMECY0zG3/O4uDgzfPhwU6xYMePn52caNGhg9uzZk+ozFhcXZ4YOHWoeeOAB4+vra2rUqGG+/PLLVCugGZOxVftS7Nixw7Rv394UKFDAeHp6mgIFCpj27dubnTt3OrT76aefTPv27U3x4sWNj4+PCQwMNA0aNDArV650aJeQkGDefvttU7VqVePr62ty5cplypUrZ/r06WMOHTpkb5fe3/GqVatMy5YtzQMPPGC8vb1NoUKFTKtWrcz3339/x7F89913RpLZvn17um0ysmpfRESEw/a0/j4y+r6l95w3btwwzz//vKlSpYrJkyeP8fPzM2XLljWjRo0y169ft7dLTk4248ePN8WKFTPe3t6mSpUq5uuvv05zXzFhwgRTokQJ4+PjY8qXL28++OAD+6qvaVm4cKGRZJYvX57u63Wrbdu2mX79+pmqVauagIAA4+npaQoWLGhatGhh/ve//6Vqv2jRIlO+fHnj6+trKlSoYD755JN0V+1LawXJtD7LH374oX1/WKZMGTN//vw0/w7mz59vypYta98njx8/3sybN89hNcqbbdq0yUgyEyZMSHf8jz76aKrVaQFnsRnDFcuA+9Fzzz2njz/+WOfPn7/tlD3A1b7++ms98cQT+uabb+yLXiD7qFKliurVq3fbI+D427/+9S9t27ZNf/zxh8OCRdnVkCFDNHv2bJ04cSLNaclHjhxRWFiY1qxZo6ZNm7qhh8humNoH3AfGjBmj4OBglSxZUteuXdOqVav04Ycf6vXXXydEIcs4cOCAjh8/riFDhqhatWqpVhlE9jBp0iS1b99er7322h0XDsmO4uLitGvXLm3fvl0rVqzQ1KlTs32I2rZtm37//XfNmjVLffr0STNESdLYsWPVuHFjQhRchiAF3Ae8vLw0efJknTx5UomJiQoLC9PUqVM1YMAAd3cNsOvbt69+/PFH1ahRQ4sWLUp3RTjc31q0aKHJkyfr2LFjBKk0nD59WnXr1lWePHnUp08fvfjii+7uktulnMv6+OOPa+zYsWm2SUxMVKlSpdI8LxNwFqb2AQAAAIBFLH8OAAAAABYRpAAAAADAIoIUAAAAAFjEYhP6+yKYf/75p3Lnzs3JzwAAAEA2ZozR1atXFRwcLA+P9I87EaQk/fnnnypWrJi7uwEAAAAgizhx4sRtVxclSEnKnTu3pL9frDx58ri5NwAAAADc5cqVKypWrJg9I6SHICXZp/PlyZOHIAUAAADgjqf8sNgEAAAAAFhEkAIAAAAAiwhSAAAAAGARQQoAAAAALCJIAQAAAIBFBCkAAAAAsIggBQAAAAAWEaQAAAAAwCKCFAAAAABYRJACAAAAAIsIUgAAAABgEUEKAAAAACwiSAEAAACARQQpAAAAALCIIAUAAAAAFhGkAAAAAMAighQAAAAAWESQAgAAAACLcri7AwAAAPebqKgoRUdHu7xugQIFFBIS4vK6QHZEkAIAAMhEUVFRKl++vGJiYlxe29/fX5GRkYQpwAUIUgAAAJkoOjpaMTExmjlphMJKui7QHDoapf7Dxyk6OpogBbgAQQoAAMAJwkqGqErFMu7uBgAnYbEJAAAAALCIIAUAAAAAFhGkAAAAAMAighQAAAAAWESQAgAAAACLCFIAAAAAYBFBCgAAAAAsIkgBAAAAgEUEKQAAAACwiCAFAAAAABYRpAAAAADAohzu7gAAAAAyT2RkpEvrFShQQCEhIS6tCWQFBCkAAID7wNlzF2Sz2fT000+7tK6/v78iIyMJU8h2CFIAAAD3gctXr8kYo7fHDFblCmVcUvPQ0Sj1Hz5O0dHRBClkOwQpAACA+0jpEsVUpaJrghSQnbHYBAAAAABYRJACAAAAAIsIUgAAAABgEUEKAAAAACwiSAEAAACARQQpAAAAALCIIAUAAAAAFhGkAAAAAMAighQAAAAAWESQAgAAAACLCFIAAAAAYBFBCgAAAAAsIkgBAAAAgEUEKQAAAACwiCAFAAAAABYRpAAAAADAIoIUAAAAAFhEkAIAAAAAiwhSAAAAAGARQQoAAAAALCJIAQAAAIBFOdzdAQAAAGeKiopSdHS0y+pFRka6rBYA9yFIAQCA+1ZUVJTKly+vmJgYl9dOiE9weU0ArkOQAgAA963o6GjFxMRo5qQRCisZ4pKaG7Zs18Tp85WYmOiSegDcgyAFAADue2ElQ1SlYhmX1Dp0NMoldQC4F0EKAAC4hKvPVZI4XwmA8xCkAACA07nzXCWJ85UAZD6CFAAAcDp3nKskcb4SAOchSAEA4GbumPJWoEABhYS4LtCkcOW5ShLnKwFwHoIUAABu5K4pb/7+/oqMjHRLmAKA+wFBCgAAN3LHlLdDR6PUf/g4RUdHE6QA4C4RpAAAyAJcPeUNAPDPeLi7AwAAAABwryFIAQAAAIBFBCkAAAAAsIggBQAAAAAWEaQAAAAAwCKCFAAAAABYRJACAAAAAIsIUgAAAABgERfkBQAgm4qMjLwvawGAKxCkAADIZs6euyCbzaann37a5bUT4hNcXhMAnCHLBKnx48drxIgRGjBggKZNmyZJMsZo9OjRmjt3ri5evKjatWvrvffeU8WKFe2Pi4uL09ChQ/Xxxx8rNjZWjRs31qxZs1S0aFE3jQQAgKzt8tVrMsbo7TGDVblCGZfU3LBluyZOn6/ExESX1AMAZ8sSQSoiIkJz585VlSpVHLZPmjRJU6dO1cKFC1WmTBmNHTtWTZs21cGDB5U7d25J0sCBA/X1119r+fLlCgwM1JAhQ/T4449r586d8vT0dMdwAAC4J5QuUUxVKromSB06GuWSOgDgKm5fbOLatWt66qmn9MEHHyh//vz27cYYTZs2Ta+99po6dOigSpUqadGiRYqJidGyZcskSZcvX9a8efM0ZcoUNWnSRNWrV9fSpUu1b98+rV+/3l1DAgAAAHCfc/sRqX79+ql169Zq0qSJxo4da99+7NgxnTlzRs2aNbNv8/HxUYMGDbR161b16dNHO3fuVEJCgkOb4OBgVapUSVu3blXz5s3TrBkXF6e4uDj77StXrkiSEhISlJDA3G0AgOskJyfLz89PRjYlJhmX1LR5eMjPz0+6z2u6q252GquRTX5+fkpOTuY7FO4bGf0s24wxrvsLv8Xy5cv11ltvKSIiQr6+vmrYsKGqVaumadOmaevWrapXr55OnTql4OBg+2Oee+45HT9+XGvWrNGyZcvUo0cPh1AkSc2aNVNoaKjmzJmTZt3w8HCNHj061fZly5bJ398/cwcJAAAA4J4RExOjLl266PLly8qTJ0+67dx2ROrEiRMaMGCA1q5dK19f33Tb2Ww2h9vGmFTbbnWnNq+++qoGDx5sv33lyhUVK1ZMzZo1u+2LBQBAZvvll19Uv359rVgyTRXLlXZJzZWrN2roG1P08Zzxqlmj8n1b0111s9NYf/3tsNo/M1BbtmxR1apVXVITcLaU2Wp34rYgtXPnTp09e1Y1a9a0b0tKStKWLVs0c+ZMHTx4UJJ05swZFSlSxN7m7NmzKly4sCQpKChI8fHxunjxosP5VWfPnlXdunXTre3j4yMfH59U2728vOTl5fWPxwYAQEZ5eHgoNjZWNhnl8Lz9D4WZxSQnKzY2VrrPa7qrbnYaq01GsbGx8vDw4DsU7hsZ/Sy7bbGJxo0ba9++fdqzZ4/9X61atfTUU09pz549KlmypIKCgrRu3Tr7Y+Lj47V582Z7SKpZs6a8vLwc2pw+fVr79++/bZACAAAAgH/CbUekcufOrUqVKjlsy5kzpwIDA+3bBw4cqHHjxiksLExhYWEaN26c/P391aVLF0lS3rx51atXLw0ZMkSBgYEKCAjQ0KFDVblyZTVp0sTlYwIAAACQPbh91b7bGT58uGJjY9W3b1/7BXnXrl1rv4aUJL3zzjvKkSOHOnbsaL8g78KFC7mGFAAAAACnyVJBatOmTQ63bTabwsPDFR4enu5jfH19NWPGDM2YMcO5nQMAAACA/8/tF+QFAAAAgHsNQQoAAAAALCJIAQAAAIBFBCkAAAAAsIggBQAAAAAWEaQAAAAAwCKCFAAAAABYRJACAAAAAIsIUgAAAABgEUEKAAAAACwiSAEAAACARQQpAAAAALCIIAUAAAAAFhGkAAAAAMAighQAAAAAWESQAgAAAACLCFIAAAAAYBFBCgAAAAAsIkgBAAAAgEUEKQAAAACwiCAFAAAAABYRpAAAAADAIoIUAAAAAFhEkAIAAAAAiwhSAAAAAGARQQoAAAAALCJIAQAAAIBFBCkAAAAAsIggBQAAAAAWEaQAAAAAwCKCFAAAAABYRJACAAAAAIsIUgAAAABgEUEKAAAAACwiSAEAAACARQQpAAAAALCIIAUAAAAAFhGkAAAAAMAighQAAAAAWESQAgAAAACLCFIAAAAAYBFBCgAAAAAsIkgBAAAAgEUEKQAAAACwiCAFAAAAABblcHcHAADIKqKiohQdHe3SmpGRkS6tBwDIHAQpAAD0d4gqX768YmJi3FI/IT7BLXUBAHeHIAUAgKTo6GjFxMRo5qQRCisZ4rK6G7Zs18Tp85WYmOiymgCAf44gBQDIklw9zS5lil1YyRBVqVjGZXUPHY1yWS0AQOYhSAEAshx3TrNjih0AICMIUgCALMcd0+yYYgcAsIIgBQDIslw5zY4pdgAAK7iOFAAAAABYRJACAAAAAIsIUgAAAABgEUEKAAAAACwiSAEAAACARazaBwAAgH8k5YLWrlKgQAGFhLjm0ghAeghSAAAAuCtnz12QzWbT008/7dK6/v7+ioyMJEzBrQhSAAAAuCuXr16TMUZvjxmsyhVcd823/sPHKTo6miAFtyJIAQAA4B8pXaKYyy6eDWQVLDYBAAAAABYRpAAAAADAIoIUAAAAAFhEkAIAAAAAiwhSAAAAAGARQQoAAAAALCJIAQAAAIBFBCkAAAAAsIggBQAAAAAWEaQAAAAAwCKCFAAAAABYRJACAAAAAIsIUgAAAABgEUEKAAAAACwiSAEAAACARQQpAAAAALCIIAUAAAAAFhGkAAAAAMAighQAAAAAWESQAgAAAACLLAep2NhYxcTE2G8fP35c06ZN09q1azO1YwAAAACQVVkOUm3bttXixYslSZcuXVLt2rU1ZcoUtW3bVrNnz870DgIAAABAVmM5SO3atUuPPvqoJOm///2vChcurOPHj2vx4sWaPn26peeaPXu2qlSpojx58ihPnjyqU6eOvv32W/v9xhiFh4crODhYfn5+atiwoX799VeH54iLi9OLL76oAgUKKGfOnHriiSd08uRJq8MCAAAAgAyzHKRiYmKUO3duSdLatWvVoUMHeXh46OGHH9bx48ctPVfRokU1YcIE7dixQzt27NBjjz2mtm3b2sPSpEmTNHXqVM2cOVMREREKCgpS06ZNdfXqVftzDBw4UCtWrNDy5cv1ww8/6Nq1a3r88ceVlJRkdWgAAAAAkCGWg1Tp0qX15Zdf6sSJE1qzZo2aNWsmSTp79qzy5Mlj6bnatGmjVq1aqUyZMipTpozeeust5cqVS9u2bZMxRtOmTdNrr72mDh06qFKlSlq0aJFiYmK0bNkySdLly5c1b948TZkyRU2aNFH16tW1dOlS7du3T+vXr7c6NAAAAADIkBxWHzBy5Eh16dJFgwYN0mOPPaY6depI+vvoVPXq1e+6I0lJSfrss890/fp11alTR8eOHdOZM2fsQU2SfHx81KBBA23dulV9+vTRzp07lZCQ4NAmODhYlSpV0tatW9W8efM0a8XFxSkuLs5++8qVK5KkhIQEJSQk3PUYAACZIzk5WX5+fjKyKTHJuKSmzcNDfn5+kgtruqtudqnprrqM1bmMbPLz81NycjLf2+AUGf1c2Ywxlj/1Z86c0enTp1W1alV5ePx9UGv79u3KkyePypUrZ+m59u3bpzp16ujGjRvKlSuXli1bplatWmnr1q2qV6+eTp06peDgYHv75557TsePH9eaNWu0bNky9ejRwyEUSVKzZs0UGhqqOXPmpFkzPDxco0ePTrV92bJl8vf3t9R/AAAAAPePmJgYdenSRZcvX77tjDvLR6QkKSgoSNeuXdO6detUv359+fn56cEHH5TNZrP8XGXLltWePXt06dIlff755+rWrZs2b95sv//W5zTG3LHOndq8+uqrGjx4sP32lStXVKxYMTVr1szy9EQAQOb75ZdfVL9+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7tz2X3vy5s0rPz8/p9WVpBEjRqhly5YqVqyYrl69quXLl2vTpk1avXq1U+vmzp071TzgnDlzKjAw0OlzoocOHao2bdooJCREZ8+e1dixY3XlyhWnTzMbNGiQ6tatq3Hjxqljx47avn275s6dq7lz5zq1bork5GQtWLBA3bp1U44crtvltWnTRm+99ZZCQkJUsWJF7d69W1OnTlXPnj2dXnvNmjUyxqhs2bI6fPiwhg0bprJly6pHjx6ZWudO+46BAwdq3LhxCgsLU1hYmMaNGyd/f3916dLF6bUvXLigqKgo+3VPUr7wBgUF/aPrp92ubnBwsP79739r165dWrVqlZKSkuz7tYCAAHl7e9913TvVDgwM1FtvvaUnnnhCRYoU0fnz5zVr1iydPHkyU5b7v9PrfeuXLC8vLwUFBals2bJOqxsQEKDw8HD961//UpEiRfTHH39oxIgRKlCggNq3b/+P6t6pdkhIiIYNG6ZOnTqpfv36atSokVavXq2vv/5amzZtcnptSbpy5Yo+++wzTZky5R/Xy2jdBg0aaNiwYfLz81Px4sW1efNmLV68WFOnTnV67c8++0wFCxZUSEiI9u3bpwEDBqhdu3apFumy6k7fRVKu9eiMfVlGvgc5Y192p7qJiYlO25fdqfb169edui/LdK5eJhC3995775nixYsbb29vU6NGDZcsBb5x40YjKdW/bt26ObVuWjUlmQULFji1rjHG9OzZ0/46FyxY0DRu3NisXbvW6XXT4qrlzzt16mSKFClivLy8THBwsOnQoYP59ddfnV7XGGO+/vprU6lSJePj42PKlStn5s6d65K6xhizZs0aI8kcPHjQZTWNMebKlStmwIABJiQkxPj6+pqSJUua1157zcTFxTm99ieffGJKlixpvL29TVBQkOnXr5+5dOlSpte5074jOTnZjBo1ygQFBRkfHx9Tv359s2/fPpfUXrBgQZr3jxo1yml1U5YnTuvfxo0bnTrm2NhY0759exMcHGy8vb1NkSJFzBNPPGG2b9/+j+veqXZaMmv589vVjYmJMc2aNTMFCxY0Xl5eJiQkxHTr1s1ERUX947p3qp1i3rx5pnTp0sbX19dUrVrVfPnlly6rPWfOHOPn55epf9t3qnv69GnTvXt3ExwcbHx9fU3ZsmXNlClTMuWSEneq/e6775qiRYva3+vXX389U/an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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Filter for only classic bikes used by casual users\n", "classic_bikes_casual = data[(data['rideable_type'] == 'classic_bike') & (data['member_casual'] == 'casual')]\n", "\n", "# Filter for Thursday, Friday, Saturday, Sunday\n", "classic_bikes_casual['day_of_week'] = classic_bikes_casual['started_at'].dt.dayofweek\n", "classic_bikes_casual_weekend = classic_bikes_casual[classic_bikes_casual['day_of_week'] >= 3]\n", "\n", "# Extract hour of day\n", "classic_bikes_casual_weekend['hour_of_day'] = classic_bikes_casual_weekend['started_at'].dt.hour\n", "\n", "# Plotting histogram\n", "plt.figure(figsize=(10, 6))\n", "sns.histplot(classic_bikes_casual_weekend['hour_of_day'], bins=24, kde=False, color='#e0caa9')\n", "plt.title('Usage of Classic Bikes by Casual Users (Thursday-Sunday)')\n", "plt.xlabel('Hour of the Day')\n", "plt.ylabel('Number of Rides')\n", "plt.xticks(range(0, 24))\n", "plt.grid(axis='y')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "id": "96e0a59e", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T16:24:22.282709Z", "start_time": "2023-11-10T16:24:22.221185Z" } }, "outputs": [ { "data": { "text/plain": [ "DuSable Lake Shore Dr & Monroe St 56.0\n", "Wabash Ave & Grand Ave 52.0\n", "Clinton St & Madison St 49.0\n", "St. Clair St & Erie St 48.0\n", "Sedgwick St & Webster Ave 47.0\n", "Michigan Ave & Oak St 47.0\n", "Columbus Dr & Randolph St 43.0\n", "Southport Ave & Waveland Ave 42.0\n", "LaSalle Dr & Huron St 39.0\n", "Wilton Ave & Belmont Ave 39.0\n", "Indiana Ave & Roosevelt Rd 36.0\n", "Halsted St & Roscoe St 36.0\n", "Millennium Park 35.0\n", "DuSable Lake Shore Dr & Diversey Pkwy 34.0\n", "Cityfront Plaza Dr & Pioneer Ct 34.0\n", "Milwaukee Ave & Grand Ave 34.0\n", "Streeter Dr & Grand Ave 33.0\n", "Michigan Ave & Washington St 33.0\n", "Rush St & Hubbard St 32.0\n", "Kingsbury St & Kinzie St 31.0\n", "dtype: float64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Count the total number of rides starting at each station\n", "start_counts_total = data['start_station_name'].value_counts()\n", "\n", "# Count the total number of rides ending at each station\n", "end_counts_total = data['end_station_name'].value_counts()\n", "\n", "# Calculating discrepancy for each station\n", "# discrepancy = absolute difference between starts and ends\n", "station_discrepancy = start_counts_total.subtract(end_counts_total, fill_value=0).abs()\n", "\n", "# Ranking stations by largest discrepancy\n", "station_discrepancy_sorted = station_discrepancy.sort_values(ascending=False)\n", "\n", "# Top 20 stations with largest discrepancy\n", "top_20_discrepancy_stations = station_discrepancy_sorted.head(20)\n", "\n", "top_20_discrepancy_stations\n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "id": "9fce256f", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T16:26:18.686009Z", "start_time": "2023-11-10T16:26:18.466694Z" } }, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extracting latitude and longitude for start stations\n", "start_stations_lat_lng = data[['start_station_name', 'start_lat', 'start_lng']].drop_duplicates()\n", "\n", "# Extracting latitude and longitude for end stations\n", "end_stations_lat_lng = data[['end_station_name', 'end_lat', 'end_lng']].drop_duplicates()\n", "end_stations_lat_lng.columns = ['start_station_name', 'start_lat', 'start_lng']\n", "\n", "# Combining start and end stations latitude and longitude\n", "all_stations_lat_lng = pd.concat([start_stations_lat_lng, end_stations_lat_lng]).drop_duplicates()\n", "\n", "# Filtering for the top 20 stations with largest discrepancy\n", "top_20_stations_lat_lng = all_stations_lat_lng[all_stations_lat_lng['start_station_name'].isin(top_20_discrepancy_stations.index)]\n", "\n", "top_20_stations_lat_lng\n", "\n", "import folium\n", "\n", "# Ensuring unique entries for each station\n", "unique_top_20_stations_lat_lng = top_20_stations_lat_lng.drop_duplicates(subset=['start_station_name'])\n", "\n", "# Creating a map centered around the general area of the stations\n", "map_center_lat = unique_top_20_stations_lat_lng['start_lat'].mean()\n", "map_center_lng = unique_top_20_stations_lat_lng['start_lng'].mean()\n", "station_map = folium.Map(location=[map_center_lat, map_center_lng], zoom_start=12)\n", "\n", "# Adding markers for each station\n", "for _, row in unique_top_20_stations_lat_lng.iterrows():\n", " folium.Marker(\n", " location=[row['start_lat'], row['start_lng']],\n", " popup=row['start_station_name']\n", " ).add_to(station_map)\n", "'''\n", "# Saving the map to an HTML file\n", "map_file_path = '/mnt/data/top_20_discrepancy_stations_map.html'\n", "station_map.save(map_file_path)\n", "'''\n", "#map_file_path\n", "\n", "station_map\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "944f0801", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T16:28:43.031940Z", "start_time": "2023-11-10T16:28:43.007952Z" } }, "outputs": [ { "data": { "text/plain": [ "DuSable Lake Shore Dr & Monroe St 56.0\n", "Wabash Ave & Grand Ave 52.0\n", "Clinton St & Madison St 49.0\n", "St. Clair St & Erie St 48.0\n", "Sedgwick St & Webster Ave 47.0\n", " ... \n", "Kedzie Ave & 24th St 0.0\n", "Kedzie Ave & 104th St 0.0\n", "State St & 76th St 0.0\n", "State St & 79th St 0.0\n", "Lincoln Ave & Roscoe St - Charging 0.0\n", "Length: 1001, dtype: float64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "station_discrepancy_sorted" ] }, { "cell_type": "code", "execution_count": 17, "id": "d653831f", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T16:37:13.097136Z", "start_time": "2023-11-10T16:37:13.063984Z" } }, "outputs": [ { "data": { "text/plain": [ "(Streeter Dr & Grand Ave 33.0\n", " DuSable Lake Shore Dr & Diversey Pkwy 34.0\n", " Cityfront Plaza Dr & Pioneer Ct 34.0\n", " Millennium Park 35.0\n", " Indiana Ave & Roosevelt Rd 36.0\n", " Halsted St & Roscoe St 36.0\n", " LaSalle Dr & Huron St 39.0\n", " Southport Ave & Waveland Ave 42.0\n", " Columbus Dr & Randolph St 43.0\n", " Wabash Ave & Grand Ave 52.0\n", " dtype: float64,\n", " DuSable Lake Shore Dr & Monroe St -56.0\n", " Clinton St & Madison St -49.0\n", " St. Clair St & Erie St -48.0\n", " Michigan Ave & Oak St -47.0\n", " Sedgwick St & Webster Ave -47.0\n", " Wilton Ave & Belmont Ave -39.0\n", " Milwaukee Ave & Grand Ave -34.0\n", " Michigan Ave & Washington St -33.0\n", " Halsted St & Wrightwood Ave -31.0\n", " Campbell Ave & North Ave -30.0\n", " dtype: float64)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Recalculating discrepancy without absolute value\n", "# Positive discrepancy: More rides ending than starting at the station\n", "# Negative discrepancy: More rides starting than ending at the station\n", "station_discrepancy_signed = start_counts_total.subtract(end_counts_total, fill_value=0)\n", "\n", "# Sorting the discrepancies\n", "station_discrepancy_sorted_signed = station_discrepancy_signed.sort_values()\n", "\n", "# Top 10 stations with positive discrepancy\n", "top_10_positive_discrepancy = station_discrepancy_sorted_signed.tail(10)\n", "\n", "# Bottom 10 stations with negative discrepancy\n", "bottom_10_negative_discrepancy = station_discrepancy_sorted_signed.head(10)\n", "\n", "top_10_positive_discrepancy, bottom_10_negative_discrepancy\n", "\n" ] }, { "cell_type": "code", "execution_count": 18, "id": "05d67dda", "metadata": { "ExecuteTime": { "end_time": "2023-11-10T16:47:05.799414Z", "start_time": "2023-11-10T16:47:05.662250Z" } }, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extracting the station names for the top and bottom 10 stations\n", "top_10_station_names = top_10_positive_discrepancy.index\n", "bottom_10_station_names = bottom_10_negative_discrepancy.index\n", "\n", "# Filtering the latitude and longitude for these stations\n", "top_10_stations_lat_lng = all_stations_lat_lng[all_stations_lat_lng['start_station_name'].isin(top_10_station_names)]\n", "bottom_10_stations_lat_lng = all_stations_lat_lng[all_stations_lat_lng['start_station_name'].isin(bottom_10_station_names)]\n", "\n", "# Ensuring unique entries for each station\n", "top_10_stations_lat_lng_unique = top_10_stations_lat_lng.drop_duplicates(subset=['start_station_name'])\n", "bottom_10_stations_lat_lng_unique = bottom_10_stations_lat_lng.drop_duplicates(subset=['start_station_name'])\n", "\n", "# Creating a map centered around the general area of the stations\n", "map_center_lat = all_stations_lat_lng['start_lat'].mean()\n", "map_center_lng = all_stations_lat_lng['start_lng'].mean()\n", "station_map_discrepancy = folium.Map(location=[map_center_lat, map_center_lng], zoom_start=12)\n", "\n", "# Adding blue markers for top 10 positive discrepancy stations\n", "for _, row in top_10_stations_lat_lng_unique.iterrows():\n", " folium.Marker(\n", " location=[row['start_lat'], row['start_lng']],\n", " popup=row['start_station_name'],\n", " icon=folium.Icon(color=\"blue\")\n", " ).add_to(station_map_discrepancy)\n", "\n", "# Adding red markers for bottom 10 negative discrepancy stations\n", "for _, row in bottom_10_stations_lat_lng_unique.iterrows():\n", " folium.Marker(\n", " location=[row['start_lat'], row['start_lng']],\n", " popup=row['start_station_name'],\n", " icon=folium.Icon(color=\"red\")\n", " ).add_to(station_map_discrepancy)\n", "\n", "station_map_discrepancy\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "c8dd36f3", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.8" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "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": true } }, "nbformat": 4, "nbformat_minor": 5 }