from datetime import datetime
print(f'Päivitetty {datetime.now().date()} / Aki Taanila')
Päivitetty 2024-03-30 / Aki Taanila
Useista 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 datan 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 datan 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 listana
data = [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 (QE)
index = pd.date_range(start='2021-9-30', periods=len(data), freq='QE')
# Dataframen luominen
df3 = pd.DataFrame(data=data, index=index, columns=['Kysyntä'])
df3
Kysyntä | |
---|---|
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 |