Compararea ratelor de creștere ale seriilor de timp

Manipularea datelor de tip serie de timp în Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Compararea performanței acțiunilor

  • Serii de prețuri bursiere: dificil de comparat la niveluri diferite

  • Soluție simplă: normalizarea seriei de prețuri pornind de la 100

  • Împărțiți toate prețurile la primul din serie, înmulțiți cu 100

    • Același punct de plecare

    • Toate prețurile relative la punctul de plecare

    • Diferența față de punctul de plecare în puncte procentuale

Manipularea datelor de tip serie de timp în Python

Normalizarea unei serii unice (1)

google = pd.read_csv('google.csv', parse_dates=['date'], index_col='date')

google.head(3)
             price
date
2010-01-04  313.06
2010-01-05  311.68
2010-01-06  303.83
first_price = google.price.iloc[0]  # int-based selection

first_price
313.06
first_price == google.loc['2010-01-04', 'price']
True
Manipularea datelor de tip serie de timp în Python

Normalizarea unei serii unice (2)

normalized = google.price.div(first_price).mul(100)

normalized.plot(title='Google Normalized Series')

Seria normalizată Google

Manipularea datelor de tip serie de timp în Python

Normalizarea mai multor serii (1)

prices = pd.read_csv('stock_prices.csv',
                     parse_dates=['date'],
                     index_col='date')

prices.info()
DatetimeIndex: 1761 entries, 2010-01-04 to 2016-12-30
Data columns (total 3 columns):
AAPL    1761 non-null float64
GOOG    1761 non-null float64
YHOO    1761 non-null float64
dtypes: float64(3)
prices.head(2)
             AAPL    GOOG   YHOO
Date
2010-01-04  30.57  313.06  17.10
2010-01-05  30.63  311.68  17.23
Manipularea datelor de tip serie de timp în Python

Normalizarea mai multor serii (2)

prices.iloc[0]
AAPL     30.57
GOOG    313.06
YHOO     17.10
Name: 2010-01-04 00:00:00, dtype: float64
normalized = prices.div(prices.iloc[0])

normalized.head(3)
                AAPL      GOOG      YHOO
Date
2010-01-04  1.000000  1.000000  1.000000
2010-01-05  1.001963  0.995592  1.007602
2010-01-06  0.985934  0.970517  1.004094
  • .div(): alinierea automată a indexului Seriei cu coloanele DataFrame-ului
Manipularea datelor de tip serie de timp în Python

Compararea cu un benchmark (1)

index = pd.read_csv('benchmark.csv', parse_dates=['date'], index_col='date')

index.info()
DatetimeIndex: 1826 entries, 2010-01-01 to 2016-12-30
Data columns (total 1 columns):
SP500    1762 non-null float64
dtypes: float64(1)
prices = pd.concat([prices, index], axis=1).dropna()

prices.info()
DatetimeIndex: 1761 entries, 2010-01-04 to 2016-12-30
Data columns (total 4 columns):
AAPL     1761 non-null float64
GOOG     1761 non-null float64
YHOO     1761 non-null float64
SP500    1761 non-null float64
dtypes: float64(4)
Manipularea datelor de tip serie de timp în Python

Compararea cu un benchmark (2)

prices.head(1)
             AAPL    GOOG   YHOO    SP500
2010-01-04  30.57  313.06  17.10  1132.99
normalized = prices.div(prices.iloc[0]).mul(100)

normalized.plot()

Compararea tendințelor seriilor de timp

Manipularea datelor de tip serie de timp în Python

Reprezentarea grafică a diferenței de performanță

diff = normalized[tickers].sub(normalized['SP500'], axis=0)
                GOOG      YHOO      AAPL
2010-01-04  0.000000  0.000000  0.000000
2010-01-05 -0.752375  0.448669 -0.115294
2010-01-06 -3.314604  0.043069 -1.772895
  • .sub(..., axis=0): Scade o Serie din fiecare coloană a DataFrame-ului prin alinierea indexurilor
Manipularea datelor de tip serie de timp în Python

Reprezentarea grafică a diferenței de performanță

diff.plot()

Diferența de performanță între serii de timp

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