1306 lines
77 KiB
Plaintext
1306 lines
77 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**Importing Libraries**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import seaborn as sns\n",
|
||
"import statsmodels.api as sm\n",
|
||
"import datetime as datetime"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**Preprocessing**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Aggregating over Sammonpuistikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Albertinkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Arabiankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Piispanportti\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Marian sairaala\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Perämiehenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Töölönlahdenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Koskelantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Päijänteentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lintulahdenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kansallismuseo\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Laulurastaantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kaivopuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jämeräntaival\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Niittykumpu (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Toppelundinportti\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Näkinsilta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kutsuntatie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Muurarinkuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Urheilupuisto (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Matinkyläntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Gyldenintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hauenkalliontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kössi Koskisen aukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Fleminginkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hakaniemi (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kauppakorkeakoulu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Nordenskiöldinaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Munkkiniemen aukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mamsellimyllynkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hietalahdentori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Karhupuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Matinkartanontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Rautatientori / länsi\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lauttasaarensilta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Rautatientori / itä\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Itälahdenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Marjaniementie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Komeetankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Piispankallio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ympyrätalo\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lystimäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Toinen linja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lastenlehto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vuosaaren puistopolku\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kaivonkatsojanpuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Niittymaa\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vallipolku\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Etuniementie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pitäjänmäen asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sompasaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Erottajan aukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kuikkarinne\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lystimäensilta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Olympiastadion\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Apollonkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Töölöntulli\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jätkäsaarenlaituri\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Reiherintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kamppi (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Töölönkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Välimerenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kuusitie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kalasatama (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sumukuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Intiankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kiasma\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Baana\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Haukilahdenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Varustuksentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pajupillintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tilkanvierto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lauttasaaren ostoskeskus\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pasilan asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vanha kirkkopuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Siilitie 13\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Bermudankuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Betonimies\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Haapaniemenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vilhonvuorenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Heikkiläntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Siilitie 9\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jalavatie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mäntyviita\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Muusantori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Eteläinen Hesperiankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Korjaamo\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puotinkylän kartano\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vallilan varikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Muotoilijankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Aurinkotuulenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Linnanmäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pajamäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Messeniuksenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Eläinmuseo\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mannerheimintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pohjois-Haagan asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ida Aalbergin tie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kustaankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tollinpolku\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Venttiilikuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Syystie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Töölönlahden puisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Porolahden koulu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Relanderinaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Käpyläntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Brahen kenttä\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pernajantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Oravannahkatori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tontunmäentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Viiskulma\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Brahen puistikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Orpaanporras\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Otsolahti\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Peukaloisentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kalkkihiekantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Varsapuistikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Narinkka\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Töölöntori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Itäkeskus (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Merihaka\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ulappasilta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Painiitty\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hankasuontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Munkkivuoren ostoskeskus\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Isoisänsilta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Laivalahden puistotie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Haakoninlahdenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Halkaisijantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vanha Kauppahalli\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Liisanpuistikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kaisaniemenpuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Myllypuro (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tapionaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Väärämäentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Paavalinpuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Laajalahden aukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vanha Viertotie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Porthania\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Verkatehtaanpuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Annankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Länsisatamankuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Otaranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Louhentori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kiskontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Esterinportti\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Herttoniemi (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mikkolantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Urhea-kampus\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Huovitie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Suurpellonaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jäähalli\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Viikin tiedepuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Arabian kauppakeskus\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Rastila (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kivikonlaita\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tietäjä\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Leikosaarentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hauenkallio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pohjolanaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mastokatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ooppera\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pohjankulma\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Länsituuli\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Itämerentori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Merisotilaantori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Laajasalon ostoskeskus\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Eränkävijäntori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kustaankartano\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ritarikatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Viljelijäntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Olarinluoma\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kylävoudintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Maistraatintori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Laivasillankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Gebhardinaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Rummunlyöjänkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Länsisatamankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Velodrominrinne\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Aalto-yliopisto (M), Korkeakouluaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kalevalantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Saniaiskuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Katariina Saksilaisen katu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Siilitie (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Juhana Herttuan tie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Agronominkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kauppakeskus Columbus\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Laajalahden keskus\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tenholantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Maunula\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Huopalahdentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Voikukantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vesakkotie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kriikunakuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Rajasaarentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Designmuseo\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Punakiventie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mestarinkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kesäkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Koskelan varikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pohjolankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Westendinasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Halmetie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Friisilänaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Aurinkolahdenaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Rautatieläisenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kontula (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hernepellontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hakalehto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Käpylän asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kaapelitehdas\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Suomenlahdentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Läkkitori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mellunmäki (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mäkelänkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Haagan tori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tyynenmerenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Unioninkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Paloheinäntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lukutori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Heikkilänaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sepänkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Metsänneidonpolku\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Malminkartanon asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Postipuun koulu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tilkantori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Piispansilta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Keilaniemi (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ulvilantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Haapasaarentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Korppaanmäentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Meri-Rastilan tori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Verkkosaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lokitie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Diakoniapuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kapteeninpuistikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kauppakeskus Kaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Komentajankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tapiolan urheilupuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Karhulantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pihlajamäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Nelikkotie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Teurastamo\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Toppelundintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kalevankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Otto Brandtin tie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puistokaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vallikatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Postipuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ruskeasuon varikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Marjaniemi\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Agnetankuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Huopalahden asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hernesaarenranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ramsinniementie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kivikonkaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lepolantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Säterinniitty\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vähäntuvantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Petter Wetterin tie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Säterinrinne\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kanavaranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Cygnaeuksenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puotila (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Siltavoudintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tekniikantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tunnelitie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ala-Malmin tori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hanasaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hertanmäenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Thalianaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Paciuksenkaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Opastinsilta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Leppävaarankäytävä\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kalkkipellonmäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ratapihantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Radiokatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Arielinkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sörnäinen (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ruomelantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lehtisaarentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Luoteisväylä\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Golfpolku\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sofianlehdonkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tuohipolku\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kivikon liikuntapuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ratsutori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kulttuuriaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puotinharju\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Torpparinmäentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Margareetankuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Asentajanpuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vuosaaren liikuntapuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Herttoniemenranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ilmalan asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Leppävaaranaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sateentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Eteläesplanadi\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Humalniementie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kannelmäen liikuntapuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Senaatintori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Auringonkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Koukkusaarentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jännetie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Käskynhaltijantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sateenkaarentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Valimotie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Aalto-yliopisto (M), Tietotie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kulosaari (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tulisuontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Melkonkuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Elimäenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Yhdyskunnankuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Teollisuuskatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Von Daehnin katu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ruutikatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kaustisentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jokipellontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mellstenintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Rapakiventie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Seurasaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pukinmäen liikuntapuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tiistiläntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pukinmäen asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sinkilätie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Malmin asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Huhtakuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tupasaarentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Saunalahdentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Koivusaari (M)\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Haukilahdenaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Takomotie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Teerisuontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ajomiehentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Keilaranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Töyrynummi\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Aulangontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Linnakepolku\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kasarmitori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Salmisaarenranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Majurinkulma\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mustikkamaa\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puistolan asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vihdintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Viikin normaalikoulu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Valimon asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Meilahden sairaala\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Itäportti\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sähkömies\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Leppäsuonaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Herttoniemen kirkko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kontulankaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Matinlahdenranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Trumpettikuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Honkasuo\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Paloheinän kirjasto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Abraham Wetterin tie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Oulunkylän asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puotilan ostoskeskus\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mosaiikkitori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kannelmäen asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Eerikinkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pirkkolan liikuntapuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Länsiterminaali\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sallatunturintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Torpanranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tammisalon aukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Stenbäckinkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Leppävaaran uimahalli\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hietaniemenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Revontulentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ahertajantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Westendintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Näyttelijäntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Marttila\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Karviaistie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Nuottaniementie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puotilantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Elfvik\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kuunkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Karhusuontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Roihupelto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over A.I. Virtasen aukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sepetlahdentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Prinsessantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Teljäntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Itäkeskus Metrovarikko\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Humikkalankuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Savela\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Paloheinän maja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tuukkalantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tiistinkallio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vanha Tapanilantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Haukilahdensolmu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Uimastadion\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kirkkoherrantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kuninkaantammi\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hakuninmaa\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hämeenlinnanväylä\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Alakiventie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Malmin sairaala\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Etupellonpuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kuusisaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Säteri\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Koivu-Mankkaa\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Helluntairaitti\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mäkitorpantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Töyrynummentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hagalundinpuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Haukilahdenranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ehrenströmintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Purjetie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Gunillantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Linnuntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Maarinranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Isosaarentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mäkkylän asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kalannintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Orionintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Piikintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Innopoli\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kurkimäentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Maununneva\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mankkaanaukio\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kotinummentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Korkeasaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lettopolku\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puistolantori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Upseerinkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Derby Business Park\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Siltamäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jollas\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Workshop Helsinki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mankkaanlaaksontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Gransinmäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Keilalahti\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puistolan VPK\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lallukankuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tapanilan asema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jakomäentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Maatullinkuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Outotec\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tilketori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Vartioharjuntie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Alppikylä\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Avaruuskatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Nokkala\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Gallen-Kallelan tie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Malminkartanonhuippu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Leppävaaran urheilupuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kurkimäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Rukatunturintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kurkijoentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tuulimäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Porvarintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Jakomäki\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Paciuksenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Heikinlaakso\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Koetilankuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pop-Up Kansalaistori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Sörnäisten metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Museokatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kampin metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hakaniemen metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Eiran Sairaala\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kauppatori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Erottaja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over nan\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Failed to write nan due to 'float' object has no attribute 'replace'\n",
|
||
"Aggregating over Hollolantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kirjurinkuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lumivaarantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kalasataman metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Hylkeenpyytäjänkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Messitytönkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kaironkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Cygnauksenkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Marian Sairaala\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Porkkalankatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Veturitori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Mäntytie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kalastajantie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lintumetsä\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Relay Box test station\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kauppakartanonkuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Armas Launiksen katu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Workshop Konala\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Tiurintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over O'Bike Station\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ruomelantie***\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Leiritori\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Adjutantinkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Lahnalahdentie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Professorintie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Niemenmäenkuja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Olarinkatu\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Ulvilanpuisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Friisinkalliontie\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Workshop Smoove\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over 999 Pop-Up Stadin Ammattiopisto\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over 9 Station Test\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over 09 Erottaja\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Herttoniemen ranta\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Puotilan metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kulosaaren metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Myllypuron metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Herttoniemen metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Itäkeskuksen metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Siilitien metroasema\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Pop-Up Jätkäsaari\n",
|
||
"Writing aggregated dataframe to .csv...\n",
|
||
"Aggregating over Kirjurinkuja\n",
|
||
"Writing aggregated dataframe to .csv...\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from os import listdir\n",
|
||
"\n",
|
||
"weather_df = pd.read_csv('datasets/weather_hourly_helsinki.csv', header=2)\n",
|
||
"bike_df = pd.DataFrame(columns=['Departure', 'Return', 'Departure station id', 'Departure station name', 'Return station id', 'Return station name', 'Covered distance (m)', 'Duration (sec.)'])\n",
|
||
"\n",
|
||
"print('Loading datasets...')\n",
|
||
"for dataset in listdir('datasets'):\n",
|
||
" if dataset == 'weather_hourly_helsinki.csv' or dataset == 'full_bike_data.csv' or dataset.endswith('.gz'):\n",
|
||
" continue\n",
|
||
" temp_df = pd.read_csv('datasets/' + dataset, low_memory=False)\n",
|
||
" bike_df = pd.concat([bike_df, temp_df])\n",
|
||
"\n",
|
||
"bike_df['Departure'] = pd.to_datetime(bike_df['Departure'], format='mixed')\n",
|
||
"bike_df['Return'] = pd.to_datetime(bike_df['Return'], format='mixed')\n",
|
||
"bike_df.to_csv('datasets/full_bike_data.csv')\n",
|
||
"\n",
|
||
"for station in bike_df['Departure station name'].unique():\n",
|
||
" print(f'Aggregating over {station}')\n",
|
||
" columns = ['Departure', 'Departure station name', 'Departure station id']\n",
|
||
" temp_station = bike_df.loc[bike_df['Departure station name'] == station, columns]\n",
|
||
" temp_station['trip'] = 1\n",
|
||
"\n",
|
||
" temp_station = temp_station.resample('h', on='Departure').trip.sum()\n",
|
||
"\n",
|
||
" print('Writing aggregated dataframe to .csv...')\n",
|
||
" try:\n",
|
||
" name = station.replace('/', '-')\n",
|
||
" temp_station.to_csv('datasets/' + name + '_hourly_aggregate.csv', mode='x')\n",
|
||
" except Exception as e:\n",
|
||
" print(f'Failed to write {station} due to {e}')\n",
|
||
"\n",
|
||
"for station in bike_df['Return station name'].unique():\n",
|
||
" print(f'Aggregating over {station}')\n",
|
||
" columns = ['Return', 'Return station name', 'Return station id']\n",
|
||
" temp_station = bike_df.loc[bike_df['Return station name'] == station, columns]\n",
|
||
" temp_station['trip'] = 1\n",
|
||
"\n",
|
||
" temp_station = temp_station.resample('h', on='Return').trip.sum()\n",
|
||
"\n",
|
||
" print('Writing aggregated dataframe to .csv...')\n",
|
||
" try:\n",
|
||
" name = station.replace('/', '-')\n",
|
||
" temp_station.to_csv('datasets/' + name + '_return_hourly_aggregate.csv', mode='x')\n",
|
||
" except Exception as e:\n",
|
||
" print(f'Failed to write {station} due to {e}')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**Plotting the Distribution of Bike Trips by Year**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/tmp/ipykernel_354687/4263803594.py:1: DtypeWarning: Columns (3,5) have mixed types. Specify dtype option on import or set low_memory=False.\n",
|
||
" df = pd.read_csv('datasets/full_bike_data.csv', low_memory=True)\n",
|
||
"/tmp/ipykernel_354687/4263803594.py:8: FutureWarning: \n",
|
||
"\n",
|
||
"Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.\n",
|
||
"\n",
|
||
" sns.barplot(x=bike_trips_per_year['Year'], y=bike_trips_per_year['Number of Trips'], palette='viridis')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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EwAAAACY8IngNH/+fDVs2FABAQG655579OWXX96y/apVq9SsWTMFBASodevW+uSTTzxUKQAAAICyyOvBaeXKlYqPj9eUKVO0e/dutWnTRr1799bp06eLbb9jxw4NHjxYw4YNU2ZmpmJiYhQTE6O9e/d6uHIAAAAAZYXXg9Ps2bM1YsQIDR06VC1atNCbb76pSpUqacmSJcW2nzdvnh544AE9++yzat68uaZPn6527drpjTfe8HDlAAAAAMoKf2+e/MqVK9q1a5cSEhKK1vn5+alHjx5KT08vdp/09HTFx8fbrevdu7fWrl1bbPuCggIVFBQUfc7Ly5Mk5efnm9Z3tbDAtA3sOfK9OuPa1Z9deryywOVjcIUxcJarx6CwgDFwlivHoPBn/i64Ha4cg2uXGIPb4coxKLh4xWXHKktcOQaXLl5z2bHKErMxuL7dMAzzgxle9N133xmSjB07dtitf/bZZ40OHToUu0/58uWN5cuX262bP3++UatWrWLbT5kyxZDEwsLCwsLCwsLCwsJS7HLixAnT7OLVK06ekJCQYHeFymaz6cyZM6pRo4YsFosXK7t9+fn5CgsL04kTJxQUFOTtcsokxsC7+P69jzHwPsbA+xgD72MMvK+kj4FhGDp//rzq1Klj2tarwemOO+5QuXLldOrUKbv1p06dUmhoaLH7hIaGOtXearXKarXaratatertF+1DgoKCSuR/oKUJY+BdfP/exxh4H2PgfYyB9zEG3leSxyA4ONihdl6dHKJChQqKiopSampq0TqbzabU1FRFR0cXu090dLRde0natGnTTdsDAAAAwG/l9Vv14uPjNWTIELVv314dOnTQ3LlzdfHiRQ0dOlSSFBsbq7p16yoxMVGSNGbMGHXp0kWzZs1S3759lZycrIyMDC1atMib3QAAAABQink9OA0aNEg//PCDJk+erNzcXLVt21YbNmxQSEiIJCk7O1t+fv+5MNapUyctX75ckyZN0oQJE3TXXXdp7dq1atWqlbe64HFWq1VTpky54RZEeA5j4F18/97HGHgfY+B9jIH3MQbeV5bGwGIYjsy9BwAAAABll9dfgAsAAAAAvo7gBAAAAAAmCE4AAAAAYILgBAAAAAAmCE5ekJiYqLvvvluBgYGqVauWYmJidPDgQbs2P//8s+Li4lSjRg1VqVJFf/jDH2548e/o0aMVFRUl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",
|
||
"text/plain": [
|
||
"<Figure size 1000x600 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = pd.read_csv('datasets/full_bike_data.csv', low_memory=True)\n",
|
||
"\n",
|
||
"df['Departure'] = pd.to_datetime(df['Departure'])\n",
|
||
"df['Year'] = df['Departure'].dt.year\n",
|
||
"bike_trips_per_year = df.groupby('Year').size().reset_index(name='Number of Trips')\n",
|
||
"\n",
|
||
"plt.figure(figsize=(10, 6))\n",
|
||
"sns.barplot(x=bike_trips_per_year['Year'], y=bike_trips_per_year['Number of Trips'], palette='viridis')\n",
|
||
"\n",
|
||
"plt.xlabel('Year')\n",
|
||
"plt.ylabel('Number of Trips (in millions)')\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**Model for Predicting Departure Count**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"0.08274263164029039\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/tmp/ipykernel_3569458/992788154.py:23: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n",
|
||
" print(res.forecast('2024-06-15 14:00:00')[-1])\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"station = 'Kamppi (M)'\n",
|
||
"\n",
|
||
"data = pd.read_csv('datasets/' + station + '_hourly_aggregate.csv')\n",
|
||
"data['Departure'] = pd.to_datetime(data['Departure'], format='mixed')\n",
|
||
"\n",
|
||
"weather_df = pd.read_csv('datasets/weather_hourly_helsinki.csv', header=2)\n",
|
||
"weather_df['time'] = pd.to_datetime(weather_df['time'], format='mixed')\n",
|
||
"\n",
|
||
"data = pd.merge(weather_df, data, how='inner', left_on='time', right_on='Departure')\n",
|
||
"data = data.drop(['time'], axis=1)\n",
|
||
"data.set_index(data['temperature_2m (°C)'], inplace=True)\n",
|
||
"data.set_index(data['rain (mm)'], inplace=True)\n",
|
||
"data.set_index(data['Departure'], inplace=True)\n",
|
||
"\n",
|
||
"data['temperature_2m (°C)'] = pd.to_numeric(data['temperature_2m (°C)'], errors='coerce')\n",
|
||
"data['rain (mm)'] = pd.to_numeric(data['rain (mm)'], errors='coerce')\n",
|
||
"data['trip'] = pd.to_numeric(data['trip'], errors='coerce')\n",
|
||
"\n",
|
||
"data = data.dropna(axis=1)\n",
|
||
"\n",
|
||
"mod = sm.tsa.statespace.SARIMAX(data['trip'], order=(1, 1, 1), seasonal_order=(0, 1, 0, 24), freq='h')\n",
|
||
"res = mod.fit(disp=False)\n",
|
||
"print(res.forecast('2024-06-15 14:00:00')[-1])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**Model for Predicting Return Count**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/elliot/Projects/data-science-project/backend/env/lib/python3.12/site-packages/statsmodels/tsa/base/tsa_model.py:473: ValueWarning: No frequency information was provided, so inferred frequency h will be used.\n",
|
||
" self._init_dates(dates, freq)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2023-11-01 00:00:00 0.332839\n",
|
||
"2023-11-01 01:00:00 0.108983\n",
|
||
"2023-11-01 02:00:00 1.033872\n",
|
||
"2023-11-01 03:00:00 0.008670\n",
|
||
"2023-11-01 04:00:00 0.000214\n",
|
||
" ... \n",
|
||
"2024-06-15 10:00:00 0.075210\n",
|
||
"2024-06-15 11:00:00 1.075206\n",
|
||
"2024-06-15 12:00:00 2.075204\n",
|
||
"2024-06-15 13:00:00 0.075204\n",
|
||
"2024-06-15 14:00:00 0.075204\n",
|
||
"Freq: h, Name: predicted_mean, Length: 5463, dtype: float64\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"station = 'Kamppi (M)'\n",
|
||
"\n",
|
||
"data = pd.read_csv('datasets/' + station + '_return_hourly_aggregate.csv')\n",
|
||
"data['Return'] = pd.to_datetime(data['Return'], format='mixed')\n",
|
||
"\n",
|
||
"weather_df = pd.read_csv('datasets/weather_hourly_helsinki.csv', header=2)\n",
|
||
"weather_df['time'] = pd.to_datetime(weather_df['time'], format='mixed')\n",
|
||
"\n",
|
||
"data = pd.merge(weather_df, data, how='inner', left_on='time', right_on='Return')\n",
|
||
"data = data.drop(['time'], axis=1)\n",
|
||
"data.set_index(data['temperature_2m (°C)'], inplace=True)\n",
|
||
"data.set_index(data['rain (mm)'], inplace=True)\n",
|
||
"data.set_index(data['Return'], inplace=True)\n",
|
||
"\n",
|
||
"data['temperature_2m (°C)'] = pd.to_numeric(data['temperature_2m (°C)'], errors='coerce')\n",
|
||
"data['rain (mm)'] = pd.to_numeric(data['rain (mm)'], errors='coerce')\n",
|
||
"data['trip'] = pd.to_numeric(data['trip'], errors='coerce')\n",
|
||
"\n",
|
||
"data = data.dropna(axis=1)\n",
|
||
"\n",
|
||
"mod = sm.tsa.statespace.SARIMAX(data['trip'], order=(1, 1, 1), seasonal_order=(0, 1, 0, 24), freq='h')\n",
|
||
"res = mod.fit(disp=False)\n",
|
||
"print(res.forecast('2024-06-15 14:00:00'))"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "env",
|
||
"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.12.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|