In [1]:
MY_VERSION = 1,0
import sys
import datetime
import numpy as np
import pandas as pd
import pandas_datareader as pdr
import pandas_datareader.data as pdr_web
import quandl as ql
from matplotlib import __version__ as matplotlib_version
from seaborn import __version__ as seaborn_version
# Load Quandl API key
import json
with open('quandl_key.json','r') as f:
quandl_api_key = json.load(f)
ql.ApiConfig.api_key = quandl_api_key['API-key']
print('Verze notebooku:', '.'.join(map(str, MY_VERSION)))
print('Verze pythonu:', ".".join(map(str, sys.version_info[0:3])))
print('---')
print('NumPy:', np.__version__)
print('Pandas:', pd.__version__)
print('pandas-datareader:', pdr.__version__)
print('Quandl:', ql.version.VERSION)
print('Matplotlib:', matplotlib_version)
print('Seaborn:', seaborn_version)
In [2]:
start_date = datetime.datetime(2005, 1, 1)
end_date = datetime.datetime(2008, 6, 1)
data = pdr_web.DataReader("NYSEARCA:USO", 'google', start=start_date, end=end_date)
data.head()
Out[2]:
In [3]:
import matplotlib.pyplot as plt
#data['Close'].plot()
data['Close'].plot(figsize=(18, 7), grid=True)
plt.show()
Knihovna seaborn
je nadstavba nad knihovou matplotlib
, která poskytuje graficky přehlednější vzhled pro statistická data. Internetové stránky projektu Seaborn.
Ke zjištění denní procentní změny lze použít funkci pct_change
, kterou lze nalézt v dokumentaci.
In [4]:
daily_pct_change = data['Close'].pct_change()
# nahrazení hodnota NA za nulu
daily_pct_change.fillna(0, inplace=True)
daily_pct_change.head()
Out[4]:
Pro lepší přehled výnosů v čase se bude hodit růst v logaritmickém měřítku. Využije se zde knihovny NumPy
a její funkce log
.
In [5]:
#daily_log_returns = np.log(data['Close'].pct_change()+1)
daily_log_returns = np.log(daily_pct_change+1)
daily_log_returns.head()
Out[5]:
In [6]:
monthly = data.resample('BM').apply(lambda x: x[-1])
monthly_pct = monthly['Close'].pct_change()
print(monthly_pct.head())
quarter = data.resample("4M").mean()
quarter_pct = quarter.pct_change()
quarter_pct.head()
Out[6]:
In [7]:
daily_pct_change = data['Close'] / data['Close'].shift(1) - 1
print(daily_pct_change.head())
daily_log_returns_shift = np.log(data['Close'] / data['Close'].shift(1))
daily_log_returns_shift.head()
Out[7]:
In [8]:
# bins = počet zobrazených hodnot/sloupců, což určuje jemnost grafu
daily_pct_change.hist(bins=50)
plt.show()
print(daily_pct_change.describe())
Je užitečná pro stanovení hodnoty investice v pravidelných intervalech a vypočítá ji funkce cumprod
, dokumentace k cumprod
.
In [9]:
cum_daily_return = (1 + daily_pct_change).cumprod()
print(cum_daily_return.tail())
In [10]:
cum_daily_return.plot(figsize=(12,6))
plt.show()
Nebo na měsíční kumulatvní návratnost
In [11]:
cum_monthly_return = cum_daily_return.resample("M").mean()
cum_monthly_return.plot(figsize=(12,6))
plt.show()
Matplotlib je velmi mocný nástroj pro zobrazování grafů, kde Seaborn vylepšuje jeho vzhled statistických údajů. Výhoda pandas je, že již obsahuje vestavěné funkce, které dělají zobrazování dat ještě jednodušší.