Kursus
Deret waktu adalah kumpulan observasi data yang diindeks berdasarkan waktu dalam urutan kronologis. Observasi data ini umumnya (namun tidak selalu) dicatat pada interval waktu yang teratur. Deret waktu sering digunakan di perbankan, perdagangan, pemasaran, sains, dan industri lain. Representasi visual yang paling umum dari data deret waktu adalah plot garis dengan waktu di sumbu x dan nilai terukur di sumbu y.
Dalam tutorial ini, kita akan melihat cara membuat dan menyesuaikan plot garis deret waktu di matplotlib, pustaka plotting Python utama.
Memulai plotting deret waktu dengan matplotlib
Mengimpor pustaka dan memuat data
Pertama, kita akan mengimpor pustaka Python yang diperlukan dan memuat data – dataset Kaggle Daily Exchange Rates per Euro 1999-2023. Kita juga akan melakukan pembersihan data dasar:
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:, [0, 4, 28, -2]]
df.columns = ['Date', 'CAD', 'NZD', 'USD']
for col in ['CAD', 'NZD', 'USD']:
df = df[df[col] != '-']
df[col] = pd.to_numeric(df[col])
df = df[df['Date'] >= '2022-12-01'].reset_index(drop=True)
print(df.head(3))
print(f'\nThe date range: {df.Date.min()}/{ df.Date.max()}')
Keluaran:
Date CAD NZD USD
0 2023-01-27 1.4479 1.6759 1.0865
1 2023-01-26 1.4568 1.6799 1.0895
2 2023-01-25 1.4544 1.6792 1.0878
The date range: 2022-12-01/2023-01-27
Mengonversi string tanggal/waktu ke objek datetime
Untuk bekerja secara efisien dengan deret waktu, kita perlu mengonversi string tanggal atau waktu menjadi objek datetime menggunakan fungsi pandas.to_datetime:
df['Date'] = pd.to_datetime(df['Date'])
print(df['Date'].dtypes)
Keluaran:
datetime64[ns]
Jika Anda perlu penyegaran mengenai cara bekerja dengan deret waktu di Python, Anda dapat memanfaatkan kursus Manipulating Time Series Data in Python.
Menetapkan kolom datetime sebagai indeks dataframe
Sekarang, mari tetapkan kolom Date sebagai indeks dataframe menggunakan metode set_index:
df = df.set_index('Date')
print(df.head(3))
Keluaran:
CAD NZD USD
Date
2023-01-27 1.4479 1.6759 1.0865
2023-01-26 1.4568 1.6799 1.0895
2023-01-25 1.4544 1.6792 1.0878
Membuat plot deret waktu satu garis dasar di matplotlib
Untuk membuat plot garis deret waktu dasar, kita menggunakan metode standar matplotlib.pyplot.plot(x, y):
plt.plot(df.index, df['CAD'])
Keluaran:

Membuat plot deret waktu multi-garis di matplotlib
Untuk membuat plot deret waktu multi-garis, kita cukup menjalankan metode matplotlib.pyplot.plot(x, y) sebanyak yang diperlukan:
plt.plot(df.index, df['CAD'])
plt.plot(df.index, df['NZD'])
plt.plot(df.index, df['USD'])

Menggunakan for loop mengoptimalkan kode di atas:
for col in ['CAD', 'NZD', 'USD']:
plt.plot(df.index, df[col])
Keluaran:

Menyesuaikan plot deret waktu matplotlib
Agar plot garis deret waktu kita lebih mudah dibaca dan menarik, kita perlu menyesuaikannya. Kita dapat menerapkan beberapa penyesuaian umum matplotlib, seperti menyesuaikan ukuran gambar, menambahkan dan menyesuaikan judul plot dan label sumbu, memodifikasi properti garis, menambahkan dan menyesuaikan marker, dan sebagainya. Penyesuaian lain bersifat spesifik untuk plot garis deret waktu, seperti menyesuaikan tick pada sumbu waktu beserta labelnya atau menyorot periode waktu tertentu.
Menyesuaikan figure dan axes
Dengan metode standar matplotlib, kita dapat menyesuaikan figure dan axes pada plot garis deret waktu dengan berbagai cara, seperti dijelaskan pada komentar kode di bawah ini:
# Menyesuaikan ukuran figure
fig = plt.subplots(figsize=(16, 5))
# Membuat plot
plt.plot(df.index, df['CAD'])
# Menambahkan judul plot dan menyesuaikan ukuran font
plt.title('EUR-CAD rate', fontsize=20)
# Menambahkan label sumbu dan menyesuaikan ukuran font
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
# Memutar tick sumbu dan menyesuaikan ukuran font
plt.xticks(rotation=30, fontsize=15)
# Mengubah resolusi plot - memperbesar periode dari 15.12.2022 hingga 15.01.2023
plt.xlim(pd.Timestamp('2022-12-15'), pd.Timestamp('2023-01-15'))
Keluaran:

Menyesuaikan properti garis
Seperti pada plot garis biasa, kita dapat mengubah properti garis pada plot deret waktu, seperti warna, gaya, atau ketebalan garis:
plt.plot(df.index, df['CAD'], color='green', linestyle='dashed', linewidth=3)
Keluaran:

Menambahkan dan menyesuaikan marker
Seperti pada plot garis mana pun, kita dapat menempatkan marker pada plot garis deret waktu dan menyesuaikan simbol, warna, warna tepi, serta ukurannya:
plt.plot(df.index, df['CAD'], marker='o', markerfacecolor='yellow', markeredgecolor='red', markersize=8)

Menyesuaikan tick sumbu waktu
Mari terlebih dahulu membuat plot garis deret waktu matplotlib dasar dengan beberapa penyesuaian penting:
fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
Keluaran:

Kita melihat bahwa secara bawaan matplotlib menampilkan beberapa tick acak beserta labelnya. Namun, kita mungkin ingin mengontrol tick apa yang ditampilkan pada sumbu waktu. Dalam hal ini, kita perlu menyediakan daftar tanggal (atau waktu) yang diperlukan sebagai string atau timestamp pandas ke metode matplotlib.pyplot.xticks:
fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
# Mendefinisikan dan menampilkan tick sumbu waktu
ticks = ['2022-12-05', '2023-01-02', '2023-01-20']
plt.xticks(ticks)
Keluaran:

Di atas, matplotlib menampilkan tick yang dipilih dan secara otomatis memberi label.
Jika kita ingin menampilkan semua tick, kita harus memberikan daftar indeks deret waktu ke metode matplotlib.pyplot.xticks:
fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
# Mendefinisikan dan menampilkan semua tick sumbu waktu
ticks = list(df.index)
plt.xticks(ticks, rotation=45)
Keluaran:

Menyesuaikan label tick sumbu waktu
Label tick sumbu waktu pada plot garis di atas bisa terlihat berlebihan. Kita mungkin ingin memformatnya agar lebih mudah dibaca. Untuk tujuan ini, kita dapat menggunakan kelas matplotlib.dates.DateFormatter dengan memberikan string format strftime yang mencerminkan bagaimana kita ingin melihat tanggal/waktu. Lalu, kita berikan formatter ini ke metode matplotlib.axis.XAxis.set_major_formatter:
fig, ax = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks = list(df.index)
plt.xticks(ticks, rotation=45)
# Memformat label tick sumbu waktu
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))
Keluaran:

Halaman dokumentasi ini menyediakan daftar lengkap semua kode format strftime yang mungkin.
Menyorot periode waktu tertentu
Terkadang, kita mungkin ingin memberi arsiran pada periode waktu tertentu di plot garis deret waktu. Untuk tujuan ini, kita dapat menggunakan metode matplotlib.pyplot.axvspan. Metode ini membutuhkan dua argumen wajib: titik waktu awal dan akhir dari periode yang diminati dalam format datetime. Metode ini juga dapat menerima beberapa parameter opsional untuk menyesuaikan tampilan area yang disorot, seperti warna, warna tepi, transparansi, ketebalan garis, atau pola isian.
Mari terapkan teknik ini pada plot dari bagian sebelumnya:
fig, ax = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks = list(df.index)
plt.xticks(ticks, rotation=45)
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))
# Menyorot periode waktu dari 15.12.2022 hingga 1.01.2023 dan menyesuaikan area berarsir
plt.axvspan(datetime(2022, 12, 15), datetime(2023, 1, 1), facecolor='yellow', alpha=0.5, hatch='/', edgecolor='red', linewidth=5)
Keluaran:

Menyimpan plot garis deret waktu matplotlib ke file
Kita dapat memilih untuk menyimpan plot garis deret waktu ke file gambar alih-alih hanya menampilkannya. Untuk melakukannya, kita menggunakan metode matplotlib.pyplot.savefig dengan memasukkan nama file. Sebagai contoh, mari kembali ke plot dasar pertama kita:
plt.plot(df.index, df['CAD'])
# Menyimpan plot hasil ke file
plt.savefig('time series line plot.png')

Di atas, kita menyimpan plot ke file bernama time series line plot.png dan terletak di tempat yang sama dengan program kita saat ini.
Kesimpulan
Singkatnya, dalam tutorial ini, kita membahas cara membuat dan menyesuaikan plot garis deret waktu di matplotlib, dengan menggunakan metode matplotlib umum dan yang lebih lanjut, yang khusus untuk visualisasi deret waktu.
Setelah mempelajari teknik-teknik dasar ini, Anda mungkin ingin menggali lebih dalam dalam bekerja dengan data deret waktu dan memvisualisasikannya di Python. Dalam hal ini, pertimbangkan untuk mengeksplorasi sumber daya komprehensif, ramah pemula, dan end-to-end berikut:
