#librerias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 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
* gcg_v : Grado de confort ganadero (Valtorta et al., 1996) valor
    * 1.8 * ta + 32 - (0.55 - (0.55 * (hr/100.0))) * (1.8 * ta) - 26.0
* gcg_t : Grado de confort ganadero texto
    * 0 < gcg_v < 74 : Confort
    * 74 < gcg_v < 78 : Alerta
    * 78 < gcg_v < 83 : Peligro
    * gcg_v > 83 : Emergencia
* ic : indice de calor valor
    * f = (9.0 / 5.0) * celsius + 32.0
    * ic = -42.379 + (2.04901523 * f) + (10.14333127 * hr) - (0.22475541 * f * hr) - (6.83783 * pow(10.0,-3) * pow(f, 2.0)) - (5.481717 * pow(10.0,-2) * pow(hr, 2.0)) + (1.22874 * pow(10.0, -3) * pow(f, 2.0) * hr) + (8.5282 * pow(10.0,-4) * f * pow(hr, 2.0)) - (1.99 * pow(10.0, -6) * pow(f, 2.0) * pow(hr, 2.0))
    * ic1 = -42.379 + (2.04901523 * f)
    * ic2 = (10.14333127 * hr)
    * ic3 = (0.22475541 * f * hr)
    * ic4 = (6.83783 * pow(10.0,-3) * pow(f, 2.0))
    * ic5 = (5.481717 * pow(10.0,-2) * pow(hr, 2.0))
    * ic6 = (1.22874 * pow(10.0, -3) * pow(f, 2.0) * hr)
    * ic7 = (8.5282 * pow(10.0,-4) * f * pow(hr, 2.0))
    * ic8 = (1.99 * pow(10.0, -6) * pow(f, 2.0) * pow(hr, 2.0))
    * ic = ic1 + ic2 - ic3 - ic4 - ic5 + ic6 + ic7 - ic8
* ic_t : indice de calor texto
    * 0 < ic < 80 : Normal
    * 80 < ic < 90 : Precaucion
    * 90 < ic < 103 : Extrema precaucion
    * 103 < ic < 124 : Peligro
    * ic > 124 : Extramadamente peligroso
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

data.head()

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


data['gcg_v'] = 1.8 * data['tmed'] + 32 - (0.55 - (0.55 * (data['humr'] / 100.0))) * (1.8 * data['tmed'] ) - 26.0

data.head()

# clasificar rangos
# confort
data['gcg_confort'] = [1 if x < 74 else 0 for x in data['gcg_v']]

data.head()

# alerta
data['gcg_alerta'] = [1 if (x > 74) & (x < 78) else 0 for x in data['gcg_v']]

data.head()

# peligro
data['gcg_peligro'] = [1 if (x > 78) & (x < 83) else 0 for x in data['gcg_v']]

data.head()

# emergencia
data['gcg_emergencia'] = [1 if x > 83 else 0 for x in data['gcg_v']]

data.head()

"""
Explanation: Grado de confort ganadero
End of explanation
"""


data['fahrenheit'] = (9.0 / 5.0) * data['tmed'] + 32.0

data.head()

data['ic'] = -42.379 + (2.04901523 * data['fahrenheit']) + (10.14333127 * data['humr']) - (0.22475541 * data['fahrenheit'] * data['humr']) - (6.83783 * pow(10.0,-3) * pow(data['fahrenheit'], 2.0)) - (5.481717 * pow(10.0,-2) * pow(data['humr'], 2.0)) + (1.22874 * pow(10.0, -3) * pow(data['fahrenheit'], 2.0) * data['humr']) + (8.5282 * pow(10.0,-4) * data['fahrenheit'] * pow(data['humr'], 2.0)) - (1.99 * pow(10.0, -6) * pow(data['fahrenheit'], 2.0) * pow(data['humr'], 2.0))

data.head()

# clasificar rangos
# normal
data['ic_normal'] = [1 if x < 80 else 0 for x in data['ic']]

data.head()

# precaucion
data['ic_precaucion'] = [1 if (x > 80) & (x < 90) else 0 for x in data['ic']]

data.head()

# extrema precaucion
data['ic_ex_precaucion'] = [1 if (x > 90) & (x < 103) else 0 for x in data['ic']]

data.head()

# peligro
data['ic_peligro'] = [1 if (x > 103) & (x < 124) else 0 for x in data['ic']]

data.head()

# extremadamente peligro
data['ic_ex_peligro'] = [1 if x > 124 else 0 for x in data['ic']]

data.head()

data.count()

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

data.columns

"""
Explanation: indice de calor
End of explanation
"""


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

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


