Quandl-esimerkkejä

https://www.quandl.com/ on hyvä esimerkki palvelusta, joka tarjoaa aikasarjoja valmiiksi käyttökelpoisessa muodossa. Osa aikasarjoista on ilmaiseksi käytettävissä, osa taas maksullisia. Aikasarjojen käyttämiseksi sinun pitää rekisteröityä palvelun käyttäjäksi.

Quandl tarjoaa kunkin aikasarjan kohdalla valmiin Python-komennon aikasarjan lataamiseksi. Voit kopioida ja liittää komennon koodiisi.

Aina suorittaessasi koodin saat käyttöösi tuoreimmat tiedot aikasarjasta.

Tämän notebookin koodit eivät toimi ilman henkilökohtaista api_key-tunnusta!

In [28]:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

import quandl #toimii, jos quandl on asennettu
quandl.ApiConfig.api_key = '????' #tähän tarvitaan oma henkilökohtainen API-key

Öljyn hinta

Esimerkiksi öljyn hinnat löydät rekisteröityneenä käyttäjänä osoitteesta https://www.quandl.com/data/OPEC/ORB

In [29]:
#Öljyn hinta:
oil= quandl.get("OPEC/ORB")
oil.head()
Out[29]:
Value
Date
2003-01-02 30.05
2003-01-03 30.83
2003-01-06 30.71
2003-01-07 29.72
2003-01-08 28.86
In [30]:
#Öljyn hintakehitys kuviona:
oil.plot()
Out[30]:
<matplotlib.axes._subplots.AxesSubplot at 0x14666eacd08>
In [31]:
#Öljyn hintakehitys viime aikoina:
oil['2019':].plot()
Out[31]:
<matplotlib.axes._subplots.AxesSubplot at 0x14666de4548>

Metallien hintoja

Palladiumin hinnat osoitteessa https://www.quandl.com/data/LPPM/PALL
Platinan hinnat osoitteessa https://www.quandl.com/data/LPPM/PLAT

In [32]:
pall=quandl.get("LPPM/PALL")
pall.head()
Out[32]:
USD AM EUR AM GBP AM USD PM EUR PM GBP PM
Date
1990-04-02 128.00 NaN 78.70 127.65 NaN 78.55
1990-04-03 128.35 NaN 78.60 128.50 NaN 78.75
1990-04-04 128.35 NaN 78.25 128.00 NaN 77.90
1990-04-05 128.40 NaN 78.00 127.75 NaN 77.65
1990-04-06 128.75 NaN 78.45 128.50 NaN 78.40
In [33]:
plat=quandl.get("LPPM/PLAT")
plat.head()
Out[33]:
USD AM EUR AM GBP AM USD PM EUR PM GBP PM
Date
1990-04-02 471.00 NaN 289.65 470.50 NaN NaN
1990-04-03 475.80 NaN 291.35 477.25 NaN NaN
1990-04-04 475.70 NaN 289.95 476.75 NaN NaN
1990-04-05 481.75 NaN 292.60 481.85 NaN NaN
1990-04-06 481.00 NaN 293.10 480.25 NaN NaN
In [34]:
plat['USD AM'].plot()
Out[34]:
<matplotlib.axes._subplots.AxesSubplot at 0x14666f3e348>
In [35]:
pall['USD AM'].plot()
Out[35]:
<matplotlib.axes._subplots.AxesSubplot at 0x14667391508>
In [36]:
#Palladiumin ja platinan EUR_AM hinnat samaan dataframeen:
pall_plat=pd.concat([pall['USD AM'], plat['USD AM']], axis=1)

pall_plat.columns=['Palladium', 'Platinum']

pall_plat.plot()
Out[36]:
<matplotlib.axes._subplots.AxesSubplot at 0x14667065c88>

Osakkeiden hintoja

