<jupyter_start><jupyter_text>Taller evaluable sobre la extracción, transformación y visualización de datos usando IPython **<NAME>**   <EMAIL>  Universidad Nacional de Colombia, Sede Medellín  Facultad de Minas  Medellín, Colombia   Instrucciones En la carpeta 'Taller' del repositorio 'ETVL-IPython' se encuentran los archivos 'Precio_Bolsa_Nacional_($kwh)_'*'.xls' en formato de Microsoft Excel, los cuales contienen los precios históricos horarios de la electricidad para el mercado eléctrico Colombiano entre los años 1995 y 2017 en COL-PESOS/kWh. A partir de la información suministrada resuelva los siguientes puntos usando el lenguaje de programación Python.   Preguntas **1.--** Lea los archivos y cree una tabla única concatenando la información para cada uno de los años. Imprima el encabezamiento de la tabla usando `head()`.<jupyter_code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib inline
from metakernel import register_ipython_magics
register_ipython_magics() 
x=[]
for n in range(1995,2018):
    if n < 2000:
        skip = 3
    else: 
        skip=2
    
    nombrearchivo= 'Precio_Bolsa_Nacional_($kwh)_'+str(n)
    if n>=2016:
        nombrearchivo +='.xls'
    else:
        nombrearchivo+='.xlsx'
    y = pd.read_excel(nombrearchivo, skiprows=skip, parse_cols=24)
    x.append(y)
    z=pd.concat(x)
    print(z.head())
    print(z.tail())<jupyter_output>Fecha      0      1      2      3      4      5      6      7      8  \
0  1995-07-20    NaN  1.073  1.073  1.073  1.073  1.073  1.073  1.073  1.074   
1  1995-07-21  1.073  1.000  1.000  1.000  1.000  1.000  5.000  6.000  6.000   
2  1995-07-22  1.073  1.073  1.000  1.000  1.000  1.073  1.303  1.303  1.303   
3  1995-07-23  1.073  1.000  1.000  1.000  1.000  1.000  0.100  1.000  1.000   
4  1995-07-24  1.000  1.000  0.990  1.000  1.000  1.073  3.000  3.000  3.000   

   ...       14     15     16     17      18      19      20     21     22  \
0  ...    1.073  1.073  1.073  1.073   1.074   1.897   1.897  1.897  1.073   
1  ...    5.000  1.000  1.000  5.000  12.000  16.670  11.929  5.000  1.000   
2  ...    1.073  1.000  1.000  1.000   1.303   2.500   2.500  1.303  1.073   
3  ...    1.000  0.100  0.100  1.000   1.238   1.238   1.238  1.238  1.073   
4  ...    1.073  1.073  3.000  2.000  18.630  22.500   9.256  3.000  1.073   

      23  
0  1.073  
1  1.000  
2  1.073  
3  1.0[...]<jupyter_text>**2.--** Compute e imprima el número de registros con datos faltantes.<jupyter_code>len(z)-len(z.dropna())<jupyter_output><empty_output><jupyter_text>**3.--** Compute e imprima el número de registros duplicados.<jupyter_code>len(z)-len(z.drop_duplicates())<jupyter_output><empty_output><jupyter_text>**4.--** Elimine los registros con datos duplicados o datos faltantes, e imprima la cantidad de registros que quedan (registros completos).<jupyter_code>z=z.dropna().drop_duplicates()
len(z)<jupyter_output><empty_output><jupyter_text>**5.--** Compute y grafique el precio primedio diario.<jupyter_code>prom=z.mean(axis=1)
prom
plt.title("Precio Promedio Diario")
plt.xlabel("Días")
plt.ylabel("PPD $/kWh")
plt.plot(range(len(prom)), prom)
plt.show()<jupyter_output><empty_output><jupyter_text>**6.--** Compute y grafique el precio máximo por mes.<jupyter_code>w=[]
for n in range(len(z['Fecha'])):
    w.append(str(z.iloc[n,0])[0:7])
z['Mensual'] = w
z.head()
zmax=z.groupby('Mensual').max()
zmax=zmax.max(axis=1)
zmax
plt.title("Precio Máximo Mensual")
plt.xlabel("Meses")
plt.ylabel("PMM $/kWh")
plt.bar(range(len(zmax)), zmax,color = "r")
plt.show()<jupyter_output><empty_output><jupyter_text>**7.--** Compute y grafique el precio mínimo mensual.<jupyter_code>zmin=z.groupby('Mensual').min()
zmin=zmin.min(axis=1)
zmin
plt.title("Precio Mínimo Mensual")
plt.xlabel("Meses")
plt.ylabel("PMM $/kWh")
plt.bar(range(len(zmin)), zmin)
plt.show()<jupyter_output><empty_output><jupyter_text>**8.--** Haga un gráfico para comparar el precio máximo del mes (para cada mes) y el precio promedio mensual.<jupyter_code>zmean=z.groupby('Mensual').mean()
zmean=zmean.mean(axis=1)
zmean
plt.title("Comparación Precio Máximo y Promedio Mensual")
plt.xlabel("Meses")
plt.ylabel("$/kWh")
plt.plot(pd.Series(zmean).values,linestyle=':', color='g',label="Promedio")
plt.plot(pd.Series(zmax).values,linestyle='--', color='m',label="Máximo")
plt.legend(loc="upper left")<jupyter_output><empty_output><jupyter_text>**9.--** Haga un histograma que muestre a que horas se produce el máximo precio diario para los días laborales.<jupyter_code>from datetime import datetime, date, time, timedelta
import calendar

