Traffine I/O

Bahasa Indonesia

2022-11-17

Data Time Series dengan Pandas

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.

python
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.

python
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().

python
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'.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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.

python
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

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!