# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # Pre-procesamiento
#
# Los datos descargados contienen columnas y registros que requieren procesarse para eliminar inconsistencias. En este archivo se crea una fecha unificada llamada fecha infeccioso, que toma la primera fecha entre los datos de fechas (de notificación, de diagnóstico, de reporto) incluidos en el conjunto datos. Luego se crea un dataframe con un indice que incluye todas fechas. Con este índice se crea un dataframe con las siguientes columnas:
#
# **dias**: Dias transcurridos desde la fecha inicial del conjunto de datos.<br>
# **semana**: Semanas trasncurridas desde la fecha inicial del conjunto de datos.<br>
# **infectados**: Número de casos nuevos por día.<br>
# **recuperados**: Número de personas recuperadas.<br>
# **muertos**: Número de muertos.<br>
# **acumulado_infectados**: Número de infectados.<br>
# **acumulado_recuperados**: Número de personas recuperados.<br>
# **acumulado_muertos**: Número de muertos totales.<br>
# **activos**: Total de casos activos.<br>
# **fecha_infeccioso**: Fecha construida a partir de la menor fecha posible entre: fecha de notificación, fecha de diagnóstico y fecha de inicio de sintomas.<br><br>
#
# Finalmente se exportan el archivo con el dataframe con una extensión .pickle.

# + colab={} colab_type="code" executionInfo={"elapsed": 475, "status": "ok", "timestamp": 1599103964154, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="g6QCzc-ZyvH7"
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import glob

# + colab={"base_uri": "https://localhost:8080/", "height": 34} colab_type="code" executionInfo={"elapsed": 546, "status": "ok", "timestamp": 1599103965405, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="e1VKSWVpmxXR" outputId="0e8094a2-0254-4300-b3b1-413b105ccdf7"
#from google.colab import drive
#drive.mount("/content/drive")
#baseUrl = '/content/drive/Shared drives/Analitica Predictiva/covid-19-flr-analitica-predictiva'
#os.chdir(baseUrl)

# + colab={"base_uri": "https://localhost:8080/", "height": 34} colab_type="code" executionInfo={"elapsed": 3795, "status": "ok", "timestamp": 1599103970730, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="yx60esNHynhx" outputId="bda5d3f1-ea09-420d-8bdc-2b0347a1b5bc"
#Se realiza la lectura de la data descargada de la fuente oficial
dfCovid = pd.read_pickle('Datos/covid19.pkl')
dfCovid.shape

# + colab={"base_uri": "https://localhost:8080/", "height": 700} colab_type="code" executionInfo={"elapsed": 3199, "status": "ok", "timestamp": 1599090601861, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="LHgUwMMIzAPr" outputId="360aa913-a046-4d3e-88fb-bac81461d639"
#se realiza una verificación de la estructura del Data frame cargado 
dfCovid.describe().T

# + colab={"base_uri": "https://localhost:8080/", "height": 309} colab_type="code" executionInfo={"elapsed": 646, "status": "ok", "timestamp": 1599090605434, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="EfbNbt01KYpX" outputId="ea008307-3195-490c-86e0-9380ea3fc205"
dfCovid.tail(5)

# + [markdown] colab_type="text" id="VzlI7hw1luxU"
# ## Fecha Infeccioso
#
# Se construye una caracteristica nueva **Fecha Infeccioso**, con la menor fecha posible entre: fecha de notificación, fecha de diagnóstico y fecha de inicio de sintomas. (Para los *Asintomático* en el FIS, se define una fecha 20991231 en una nueva columna **fis_cor** usada para la comparación)

# + colab={} colab_type="code" executionInfo={"elapsed": 7067, "status": "ok", "timestamp": 1599103978638, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="_Ssprfh7l7Ch"
dfCovid['fis_cor']=dfCovid['fis']
dfCovid.loc[dfCovid['fis']=='Asintomático','fis_cor']=pd.to_datetime('2099-12-31',format='%Y-%m-%d')
dfCovid['fis_cor'] = pd.to_datetime(dfCovid['fis_cor'].str.split('T',expand=True)[0],format='%Y-%m-%d')

dfCovid = dfCovid.astype({'fecha_de_notificaci_n':'datetime64',
                          'fecha_diagnostico':'datetime64',
                          'fis_cor':'datetime64',
                          'fecha_recuperado':'datetime64',
                          'fecha_de_muerte':'datetime64'})

dfCovid['fecha_de_notificaci_n'] = dfCovid['fecha_de_notificaci_n'].dt.date
dfCovid['fecha_diagnostico'] = dfCovid['fecha_diagnostico'].dt.date
dfCovid['fis_cor'] = dfCovid['fis_cor'].dt.date
dfCovid['fecha_recuperado'] = dfCovid['fecha_recuperado'].dt.date
dfCovid['fecha_de_muerte'] = dfCovid['fecha_de_muerte'].dt.date

