Mit tanulunk ma?

Az idősoros elemzés olyan technika, amely idősoros adatokkal foglalkozik. Ez egy speciális módszer az idők során összegyűjtött adatpontok sorozatának elemzésére. Megismerjük az idősorelemzésben használt Panda módszereket.

Miért fontos tanulni?

Az idősorelemzés segít a minták azonosításában. Statisztikában, jelfeldolgozásban, mintafelismerésben, földrengés-előrejelzésben és időjárás-előrejelzésben is használják. A jó előrejelzés előre jelezheti, hogy az adatok milyen irányba változnak.

Hogyan fogjuk elérni a mai tanulási célt?

A mai terv a következő:

  • Időintervallum
  • Különbség a dátumokban
  • Frekvenciaváltás
  • Változás
  • Időzónák

Importáljuk a Pandas könyvtárat.

Bemenet

import pandas as pd

Töltsük be az almaállomány adatkészletét (aapl.csv), amely letölthető innen.

Bemenet

df = pd.read_csv(‘Your File path/aapl.csv’, parse_dates=[‘Date’])

Tekintse át az első néhány sort

Bemenet

df.head()

Kimenet

Tekintse át az oszlopok adattípusát.

Bemenet

df.info()

Kimenet

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 22 entries, 0 to 21
Data columns (total 6 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   Date    22 non-null     object 
 1   Open    22 non-null     float64
 2   High    22 non-null     float64
 3   Low     22 non-null     float64
 4   Close   22 non-null     float64
 5   Volume  22 non-null     int64  
dtypes: float64(4), int64(1), object(1)
memory usage: 1.2+ KB

Amint látjuk, a Dátum oszlop objektum típusú. Az idősor elemzéséhez módosítanunk kell a DateTime adattípusra.

Átadjuk a parse_dates paramétert, és hozzárendeljük a Dátum oszlopot a konverzióhoz.

Bemenet

df = pd.read_csv(‘Your File Path/aapl.csv’, parse_dates=[‘Date’])

Tekintse át az oszlopok adattípusát. Most a Dátum oszlop a DateTime típussal jelenik meg.

Kimenet

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 22 entries, 0 to 21
Data columns (total 6 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   Date    22 non-null     datetime64[ns]
 1   Open    22 non-null     float64       
 2   High    22 non-null     float64       
 3   Low     22 non-null     float64       
 4   Close   22 non-null     float64       
 5   Volume  22 non-null     int64         
dtypes: datetime64[ns](1), float64(4), int64(1)
memory usage: 1.2 KB

Időintervallum

A pandáknál a date_range() egy rögzített gyakoriságú DatetimeIndex visszaadására szolgál. Ezzel a módszerrel idősoros indexet adhatunk egy adatkészlethez. Alapértelmezés szerint a nap gyakoriságát mutatja.

Hozzunk létre egy dátumtartományt.

Bemenet

range1 = pd.date_range(start=’6–1–2021', end=’6–30–2021')
range1

Kimenet

DatetimeIndex(['2021-06-01', '2021-06-02', '2021-06-03', '2021-06-04',
               '2021-06-05', '2021-06-06', '2021-06-07', '2021-06-08',
               '2021-06-09', '2021-06-10', '2021-06-11', '2021-06-12',
               '2021-06-13', '2021-06-14', '2021-06-15', '2021-06-16',
               '2021-06-17', '2021-06-18', '2021-06-19', '2021-06-20',
               '2021-06-21', '2021-06-22', '2021-06-23', '2021-06-24',
               '2021-06-25', '2021-06-26', '2021-06-27', '2021-06-28',
               '2021-06-29', '2021-06-30'],
              dtype='datetime64[ns]', freq='D')

Ha a gyakoriságot csak munkanapokra szeretnénk módosítani.

Bemenet

range2 = pd.date_range(start=’6–1–2021', end=’6–30–2021', freq=’B’)
range2

Kimenet

DatetimeIndex(['2021-06-01', '2021-06-02', '2021-06-03', '2021-06-04',
               '2021-06-07', '2021-06-08', '2021-06-09', '2021-06-10',
               '2021-06-11', '2021-06-14', '2021-06-15', '2021-06-16',
               '2021-06-17', '2021-06-18', '2021-06-21', '2021-06-22',
               '2021-06-23', '2021-06-24', '2021-06-25', '2021-06-28',
               '2021-06-29', '2021-06-30'],
              dtype='datetime64[ns]', freq='B')

Most alkalmazzuk a munkanapok gyakoriságát egy időbélyeg nélküli adatkészletre – töltse le az adatkészletet itt.

Bemenet

df = pd.read_csv(‘Your File Path Here/aapl_no_dates.csv’
df.head()

Kimenet

Most hozzáadhatja a tartomány2 értéket az adatkészlet indexeként.

Bemenet

df.set_index(range2, inplace=True)

Kimenet

Különbség

Tegyük fel, hogy látni akarjuk a dátumok különbségét, vagy bizonyos napokat szeretnénk kivonni az adatkészletből. Ebből a célból a különbség módszer segítségével megkapjuk a különbséget két frekvencia között.

Vegyük ki a hétvégi napokat az aapl.csv adatkészletünkből. Eldobjuk a Dátum oszlopot, és az indexet tartomány2 értékre állítjuk be, amely csak a munkanapok gyakoriságát tartalmazza.

Bemenet

df = pd.read_csv(‘/content/drive/MyDrive/Article upload/dataset/aapl.csv’)
df.set_index(range2, inplace=True)
df.drop(columns=’Date’, inplace=True)
df

Kimenet

Most pedig vesszük a különbséget

Bemenet

range1.difference(df.index)

Kimenet

DatetimeIndex(['2021-06-05', '2021-06-06', '2021-06-12', '2021-06-13',
               '2021-06-19', '2021-06-20'],
              dtype='datetime64[ns]', freq=None)

Ha látjuk a fenti kimenetet, akkor a hétvégi napok dátumait kapjuk.

Frekvenciaváltás

Az asfreq() metódus a TimeSeries-t meghatározott gyakoriságra konvertálja. Változtassuk meg az adatkészletünket óránkénti gyakoriságra. De kérdezheti, nincs óránkénti adatunk. Ez a módszer egy kitöltési módszert ad a hiányzó értékek betáplálására/hátsó kitöltésére és az átlagos előretöltés elhelyezésére.

Tehát tegyük az adatokat órafrekvenciává a H-ra állított freq paraméter segítségével, ami órát jelent.

Input
df.asfreq(‘H’, method=’pad’)

Kimenet

Változás

A Pandas shift() metódusa az idősorok értékeinek előre-hátra tolására szolgál. Újra betöltjük az almakészlet adatait, beállítjuk a Dátum oszlopot indexként, és az egyszerűség kedvéért csak a Megnyitás és a Dátum oszlopokat használjuk. .

Bemenet

df2 = pd.read_csv(‘Your File Path /aapl.csv’, parse_dates=[‘Date’], index_col=’Date’, usecols=[‘Date’, ‘Open’])
df2.head()

Kimenet

Az adatokat (Megnyitás oszlop) eltolja az első napon.

Bemenet

df2.shift(1)

Kimenet

A -1 módszert a shiftre adjuk át, ha egy nappal vissza akarunk lépni.

Bemenet

df2.shift(-1)

Kimenet

Hozzáadunk egy PreviousDay_openval nevű oszlopot, és megtaláljuk a napi árkülönbséget.

Bemenet

df2[‘PreviousDay_openval’] = df2.shift(1)
df2

Kimenet

Most vegyük a különbséget

Bemenet

df2[‘Price Change’] = df2[‘Open’] — df2[‘PreviousDay_openval’] # Taking a difference
df2

Kimenet

Időzónák

A tz_localize() metódus a Dátum-idő indexet időzóna-tudatos dátum-idő indexré alakítja.

Alakítsuk át az adatkeretindexet US/Eastern-re.

Input
df.tz_localize(tz=’US/Eastern’)

Kimenet

Bemenet

df.index = df.index.tz_localize(tz=’US/Eastern’)
df.index
df.head()

Kimenet

A tz_convert() módszer a tz-awareDatetime Indexet egyik időzónából a másikba konvertálja. Konvertáljuk az adatkeretet „Amerika/Los_Angeles” időzónává.

Bemenet

df = df.tz_convert(‘America/Los_Angeles’)
df

Kimenet

Figyelje meg, hogy az órák és percek nem maradnak el 3 órával a keleti időzónához képest.