Pandas & NumPy Academy · Pelajaran

Mengekstrak Fitur Temporal

Gunakan akses .dt untuk mengambil tahun, bulan, hari, day_of_week, dan jam dari kolom datetime untuk rekayasa fitur.

Pelajaran 4 dari 413 langkah

Mengekstrak Fitur Temporal adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Mengapa Mengekstrak Fitur Temporal?

Kolom datetime64 mentah sulit dipahami oleh sebagian besar algoritma pembelajaran mesin — algoritma tersebut tidak dapat memahami bahwa 2024-12-25 adalah hari libur atau bahwa Friday mendorong peningkatan penjualan ritel. Rekayasa fitur temporal mengekstrak komponen bermakna dari kolom datetime — tahun, bulan, hari, hari dalam minggu, jam — sebagai kolom numerik atau kategorikal terpisah yang dapat langsung digunakan oleh model dan fungsi analisis.

Pengakses .dt

Ketika kolom DataFrame memiliki tipe data datetime64, pengakses .dt menyediakan semua properti dan metode datetime secara vektorisasi. Alih-alih menerapkan fungsi Python baris demi baris, Anda menulis df['date'].dt.year dan Pandas menghitung tahun untuk setiap baris dalam satu operasi cepat. Pengakses yang sama juga berfungsi pada kolom timedelta64 dengan properti yang berbeda.

import pandas as pd

df = pd.DataFrame({
    'event_date': pd.date_range('2024-01-01', periods=8, freq='D'),
    'revenue': [200, 350, 280, 310, 420, 380, 190, 260]
})

# Access datetime properties with .dt
print(df['event_date'].dt.year)    # 2024 for all
print(df['event_date'].dt.month)   # 1 for all
print(df['event_date'].dt.day[:5]) # 1, 2, 3, 4, 5

Mengekstrak Komponen Tanggal

Properti .dt yang paling umum digunakan untuk komponen tanggal adalah: .dt.year, .dt.month, .dt.day, .dt.day_of_week (0=Senin hingga 6=Minggu), .dt.day_of_year, .dt.week atau .dt.isocalendar().week, .dt.quarter, dan .dt.days_in_month. Masing-masing mengembalikan Series bilangan bulat yang dapat langsung digunakan sebagai fitur.

df['year']        = df['event_date'].dt.year
df['month']       = df['event_date'].dt.month
df['day']         = df['event_date'].dt.day
df['day_of_week'] = df['event_date'].dt.day_of_week  # 0=Mon
df['quarter']     = df['event_date'].dt.quarter
df['day_of_year'] = df['event_date'].dt.day_of_year

print(df[['event_date', 'year', 'month', 'day',
           'day_of_week', 'quarter']].head())

Mengekstrak Komponen Waktu

Untuk kolom datetime yang mencakup informasi waktu, bukan hanya tanggal, gunakan .dt.hour, .dt.minute, .dt.second, dan .dt.microsecond. Semua ini penting untuk analisis intrahari, pemodelan perilaku pengguna (pola pagi dibandingkan malam), dan sistem apa pun yang waktu dalam sehari memengaruhi variabel targetnya.

df_ts = pd.DataFrame({
    'timestamp': pd.date_range('2024-01-01', periods=6, freq='4h'),
    'logins': [50, 200, 320, 280, 180, 90]
})

df_ts['hour']   = df_ts['timestamp'].dt.hour
df_ts['minute'] = df_ts['timestamp'].dt.minute
df_ts['date']   = df_ts['timestamp'].dt.date    # Python date object
df_ts['time']   = df_ts['timestamp'].dt.time    # Python time object
print(df_ts[['timestamp', 'hour', 'date']].head())

Nama Hari dan Nama Bulan

Untuk label yang mudah dibaca manusia, gunakan .dt.day_name() dan .dt.month_name() untuk mendapatkan nama string seperti 'Monday' dan 'January'. Ini berguna untuk menampilkan laporan dan membuat fitur kategorikal yang menyandikan pengaruh hari dalam minggu atau bulan. Anda juga dapat meneruskan locale untuk mendapatkan nama dalam bahasa lain.

df['day_name']   = df['event_date'].dt.day_name()
df['month_name'] = df['event_date'].dt.month_name()

print(df[['event_date', 'day_name', 'month_name']].head(5))
# event_date day_name month_name
# 2024-01-01   Monday    January
# 2024-01-02  Tuesday    January
# 2024-01-03  Wednesday  January

Penanda Akhir Pekan dan Hari Kerja

Fitur yang sangat umum adalah penanda boolean yang menunjukkan apakah suatu tanggal jatuh pada akhir pekan. day_of_week >= 5 menghasilkan True untuk Sabtu (5) dan Minggu (6). Untuk fitur kalender kerja yang lebih canggih, numpy.busdaycalendar menangani hari libur, tetapi dalam kebanyakan kasus, pemisahan sederhana antara hari kerja dan akhir pekan sudah menangkap sebagian besar pengaruhnya.

df['is_weekend'] = df['event_date'].dt.day_of_week >= 5
df['is_weekday'] = ~df['is_weekend']

# Compare weekend vs weekday revenue
print(df.groupby('is_weekend')['revenue'].mean().round(1))
# is_weekend
# False    308.3  <- weekday average
# True     285.0  <- weekend average

Penanda Awal/Akhir Periode