temp = dfCovid[['fecha_de_notificaci_n','fecha_diagnostico','fis_cor']]
dfCovid['fecha_infeccioso']=np.min(temp.values,axis=1)

# + colab={"base_uri": "https://localhost:8080/", "height": 280} colab_type="code" executionInfo={"elapsed": 7408, "status": "ok", "timestamp": 1599103979418, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="B3a2goRqrILG" outputId="49abfe7b-cd1c-42bf-ef34-83a53b2322a8"
x = pd.DataFrame(dfCovid.groupby(['fecha_infeccioso']).size())
x.plot();

# + [markdown] colab_type="text" id="D7ikbDijEh-D"
# ## Creacion serie de tiempo de Casos Activos

# + [markdown] colab_type="text" id="Ypn4KbbeEpES"
# Los casos activos por cada día equivalen a todos los casos del dataframe en el dia mencionado,  menos los recuperados, menos los muertos.
# Creamos un indice que incluye todas las fechas en el intervalo de análisis. Para esto detectamos la fecha inicial y final y usamos la funcion `np.arange`
# Se agrega una caracteristica al dataframe que indica un intervalo de 7 días desde la fecha del primer contagio, esta caracteristica se usa para el modelo de predicción a mediano plazo.

# + colab={} colab_type="code" executionInfo={"elapsed": 469, "status": "ok", "timestamp": 1599104476659, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="KSRgPc9D-Y0C"
import datetime

#Se crea el data frame con todas las fechas en el itervalo
def CreateDates(str_date,df_covid):
  df_proc = df_covid.copy()
  #Se crea el indice por fecha
  dates = df_proc.groupby(str_date).count()
  date_init = dates.index[0]
  date_end = dates.index[-1]

  #Se crea un array con todos los días, se agrega un dia para incluir los limites
  all_days_arr = np.arange(date_init,date_end + datetime.timedelta(days=1))
  all_dates = pd.DataFrame(all_days_arr)
  all_dates['dias'] = np.arange(0,len(all_days_arr),step=1)

  #Se calculan intervalos de 7 dias que serán asignados a cada fecha. (Esta caracteristica se utiliza despues para la predicción a     mediano plazo) 
  spans_count = np.int(np.ceil(len(all_days_arr)/7))
  spans = np.repeat(np.arange(0,spans_count),7)
  all_dates['semana'] = spans[0:len(all_days_arr)]
  
  print(date_init,"date init")
  print(date_end,"date end")
  all_dates.set_index(0,inplace=True)
  return all_dates

  #Se calculan los acumulados para las columnas, Infectados, Recuperados, Muertos, Activos
def GetActivos(dfCovid):
  df_proc = dfCovid.copy()
  dfActivos = CreateDates('fecha_infeccioso',df_proc)
  dfActivos['infectados'] = df_proc.groupby(['fecha_infeccioso']).count()['id_de_caso']
  dfActivos['recuperados'] = df_proc.groupby(['fecha_recuperado']).count()['id_de_caso']
  dfActivos['muertos'] = df_proc.groupby(['fecha_de_muerte']).count()['id_de_caso']
  dfActivos.fillna(0,inplace= True)
  dfActivos['acumulado_infectados']= dfActivos['infectados'].cumsum()
  dfActivos['acumulado_recuperados'] =  dfActivos['recuperados'].cumsum()
  dfActivos['acumulado_muertos'] =  dfActivos['muertos'].cumsum()
  dfActivos['activos']= dfActivos['acumulado_infectados'] - dfActivos['acumulado_recuperados'] - dfActivos['acumulado_muertos']
  dfActivos.index.rename("fecha_infeccioso",inplace=True)

  dfSemanales = dfActivos.groupby(['semana']).sum()[['infectados','recuperados','muertos']]
  dfSemanales['acumulado_infectados']= dfSemanales['infectados'].cumsum()
  dfSemanales['acumulado_recuperados'] =  dfSemanales['recuperados'].cumsum()
  dfSemanales['acumulado_muertos'] =  dfSemanales['muertos'].cumsum()
  dfSemanales['activos']= dfSemanales['acumulado_infectados'] - dfSemanales['acumulado_recuperados'] - dfSemanales['acumulado_muertos']

  return dfActivos, dfSemanales