In [37]:
microsoft=quandl.get("EOD/MSFT")
microsoft.head()
Out[37]:
Open High Low Close Volume Dividend Split Adj_Open Adj_High Adj_Low Adj_Close Adj_Volume
Date
2013-09-03 31.7500 32.07 31.29 31.880 154507000.0 0.0 1.0 27.539642 27.817207 27.140643 27.652403 154507000.0
2013-09-04 31.3900 31.47 31.11 31.195 142320600.0 0.0 1.0 27.227382 27.296773 26.984512 27.058240 142320600.0
2013-09-05 31.1000 31.44 30.95 31.235 71644900.0 0.0 1.0 26.975838 27.270751 26.845730 27.092936 71644900.0
2013-09-06 31.3100 31.39 31.13 31.152 75434900.0 0.0 1.0 27.157990 27.227382 27.001860 27.020943 75434900.0
2013-09-09 31.2208 31.79 31.20 31.655 49628500.0 0.0 1.0 27.080619 27.574338 27.062577 27.457240 49628500.0
In [38]:
microsoft['Close'].plot()

#Liukuva keskiarvo:
microsoft['Close'].rolling(250).mean().plot()
Out[38]:
<matplotlib.axes._subplots.AxesSubplot at 0x14667229508>
In [39]:
#Vuoden 2015 alusta:
microsoft['Close']['2015':].plot()

microsoft['Close']['2015':].rolling(250).mean().plot()
Out[39]:
<matplotlib.axes._subplots.AxesSubplot at 0x14667298e48>
In [40]:
#Kuukausikeskiarvot:
microsoft['Close']['2015':].resample('BM').mean().plot()
Out[40]:
<matplotlib.axes._subplots.AxesSubplot at 0x146671b7dc8>
In [41]:
#Kuukauden viimeisen päivän hinnat:
microsoft['Close']['2015':].asfreq('BM').plot()
Out[41]:
<matplotlib.axes._subplots.AxesSubplot at 0x146673d6748>
In [42]:
#Applen osake samaan dataframeen Microsoftin kanssa:
apple=quandl.get("EOD/AAPL")

mi_ap=pd.concat([microsoft['Close']['2015':], apple['Close']['2015':]], axis=1)

mi_ap.columns=['Microsoft', 'Apple']

mi_ap.head()
Out[42]:
Microsoft Apple
Date
2015-01-02 46.760 109.33
2015-01-05 46.325 106.25
2015-01-06 45.650 106.26
2015-01-07 46.230 107.75
2015-01-08 47.590 111.89
In [43]:
mi_ap.plot()
Out[43]:
<matplotlib.axes._subplots.AxesSubplot at 0x14668459988>
In [44]:
#Muutosprosentit
mi_ap['mic muutos']=mi_ap['Microsoft'].pct_change()
mi_ap['app muutos']=mi_ap['Apple'].pct_change()
mi_ap.head()
Out[44]:
Microsoft Apple mic muutos app muutos
Date
2015-01-02 46.760 109.33 NaN NaN
2015-01-05 46.325 106.25 -0.009303 -0.028172
2015-01-06 45.650 106.26 -0.014571 0.000094
2015-01-07 46.230 107.75 0.012705 0.014022
2015-01-08 47.590 111.89 0.029418 0.038422
In [45]:
#Liukuva korrelaatio Microsoftin ja Applen muutosprosenteille:
corr=mi_ap['mic muutos'].rolling(100, min_periods=30).corr(mi_ap['app muutos'])
corr.plot()
Out[45]:
<matplotlib.axes._subplots.AxesSubplot at 0x146684b8188>
In [46]:
#Pitkän aikavälin korrelaatio:
mi_ap[['mic muutos','app muutos']].corr()
Out[46]:
mic muutos app muutos
mic muutos 1.00000 0.49534
app muutos 0.49534 1.00000

Aikasarjojen tallentaminen Exceliin

In [47]:
walt_disney=quandl.get("EOD/DIS")
In [48]:
#Yhdistän kolmen osakkeen tiedot samaan dataframeen:
mi_ap_wa=pd.concat([microsoft['Close'], apple['Close'], walt_disney['Close']], axis=1)

mi_ap_wa.columns=['Microsoft', 'Apple', 'Walt Disney']

mi_ap_wa.plot()
Out[48]:
<matplotlib.axes._subplots.AxesSubplot at 0x1466861de88>
In [49]:
#Exceliin:
writer = pd.ExcelWriter('mi_ap_wp.xlsx', engine='xlsxwriter')
mi_ap_wa.to_excel(writer, sheet_name = 'aikasarjat')
writer.save()