Pengakses .dt juga menyediakan properti boolean yang mengidentifikasi apakah suatu tanggal berada di awal atau akhir periode: .dt.is_month_start, .dt.is_month_end, .dt.is_quarter_start, .dt.is_quarter_end, .dt.is_year_start, dan .dt.is_year_end. Semua ini berguna untuk mendeteksi periode pelaporan, siklus penagihan, dan pengaruh batas musiman.

dates_series = pd.Series(
    pd.date_range('2024-01-28', periods=10, freq='D')
)

print(dates_series[dates_series.dt.is_month_start].values)
# ['2024-02-01']

print(dates_series[dates_series.dt.is_month_end].values)
# ['2024-01-31']

Pengodean Siklis Fitur Temporal

Bulan dan jam bersifat siklis — Desember (12) dekat dengan Januari (1), dan pukul 23.00 dekat dengan pukul 00.00. Memperlakukan keduanya sebagai bilangan bulat linear (1-12 atau 0-23) dapat menyesatkan sebagian besar model. Enkode fitur siklis menggunakan transformasi sinus dan kosinus: sin(2π × value / max_value) dan cos(2π × value / max_value). Cara ini menyematkan struktur melingkar ke dalam dua kolom numerik yang dapat digunakan model dengan benar.

import numpy as np

# Cyclical encoding for month (1-12)
df['month_sin'] = np.sin(2 * np.pi * df['month'] / 12)
df['month_cos'] = np.cos(2 * np.pi * df['month'] / 12)

# Cyclical encoding for day of week (0-6)
df['dow_sin'] = np.sin(2 * np.pi * df['day_of_week'] / 7)
df['dow_cos'] = np.cos(2 * np.pi * df['day_of_week'] / 7)

print(df[['month', 'month_sin', 'month_cos']].head().round(3))

Aritmetika Timedelta

Mengurangkan dua kolom datetime menghasilkan Series timedelta64. Pengakses .dt pada Series timedelta menyediakan .dt.days, .dt.seconds, dan .dt.total_seconds(). Dengan demikian, Anda dapat menghitung durasi peristiwa, waktu sejak pembelian terakhir, dan usia dalam hari — semuanya sebagai kolom numerik yang siap untuk analisis lebih lanjut.

df_orders = pd.DataFrame({
    'order_date':    pd.to_datetime(['2024-01-01', '2024-02-10', '2024-03-05']),
    'delivery_date': pd.to_datetime(['2024-01-04', '2024-02-13', '2024-03-12'])
})

# Compute delivery time in days
df_orders['delivery_days'] = (
    df_orders['delivery_date'] - df_orders['order_date']
).dt.days
print(df_orders)

Menggunakan Properti .dt pada Indeks

Ketika datetime menjadi indeks DataFrame (sebuah DatetimeIndex), bukan kolom, akses properti yang sama langsung pada indeks tanpa .dt: df.index.year, df.index.month, df.index.day_of_week, dan sebagainya. Anda dapat menambahkannya langsung sebagai kolom baru: df['month'] = df.index.month.

df_indexed = df.set_index('event_date')

# Access components directly on the DatetimeIndex
print(df_indexed.index.month[:3])  # [1, 1, 1]
print(df_indexed.index.day_of_week[:3])  # [0, 1, 2]

# Add as new columns
df_indexed['month']   = df_indexed.index.month
df_indexed['weekday'] = df_indexed.index.day_of_week
print(df_indexed.head())

Pipeline Rekayasa Fitur Temporal Lengkap

Berikut adalah fungsi rekayasa fitur temporal lengkap yang menerima DataFrame dengan kolom datetime dan mengembalikannya dengan fitur temporal yang paling berguna. Pola ini dapat langsung diterapkan di awal pipeline pembelajaran mesin atau analisis apa pun yang bekerja dengan data peristiwa bertanda waktu.

def add_temporal_features(df, date_col):
    dt = df[date_col].dt
    df['year']       = dt.year
    df['month']      = dt.month
    df['day']        = dt.day
    df['day_of_week'] = dt.day_of_week
    df['quarter']    = dt.quarter
    df['is_weekend'] = dt.day_of_week >= 5
    df['month_sin']  = (2 * 3.14159 * dt.month / 12).__round__(4)
    df['month_cos']  = (2 * 3.14159 * dt.month / 12).__round__(4)
    return df

result = add_temporal_features(df.copy(), 'event_date')
print(result.columns.tolist())

Pemeriksaan Cepat

Uji pemahaman Anda tentang ekstraksi fitur temporal dari kolom datetime.

Ringkasan Pelajaran

Dalam pelajaran ini Anda mempelajari bahwa pengakses .dt menyediakan akses tervektorisasi ke semua properti datetime; fitur yang umum diekstrak mencakup tahun, bulan, hari, day_of_week, jam, kuartal; pengodean siklis dengan sinus/kosinus menangani sifat melingkar jam dan bulan; dan aritmetika timedelta memungkinkan Anda menghitung durasi dalam hari atau detik. Selanjutnya, kita akan mempelajari arsitektur figur dan sumbu Matplotlib untuk membuat bagan berkualitas publikasi.

Gratis untuk memulai

Belajar Python dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengekstrak Fitur Temporal” gratis?

Ya — teks lengkap “Mengekstrak Fitur Temporal” 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 “Mengekstrak Fitur Temporal”?

Gunakan akses .dt untuk mengambil tahun, bulan, hari, day_of_week, dan jam dari kolom datetime untuk rekayasa fitur. 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 4 dari 4.

Berapa lama pelajaran “Mengekstrak Fitur Temporal” 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