Ana içeriğe atla

Pandas resample() ve asfreq() ile Yeniden Örnekleme

Bu eğitimde pandas'ta zaman serisi yeniden örnekleme ele alınır; .asfreq() ve .resample() gibi yöntemlerle hem üst örnekleme hem de alt örnekleme teknikleri incelenir.
Güncel 3 Eki 2026  · 7 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Zaman, veri analizinde temel bir boyuttur. Zamanla değerler dalgalanabilir, eğilim gösterebilir veya sabit kalabilir. Verilerin zaman içinde nasıl değiştiğini analiz ettiğimizde, zaman serileriyle çalışıyoruz.

Zaman serisi analizinde yaygın bir görev, verilerimizdeki tarih ve saatlerin sıklığını ayarlamaktır; buna yeniden örnekleme denir. Bu eğitimde, sezgisel ve verimli zaman serisi işlemleri için güçlü araçlar sunan Pandas kütüphanesinden yararlanacağız.

Temelden başlayıp kademeli olarak daha gelişmiş yeniden örnekleme tekniklerine ilerleyeceğiz. Uygulamalı örnekler sağlayacak ve zaman serisi analizimizin etkili ve performanslı olmasını sağlamak için en iyi uygulamaları paylaşacağız.

Zaman serileri hakkında daha fazla bilgi edinmek isterseniz, Python'da seri verileri işleme kursuna göz atın.

Zaman Serisi Yeniden Örnekleme Nedir?

Verileri kategoriye göre gruplayabildiğimiz gibi, yeniden örnekleme de verileri farklı zaman aralıklarına göre gruplamamıza olanak tanır. Bu hem veri temizliği hem de derinlemesine zaman serisi analizi için değerlidir. Örneğin, iki zaman serisini karşılaştırmadan önce ortak bir sıklığa hizalamamız gerekebilir.

İki temel yeniden örnekleme türü vardır:

  • Üst örnekleme (Upsampling): Verimizin sıklığını artırma (ör. yıllıktan aylığa). Bu, doldurulması veya enterpole edilmesi gereken yeni zaman noktaları oluşturur.
  • Alt örnekleme (Downsampling): Sıklığı azaltma (ör. aylıktan yıllığa). Bu, yeni ve daha geniş zaman aralıkları içinde veri noktalarının birleştirilmesini içerir.

Pandas asfreq() Yöntemiyle Yeniden Örnekleme

Pandas ile yeniden örneklemeyi iki ana yöntemle gerçekleştirebiliriz: .asfreq() ve .resample().

Bu yöntemleri kullanmaya başlamak için önce pandas kütüphanesini geleneksel pd kısaltmasıyla içe aktarmalıyız. Sonuçları görselleştirmek için matplotlib'i de içe aktaracağız.

import pandas as pd
import matplotlib.pyplot as plt

Önce .asfreq() yöntemiyle başlayalım. Bu yöntem, bir zaman serisini belirtilen bir sıklığa dönüştürerek orijinal verileri o sıklıktaki yeni bir indeksle hizalar ve geri döndürür.

1997'den 2015'e kadar Madrid'deki günlük sıcaklık ölçümlerini içeren bir veri kümesiyle çalışacağız. Yeniden örneklemeye geçmeden önce bazı ön işleme adımlarıyla başlayalım.

url = 'https://raw.githubusercontent.com/jcanalesluna/courses_materials/master/datasets/Madrid%20Daily%20Weather%201997-2015.csv'
df = pd.read_csv(url, usecols=['CET', 'Max TemperatureC', 'Mean TemperatureC', 'Min TemperatureC'])

# Change column names
df.columns = ['time', 'max_temp', 'mean_temp', 'min_temp']

# Convert string column to datetime
df['time'] = pd.to_datetime(df['time'])

# Set time column as index
df = df.set_index('time')

df
image11.png

asfreq() ile üst örnekleme

Üst örneklemeyi göstermek için, günlük sıcaklık ölçümlerimizi saatlik ölçümlere dönüştürmek istediğimizi hayal edin. Bunu freq='H' parametresiyle .asfreq() yöntemini kullanarak gerçekleştirebiliriz.

df_hour = df.asfreq('H')
df_hour

image2.png

Ortaya çıkan veri kümesi belirgin şekilde daha büyüktür; çünkü günlük yerine saatlik verilerle yeni satırlar oluşturulmuştur. Varsayılan olarak .asfreq(), orijinal indeksin ilk girişini alır ve kalan saatleri boş (null) değerlerle doldurur.

Ortaya çıkan veri kümesi hayli büyüktür; zira günlük veri yerine saatlik verilerle yeni satırlar oluşturulmuştur. Varsayılan olarak .asfreq(), orijinal indeksin ilk girişini alır ve kalan saatler için boş değerler oluşturur.

Pandas bu boş değerleri doldurmak için üç strateji sunar:

  • İleri doldurma (ffill): Son geçerli gözlemi ileriye taşır.
  • Geri doldurma (bfill): Boşluğu doldurmak için bir sonraki geçerli gözlemi kullanır.
  • Sabit değerle doldurma: Eksik veriler için belirli bir değer sağlar.

