#importar los paquetes que se van a usar
import pandas as pd
import pandas_datareader.data as web
import numpy as np
import datetime
from datetime import datetime
import scipy.stats as stats
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#algunas opciones para Python
pd.set_option('display.notebook_repr_html', False)
pd.set_option('display.max_columns', 6)
pd.set_option('display.max_rows', 10)
pd.set_option('display.width', 78)
pd.set_option('precision', 3)

"""
Explanation: Clase 2: Visualización de problemas financieros
Juan Diego Sánchez Torres, 
Profesor, MAF ITESO

Departamento de Matemáticas y Física
dsanchez@iteso.mx
Tel. 3669-34-34 Ext. 3069
Oficina: Cubículo 4, Edificio J, 2do piso

1. Repaso del uso de Pandas para descargar datos financieros
En primer lugar, para poder bajar precios de Yahoo, es necesario cargar algunos paquetes de Python. En este caso, el paquete principal será Pandas. También, se usarán el Scipy y el Numpy para las matemáticas necesarias y, el Matplotlib y el Seaborn para hacer gráficos de las series de datos.
End of explanation
"""


#Descargar datos de Yahoo! finance
#Tickers 
tickers = ['AA','AAPL','MSFT', '^GSPC']
# Fuente
data_source = 'yahoo'
# Fechas: desde 01/01/2014 hasta 12/31/2016.
start_date = '2014-01-01'
end_date = '2016-12-31'
# Usar el pandas data reader. El comando sort_index ordena los datos por fechas
assets = (web.DataReader(tickers, data_source, start_date, end_date)).sort_index('major_axis')
assets

"""
Explanation: Una vez cargados los paquetes, es necesario definir los tickers de las acciones que se usarán, la fuente de descarga (Yahoo en este caso, pero también se puede desde Google) y las fechas de interés. Con esto, la función DataReader del paquete pandas_datareader bajará los precios solicitados.
Nota: Usualmente, las distribuciones de Python no cuentan, por defecto, con el paquete pandas_datareader. Por lo que será necesario instalarlo aparte. El siguiente comando instala el paquete en Anaconda:
*conda install -c conda-forge pandas-datareader *
End of explanation
"""


allA=assets['Adj Close']
R = ((allA - allA.shift(1))/allA)[1:]
r=np.log(1+R)

R.describe()

min_periods = 180
vol = R.rolling(window=min_periods).std()*np.sqrt(min_periods)
vol.plot(figsize=(8, 6));

rolling_corr =R['AAPL'].rolling(window=180).corr(R['MSFT']).dropna()
rolling_corr.plot(figsize=(8, 6));

f, axes = plt.subplots(2, 2, figsize=(15, 7), sharex=True)
# Plot a simple histogram with binsize determined automatically
sns.distplot(R['AA'], color="b", fit=stats.norm, norm_hist=True, ax=axes[0, 0])
sns.distplot(R['AAPL'], color="r", fit=stats.norm, norm_hist=True, ax=axes[0, 1])
sns.distplot(R['MSFT'], color="g", fit=stats.norm, norm_hist=True, ax=axes[1, 0])
sns.distplot(R['^GSPC'], color="m", fit=stats.norm, norm_hist=True, ax=axes[1, 1])
plt.tight_layout()

sns.set(style="ticks")
sns.pairplot(R);

sns.jointplot("MSFT", "MSFT",data=R, color="k").plot_joint(sns.kdeplot, zorder=0, n_levels=60);

sns.jointplot("AA", "MSFT",data=R, color="k").plot_joint(sns.kdeplot, zorder=0, n_levels=60);

sns.jointplot("AAPL", "MSFT",data=R, color="k").plot_joint(sns.kdeplot, zorder=0, n_levels=60);

sns.jointplot("^GSPC", "MSFT",data=R, color="k").plot_joint(sns.kdeplot, zorder=0, n_levels=60);

sns.lmplot(x="AA", y="MSFT", truncate=True, size=5, data=R);

sns.lmplot(x="AAPL", y="MSFT", truncate=True, size=5, data=R);

sns.lmplot(x="^GSPC", y="MSFT", truncate=True, size=5, data=R);

g = sns.PairGrid(R, y_vars=["MSFT"], x_vars=["AA", "AAPL", "^GSPC"], size=4)
g.map(sns.regplot, color=".3");

"""
Explanation: Nota: Para descargar datos de la bolsa mexicana de valores (BMV), el ticker debe tener la extensión MX. 
Por ejemplo: MEXCHEM.MX, LABB.MX, GFINBURO.MX y GFNORTEO.MX.
2. Gráficos útiles de los rendimientos
Se calculan los rendimientos de todos los activos considerados. De nuevo, para una sucesión de precios ${S_t}{t=0}^{n}$, el rendimiento simple $R_t$ se define como el el cambio porcentual
$$
R_t=\frac{S_t-S{t-1}}{S_{t-1}}
$$
para $t=1,\ldots,n$.
Otro rendimiento usado con frecuencia es el rendimiento continuamente compuesto o rendimiento logaritmico. Éste, está definido como
$$
r_t=\ln(1+R_t)
$$
donde $R_t$ es el rendimiento simple. Es fácil darse cuenta que $r_t=\ln\left(\frac{S_t}{S_{t-1}}\right)$.
End of explanation
"""


