Tăng tần suất & nội suy với .resample()

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

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Chuyển đổi tần suất & phương pháp biến đổi

  • .resample(): tương tự .groupby()

  • Gom nhóm dữ liệu theo kỳ lấy mẫu và áp dụng một hay nhiều phương thức cho từng nhóm

  • Ngày mới xác định bởi offset: đầu, cuối, v.v.

  • Tăng tần suất: điền từ giá trị có sẵn hoặc nội suy

  • Giảm tần suất: tổng hợp từ dữ liệu hiện có

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

Bắt đầu: tỷ lệ thất nghiệp theo tháng

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 # no frequency information
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
  • Ngày báo cáo: ngày 1 hằng tháng
Xử lý dữ liệu chuỗi thời gian trong Python

Kỳ resample & offset tần suất

  • Resample tạo ngày mới theo offset tần suất
  • Có nhiều lựa chọn ngoài ngày cuối tháng dương lịch

 

Tần suất Bí danh Ngày mẫu
Cuối tháng dương lịch M 2017-04-30
Đầu tháng dương lịch MS 2017-04-01
Cuối tháng làm việc BM 2017-04-28
Đầu tháng làm việc BMS 2017-04-03
Xử lý dữ liệu chuỗi thời gian trong Python

Logic resample

Logic resample

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

Logic resample

Logic resample

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

Gán tần suất với .resample()

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') # tạo đối tượng Resampler
DatetimeIndexResampler [freq=<MonthBegin>, axis=0, closed=left, 
                        label=left, convention=start, base=0]
Xử lý dữ liệu chuỗi thời gian trong Python

Gán tần suất với .resample()

unrate.asfreq('MS').equals(unrate.resample('MS').asfreq())
True
  • .resample(): chỉ trả dữ liệu khi gọi thêm phương thức khác
Xử lý dữ liệu chuỗi thời gian trong Python

Tăng trưởng GDP thực theo quý

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 # no frequency info
dtypes: float64(1)
gdp.head(2)
            gpd
DATE
2000-01-01  1.2
2000-04-01  7.8
Xử lý dữ liệu chuỗi thời gian trong Python

Nội suy tăng trưởng GDP thực theo tháng

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
Xử lý dữ liệu chuỗi thời gian trong Python

Nội suy tăng trưởng GDP thực theo tháng

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(): tìm các điểm trên đường thẳng giữa dữ liệu hiện có
Xử lý dữ liệu chuỗi thời gian trong Python

Nối hai DataFrame

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
Xử lý dữ liệu chuỗi thời gian trong Python

Nối hai DataFrame

pd.concat([df1, df2], axis=1)
   df1  df2
0    1    4
1    2    5
2    3    6
  • axis=1: nối theo chiều ngang
Xử lý dữ liệu chuỗi thời gian trong Python

Vẽ tăng trưởng GDP thực đã nội suy

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

Vẽ tăng trưởng GDP thực đã nội suy

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

Kết hợp tăng trưởng GDP & thất nghiệp

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

Kết hợp tăng trưởng GDP & thất nghiệp

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...