<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Analýza časových řad 2 - výnosy a vizualizace
Informace o notebooku a modulech
Step1:  Seznam zdrojů
Step2:  Základní vizualizace dat
Pandas má integrovanou funkcionalitu s matplotlib, vizualizace dat je pak velmi jednoduchá.
Step3:  Knihovna seaborn je nadstavba nad knihovou matplotlib, která poskytuje graficky přehlednější vzhled pro statistická data. Internetové stránky projektu Seaborn.
Denní změna v procentech
Ke zjištění denní procentní změny lze použít funkci pct_change, kterou lze nalézt v dokumentaci.
Step4:  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.
Step5:  Změna v procentech pro jiné období
Nejprve pomocí funkce resample získám vzorek dat po měsíci, pak mohu zjistit procentní změnu přes pct_change.
Step6:  Alternativa k pct_change
Někdy ale nemusí být zcela jasné, jak pct_change změnu počítá, tak přichází na řadu funkce shift.
Step7:  Graf distribuce denního procentního zhodnocení
Funkce hist připraví graf histogramu z matplotlib. Funkce describe v podstatě popisuje tento histogram.
Step8:  Kumulativní denní míra návratnosti/rentabilita
Je užitečná pro stanovení hodnoty investice v pravidelných intervalech a vypočítá ji funkce cumprod, dokumentace k cumprod.
Step9:  Nebo na měsíční kumulatvní návratnost
<ASSISTANT_TASK:>
Python Code:
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)
Explanation: Analýza časových řad 2 - výnosy a vizualizace
Informace o notebooku a modulech
End of explanation
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()
Explanation: Seznam zdrojů:
Pandas - manipulace a analýza dat
pandas-datareader
Seznam všech webových zdrojů v pandas-datareader
Python For Finance: Algorithmic Trading
Quandl
ETF trhy - finančník
Matplotlib
Seaborn
Data ETF trhu americké ropy
End of explanation
import matplotlib.pyplot as plt
#data['Close'].plot()
data['Close'].plot(figsize=(18, 7), grid=True)
plt.show()
Explanation: Základní vizualizace dat
Pandas má integrovanou funkcionalitu s matplotlib, vizualizace dat je pak velmi jednoduchá.
End of explanation
daily_pct_change = data['Close'].pct_change()
# nahrazení hodnota NA za nulu
daily_pct_change.fillna(0, inplace=True)
daily_pct_change.head()
Explanation: Knihovna seaborn je nadstavba nad knihovou matplotlib, která poskytuje graficky přehlednější vzhled pro statistická data. Internetové stránky projektu Seaborn.
Denní změna v procentech
Ke zjištění denní procentní změny lze použít funkci pct_change, kterou lze nalézt v dokumentaci.
End of explanation
#daily_log_returns = np.log(data['Close'].pct_change()+1)
daily_log_returns = np.log(daily_pct_change+1)
daily_log_returns.head()
Explanation: 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.
End of explanation
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()
Explanation: Změna v procentech pro jiné období
Nejprve pomocí funkce resample získám vzorek dat po měsíci, pak mohu zjistit procentní změnu přes pct_change.
End of explanation
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()
Explanation: Alternativa k pct_change
Někdy ale nemusí být zcela jasné, jak pct_change změnu počítá, tak přichází na řadu funkce shift.
End of explanation
# 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())
Explanation: Graf distribuce denního procentního zhodnocení
Funkce hist připraví graf histogramu z matplotlib. Funkce describe v podstatě popisuje tento histogram.
End of explanation
cum_daily_return = (1 + daily_pct_change).cumprod()
print(cum_daily_return.tail())
cum_daily_return.plot(figsize=(12,6))
plt.show()
Explanation: Kumulativní denní míra návratnosti/rentabilita
Je užitečná pro stanovení hodnoty investice v pravidelných intervalech a vypočítá ji funkce cumprod, dokumentace k cumprod.
End of explanation
cum_monthly_return = cum_daily_return.resample("M").mean()
cum_monthly_return.plot(figsize=(12,6))
plt.show()
Explanation: Nebo na měsíční kumulatvní návratnost
End of explanation
<END_TASK>