#!/usr/bin/env python # coding: utf-8 # In[1]: from datetime import datetime print(f'Päivitetty {datetime.now().date()} / Aki Taanila') # In[2]: import pandas as pd # # Puuttuvat tai päällekkäiset aikaleimat ja havainnot # # Aikasarjojen analysoinnissa ja aikasarjaennustamisessa puuttuvat ja päällekkäiset havainnot aiheuttavat ongelmia. # # ## Puuttuvat havainnot # # Tarkastelen esimerkkinä kuukauden ensimmäisten päivien muodostamaa aikasarjaa, josta puuttuu välistä kahden kuukauden (huhtikuu ja toukokuu) tiedot. # In[3]: # Avaan datan: df1 = pd.read_excel('https://taanila.fi/aika1.xlsx') df1 # In[4]: # Siirrän aikaleimat indeksiin: df1.index = pd.to_datetime(df1['date']) df1 = df1.drop('date', axis=1) df1 # **resample()** lisää puuttuvat kuukaudet indeksiin. Aikafrekvenssi **'MS'** tarkoittaa kuukauden ensimmäisiä päivä (**M**onth**S**tart). Eri tilanteisiin sopivia aikafrekvenssejä löydät osoitteesta https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases. # # **ffill()** täydentää puuttuvat arvot niitä edeltävällä arvolla. # In[5]: df2 = df1.resample('MS').ffill() df2 # **bfill()** täydentää puuttuvat arvot niitä seuraavalla arvolla. # In[6]: df3 = df1.resample('MS').bfill() df3 # **interpolate()** interpoloi puuttuvat arvot niitä edeltävän ja seuraavan arvon perusteella. # In[7]: df4 = df1.resample('MS').interpolate() df4 # ## Päällekkäiset havainnot # # Tarkastelen seuraavaksi esimerkkiä päällekkäisistä havainnoista. Seuraavassa esimerkissä on puuttuvien kuukausien (huhtikuu ja toukokuu) lisäksi päällekkäinen havainto helmikuun kohdalla. # In[8]: df5 = pd.read_excel('https://taanila.fi/aika2.xlsx') df5.index = pd.to_datetime(df5['date']) df5.drop('date', axis=1) df5 # **resample()** hoitaa myös päällekkäiset aikaleimat. Seuraavassa korvaan päällekkäiset havainnot keskiarvollaan ja puuttuvat havainnot interpoloin. # In[9]: df6 = df5.resample('MS').mean().interpolate() df6 # ## Lisätietoa # # **resample()** on monipuolinen toiminto. Lue lisää https://pandas.pydata.org/pandas-docs/dev/reference/api/pandas.DataFrame.resample.html