Thay đổi tần suất chuỗi thời gian: resampling

Xử lý dữ liệu chuỗi thời gian trong Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Đổi tần suất: resampling

  • DateTimeIndex: đặt & đổi tần suất bằng .asfreq()
  • Nhưng đổi tần suất sẽ ảnh hưởng dữ liệu
    • Tăng mẫu: điền hoặc nội suy giá trị thiếu
    • Giảm mẫu: gộp dữ liệu hiện có
  • API pandas:
    • .asfreq(), .reindex()
    • .resample() + phương thức biến đổi
Xử lý dữ liệu chuỗi thời gian trong Python

Bắt đầu: dữ liệu theo quý

dates = pd.date_range(start='2016', periods=4, freq='Q')

data = range(1, 5)
quarterly = pd.Series(data=data, index=dates)
quarterly
2016-03-31    1
2016-06-30    2
2016-09-30    3
2016-12-31    4
Freq: Q-DEC, dtype: int64 # Mặc định: quý kết thúc năm
Xử lý dữ liệu chuỗi thời gian trong Python

Tăng mẫu: quý => tháng

monthly = quarterly.asfreq('M') # sang tần suất cuối tháng
2016-03-31    1.0
2016-04-30    NaN
2016-05-31    NaN
2016-06-30    2.0
2016-07-31    NaN
2016-08-31    NaN
2016-09-30    3.0
2016-10-31    NaN
2016-11-30    NaN
2016-12-31    4.0
Freq: M, dtype: float64
  • Tăng mẫu tạo ra giá trị thiếu
monthly = monthly.to_frame('baseline') # sang DataFrame
Xử lý dữ liệu chuỗi thời gian trong Python

Tăng mẫu: phương pháp điền

monthly['ffill'] = quarterly.asfreq('M', method='ffill')

monthly['bfill'] = quarterly.asfreq('M', method='bfill')
monthly['value'] = quarterly.asfreq('M', fill_value=0)
Xử lý dữ liệu chuỗi thời gian trong Python

Tăng mẫu: phương pháp điền

  • bfill: điền lùi (backfill)
  • ffill: điền tiến (forward fill)
            baseline  ffill  bfill  value
2016-03-31       1.0      1      1      1
2016-04-30       NaN      1      2      0
2016-05-31       NaN      1      2      0
2016-06-30       2.0      2      2      2
2016-07-31       NaN      2      3      0
2016-08-31       NaN      2      3      0
2016-09-30       3.0      3      3      3
2016-10-31       NaN      3      4      0
2016-11-30       NaN      3      4      0
2016-12-31       4.0      4      4      4
Xử lý dữ liệu chuỗi thời gian trong Python

Thêm tháng còn thiếu: .reindex()

dates = pd.date_range(start='2016', 
                      periods=12, 
                      freq='M')
DatetimeIndex(['2016-01-31', 
               '2016-02-29', 
               ..., 
               '2016-11-30', 
               '2016-12-31'],
        dtype='datetime64[ns]', freq='M')
  • .reindex():
    • đưa DataFrame về index mới
    • logic điền giống .asfreq()
quarterly.reindex(dates)
2016-01-31    NaN
2016-02-29    NaN
2016-03-31    1.0
2016-04-30    NaN
2016-05-31    NaN
2016-06-30    2.0
2016-07-31    NaN
2016-08-31    NaN
2016-09-30    3.0
2016-10-31    NaN
2016-11-30    NaN
2016-12-31    4.0
Xử lý dữ liệu chuỗi thời gian trong Python

Cùng luyện tập nào!

Xử lý dữ liệu chuỗi thời gian trong Python

Preparing Video For Download...