#librerias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')

# modificar la ubicacion del archivo segun sea el lugar en que se ejecuta jupyter notebook
data = pd.read_csv('../data/data_course_aguascalientes.csv')

data.head()

data.info()

data.describe()

Registros_totales = data['number'].count()
Registros_totales

# eliminar datos nulos
data = data.dropna()

Registros_SinNulos = data['number'].count()
Registros_SinNulos

(Registros_SinNulos / Registros_totales) * 100

"""
Explanation: Variables Agroclimatologicas
En el siguiente ejercicio generaremos algunas variables de gran utilidad en la agricultura. La base de datos que vamos a utilizar esta disponible en la carpeta data con el nombre de  data_course_aguascalientes.csv. Esta base de datos contiene la siguiente informacion:
* number : numero de la estacion
* name : nombre de la estacion
* lat : latitud
* long :  longitud
* year : anio
* month : mes
* day : dia
* rain : precipitacion
* tmax : temperatura maxima
* tmin :  temperatura minima
* humr :  humedad relativa
 Vamos a generar las siguientes variables 
* tmed :  temperatura media
    * tmed = tmax + tmin / 2
* dpoint : punto de rocio
    * dpoint = pow((humr / 100),0.125) * (112 + (0.9 * tmed )) + (0.1 * tmed) - 112
* uc : unidades calor base 10
    * uc = tmed - tbase
End of explanation
"""


data['tmed'] = (data['tmax'] + data['tmin']) / 2

data.head()

"""
Explanation: Generar tmed
End of explanation
"""


data['dpoint'] = pow((data['humr'] / 100),0.125) * (112 + (0.9 * data['tmed'] )) + (0.1 * data['tmed']) - 112

data.head()

"""
Explanation: Generar dpoint
End of explanation
"""


data['uc'] = data['tmed'] - 10

# elimnar todas las unidades calor negativas
data = data.loc[data['uc'] > 0]

data.head()

"""
Explanation: Generar unidades calor base 10
End of explanation
"""


data.groupby(['year', 'month','name']).sum()['uc']

"""
Explanation: Analisis
Acumulacion de unidades calor por anio - mes - estacion
End of explanation
"""


data[data['name']=='CEPAB'].groupby(['year', 'month','name']).sum()['uc']

"""
Explanation: Acumulacion de unidades calor en la estacion CEPAB por anio-mes
End of explanation
"""


data[data['name']=='CEPAB'].groupby(['year','name']).sum()['uc'].plot.bar(figsize=(20,4))

"""
Explanation: Acumulacion de unidades calor en la estacion CEPAB por anio
End of explanation
"""


data[(data['name']=='CEPAB') & (data['year']==2016)].groupby(['year','month']).sum()['uc'].plot.bar(figsize=(20,4))

"""
Explanation: Acumulacion de unidades calor en la estacion CEPAB en 2016 por mes
End of explanation
"""


data[data['year']==2016].groupby(['year','month','name']).sum()['uc']

"""
Explanation: Acumulacion de unidades calor por estacion en 2016
End of explanation
"""


data['uc'].hist(bins=20)

data['uc'].mean()

"""
Explanation: Histograma unidades calor
End of explanation
"""


data['rainDay'] = [1 if x > 0.0 else 0 for x in data['rain']]

data.head()

"""
Explanation: Dias de lluvia
End of explanation
"""


data['noRainDay'] = [1 if x == 0.0 else 0 for x in data['rain']]

data.head()

"""
Explanation: Dias sin lluvia
End of explanation
"""


#%% Aggregation
aggregations = {
        'rainDay' : ['sum'],
        'noRainDay' : ['sum'],
        'rain' : ['sum']
        }

#%% Apply aggregation
group2 = data.groupby(['year', 'month', 'name']).agg(aggregations)

group2.columns = ["_".join(x) for x in group2.columns.ravel()]

group2.to_csv('../data/data_course_aguascalientes_indice_lluvia.csv')

data2 = pd.read_csv('../data/data_course_aguascalientes_indice_lluvia.csv')

data2.head()

data2.groupby(['month']).mean()

data.head()

data[(data['name'] == 'CEPAB') & (data['year']== 2016)].groupby(['month']).sum()['rain'].plot.bar()

"""
Explanation: Generar indice de lluvia para el 2016
End of explanation
"""


