Pendahuluan
Data time series adalah urutan titik data yang dikumpulkan atau direkam pada interval yang teratur. Menganalisis data time series sangat penting untuk meramalkan, menganalisis keuangan, dan memahami tren dalam berbagai bidang. Artikel ini memberikan pengantar tentang cara menangani dan menganalisis data time series menggunakan library Python, Pandas.
Bekerja dengan Tanggal dan Waktu
Pada bab ini, saya akan bekerja dengan dataset contoh untuk menunjukkan bagaimana membuat dan memanipulasi objek DateTime menggunakan library Pandas. Kita juga akan belajar cara mengurai tanggal dan waktu dari string, serta memformatnya sesuai kebutuhan.
Berikut adalah dataset contoh.
data = {'Date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'],
'Value': [10, 20, 30, 40, 50]}
Membuat Objek DateTime
Pertama, mari impor library yang diperlukan dan memuat dataset contoh kita ke dalam DataFrame Pandas.
import pandas as pd
data = {'Date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'],
'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
print(df)
Date Value
0 2021-01-01 10
1 2021-01-02 20
2 2021-01-03 30
3 2021-01-04 40
4 2021-01-05 50
Selanjutnya, mari konversi kolom 'Date' dari string menjadi objek DateTime menggunakan pd.to_datetime()
.
df['Date'] = pd.to_datetime(df['Date'])
print(df)
Date Value
0 2021-01-01 10
1 2021-01-02 20
2 2021-01-03 30
3 2021-01-04 40
4 2021-01-05 50
Memformat Tanggal dan Waktu
Kita dapat memformat objek DateTime dalam DataFrame kita menggunakan fungsi strftime()
. Mari memformat kolom 'Date' sebagai 'Bulan-Hari-Tahun'.
df['Formatted_Date'] = df['Date'].dt.strftime('%m-%d-%Y')
print(df)
Date Value Formatted_Date
0 2021-01-01 10 01-01-2021
1 2021-01-02 20 01-02-2021
2 2021-01-03 30 01-03-2021
3 2021-01-04 40 01-04-2021
4 2021-01-05 50 01-05-2021
Mengurai Tanggal dan Waktu dari String
Misalkan kita memiliki kolom baru 'Date_Str' dengan tanggal dalam format 'Bulan-Hari-Tahun', dan kita ingin mengurai kolom ini menjadi objek DateTime.
data = {'Date_Str': ['01-01-2021', '01-02-2021', '01-03-2021', '01-04-2021', '01-05-2021'],
'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
print(df)
Date_Str Value
0 01-01-2021 10
1 01-02-2021 20
2 01-03-2021 30
3 01-04-2021 40
4 01-05-2021 50
Untuk mengurai kolom 'Date_Str' dan mengonversinya menjadi objek DateTime, kita dapat menggunakan fungsi pd.to_datetime()
dengan parameter format
.
df['Date'] = pd.to_datetime(df['Date_Str'], format='%m-%d-%Y')
print(df)
Date_Str Value Date
0 01-01-2021 10 2021-01-01
1 01-02-2021 20 2021-01-02
2 01-03-2021 30 2021-01-03
3 01-04-2021 40 2021-01-04
4 01-05-2021 50 2021-01-05
Kini, kita berhasil mengurai tanggal dari kolom 'Date_Str' dan membuat kolom 'Date' baru dengan objek DateTime.
Resampling Data Time Series
Pada bab ini, saya akan menjelajahi teknik resampling data time series, termasuk downsampling dan upsampling, menggunakan dataset contoh. Resampling diperlukan saat bekerja dengan data time series untuk mengubah frekuensi titik data Berikut adalah dataset contoh.
import pandas as pd
date_rng = pd.date_range(start='2021-01-01', end='2021-01-10', freq='D')
data = {'Date': date_rng, 'Value': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]}
df = pd.DataFrame(data)
print(df)
Date Value
0 2021-01-01 10
1 2021-01-02 20
2 2021-01-03 30
3 2021-01-04 40
4 2021-01-05 50
5 2021-01-06 60
6 2021-01-07 70
7 2021-01-08 80
8 2021-01-09 90
9 2021-01-10 100
Downsampling
Downsampling adalah proses penggabungan data pada frekuensi yang lebih rendah. Mari melakukan downsampling pada dataset kita dengan frekuensi 3 hari, dengan menghitung rata-rata kolom 'Value' untuk setiap periode.
Pertama, kita perlu menetapkan kolom 'Date' sebagai indeks DataFrame.
df.set_index('Date', inplace=True)
print(df)
Value
Date
2021-01-01 10
2021-01-02 20
2021-01-03 30
2021-01-04 40
2021-01-05 50
2021-01-06 60
2021-01-07 70
2021-01-08 80
2021-01-09 90
2021-01-10 100
Selanjutnya, mari lakukan downsampling.
downsampled_df = df.resample('3D').mean()
print(downsampled_df)
Value
Date
2021-01-01 20.000000
2021-01-04 46.666667
2021-01-07 73.333333
2021-01-10 100.000000
Upsampling
Upsampling adalah proses peningkatan frekuensi data. Mari melakukan upsampling pada dataset kita ke frekuensi per jam dan mengisi data yang hilang dengan forward filling.
upsampled_df = df.resample('H').ffill()
print(upsampled_df.head(10))
Value
Date
2021-01-01 00:00:00 10
2021-01-01 01:00:00 10
2021-01-01 02:00:00 10
2021-01-01 03:00:00 10
2021-01-01 04:00:00 10
2021-01-01 05:00:00 10
2021-01-01 06:00:00 10
2021-01-01 07:00:00 10
2021-01-01 08:00:00 10
2021-01-01 09:00:00 10
2021-01-01 10:00:00 10
Seperti yang dapat Anda lihat, data telah diupsampling ke frekuensi per jam, dan nilai yang hilang telah diisi dengan forward filling.
Sebagai alternatif, kita dapat menggunakan interpolasi untuk mengisi data yang hilang saat upsampling. Mari lakukan interpolasi linier pada dataset kita.
upsampled_df_interpolated = df.resample('H').interpolate()
print(upsampled_df_interpolated.head(10))
Value
Date
2021-01-01 00:00:00 10.000000
2021-01-01 01:00:00 10.416667
2021-01-01 02:00:00 10.833333
2021-01-01 03:00:00 11.250000
2021-01-01 04:00:00 11.666667
2021-01-01 05:00:00 12.083333
2021-01-01 06:00:00 12.500000
2021-01-01 07:00:00 12.916667
2021-01-01 08:00:00 13.333333
2021-01-01 09:00:00 13.750000
Fungsi Jendela Bergulir
Pada bab ini, saya akan menjelajahi fungsi jendela bergulir dan aplikasi mereka menggunakan dataset contoh. Fungsi jendela bergulir berguna untuk meratakan data time series dan menghitung berbagai statistik dalam ukuran jendela tertentu.
Berikut adalah dataset contoh.
import pandas as pd
date_rng = pd.date_range(start='2021-01-01', end='2021-01-10', freq='D')
data = {'Date': date_rng, 'Value': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]}
df = pd.DataFrame(data)
print(df)
Date Value
0 2021-01-01 10
1 2021-01-02 20
2 2021-01-03 30
3 2021-01-04 40
4 2021-01-05 50
5 2021-01-06 60
6 2021-01-07 70
7 2021-01-08 80
8 2021-01-09 90
9 2021-01-10 100
Operasi Jendela Bergulir Dasar
Mari mulai dengan menetapkan kolom 'Date' sebagai indeks DataFrame kita.
df.set_index('Date', inplace=True)
print(df)
Value
Date
2021-01-01 10
2021-01-02 20
2021-01-03 30
2021-01-04 40
2021-01-05 50
2021-01-06 60
2021-01-07 70
2021-01-08 80
2021-01-09 90
2021-01-10 100
Kini, mari hitung rata-rata berjendela dengan ukuran 3.
df['Rolling_Mean'] = df['Value'].rolling(window=3).mean()
print(df)
Value Rolling_Mean
Date
2021-01-01 10 NaN
2021-01-02 20 NaN
2021-01-03 30 20.000000
2021-01-04 40 30.000000
2021-01-05 50 40.000000
2021-01-06 60 50.000000
2021-01-07 70 60.000000
2021-01-08 80 70.000000
2021-01-09 90 80.000000
2021-01-10 100 90.000000
Jendela Bergulir yang Membesar
Jendela bergulir yang membesar menghitung statistik secara kumulatif dalam ukuran jendela yang semakin besar. Mari hitung jumlah kumulatif dataset kita menggunakan jendela bergulir yang membesar.
df['Expanding_Sum'] = df['Value'].expanding().sum()
print(df)
Value Rolling_Mean Expanding_Sum
Date
2021-01-01 10 NaN 10.0
2021-01-02 20 NaN 30.0
2021-01-03 30 20.000000 60.0
2021-01-04 40 30.000000 100.0
2021-01-05 50 40.000000 150.0
2021-01-06 60 50.000000 210.0
2021-01-07 70 60.000000 280.0
2021-01-08 80 70.000000 360.0
2021-01-09 90 80.000000 450.0
2021-01-10 100 90.000000 550.0
Fungsi Jendela Bergulir Kustom
Kita juga dapat menerapkan fungsi kustom pada jendela bergulir. Mari hitung selisih antara nilai maksimum dan minimum dalam ukuran jendela 3.
def max_min_diff(series):
return series.max() - series.min()
df['Max_Min_Diff'] = df['Value'].rolling(window=3).apply(max_min_diff)
print(df)
Value Rolling_Mean Expanding_Sum Max_Min_Diff
Date
2021-01-01 10 NaN 10.0 NaN
2021-01-02 20 NaN 30.0 NaN
2021-01-03 30 20.000000 60.0 20.0
2021-01-04 40 30.000000 100.0 20.0
2021-01-05 50 40.000000 150.0 20.0
2021-01-06 60 50.000000 210.0 20.0
2021-01-07 70 60.000000 280.0 20.0
2021-01-08 80 70.000000 360.0 20.0
2021-01-09 90 80.000000 450.0 20.0
2021-01-10 100 90.000000 550.0 20.0