Upsample și interpolare cu .resample()

Manipularea datelor de tip serie de timp în Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Metode de conversie și transformare a frecvenței

  • .resample(): similar cu .groupby()

  • Grupează datele în perioada de reesantionare și aplică una sau mai multe metode fiecărui grup

  • Noua dată este determinată de offset - început, sfârșit etc.

  • Upsample: completare din date existente sau interpolare

  • Downsample: aplicarea agregării pe datele existente

Manipularea datelor de tip serie de timp în Python

Introducere: rata lunară a șomajului

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
  • Data raportării: prima zi a lunii
Manipularea datelor de tip serie de timp în Python

Perioadă de reesantionare și offset-uri de frecvență

  • Resample creează o nouă dată pentru offset-ul de frecvență
  • Mai multe alternative față de sfârșitul lunii calendaristice

 

Frecvență Alias Dată eșantion
Sfârșitul lunii calendaristice M 2017-04-30
Începutul lunii calendaristice MS 2017-04-01
Sfârșitul lunii lucrătoare BM 2017-04-28
Începutul lunii lucrătoare BMS 2017-04-03
Manipularea datelor de tip serie de timp în Python

Logica reesantionării

Logica reesantionării

Manipularea datelor de tip serie de timp în Python

Logica reesantionării

Logica reesantionării

Manipularea datelor de tip serie de timp în Python

Atribuirea frecvenței cu .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') # creates Resampler object
DatetimeIndexResampler [freq=<MonthBegin>, axis=0, closed=left, 
                        label=left, convention=start, base=0]
Manipularea datelor de tip serie de timp în Python

Atribuirea frecvenței cu .resample()

unrate.asfreq('MS').equals(unrate.resample('MS').asfreq())
True
  • .resample(): returnează date doar la apelarea unei alte metode
Manipularea datelor de tip serie de timp în Python

Creșterea trimestrială reală a PIB

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
Manipularea datelor de tip serie de timp în Python

Interpolarea creșterii lunare reale a PIB

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
Manipularea datelor de tip serie de timp în Python

Interpolarea creșterii lunare reale a PIB

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(): calculează puncte pe dreapta dintre datele existente
Manipularea datelor de tip serie de timp în Python

Concatenarea a două DataFrame-uri

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
Manipularea datelor de tip serie de timp în Python

Concatenarea a două DataFrame-uri

pd.concat([df1, df2], axis=1)
   df1  df2
0    1    4
1    2    5
2    3    6
  • axis=1: concatenare orizontală
Manipularea datelor de tip serie de timp în Python

Vizualizarea creșterii reale interpolate a PIB

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

Upsample și interpolarea creșterii reale a PIB

Manipularea datelor de tip serie de timp în Python

Combinarea creșterii PIB și a șomajului

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

Creșterea PIB și rata șomajului combinate

Manipularea datelor de tip serie de timp în Python

Să exersăm!

Manipularea datelor de tip serie de timp în Python

Preparing Video For Download...