<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Aplicando Python para análisis de precios
Step1:  Para leer archivos .csv, utilizaremos la función pd.read_csv...
Step2:  Acá hay varias cosas por notar.
Quisieramos indizar por fecha.
Para nuestra aplicación solo nos interesan los precios de cierre de las acciones (columna Adj_Close).
Step3:  Ahora, grafiquemos...
Step4:  Actividad. Importen todos los archivos .csv como acabamos de hacerlo con el de apple. Además, crear un solo DataFrame que cuyos encabezados por columna sean los nombres respectivos (AAPL, AMZN,...) y contengan los datos de precio de cierre.
Step5:  2. Descargar directamente los datos
Para esto utilizaremos el paquete pandas_datareader.
Nota
Step6:  Utilizaremos la función data.DataReader...
Step7:  ¿Qué contiene esta variable?
Step8:  Como antes, solo nos interesan los precios de cierre ajustados...
Step9:  Reordenamos las fechas...
Step10:  Las fechas para las que no se tienen datos quedan marcadas con ǸaN
Step11:  Una vez tenemos los datos, podemos operar con ellos. Por ejemplo un resumen de datos estadísticos se podría obtener con
<ASSISTANT_TASK:>
Python Code:
# Importamos pandas
import pandas as pd
Explanation: Aplicando Python para análisis de precios: manejando, organizando y bajando datos con pandas
<img style="float: left; margin: 0px 0px 15px 15px;" src="https://upload.wikimedia.org/wikipedia/commons/8/86/Microsoft_Excel_2013_logo.svg" width="400px" height="125px" />
<img style="float: right; margin: 0px 0px 15px 15px;" src="https://upload.wikimedia.org/wikipedia/commons/0/0a/Python.svg" width="400px" height="125px" />
En esta y en las siguientes dos clases veremos un caso de aplicación de simulación montecarlo en la toma de decisiones. Para lograr este objetivo, primero veremos (en esta clase) como manipular datos con pandas, tanto desde un archivo local de excel como remotamente desde Yahoo Finance.
Python Data Analysis Library: pandas es una librería de código abierto, fácil de usar y que provee alto rendimiento en structuras de datos y herramientas de análisis de datos para el lenguaje de programación Python.
Referencias:
- http://pandas.pydata.org/
- http://www.learndatasci.com/python-finance-part-yahoo-finance-api-pandas-matplotlib/
- https://www.datacamp.com/community/tutorials/python-excel-tutorial
1. Importar datos desde holas de cálculo (como las de excel)
1.1. ¿Porqué hojas de cálculo?
Seguramente todos han trabajado con hojas de cálculo de excel, almenos para cosas básicas.
Esta herramienta nos ayuda a organizar, analizar y guardar datos en tablas.
Este software es ampliamente usado en distintos campos de aplicación en todo el mundo.
Nos guste o no, esto también aplica a ciencia de datos (ingeniería financiera).
Muchos de ustedes en su futuro académico y profesional tendrán que trabajar con estas hojas de cálculo, pero no siempre querrán trabajar directamente con ellas si tienen que hacer un análisis un poco más avanzado de los datos.
Por eso en Python se han implementado herramientas para leer, escribir y manipular este tipo de archivos.
En esta clase veremos cómo podemos trabajar con Excel y Python de manera básica utilizando la librería pandas.
1.2. Reglas básicas para antes de leer hojas de cálculo
Antes de comenzar a leer una hoja de cálculo en Python (o cualquier otro programa), debemos considerar el ajustar nuestro archivo para cumplir ciertos principios, como:
La primer fila de la hoja de cálculo se reserva para los títulos, mientras que la primer columna se usa para identificar la unidad de muestreo o indización de los datos (tiempo, fecha, eventos...)
Evitar nombres, valores o campos con espacios en blanco. De otra manera, cada palabra se interpreta como variable separada y resultan errores relacionados con el número de elementos por línea. Para esto usar buscar y reemplazar con guiones bajos, puntos, etcétera.
Los nombres cortos se prefieren sobre nombre largos.
Evite símbolos como ?, $,%, ^, &, *, (,),-,#, ?,,,<,>, /, |, \, [ ,] ,{, and }.
Borre cualquier tipo de comentario que haya hecho en su archivo para evitar columnas extras.
Asegúrese de que cualquier valor inexistente esté indicado como NA.
Si se hizo algún cambio, estar seguro de guardarlo. 
Si estás trabajando con Microsoft Excel, verás que hay muchas opciones para guardar archivos, a parte de las extensiones por defecto .xls or .xlsx. Para esto ir a “Save As” y seleccionar una de las extensiones listadas en “Save as Type”. 
La extensión más común es .csv (archivos de texto separados por comas).
Actividad. Descargar precios de acciones de Apple (AAPL), Amazon (AMZN), Microsoft (MSFT) y NVIDIA (NVDA) de Yahoo Finance, con una ventana de tiempo desde el 01-01-2011 al 31-12-2016 y frecuencia diaria.
Ir a https://finance.yahoo.com/.
Buscar cada una de las compañías solicitadas.
Dar click en la pestaña 'Historical Data'.
Cambiar las fechas en 'Time Period', click en 'Apply' y, finalmente, click en 'Download Data'.
¡POR FAVOR! GUARDAR ESTOS ARCHIVOS EN UNA CARPETA LLAMADA precios EN EL MISMO DIRECTORIO DONDE TIENEN ESTE ARCHIVO.
Luego de esto, seguir las indicaciones dadas en 1.2.
1.3. Carguemos archivos .csv como ventanas de datos de pandas
Ahora podemos comenzar a importar nuestros archivos.
Una de las formas más comunes de trabajar con análisis de datos es en pandas. Esto es debido a que pandas está construido sobre NumPy y provee estructuras de datos y herramientas de análisis fáciles de usar.
End of explanation
help(pd.read_csv)
# Cargamos hoja de calculo en un dataframe
# file_apple = '/home/esteban/AnacondaProjects/Simulacion2017/Modulo2/precios/AAPL.csv'
file_apple = 'precios/AAPL.csv'
df_apple = pd.read_csv(file_apple)
df_apple
Explanation: Para leer archivos .csv, utilizaremos la función pd.read_csv...
End of explanation
# Cargamos hoja de calculo en un dataframe
file_apple = 'precios/AAPL.csv'
df_apple = pd.read_csv(file_apple, index_col='Date', usecols=['Date', 'Adj_Close'])
df_apple
Explanation: Acá hay varias cosas por notar.
Quisieramos indizar por fecha.
Para nuestra aplicación solo nos interesan los precios de cierre de las acciones (columna Adj_Close).
End of explanation
import matplotlib.pyplot as plt
%matplotlib inline
df_apple.plot(figsize=(8,6));
Explanation: Ahora, grafiquemos...
End of explanation
file_amazon = 'precios/AMZN.csv'
file_microsoft = 'precios/MSFT.csv'
file_nvidia = 'precios/NVDA.csv'
df_amazon = pd.read_csv(file_amazon, index_col='Date', usecols=['Date', 'Adj_Close'])
df_microsoft = pd.read_csv(file_microsoft, index_col='Date', usecols=['Date', 'Adj_Close'])
df_nvidia = pd.read_csv(file_nvidia, index_col='Date', usecols=['Date', 'Adj_Close'])
closes = pd.DataFrame(index=df_amazon.index, columns=['AAPL', 'AMZN', 'MSFT', 'NVDA'])
closes.index.name = 'Date'
closes['AAPL'] = df_apple
closes['AMZN'] = df_amazon
closes['MSFT'] = df_microsoft
closes['NVDA'] = df_nvidia
closes
closes.plot(figsize=(8,6));
Explanation: Actividad. Importen todos los archivos .csv como acabamos de hacerlo con el de apple. Además, crear un solo DataFrame que cuyos encabezados por columna sean los nombres respectivos (AAPL, AMZN,...) y contengan los datos de precio de cierre.
End of explanation
from pandas_datareader import data
Explanation: 2. Descargar directamente los datos
Para esto utilizaremos el paquete pandas_datareader.
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
Anaconda prompt
https://pandas-datareader.readthedocs.io/en/latest/
End of explanation
help(data.DataReader)
# Definimos los instrumentos que vamos a descargar. Como antes tendremos Apple, Amazon, Microsoft y Nvidia.
tickers = ['AAPL', 'AMZN', 'MSFT', 'NVDA']
# Definimos que fuente online vamos a usar (yahoo finance)
data_source = 'yahoo'
# Queremos los datos desde 01/01/2011 hasta 31/12/2016.
start_date = '2011-01-01'
end_date = '2016-12-31'
# Usamos la función DataReader. Si, así de fácil...
panel_data = data.DataReader(tickers, data_source, start_date, end_date)
Explanation: Utilizaremos la función data.DataReader...
End of explanation
panel_data
Explanation: ¿Qué contiene esta variable?
End of explanation
# Notar que los índices se indican como Major_axis
closes = panel_data.ix['Adj Close']
closes
Explanation: Como antes, solo nos interesan los precios de cierre ajustados...
End of explanation
# Generamos todas los días entre las fechas dadas
all_weekdays = pd.date_range(start=start_date, end=end_date, freq='B')
# Reindizamos en este orden
closes = closes.reindex(all_weekdays)
closes
Explanation: Reordenamos las fechas...
End of explanation
# Se verán 'huecos' en la gráfica
closes.plot(figsize=(8,6));
# Llenamos los huecos con el precio de cierre del día anterior
closes = closes.fillna(method='ffill')
closes
# Gráfico limpio...
closes.plot(figsize=(8,6));
Explanation: Las fechas para las que no se tienen datos quedan marcadas con ǸaN
End of explanation
closes.describe()
Explanation: Una vez tenemos los datos, podemos operar con ellos. Por ejemplo un resumen de datos estadísticos se podría obtener con
End of explanation
<END_TASK>