In [1]:
from datetime import datetime
print(f'Päivitetty {datetime.now()}')
Päivitetty 2021-10-27 09:06:39.218538

Aikaleimat

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.

Aikatiedon lukeminen merkkijonosta

Merkkijonona (tekstinä) esitetyt aikatiedot pitää muuntaa Pythonin ymmärtämiksi aikaleimoiksi. Tämän voin tehdä esimerkiksi seuraavasti:

  • Avaan datan ja katson, missä muodossa aikatiedot ovat?
  • Muunnan aikatiedot pandas-kirjaston to_datetime-funktiolla ja sijoitan ne indeksiin.

Muuntamisessa tarvitsen muotoilukoodeja, jotka löydän esimerkiksi osoitteesta: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

In [2]:
import pandas as pd
import numpy as np

Esimerkki 1

In [3]:
# Avaan aikasarjatietoa sisältävän tiedoston ja katson aikatietojen esitysmuodon
df1 = pd.read_excel('http://taanila.fi/CO2.xlsx')
df1.head()
Out[3]:
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
In [4]:
# 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()
Out[4]:
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

Esimerkki 2

In [5]:
# Avaan aikasarjatietoa sisältävän tiedoston ja katson aikatietojen esitysmuodon
df2 = pd.read_csv('http://taanila.fi/Electric_Production.csv')
df2.head()
Out[5]:
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
In [6]:
# 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()
Out[6]:
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

Aikaleimojen luominen

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

In [7]:
# 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
Out[7]:
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