#Se Genera la grafica con los casos diarios y los acumulados
def GraphData(label,dfActivos,dfSemanales = None):
  fig= plt.figure(figsize=(30,5))
  ax = plt.subplot(1,4,1)
  dfActivos[['infectados','recuperados','muertos']].plot(ax=ax)
  plt.title(label)
  ax = plt.subplot(1,4,2)
  dfActivos[['activos','acumulado_infectados']].plot(ax=ax)
  plt.title(label)
  if dfSemanales is not None:
    ax = plt.subplot(1,4,3)
    dfSemanales[['infectados','recuperados','muertos']].plot(ax=ax)
    plt.title('Semanal - {}'.format(label))
    ax = plt.subplot(1,4,4)
    dfSemanales[['activos','acumulado_infectados']].plot(ax=ax)
    plt.title('Semanal - {}'.format(label))


# + colab={"base_uri": "https://localhost:8080/", "height": 484} colab_type="code" executionInfo={"elapsed": 4191, "status": "ok", "timestamp": 1599104123675, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="fI2tEaiYFso1" outputId="7014cfbc-4101-4b6f-d03e-14b586fe8ba1"

dfActivos,dfSemanales = GetActivos(dfCovid)
dfActivos

# + colab={"base_uri": "https://localhost:8080/", "height": 917} colab_type="code" executionInfo={"elapsed": 522, "status": "ok", "timestamp": 1599104136124, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="y8iW9U-6CKb-" outputId="2d8c681e-8a5b-45b4-8b0a-064b1c852418"
dfSemanales

# + colab={} colab_type="code" executionInfo={"elapsed": 478, "status": "ok", "timestamp": 1599104254654, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="AUSlbBp4pNip"
#Se Guardan los datos en un archivo pickle
dfActivos.to_pickle('Datos/data_{}.pickle'.format('Colombia'))
dfSemanales.to_pickle('Datos/data_weekly_{}.pickle'.format('Colombia'))

# + colab={"base_uri": "https://localhost:8080/", "height": 362} colab_type="code" executionInfo={"elapsed": 1630, "status": "ok", "timestamp": 1599104502914, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="9qzWPkiVYFGs" outputId="185f697a-4ee0-4cda-c48e-0448f9eb7202"
GraphData('Total Colombia',dfActivos,dfSemanales)

# + [markdown] colab_type="text" id="FLZGqReEk4L3"
# # Creacion de dataframes Ciudades
# Se crean dataframes para las 5 ciudades de Colombia con mayor cantidad de habitantes.

# + colab={} colab_type="code" executionInfo={"elapsed": 643, "status": "ok", "timestamp": 1599104665592, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="NyXfpwqcZhTX"
ciudades = ['<NAME>.','Medellín','Cali','Barranquilla', 'Cartagena de Indias']
names = ['Bogota','Medellin','Cali','Barranquilla','Cartagena']

# + colab={} colab_type="code" executionInfo={"elapsed": 328, "status": "ok", "timestamp": 1599104665595, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="RI3Cd54Hmlw_"
#Se elimina los archivos anteriores
files = glob.glob('Datos/data_*')
for file in files:
  os.remove(file)
# -

# ## Almacenamiento y visualización
#
# Se crea un dataframe filtrado por cada ciudad a partir de dataframe general, se usa la función `GetActivos(dfCovid[(dfCovid['ciudad_de_ubicaci_n'] == ciudades[i])])`. Luego se almacenan los dataframe mediante las instrucciones `df.to_pickle('Datos/data_{}.pickle'.format(names[i]))` y `dfw.to_pickle('Datos/data_weekly_{}.pickle'.format(names[i]))`. Adicionalmente se visualiza cada dataframe para verificar la integridad de la información, se usa la funció `GraphData(ciudades[i],df,dfw)`.

# + colab={"base_uri": "https://localhost:8080/", "height": 1000} colab_type="code" executionInfo={"elapsed": 9310, "status": "ok", "timestamp": 1599104677495, "user": {"displayName": "<NAME>", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GjjvnrdriZlzXxdV00af0OFnQ3lxzsrl5cE-wBq=s64", "userId": "06181135591528508533"}, "user_tz": 300} id="7W2Igp5gab-5" outputId="a7d4b312-81c5-462a-8f0c-620c5af73c01"
dfs=[]
for i in range(len(ciudades)):
  print(ciudades[i])
  df, dfw = GetActivos(dfCovid[(dfCovid['ciudad_de_ubicaci_n'] == ciudades[i])])
  #se guarda la información en el archivo Picke
  df.to_pickle('Datos/data_{}.pickle'.format(names[i]))
  dfw.to_pickle('Datos/data_weekly_{}.pickle'.format(names[i]))
  dfs.append(df)
  GraphData(ciudades[i],df,dfw)
  plt.savefig("docs/images/diag_{}.png".format(names[i]))
# -





StarcoderdataJupyterScriptsDedupFiltered