Yukarı örnekleme ve enterpolasyon: .resample() ile

Python ile Zaman Serisi Verilerini Manipüle Etme

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Frekans dönüşümü ve dönüştürme yöntemleri

  • .resample(): .groupby()'a benzer

  • Yeniden örnekleme döneminde verileri gruplar ve her gruba bir veya birkaç yöntem uygular

  • Yeni tarih, ofsete göre belirlenir: başlangıç, bitiş vb.

  • Yukarı örnekleme: mevcutlardan doldurma veya enterpolasyon

  • Aşağı örnekleme: mevcut verilere toplulaştırma uygula

Python ile Zaman Serisi Verilerini Manipüle Etme

Başlangıç: aylık işsizlik oranı

unrate = pd.read_csv('unrate.csv', parse_dates['Date'], index_col='Date')

unrate.info()
DatetimeIndex: 208 entries, 2000-01-01 to 2017-04-01
Data columns (total 1 columns):
UNRATE    208 non-null float64 # frekans bilgisi yok
dtypes: float64(1)
unrate.head()
            UNRATE
DATE
2000-01-01     4.0
2000-02-01     4.1
2000-03-01     4.0
2000-04-01     3.8
2000-05-01     4.0
  • Raporlama tarihi: ayın 1'i
Python ile Zaman Serisi Verilerini Manipüle Etme

Yeniden örnekleme dönemi ve frekans ofsetleri

  • Resample, frekans ofseti için yeni bir tarih oluşturur
  • Takvim ay sonuna alternatifler vardır

 

Frekans Kısaltma Örnek Tarih
Takvim Ay Sonu M 2017-04-30
Takvim Ay Başı MS 2017-04-01
İş Günü Ay Sonu BM 2017-04-28
İş Günü Ay Başı BMS 2017-04-03
Python ile Zaman Serisi Verilerini Manipüle Etme

Yeniden örnekleme mantığı

Yeniden örnekleme mantığı

Python ile Zaman Serisi Verilerini Manipüle Etme

Yeniden örnekleme mantığı

Yeniden örnekleme mantığı

Python ile Zaman Serisi Verilerini Manipüle Etme

.resample() ile frekans atama

unrate.asfreq('MS').info()
DatetimeIndex: 208 entries, 2000-01-01 to 2017-04-01
Freq: MS
Data columns (total 1 columns):
UNRATE    208 non-null float64
dtypes: float64(1)
unrate.resample('MS') # Resampler nesnesi oluşturur
DatetimeIndexResampler [freq=<MonthBegin>, axis=0, closed=left, 
                        label=left, convention=start, base=0]
Python ile Zaman Serisi Verilerini Manipüle Etme

.resample() ile frekans atama

unrate.asfreq('MS').equals(unrate.resample('MS').asfreq())
True
  • .resample(): yalnızca başka bir yöntem çağrıldığında veri döndürür
Python ile Zaman Serisi Verilerini Manipüle Etme

Üç aylık reel GSYİH büyümesi

gdp = pd.read_csv('gdp.csv')

gdp.info()
DatetimeIndex: 69 entries, 2000-01-01 to 2017-01-01
Data columns (total 1 columns):
gpd    69 non-null float64 # frekans bilgisi yok
dtypes: float64(1)
gdp.head(2)
            gpd
DATE
2000-01-01  1.2
2000-04-01  7.8
Python ile Zaman Serisi Verilerini Manipüle Etme

Aylık reel GSYİH büyümesini enterpole etme

gdp_1 = gdp.resample('MS').ffill().add_suffix('_ffill')
       gpd_ffill
DATE
2000-01-01  1.2
2000-02-01  1.2
2000-03-01  1.2
2000-04-01  7.8
Python ile Zaman Serisi Verilerini Manipüle Etme

Aylık reel GSYİH büyümesini enterpole etme

gdp_2 = gdp.resample('MS').interpolate().add_suffix('_inter')
            gpd_inter
DATE
2000-01-01  1.200000
2000-02-01  3.400000
2000-03-01  5.600000
2000-04-01  7.800000
  • .interpolate(): mevcut noktalar arasındaki doğru üzerinde değerleri bulur
Python ile Zaman Serisi Verilerini Manipüle Etme

İki DataFrame'i birleştirme (concatenate)

df1 = pd.DataFrame([1, 2, 3], columns=['df1'])

df2 = pd.DataFrame([4, 5, 6], columns=['df2'])
pd.concat([df1, df2])
   df1  df2
0  1.0  NaN
1  2.0  NaN
2  3.0  NaN
0  NaN  4.0
1  NaN  5.0
2  NaN  6.0
Python ile Zaman Serisi Verilerini Manipüle Etme

İki DataFrame'i birleştirme (concatenate)

pd.concat([df1, df2], axis=1)
   df1  df2
0    1    4
1    2    5
2    3    6
  • axis=1: yatay birleştirir
Python ile Zaman Serisi Verilerini Manipüle Etme

Enterpole edilmiş reel GSYİH büyümesini çizme

pd.concat([gdp_1, gdp_2], axis=1).loc['2015':].plot()

ch2_3_v2 - Upsampling & Interpolation.032.png

Python ile Zaman Serisi Verilerini Manipüle Etme

GSYİH büyümesi ve işsizliği birleştirme

pd.concat([unrate, gdp_inter], axis=1).plot();

ch2_3_v2 - Upsampling & Interpolation.034.png

Python ile Zaman Serisi Verilerini Manipüle Etme

Haydi pratik yapalım!

Python ile Zaman Serisi Verilerini Manipüle Etme

Preparing Video For Download...