Upsampling & interpolasi dengan .resample()

Memanipulasi Data Deret Waktu di Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Konversi frekuensi & metode transformasi

  • .resample(): mirip dengan .groupby()

  • Mengelompokkan data dalam periode resampling dan menerapkan satu/lebih metode ke tiap grup

  • Tanggal baru ditentukan oleh offset: awal, akhir, dll.

  • Upsampling: isi dari data yang ada atau interpolasi nilai

  • Downsampling: agregasikan data yang ada

Memanipulasi Data Deret Waktu di Python

Mulai: tingkat pengangguran bulanan

unrate = pd.read_csv('unrate.csv', parse_dates['Date'], index_col='Date')

unrate.info()
DatetimeIndex: 208 entries, 2000-01-01 to 2017-04-01
Data columns (total 1 columns):
UNRATE    208 non-null float64 # tidak ada informasi frekuensi
dtypes: float64(1)
unrate.head()
            UNRATE
DATE
2000-01-01     4.0
2000-02-01     4.1
2000-03-01     4.0
2000-04-01     3.8
2000-05-01     4.0
  • Tanggal pelaporan: hari pertama bulan
Memanipulasi Data Deret Waktu di Python

Periode resampling & offset frekuensi

  • Resample membuat tanggal baru untuk offset frekuensi
  • Ada beberapa alternatif selain akhir bulan kalender

 

Frekuensi Alias Tanggal Contoh
Akhir Bulan Kalender M 2017-04-30
Awal Bulan Kalender MS 2017-04-01
Akhir Bulan Kerja BM 2017-04-28
Awal Bulan Kerja BMS 2017-04-03
Memanipulasi Data Deret Waktu di Python

Logika resampling

Logika resampling.015.png

Memanipulasi Data Deret Waktu di Python

Logika resampling

Logika resampling.016.png

Memanipulasi Data Deret Waktu di Python

Tetapkan frekuensi dengan .resample()

unrate.asfreq('MS').info()
DatetimeIndex: 208 entries, 2000-01-01 to 2017-04-01
Freq: MS
Data columns (total 1 columns):
UNRATE    208 non-null float64
dtypes: float64(1)
unrate.resample('MS') # membuat objek Resampler
DatetimeIndexResampler [freq=<MonthBegin>, axis=0, closed=left, 
                        label=left, convention=start, base=0]
Memanipulasi Data Deret Waktu di Python

Tetapkan frekuensi dengan .resample()

unrate.asfreq('MS').equals(unrate.resample('MS').asfreq())
True
  • .resample(): hanya mengembalikan data saat memanggil metode lain
Memanipulasi Data Deret Waktu di Python

Pertumbuhan PDB riil triwulanan

gdp = pd.read_csv('gdp.csv')

gdp.info()
DatetimeIndex: 69 entries, 2000-01-01 to 2017-01-01
Data columns (total 1 columns):
gpd    69 non-null float64 # tidak ada info frekuensi
dtypes: float64(1)
gdp.head(2)
            gpd
DATE
2000-01-01  1.2
2000-04-01  7.8
Memanipulasi Data Deret Waktu di Python

Interpolasi pertumbuhan PDB riil bulanan

gdp_1 = gdp.resample('MS').ffill().add_suffix('_ffill')
       gpd_ffill
DATE
2000-01-01  1.2
2000-02-01  1.2
2000-03-01  1.2
2000-04-01  7.8
Memanipulasi Data Deret Waktu di Python

Interpolasi pertumbuhan PDB riil bulanan

gdp_2 = gdp.resample('MS').interpolate().add_suffix('_inter')
            gpd_inter
DATE
2000-01-01  1.200000
2000-02-01  3.400000
2000-03-01  5.600000
2000-04-01  7.800000
  • .interpolate(): mencari titik pada garis lurus di antara data yang ada
Memanipulasi Data Deret Waktu di Python

Menggabungkan dua DataFrame

df1 = pd.DataFrame([1, 2, 3], columns=['df1'])

df2 = pd.DataFrame([4, 5, 6], columns=['df2'])
pd.concat([df1, df2])
   df1  df2
0  1.0  NaN
1  2.0  NaN
2  3.0  NaN
0  NaN  4.0
1  NaN  5.0
2  NaN  6.0
Memanipulasi Data Deret Waktu di Python

Menggabungkan dua DataFrame

pd.concat([df1, df2], axis=1)
   df1  df2
0    1    4
1    2    5
2    3    6
  • axis=1: gabungkan secara horizontal
Memanipulasi Data Deret Waktu di Python

Plot pertumbuhan PDB riil terinterpolasi

pd.concat([gdp_1, gdp_2], axis=1).loc['2015':].plot()

ch2_3_v2 - Upsampling & Interpolation.032.png

Memanipulasi Data Deret Waktu di Python

Gabungkan pertumbuhan PDB & pengangguran

pd.concat([unrate, gdp_inter], axis=1).plot();

ch2_3_v2 - Upsampling & Interpolation.034.png

Memanipulasi Data Deret Waktu di Python

Ayo berlatih!

Memanipulasi Data Deret Waktu di Python

Preparing Video For Download...