İlk iki strateji .asfreq() yöntemindeki method parametresiyle, sabit değerle doldurma ise fill_value parametresiyle uygulanır.

df_mean_temp = df[['mean_temp']]
df_mean_temp_hour= df_mean_temp.asfreq('H')

df_mean_temp_hour['ffill'] = df_mean_temp.asfreq('H', method='ffill')
df_mean_temp_hour['bfill'] = df_mean_temp.asfreq('H', method='bfill')
df_mean_temp_hour['value'] = df_mean_temp.asfreq('H', fill_value=0)
df_mean_temp_hour

image1.png

asfreq() ile alt örnekleme

Şimdi alt örneklemeyi inceleyelim. Diyelim ki günlük sıklığı aylığa çevirmek istiyoruz. Bunu freq='M' paramresiyle .asfreq() kullanarak yapabiliriz.

Bu durumda verimizin sıklığını azaltıyoruz; günlükten aylığa geçiyoruz. Ortaya çıkan DataFrame, orijinalindeki 6.812 satıra kıyasla yalnızca 228 satıra sahiptir.

df_month = df.asfreq(freq='M')
df_month

image5.png

.asfreq()'in her ayın son gününü seçip tüm ayı temsil etmesi için o günün değerini kullandığına dikkat edin. Herhangi bir toplama (ör. aylık ortalama sıcaklığın hesaplanması) yapılmaz. Bu tür toplamalari gerçekleştirmek için bir sonraki bölümde .resample() yöntemine geçeceğiz.

Pandas resample() Yöntemiyle Yeniden Örnekleme

.asfreq() zaman serilerini farklı bir sıklıkta görüntülemek için kullanışlı olsa da, yeniden örnekleme ile birlikte toplama işlemleri yapacağımız zaman tercih edilen araç .resample() yöntemidir.

.resample() yöntemi, .groupby() ile oldukça benzer şekilde çalışır: verileri belirtilen bir zaman aralığı içinde gruplar ve her gruba bir veya daha fazla fonksiyon uygular. Bu fonksiyonların sonucu, o aralık içindeki yeni bir tarihe atanır.

.resample()'ı hem üst örnekleme (eksik verileri doldurma veya enterpolasyon) hem de alt örnekleme (verileri toplama) için kullanırız.

Üst örneklemenin .resample() ile nasıl çalıştığını görmek için saatlik dönüştürme örneğimize geri dönelim. .resample() uygulamak bir Resampler nesnesi döndürür; ardından bir DataFrame elde etmek için bu nesneye başka bir yöntem uygulayabiliriz.

print(df.resample('H'))
DatetimeIndexResampler [freq=<Hour>, axis=0, closed=left, label=left, convention=start, origin=start_day]

Üst örnekleme açısından, .resample() yöntemi .asfreq() ile aynı görevleri yerine getirebilir.

df.mean_temp.resample('H').asfreq()

Screenshot 2024-06-04 at 14.10.03.png

Ayrıca .asfreq() ile kullandığımız aynı doldurma ve enterpolasyon stratejilerini de uygulayabiliriz. Örneğin, ileri doldurma kullanmak için:

df.mean_temp.resample('H').ffill()

image6.png

Ancak .resample(), .asfreq()'de bulunmayan ek yöntemler de sunar. Örneğin, mevcut veri noktaları arasındaki doğrusal çizgi boyunca noktalar bularak yeni zaman noktalarındaki değerleri tahmin eden .interpolate() yöntemini kullanabiliriz.

df.mean_temp.resample('H').interpolate()

image8.png

.resample() yöntemi özellikle alt örneklemede öne çıkar; çünkü verilerimizi özetlemek için çeşitli toplama yöntemleri uygulamamıza olanak tanır. Örneğin, .resample() kullanarak Madrid için hem aylık ortalama hem de üç aylık medyan sıcaklıkları hesaplayalım.

df.mean_temp.resample('M').mean()

image4.png

df.mean_temp.resample('Q').median()

image7.png

Gelişmiş Yeniden Örnekleme Teknikleri

Ele aldığımız temel işlemlerin ötesinde, Pandas yeniden örnekleme yöntemleri daha gelişmiş senaryoları da yönetebilir. En yaygın olanlardan bazılarını inceleyelim.

Özel zaman sıklığı

Yeniden örnekleme, ihtiyaçlarımıza göre uyarlanmış bir sıklığa sahip yeni bir zaman serisi oluşturmamıza olanak tanır. Yaygın kullanılan bazı sıklıklar şunlardır:

  • W: Haftalık sıklık (Pazar günü biter)
  • M: Ay sonu sıklığı
  • Q: Çeyrek sonu sıklığı
  • H: Saatlik sıklık

Bununla birlikte, gereksinimlerimize bağlı olarak Pandas çok daha fazla seçenek sunar. Başlangıç veya bitiş tarihlerine göre sıklık tanımlayabilir, takvim günleri yerine iş günleri kullanabilir veya tamamen özel sıklıklar oluşturabiliriz.

