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.