Indexare și reesantionare a seriilor de timp

Manipularea datelor de tip serie de timp în Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Transformarea seriilor de timp

Transformările de bază ale seriilor de timp includ:

  • Parsarea șirurilor de date și conversia la datetime64

  • Selectarea și segmentarea pentru subperioade specifice

  • Setarea și modificarea frecvenței DateTimeIndex

    • Supraesantionare vs. subesantionare
Manipularea datelor de tip serie de timp în Python

Obținerea prețurilor acțiunilor GOOG

google = pd.read_csv('google.csv')  # import pandas as pd

google.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 504 entries, 0 to 503
Data columns (total 2 columns):
date     504 non-null object
price    504 non-null float64
dtypes: float64(1), object(1)
google.head()
         date   price
0  2015-01-02  524.81
1  2015-01-05  513.87
2  2015-01-06  501.96
3  2015-01-07  501.10
4  2015-01-08  502.68
Manipularea datelor de tip serie de timp în Python

Conversia șirurilor de date la datetime64

  • pd.to_datetime():
    • Parsarea șirului de date
    • Conversie la datetime64
google.date = pd.to_datetime(google.date)

google.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 504 entries, 0 to 503
Data columns (total 2 columns):
date     504 non-null datetime64[ns]
price    504 non-null float64
dtypes: datetime64[ns](1), float64(1)
Manipularea datelor de tip serie de timp în Python

Conversia șirurilor de date la datetime64

  • .set_index():
    • Data ca index
    • inplace:
      • fără copie
google.set_index('date', inplace=True)

google.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 504 entries, 2015-01-02 to 2016-12-30
Data columns (total 1 columns):
price    504 non-null float64
dtypes: float64(1)
Manipularea datelor de tip serie de timp în Python

Reprezentarea grafică a seriei de timp a acțiunilor Google

google.price.plot(title='Google Stock Price')

plt.tight_layout(); plt.show()

Graficul seriei de timp a acțiunilor Google

Manipularea datelor de tip serie de timp în Python

Indexare parțială prin șiruri de caractere

  • Selectare/indexare folosind șiruri care se parsează ca date
google['2015'].info() # Pass string for part of date
DatetimeIndex: 252 entries, 2015-01-02 to 2015-12-31
Data columns (total 1 columns):
price    252 non-null float64
dtypes: float64(1)
google['2015-3': '2016-2'].info() # Slice includes last month
DatetimeIndex: 252 entries, 2015-03-02 to 2016-02-29
Data columns (total 1 columns):
price    252 non-null float64
dtypes: float64(1)
memory usage: 3.9 KB
Manipularea datelor de tip serie de timp în Python

Indexare parțială prin șiruri de caractere

google.loc['2016-6-1', 'price'] # Use full date with .loc[]
734.15
Manipularea datelor de tip serie de timp în Python

.asfreq(): setarea frecvenței

  • .asfreq('D'):
    • Conversie DateTimeIndex la frecvență zilnică calendaristică
google.asfreq('D').info() # set calendar day frequency
DatetimeIndex: 729 entries, 2015-01-02 to 2016-12-30
Freq: D
Data columns (total 1 columns):
price    504 non-null float64
dtypes: float64(1)
Manipularea datelor de tip serie de timp în Python

.asfreq(): setarea frecvenței

  • Supraesantionare:
    • Frecvență mai mare implică date noi => date lipsă
google.asfreq('D').head()
             price
date              
2015-01-02  524.81
2015-01-03     NaN
2015-01-04     NaN
2015-01-05  513.87
2015-01-06  501.96
Manipularea datelor de tip serie de timp în Python

.asfreq(): resetarea frecvenței

  • .asfreq('B'):
    • Conversie DateTimeIndex la frecvență de zile lucrătoare
google = google.asfreq('B') # Change to calendar day frequency

google.info()
DatetimeIndex: 521 entries, 2015-01-02 to 2016-12-30
Freq: B
Data columns (total 1 columns):
price    504 non-null float64
dtypes: float64(1)
Manipularea datelor de tip serie de timp în Python

.asfreq(): resetarea frecvenței

google[google.price.isnull()] # Select missing 'price' values
            price
date             
2015-01-19    NaN
2015-02-16    NaN
...
2016-11-24    NaN
2016-12-26    NaN
  • Zile lucrătoare care nu au fost zile de tranzacționare
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...