Pengambilan Sampel Ulang Deret Waktu
Kurangi frekuensi data harian menjadi bulanan dengan resample('ME').sum() dan tingkatkan frekuensinya dengan pengisian ke depan untuk mengisi interval yang hilang.
Pengambilan Sampel Ulang Deret Waktu adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa Itu Pengambilan Sampel Ulang?
Pengambilan sampel ulang mengubah frekuensi deret waktu. Penurunan frekuensi mengurangi frekuensi — misalnya, mengubah data harian menjadi total bulanan. Peningkatan frekuensi menambah frekuensi — misalnya, mengubah data bulanan menjadi data harian dan mengisi celah dengan nilai hasil interpolasi. Kedua operasi ini memerlukan DatetimeIndex dan dilakukan dengan metode resample(), yaitu versi Pandas yang peka terhadap waktu dari groupby().
Metode resample()
df.resample(rule) membuat objek DatetimeIndexResampler, dengan rule sebagai alias offset frekuensi. Seperti groupby(), tidak ada perhitungan yang dilakukan hingga Anda merangkaikan metode agregasi. Aturan umum: 'D' (hari), 'W' (minggu), 'ME' (akhir bulan), 'QE' (akhir kuartal), dan 'YE' (akhir tahun). DataFrame harus memiliki DatetimeIndex.
import pandas as pd
import numpy as np
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=90, freq='D')
df = pd.DataFrame({'sales': np.random.randint(100, 500, 90)}, index=dates)
print(df.head())
print('Shape:', df.shape) # (90, 1) -- 90 daily rowsPenurunan Frekuensi: Harian ke Bulanan
Untuk menurunkan frekuensi data harian menjadi bulanan, panggil resample('ME') lalu rangkaikan agregasi. sum() memberikan total bulanan; mean() memberikan rata-rata bulanan; last() memberikan nilai terakhir dalam setiap periode. Hasilnya memiliki satu baris per periode, dengan tanggal akhir periode sebagai label indeks.
# Monthly totals
monthly_sum = df.resample('ME').sum()
print(monthly_sum)
# sales
# 2024-01-31 9876
# 2024-02-29 8765
# 2024-03-31 9234
# Monthly averages
monthly_mean = df.resample('ME').mean().round(1)
print(monthly_mean)Penurunan Frekuensi menjadi Mingguan
Lakukan pengambilan sampel ulang dengan 'W' untuk mengagregasikan berdasarkan minggu kalender yang berakhir pada hari Minggu. Gunakan 'W-MON' jika Anda ingin minggu berakhir pada hari Senin. Pandas mengelompokkan semua tanggal dalam setiap minggu, lalu menerapkan agregasi. Ini berguna untuk pelaporan mingguan ketika Anda menginginkan satu baris ringkasan per minggu.
# Weekly sum
weekly = df.resample('W').sum()
print(weekly.head())
# sales
# 2024-01-07 2010 <- Jan 1-7
# 2024-01-14 2340 <- Jan 8-14
# ...
# Weekly max and count using agg()
weekly_stats = df.resample('W').agg(['sum', 'mean', 'max'])
print(weekly_stats.head())Menerapkan Beberapa Agregasi
Sama seperti groupby(), Anda dapat merangkaikan .agg() pada pengambil sampel ulang untuk menghitung beberapa statistik dalam satu proses. Berikan daftar nama fungsi atau kamus untuk agregasi bernama. Ini adalah cara paling efisien untuk membuat tabel ringkasan deret waktu yang komprehensif.
monthly_stats = df.resample('ME').agg(
total_sales=('sales', 'sum'),
avg_sales=('sales', 'mean'),
peak_sales=('sales', 'max'),
days_counted=('sales', 'count')
)
print(monthly_stats.round(1))
# total_sales avg_sales peak_sales days_counted
# 2024-01-31 9876 318.6 499 31Pengambilan Sampel Ulang OHLC untuk Data Keuangan
Untuk deret waktu keuangan, metode .ohlc() melakukan pengambilan sampel ulang menjadi nilai Buka, Tertinggi, Terendah, Tutup (OHLC) per periode — representasi standar dalam grafik lilin. Ini hanya bermakna untuk data numerik yang merepresentasikan harga atau tingkat. Setiap kolom pada masukan menghasilkan empat kolom OHLC pada keluaran.
# OHLC monthly resampling
ohlc = df['sales'].resample('ME').ohlc()
print(ohlc)
# open high low close
# 2024-01-31 365 499 101 243
# 2024-02-29 ...Peningkatan Frekuensi: Bulanan ke Harian
Peningkatan frekuensi menambah frekuensi, sehingga membuat baris untuk stempel waktu yang tidak ada dalam data asli. Baris baru ini awalnya berisi NaN. Selanjutnya, isi baris tersebut dengan metode yang sesuai untuk data Anda: ffill() (pengisian maju — meneruskan nilai terakhir yang diketahui) atau bfill() (pengisian mundur — menggunakan nilai berikutnya yang diketahui), atau interpolate() untuk interpolasi yang halus.
# Monthly data
monthly = pd.Series(
[100, 120, 115],
index=pd.date_range('2024-01-31', periods=3, freq='ME')
)
print(monthly)
# Upsample to daily (creates NaN rows)
daily = monthly.resample('D').asfreq()
print(daily.head(10))
# 2024-01-31 100.0
# 2024-02-01 NaN <- new row
# ...Mengisi Celah akibat Peningkatan Frekuensi
Setelah meningkatkan frekuensi, isi celah NaN yang dibuat untuk stempel waktu baru. ffill() meneruskan nilai terakhir yang diketahui hingga pengamatan nyata berikutnya — cocok untuk harga ketika harga transaksi terakhir tetap berlaku. interpolate(method='linear') mengisi dengan nilai yang berjarak linear di antara pengamatan — cocok untuk variabel kontinu yang berubah secara halus.
# Forward fill: carry monthly value forward to every day
daily_ffill = monthly.resample('D').ffill()
print(daily_ffill.head(35))
# 2024-01-31 100
# 2024-02-01 100 <- forward filled
# ...
# 2024-02-29 120 <- new month value
# Linear interpolation
daily_interp = monthly.resample('D').interpolate(method='linear')
print(daily_interp.head(10))Pengambilan Sampel Ulang dalam Kelompok
Anda dapat menggabungkan groupby() dan resample() untuk melakukan pengambilan sampel ulang secara terpisah dalam setiap kelompok. Panggil groupby(column).resample(rule) pada DataFrame dengan DatetimeIndex. Ini menghasilkan keluaran dengan MultiIndex, dengan tingkat luar sebagai kunci kelompok dan tingkat dalam sebagai periode waktu hasil pengambilan sampel ulang — sangat berguna untuk analisis deret waktu per produk atau per wilayah.
df2 = pd.DataFrame({
'product': ['A', 'B', 'A', 'B', 'A', 'B'],
'sales': [100, 150, 120, 130, 110, 160]
}, index=pd.date_range('2024-01-01', periods=6, freq='ME'))
# Monthly sum per product
result = df2.groupby('product').resample('QE').sum()
print(result)Penetapan Jangkar Offset Kustom
Secara bawaan, 'ME' menetapkan jangkar pada tanggal akhir bulan kalender. Untuk periode fiskal nonstandar, gunakan offset seperti 'QS-APR' (kuartal yang dimulai pada April) atau 'YS-OCT' (tahun yang dimulai pada Oktober). Pandas mendukung banyak alias offset berjangkar. Periksa dokumentasi Pandas untuk melihat daftar lengkap saat bekerja dengan periode fiskal nonkalender.
# Fiscal year starting in April
fiscal_annual = df.resample('YE-MAR').sum()
print(fiscal_annual)
# sales
# 2024-03-31 XXXX <- April 2023 to March 2024
# Quarter starting in April
fiscal_q = df.resample('QE-MAR').mean().round(0)
print(fiscal_q)Memeriksa Integritas Hasil Pengambilan Sampel Ulang
Setelah melakukan pengambilan sampel ulang, selalu pastikan hasilnya masuk akal. Periksa apakah jumlah periode keluaran sesuai harapan, tidak ada periode yang hilang (cari NaN pada keluaran), dan jumlah total bulanan sama dengan jumlah data harian asli saat melakukan penurunan frekuensi dengan sum(). Pemeriksaan kewajaran ini membantu menemukan kesalahan selisih satu pada string frekuensi dan rentang tanggal yang hilang.
monthly = df.resample('ME').sum()
# Verify: monthly totals should sum to daily total
assert monthly['sales'].sum() == df['sales'].sum(), 'Sum mismatch!'
# Verify: expected number of months
print('Months:', len(monthly)) # should be 3 for 90 days Jan-Mar
# Check for any NaN
print('NaN count:', monthly.isna().sum().sum())Pemeriksaan Singkat
Uji pemahaman Anda tentang pengambilan sampel ulang deret waktu dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa resample() adalah padanan groupby() yang peka terhadap waktu untuk mengubah frekuensi deret waktu; penurunan frekuensi mengagregasikan data (harian menjadi bulanan dengan sum/mean); peningkatan frekuensi membuat stempel waktu baru yang harus diisi dengan ffill() atau interpolate(); dan Anda dapat menggabungkan groupby() dengan resample() untuk agregasi waktu tingkat kelompok. Selanjutnya, kita akan mempelajari pergeseran dan fitur jeda.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengambilan Sampel Ulang Deret Waktu” gratis?
Ya — teks lengkap “Pengambilan Sampel Ulang Deret Waktu” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengambilan Sampel Ulang Deret Waktu”?
Kurangi frekuensi data harian menjadi bulanan dengan resample('ME').sum() dan tingkatkan frekuensinya dengan pengisian ke depan untuk mengisi interval yang hilang. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pengambilan Sampel Ulang Deret Waktu” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- DatetimeIndex dan Rentang Periode
- Pengambilan Sampel Ulang Deret Waktu
- Pergeseran dan Fitur Jeda
- Mengekstrak Fitur Temporal