<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 **Para realizar el taller:**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.**Para el envío:**Al terminar el taller, y dentro de las fechas especificadas en la plataforma de OLADE, debe subir este archivo a su perfil de **GitHub**. En la plataforma debe copiar el enlace a este archivo, a modo de entregable.   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
pd.read_excel('Precio_Bolsa_Nacional_($kwh)_1995.xlsx')
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)
z.size
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())
len(z.drop_duplicates())
len(z.dropna())<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>w=z.dropna().drop_duplicates()
len(w)
len(w)-len(w.drop_duplicates())
len(w)-len(w.dropna())<jupyter_output><empty_output><jupyter_text>**5.--** Compute y grafique el precio primedio diario.<jupyter_code>prom = w.mean(axis=1)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib inline
plt.xlabel('Dias')
plt.ylabel('$/kWh Promedio')
plt.title('Precios Promedios Diarios')
plt.bar(range(len(prom)),prom)
plt.show()<jupyter_output><empty_output><jupyter_text>**6.--** Compute y grafique el precio máximo por mes.<jupyter_code>q=[]
for n in range(len(w['Fecha'])):
    q.append (str(w.iloc[n,0])[0:7])
w['mes']=q
maximomes = w.groupby('mes').max()
maximomes= maximomes.max(axis=1)
plt.xlabel('Meses')
plt.ylabel('$/kWh Promedio')
plt.title('Precios Maximos Mensuales')
plt.bar(range(len(maximomes)),maximomes)
plt.show()<jupyter_output><empty_output><jupyter_text>**7.--** Compute y grafique el precio mínimo mensual.<jupyter_code>minimomes = w.groupby('mes').min()
minimomes = minimomes.min(axis=1)
plt.xlabel('Mensual')
plt.ylabel('$/kWh Promedios')
plt.title('Precios Minimo Mensual')
plt.bar(range(len(minimomes)),minimomes)
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>promediomes = w.groupby('mes').mean()
promediomes= promediomes.mean(axis=1)
plt.xlabel("Meses")    
plt.ylabel("$/kWh")
plt.plot(pd.Series(promediomes).values,label="Promedio")        
plt.plot(pd.Series(maximomes).values, label="Máximo")  
plt.legend(loc="center 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

fecha=[]
fecha=w['Fecha']
w['Fecha']=pd.to_datetime(w['Fecha'], format="%Y-%m-%d")
w['Dia']=w['Fecha'].dt.weekday_name

Lab = w['Dia'].isin(['Monday','Tuesday','Wednesday','Thursday','Friday'])
Lab = w[Lab]
indicador = ['{}'.format(n) for n in range(len(Lab))]
Lab.index = indicador

t=[]                                
for n in range(len(Lab)):
    x = pd.Series(Lab.loc[str(n)]).values[1:25]
    t.append ([i for i, e in enumerate(x) if e == max(x)])
    a=[]                     
for n in range(len(t)):
    for i in range (len(t[n])):
        a.append(t[n][i])
rep=[]    

for n in range (24):
    rep.append(a.count(n))
plt.xlabel("Horas")
plt.ylabel("$/kWh")
plt.bar(range(24),rep,color='r',width = 1)
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>Sab = w['Dia'].isin(['Saturday'])
Sab = w[Sab]

indicador = ['{}'.format(n) for n in range(len(Sab))]
Sab.index = indicador
 

s=[]                               
for n in range(len(Sab)):
    x = pd.Series(Sab.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.xlabel("Sabado")
plt.ylabel("$/kWh")
plt.bar(range(24),rep,color='r',width = 1)
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>Sab = w['Dia'].isin(['Sunday'])
Sab = w[Sab]

indicador = ['{}'.format(n) for n in range(len(Sab))]
Sab.index = indicador
 

s=[]                                
for n in range(len(Sab)):
    x = pd.Series(Sab.loc[str(n)]).values[1:25]
    s.append ([i for i, e in enumerate(x) if e == max(x)])
    
    a=[]                     # Este Fragmento hace una matriz de la matriz u que contenia horas en que el maximo se repetia.
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.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>A=[]
nmatriz=w
for n in range(len(nmatriz['Fecha'])):
    A.append (str(nmatriz.iloc[n,0])[0:4])
nmatriz['ano']=A
minimoano = nmatriz.groupby('ano').min()
minimoano= minimoano.min(axis=1)
minimoano<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(w))]
w.index = indicador
promediomes=[]
for n in range (len(w)):
    y=w.groupby('mes')
    f=w.loc[y.groups[w['mes'][n]]].mean()
    f=f.mean()
    promediomes.append(f)
    
plt.xlabel("Meses")    
plt.ylabel("$/kWh")
plt.plot(pd.Series(promediomes).values,label='Promedio mes')        
plt.plot(pd.Series(prom).values,label="Promedio diario") 
plt.legend(loc="center left")
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1569974242610082, 'fraction_numerical': 0.06647859683552067, 'mean_word_length': 3.504972375690608, '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': '271658', 'license': 'MIT', 'n_tokens_mistral': 3651, 'n_tokens_neox': 3278, 'n_words': 769, 'path': 'TallerRJMW.ipynb', 'repo_name': 'rjmanriquew/Diplomado-2017', 'size': '8186'}