Zamansal Özellikleri Çıkarma
Özellik mühendisliği için bir datetime sütunundan yıl, ay, gün, day_of_week ve saat bilgilerini çekmek üzere .dt erişimcisini kullanın.
Zamansal Özellikleri Çıkarma, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Zamansal Özellikler Neden Çıkarılır?
Ham bir datetime64 sütunu, çoğu makine öğrenmesi algoritması için anlaşılması zordur; bu algoritmalar 2024-12-25 tarihinin bir tatil olduğunu veya Friday gününün perakende satışlarını artırdığını anlayamaz. Zamansal özellik mühendisliği, datetime sütunlarından yıl, ay, gün, haftanın günü ve saat gibi anlamlı bileşenleri çıkararak bunları modellerin ve analiz işlevlerinin doğrudan kullanabileceği ayrı sayısal veya kategorik sütunlara dönüştürür.
.dt Erişimcisi
Bir DataFrame sütununun veri türü datetime64 olduğunda, .dt erişimcisi tüm datetime özelliklerine ve yöntemlerine vektörel olarak erişim sağlar. Satır satır bir Python işlevi uygulamak yerine df['date'].dt.year yazarsınız ve Pandas, tek ve hızlı bir işlemle her satırın yılını hesaplar. Aynı erişimci, farklı özelliklerle timedelta64 sütunlarında da çalışır.
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, 5Tarih Bileşenlerini Çıkarma
Tarih bileşenleri için en sık kullanılan .dt özellikleri şunlardır: .dt.year, .dt.month, .dt.day, .dt.day_of_week (Pazartesi için 0'dan Pazar için 6'ya kadar), .dt.day_of_year, .dt.week veya .dt.isocalendar().week, .dt.quarter ve .dt.days_in_month. Bunların her biri, özellik olarak doğrudan kullanılabilen bir tamsayı Series döndürür.
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())Zaman Bileşenlerini Çıkarma
Yalnızca tarihi değil, saat bilgisini de içeren datetime sütunları için .dt.hour, .dt.minute, .dt.second ve .dt.microsecond kullanın. Bunlar gün içi analiz, kullanıcı davranışının modellenmesi (sabah ve akşam örüntüleri) ve günün saatinin hedef değişkeni etkilediği tüm sistemler için kritik öneme sahiptir.
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())Gün Adı ve Ay Adı
İnsanların okuyabileceği etiketler için .dt.day_name() ve .dt.month_name() kullanarak 'Monday' ve 'January' gibi metin adları elde edin. Bunlar raporlarda görüntüleme ve haftanın günü/ayın etkilerini kodlayan kategorik özellikler oluşturma açısından kullanışlıdır. Diğer dillerde adlar elde etmek için bir locale de iletebilirsiniz.
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 JanuaryHafta Sonu ve İş Günü Bayrakları
Çok yaygın bir özellik, bir tarihin hafta sonuna denk gelip gelmediğini belirten mantıksal bir bayraktır. day_of_week >= 5, Cumartesi (5) ve Pazar (6) için True verir. Daha gelişmiş iş takvimi özellikleri için numpy.busdaycalendar tatilleri işler; ancak çoğu durumda basit hafta içi/hafta sonu ayrımı etkinin büyük bölümünü yakalar.
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 averageDönem Başlangıcı/Sonu Bayrakları
.dt erişimcisi, bir tarihin bir dönemin başlangıcında veya sonunda olup olmadığını belirleyen mantıksal özellikler de sağlar: .dt.is_month_start, .dt.is_month_end, .dt.is_quarter_start, .dt.is_quarter_end, .dt.is_year_start ve .dt.is_year_end. Bunlar raporlama dönemlerini, faturalandırma döngülerini ve mevsimsel sınır etkilerini belirlemek için kullanışlıdır.
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']Zamansal Özellikleri Döngüsel Kodlama
Ay ve saat döngüseldir; Aralık (12), Ocak'a (1) yakındır ve 23:00, 00:00'a yakındır. Bunları doğrusal tamsayılar (1-12 veya 0-23) olarak ele almak çoğu modeli yanıltır. Döngüsel özellikleri sinüs ve kosinüs dönüşümleriyle kodlayın: sin(2π × value / max_value) ve cos(2π × value / max_value). Böylece dairesel yapı, modellerin doğru şekilde kullanabileceği iki sayısal sütuna yerleştirilir.
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))Timedelta Aritmetiği
İki datetime sütununun çıkarılması, bir timedelta64 Series üretir. Timedelta Series üzerindeki .dt erişimcisi, .dt.days, .dt.seconds ve .dt.total_seconds() özelliklerini sunar. Bu sayede etkinlik sürelerini, son satın alma işleminden bu yana geçen süreyi ve gün cinsinden yaşı hesaplayabilir; bunların tümünü daha ileri analizlere hazır sayısal sütunlar olarak elde edebilirsiniz.
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)Dizin .dt Özelliklerini Kullanma
Datetime, bir sütun yerine DataFrame'in diziniyse (bir DatetimeIndex), aynı özelliklere .dt kullanmadan doğrudan dizin üzerinden erişin: df.index.year, df.index.month, df.index.day_of_week vb. Bunları doğrudan yeni sütunlar olarak ekleyebilirsiniz: 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())Tam Zamansal Özellik Mühendisliği İş Akışı
Aşağıda, datetime sütunu içeren bir DataFrame alan ve en kullanışlı zamansal özelliklerle zenginleştirilmiş hâlini döndüren eksiksiz bir zamansal özellik mühendisliği işlevi yer alıyor. Bu yaklaşım, zaman damgalı etkinlik verileriyle çalışan tüm makine öğrenmesi veya analiz iş akışlarının başlangıcında doğrudan uygulanabilir.
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())Kısa Kontrol
Datetime sütunlarından zamansal özellikleri çıkarma konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: .dt erişimcisi, tüm datetime özelliklerine vektörel erişim sağlar; yaygın olarak çıkarılan özellikler arasında yıl, ay, gün, day_of_week, saat ve çeyrek bulunur; sinüs/kosinüs ile yapılan döngüsel kodlama, saatlerin ve ayların dairesel yapısını ele alır; timedelta aritmetiği ise süreleri gün veya saniye cinsinden hesaplamanızı sağlar. Sırada, yayın kalitesinde grafikler oluşturmak için Matplotlib'in şekil ve eksen mimarisini inceleyeceğiz.
Sıkça Sorulan Sorular
“Zamansal Özellikleri Çıkarma” dersi ücretsiz mi?
Evet — “Zamansal Özellikleri Çıkarma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“Zamansal Özellikleri Çıkarma” dersinde ne öğreneceğim?
Özellik mühendisliği için bir datetime sütunundan yıl, ay, gün, day_of_week ve saat bilgilerini çekmek üzere .dt erişimcisini kullanın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Zamansal Özellikleri Çıkarma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- DatetimeIndex ve Dönem Aralıkları
- Zaman Serilerini Yeniden Örnekleme
- Kaydırma ve Gecikme Özellikleri
- Zamansal Özellikleri Çıkarma