0Pricing
Pandas & NumPy Academy · Pelajaran

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 rows

Penurunan 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            31

Pengambilan 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

  1. DatetimeIndex dan Rentang Periode
  2. Pengambilan Sampel Ulang Deret Waktu
  3. Pergeseran dan Fitur Jeda
  4. Mengekstrak Fitur Temporal
← Kembali ke Pandas & NumPy Academy