df.mean_temp.resample('M').mean() # calendar month end
df.mean_temp.resample('MS').mean() # calendar month start
df.mean_temp.resample('BM').mean() # business calendar end
df.mean_temp.resample('BMS').mean() # business calendar start

Alt örneklemede birden çok toplama

groupby() yöntemi gibi, .resample() da aynı anda birden çok toplama uygulamamıza olanak tanır. .agg() yöntemini kullanıp mean, median ve standart sapma gibi toplama fonksiyonlarının bir listesini geçebiliriz.

df.mean_temp.resample('M').agg(['mean','median','std'])

image3.png

Yeniden Örnekleme: En İyi Uygulamalar ve Yaygın Tuzaklar

Pandas büyük veri kümelerini işlemek için oldukça optimize edilmiştir; ancak DataFrame boyutlarımız büyüdükçe, işleme ve manipülasyon hesaplama açısından zorlayıcı hale gelebilir. Bu, özellikle üst örnekleme sırasında geçerlidir. Saatlik bir zaman serisini saniyeye yeniden örneklediğinizi düşünün – ortaya çıkan DataFrame devasa olabilir!

Büyük veri kümelerinde performans sorunlarıyla karşılaşırsak şu stratejileri kullanabiliriz:

  • Yalnızca kullanmak istediğiniz sütunları okuyun.
  • Daha az bellek tüketen verimli veri tiplerini kullanın.
  • Bir dosyayı okurken parçalara bölerek (chunking) işleyin.

Neyse ki pandas 2.0 ve sonraki sürümler, daha verimli işleme için gelişmiş teknikler içerir. Pandas 2.0 hakkındaki bu makalede daha fazlasını öğrenebilirsiniz.

Sonuç

Yeniden örnekleme, zaman serisi analizinde temel bir tekniktir ve verilerimizin sıklığını, değerleri toplayarak (alt örnekleme) veya enterpole ederek (üst örnekleme) ayarlamamızı sağlar. Bu süreci sezgisel ve verimli hale getiren .asfreq() ve .resample() gibi güçlü araçlar sunduğunu gördük.

Python'da yeniden örnekleme ve zaman serisi manipülasyonu konusundaki bilginizi derinleştirmek için şu kaynaklara göz atın:


Javier Canales Luna's photo
Author
Javier Canales Luna
LinkedIn

Serbest çalışan bir veri analistiyim; dünya genelinde şirketler ve kuruluşlarla veri bilimi projelerinde iş birliği yapıyorum. Ayrıca 2+ yıllık deneyime sahip bir veri bilimi eğitmeniyim. Düzenli olarak İngilizce ve İspanyolca veri bilimiyle ilgili makaleler yazıyorum; bunların bir kısmı DataCamp, Towards Data Science ve Analytics Vidhya gibi köklü internet sitelerinde yayımlandı. Siyaset bilimi ve hukuk geçmişine sahip bir veri bilimci olarak amacım, kamu politikası, hukuk ve teknolojinin kesişiminde çalışmak; fikirlerin gücünden yararlanarak özellikle iklim krizi olmak üzere acil sorunların üstesinden gelmemize yardımcı olabilecek yenilikçi çözümler ve anlatılar geliştirmek. Kendimi otodidakt bir kişi, sürekli öğrenen ve disiplinlerarasılığın güçlü bir savunucusu olarak görüyorum. Yeni şeyler öğrenmek için asla geç değildir.

Pandas Yeniden Örnekleme SSS

pandas'ta rolling ile resample arasındaki fark nedir?

Yeniden örnekleme, zaman serisi verilerinizin sıklığını değiştirir; hareketli (rolling) işlemler ise orijinal sıklık içinde sabit boyutlu kayan bir pencere üzerinden istatistikler hesaplar.

Python'da resample('MS') nedir?

resample('MS'), .resample() yöntemi içinde kullanılan belirli bir parametredir. pandas'a verileri ay-başı sıklığına yeniden örneklemesini söyler. 'MS', Month Start (Ay Başı) anlamına gelir.

Yeniden örneklemeyi ne zaman kullanmalıyım?

Yeniden örnekleme çeşitli görevler için kullanışlıdır; örneğin:

  • Birden fazla zaman serisini karşılaştırma için ortak bir sıklığa hizalamak.
  • Analiz veya görselleştirme için verileri daha düşük sıklıklara toplamak (ör. günlük veriden aylık ortalamalara).
  • Bir zaman serisindeki eksik veri noktalarını enterpolasyonla doldurmak (üst örnekleme).

Yeniden örneklemenin dezavantajları nelerdir?

  • Enterpolasyon yöntemi dikkatle seçilmezse üst örnekleme önyargı oluşturabilir.
  • Alt örnekleme, veri noktaları toplandığı için bilgi kaybına yol açabilir.
  • Büyük veri kümelerinde yeniden örnekleme hesaplama açısından maliyetli olabilir.
Konular
Veri Analizi
Python

Bu kurslarla zaman serileri hakkında daha fazla bilgi edinin!

Kurs

Python ile Zaman Serisi Verileri için Machine Learning

4 sa
54.1K
Bu ders, zaman serisi verileri için özellik mühendisliği ve makine öğrenimine odaklanmaktadır.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör