from datetime import datetime
print(f'Päivitetty {datetime.now()}')
Päivitetty 2021-10-27 09:06:39.218538
Monista palveluista (esimerkiksi Yahoo Finance) voin noutaa aikasarjoja, joiden aikaleimat tulevat automaattisesti dataframen indeksiin. Jos näin ei ole, niin joudun itse huolehtimaan aikaleimojen muuntamisesta ja siirtämisestä indeksiin.
Merkkijonona (tekstinä) esitetyt aikatiedot pitää muuntaa Pythonin ymmärtämiksi aikaleimoiksi. Tämän voin tehdä esimerkiksi seuraavasti:
Muuntamisessa tarvitsen muotoilukoodeja, jotka löydän esimerkiksi osoitteesta: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
import pandas as pd
import numpy as np
# Avaan aikasarjatietoa sisältävän tiedoston ja katson aikatietojen esitysmuodon
df1 = pd.read_excel('http://taanila.fi/CO2.xlsx')
df1.head()
Kuukausi | CO2 | |
---|---|---|
0 | 1999-12 | 368.04 |
1 | 2000-1 | 369.25 |
2 | 2000-2 | 369.50 |
3 | 2000-3 | 370.56 |
4 | 2000-4 | 371.82 |
# Sijoitan aikatiedon indeksiin
# to_datetime-funktio muuntaa merkkijonot aikaleimoiksi
# %Y tarkoittaa vuosilukua, vuoden ja kuukauden välissä väliviiva -, %m tarkoittaa kuukauden numeroa
df1.index = pd.to_datetime(df1['Kuukausi'], format = '%Y-%m')
# Poistan alkuperäisen 'Kuukausi'-sarakkeen
df1 = df1.drop('Kuukausi', axis = 1)
df1.head()
CO2 | |
---|---|
Kuukausi | |
1999-12-01 | 368.04 |
2000-01-01 | 369.25 |
2000-02-01 | 369.50 |
2000-03-01 | 370.56 |
2000-04-01 | 371.82 |
# Avaan aikasarjatietoa sisältävän tiedoston ja katson aikatietojen esitysmuodon
df2 = pd.read_csv('http://taanila.fi/Electric_Production.csv')
df2.head()
DATE | IPG2211A2N | |
---|---|---|
0 | 1/1/1985 | 72.5052 |
1 | 2/1/1985 | 70.6720 |
2 | 3/1/1985 | 62.4502 |
3 | 4/1/1985 | 57.4714 |
4 | 5/1/1985 | 55.3151 |
# Sijoitan aikatiedon indeksiin
# to_datetime-funktio muuntaa merkkijonot aikaleimoiksi
df2.index = pd.to_datetime(df2['DATE'], format = '%m/%d/%Y')
df2 = df2.drop('DATE', axis = 1)
df2.head()
IPG2211A2N | |
---|---|
DATE | |
1985-01-01 | 72.5052 |
1985-02-01 | 70.6720 |
1985-03-01 | 62.4502 |
1985-04-01 | 57.4714 |
1985-05-01 | 55.3151 |
Voin luoda sarjan aikaleimoja pandas-kirjaston date_range-funktiolla. Funktiolle annan parametreina täsmälleen kolme seuraavista: start, end, periods, freq. Lue lisää:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.date_range.html
freq-parametrin mahdolliset arvot löydät seuraavasta:
https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases
# Aikasarjan luvut
series = [500, 350, 250, 400, 450, 350, 200, 300, 350, 200, 150, 400, 550,
350, 250, 550, 550, 400, 350, 600, 750, 500, 400, 650, 850]
# Aikaleimojen luominen vuosineljänneksittäin (Q)
index = pd.date_range(start = '2021-9-30', periods = len(series), freq = 'Q')
# Dataframen luominen
df3 = pd.DataFrame(series, index = index)
# Otsikko aikasarjan luvuille
df3.columns=['Demand']
df3
Demand | |
---|---|
2021-09-30 | 500 |
2021-12-31 | 350 |
2022-03-31 | 250 |
2022-06-30 | 400 |
2022-09-30 | 450 |
2022-12-31 | 350 |
2023-03-31 | 200 |
2023-06-30 | 300 |
2023-09-30 | 350 |
2023-12-31 | 200 |
2024-03-31 | 150 |
2024-06-30 | 400 |
2024-09-30 | 550 |
2024-12-31 | 350 |
2025-03-31 | 250 |
2025-06-30 | 550 |
2025-09-30 | 550 |
2025-12-31 | 400 |
2026-03-31 | 350 |
2026-06-30 | 600 |
2026-09-30 | 750 |
2026-12-31 | 500 |
2027-03-31 | 400 |
2027-06-30 | 650 |
2027-09-30 | 850 |