#Define los Dias de la semana en base a la Fecha
fecha=[]
fecha=z['Fecha']
z['Fecha']=pd.to_datetime(z['Fecha'], format="%Y-%m-%d")
z['Dia']=z['Fecha'].dt.weekday_name

#Filtrado de Dias

Lab = z['Dia'].isin(['Monday','Tuesday','Wednesday','Thursday','Friday'])
Lab = z[Lab]
indicador = ['{}'.format(n) for n in range(len(Lab))]
Lab.index = indicador
u=[]
for n in range(len(Lab)):
    x = pd.Series(Lab.loc[str(n)]).values[1:25]
    u.append ([i for i, e in enumerate(x) if e == max(x)])
a = []
for n in range(len(u)):
    for i in range(len(u[n])):
        a.append(u[n][i])

rep=[]

for n in range(24):
    rep.append(a.count(n))
plt.bar(range(24),rep,color='b',width=1)
plt.title("Precio Máximo Días Laborales")
plt.xlabel("Horas")
plt.ylabel("$/kWh")
plt.show()<jupyter_output><empty_output><jupyter_text>**10.--** Haga un histograma que muestre a que horas se produce el máximo precio diario para los días sabado.<jupyter_code>#Define los Dias de la semana en base a la Fecha

Sat = z['Dia'].isin(['Saturday'])
Sat = z[Sat]
indicador = ['{}'.format(n) for n in range(len(Sat))]
Sat.index = indicador
s=[]
for n in range(len(Sat)):
    x = pd.Series(Sat.loc[str(n)]).values[1:25]
    s.append ([i for i, e in enumerate(x) if e == max(x)])
a= []
for n in range(len(s)):
    for i in range(len(s[n])):
        a.append(s[n][i])

rep=[]

for n in range(24):
    rep.append(a.count(n))
plt.bar(range(24),rep,color='r',width=1)
plt.title("Precio Máximo Sábado")
plt.xlabel("Horas")
plt.ylabel("$/kWh")
plt.show()<jupyter_output><empty_output><jupyter_text>**11.--** Haga un histograma que muestre a que horas se produce el máximo precio diario para los días domingo.<jupyter_code>#Filtrado de Dias

Sun = z['Dia'].isin(['Sunday'])
Sun = z[Sun]
indicador = ['{}'.format(n) for n in range(len(Sun))]
Sun.index = indicador
s=[]
for n in range(len(Sun)):
    x = pd.Series(Sun.loc[str(n)]).values[1:25]
    s.append ([i for i, e in enumerate(x) if e == max(x)])
a= []
for n in range(len(s)):
    for i in range(len(s[n])):
        a.append(s[n][i])

rep=[]

for n in range(24):
    rep.append(a.count(n))
plt.bar(range(24),rep,color='m',width=1)
plt.title("Precio Máximo Domingo")
plt.xlabel("Horas")
plt.ylabel("$/kWh")
plt.show()<jupyter_output><empty_output><jupyter_text>**12.--** Imprima una tabla con la fecha y el valor más bajo por año del precio de bolsa.<jupyter_code>wry=[]
for n in range(len(z['Fecha'])):
    wry.append(str(z.iloc[n,0])[0:4])
z['Anio'] = wry
minanio=z.groupby('Anio').min()
minanio=minanio.min(axis=1)
minanio<jupyter_output><empty_output><jupyter_text>**13.--** Haga una gráfica en que se muestre el precio promedio diario y el precio promedio mensual.<jupyter_code>indicador = ['{}'.format(n) for n in range(len(z))]
z.index = indicador


z['Mensual'][10]
# con esto puedo calcular el promedio en funcion de n cuando n va hasta la longuitud de z
y=z.groupby('Mensual')
f=z.loc[y.groups[z['Mensual'][43]]].mean() #El entero sera n
f.mean()
pmes=[]
for n in range (len(z)):
    y=z.groupby('Mensual')
    f=z.loc[y.groups[z['Mensual'][n]]].mean() #El entero sera n
    f=f.mean()
    pmes.append(f)
plt.title("Comparación Precio Promedio Diario y Mensual")
plt.xlabel("Meses")
plt.ylabel("$/kWh")
plt.plot(pd.Series(pmes).values,linestyle='-.', color='r',label="Promedio Mensual")
plt.plot(pd.Series(prom).values,linestyle=':', color='y',label="Promedio diario")
plt.legend(loc="upper left")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.16557437863237295, 'fraction_numerical': 0.06702114504760727, 'mean_word_length': 4.026724673710379, 'pattern_counts': {'":': 0, '<': 55, '<?xml version=': 0, '>': 55, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '13', 'dir': 'jupyter-structured-clean-dedup', 'id': '89669', 'license': 'MIT', 'n_tokens_mistral': 3731, 'n_tokens_neox': 3361, 'n_words': 783, 'path': 'Taller_RQB.ipynb', 'repo_name': 'rquirosb/diplomado2017', 'size': '8120'}