<jupyter_start><jupyter_text>Revisión de código para generación de índices**Fecha:** 4 de Mayo de 2020**Responsable de revisión:** <NAME>**Código revisado**<jupyter_code>#import cupy as cp
import numpy as np
import pandas as pd
import fix_yahoo_finance as yf
import datetime
import matplotlib.pyplot as plt
import seaborn as sns
import time<jupyter_output><empty_output><jupyter_text>Extraer los datos de Yahoo FinanceTomamos 50 acciones en total, de diferentes industrias:<jupyter_code>stocks = ['COP','AMT','LIN','LMT','AMZN','WMT','JNJ','VTI','MSFT','GOOG','XOM','CCI','BHP.AX','UNP',
'BABA','NSRGY','RHHBY','VOO','AAPL','FB','CVX','PLD','RIO.L','HON','HD','PG','UNH','BRK-A','V','0700.HK',
'RDSA.AS','0688.HK','AI.PA','RTX','MC.PA','KO','PFE','JPM','005930.KS','VZ','RELIANCE.NS','DLR','2010.SR',
'UPS','7203.T','PEP','MRK','1398.HK','MA','T']
len(stocks)
df_o = yf.download(stocks, start='2015-01-01', end='2020-04-30').Open
df_o.shape
df_c = yf.download(stocks, start='2015-01-01', end='2020-04-30').Close
df_c.shape
df_c.count().describe()<jupyter_output><empty_output><jupyter_text>Como la mayoría tienen 1340 días informados, tomaremos solo eso 1340 días.<jupyter_code>base = df_c['AAPL'].dropna().to_frame()
for i in range(0,50):
    base = base.join(df_c.iloc[:,i].to_frame(), lsuffix='_caller', rsuffix='_other')
base = base.drop(columns=['AAPL_caller'])
base = base.rename(columns={"AAPL_other": "AAPL"})
base.head()
base.count().describe()
base = base.fillna(method='ffill')
base = base.fillna(method='bfill')
base.head()
base.count().describe()<jupyter_output><empty_output><jupyter_text>Ya no hay NA'sLa función queda como sigue:<jupyter_code>def extraer_datos_yahoo(stocks):
    df_c = yf.download(stocks, start='2015-01-01', end='2020-04-30').Close
    base = df_c['AAPL'].dropna().to_frame()
    for i in range(0,50):
        base = base.join(df_c.iloc[:,i].to_frame(), lsuffix='_caller', rsuffix='_other')
    base = base.drop(columns=['AAPL_caller'])
    base = base.rename(columns={"AAPL_other": "AAPL"})
    base = base.fillna(method='ffill')
    base = base.fillna(method='bfill')
    return base
datos = extraer_datos_yahoo(stocks)
datos.head()<jupyter_output><empty_output><jupyter_text>**1.Sobre la documentación del código/de la función**¿Se encuentran presentes en la implementación los siguientes elementos? Por favor, ingrese explicaciones detalladas.**a) Descripción concisa y breve de lo que hace el código/la función**La función no cuenta con descripción.**b) Descripción de sus argumentos de entrada, su significado y rango de valores que pueden tomar**Falta mencionar los argumentos, su significado y el rango de valores.**c) Descripción de los tipos de argumentos de entrada y de salida (por ejemplo, valores enteros, reales, strings, dataframe, matrices, etc)**Falta mencionar los tipos de argumentos de entrada y salida.**d) Descripción de la salida de la función, su significado y valores/objetos que deben regresa**Falta mencionar la salida de la función. **2. Cumplimiento de objetivos del código/de la función**Por favor, ingrese explicaciones detalladas.**a) ¿El código cumple los objetivos para los que fue diseñado?**Sí.**b) ¿La salida de la función genera una DataFrame de tamaño acciones $\times$ días**Sí.**b) ¿La salida de la función genera un DataFrame cuyos elementos son accesibles en coordenadas (x,y)?**Sí. **3. Pruebas**Ocupe la presente sección para hacer diseño de pruebas variando los parámetros que recibe el código la función en diferentes rangos para evaluae su comportamiento y/o detectar posibles fallos**Test 1****Objetivo del test:** Revisar la descarga con distintas conjuntos de acciones y de fechas.**Implementación del test:**<jupyter_code>stocks = ['COP','AMT','LIN','LMT','AMZN','WMT','JNJ','VTI','MSFT','GOOG','XOM','CCI','BHP.AX','UNP',
'BABA','NSRGY','RHHBY','VOO','AAPL','FB','CVX','PLD','RIO.L','HON','HD','PG','UNH','BRK-A','V','0700.HK',
'RDSA.AS','0688.HK','AI.PA','RTX','MC.PA','KO','PFE','JPM','005930.KS','VZ','RELIANCE.NS','DLR','2010.SR',
'UPS','7203.T','PEP','MRK','1398.HK','MA','T']
import random
random.seed(1234)<jupyter_output><empty_output><jupyter_text>La función únicamente funciona para las 50 acciones y está definida para un intervalo específico de fechas. Modifcamos la función para seleccionar las acciones de cualquier intervalo de tiempo.<jupyter_code>def extraer_datos_yahoo_test1(stocks, start='2015-01-01', end='2020-04-30'):
    df_c = yf.download(stocks,start,end ).Close
    base = df_c['AAPL'].dropna().to_frame()
    for i in range(0,50):
        base = base.join(df_c.iloc[:,i].to_frame(), lsuffix='_caller', rsuffix='_other')
    base = base.drop(columns=['AAPL_caller'])
    base = base.rename(columns={"AAPL_other": "AAPL"})
    base = base.fillna(method='ffill')
    base = base.fillna(method='bfill')
    return base
datos_1 = extraer_datos_yahoo_test1(stocks,start='2015-01-02', end='2020-05-05')
datos_1.head()
datos_2 = extraer_datos_yahoo_test1(stocks,start='2017-01-01', end='2019-01-01')
datos_2.head()
datos_3 = extraer_datos_yahoo_test1(stocks,start='2014-01-01', end='2019-01-01')
datos_3.head()<jupyter_output>[*********************100%***********************]  50 of 50 completed
{'fraction_non_alphanumeric': 0.1792507204610951, 'fraction_numerical': 0.04130643611911623, 'mean_word_length': 6.8521870286576165, 'pattern_counts': {'":': 3, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '66316', 'license': 'RSA-MD', 'n_tokens_mistral': 2135, 'n_tokens_neox': 1976, 'n_words': 423, 'path': 'notebooks/Revision/Revisión_1a_FunciónExtraerDatos.ipynb', 'repo_name': 'czammar/MNO_finalproject', 'size': '5209'}