montera34 / escovid19data

Recopilación de datos de COVID19 por provincias en España
Other
81 stars 23 forks source link

Diferencias en series del ISCIII #32

Open jlluch opened 3 years ago

jlluch commented 3 years ago

Hola, el ISCIII publica dos series de datos por provincias: casos_tecnica_ccaa.csv: Número de casos por técnica diagnóstica y CCAA (de residencia) https://cnecovid.isciii.es/covid19/resources/casos_tecnica_ccaa.csv casos_hosp_uci_def_sexo_edad_provres.csv: Número de hospitalizaciones, número de ingresos en UCI y número de defunciones por sexo, edad y provincia de residencia. https://cnecovid.isciii.es/covid19/resources/casos_hosp_uci_def_sexo_edad_provres.csv Empecé a hacer gráficas con la primera, ya que lo único que quería era estudiar los casos diagnosticados por fecha y es una tabla mucho más pequeña, pero después empecé a utilizar la segunda para estudiar hospitalizados, uci y fallecidos. Como en ambas incluyen los casos diagnosticados empecé a utilizar la segunda también para calcular la IA14, IA7 por provincias y me di cuenta que el resultado no era el mismo, así que calculé la diferencias entre ambas series y el resultado es el siguiente:

Aquí tenéis el código en python que he utilizado para comparar la serie completa y por cada una de las provincias.

A ver si alguien puede aportar luz al tema.

Un saludo.

(soy novato en python y es posible que el código se pueda optimizar, por ejemplo incluir los xticks con las fechas en las gráficas)

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 28 12:58:10 2021

@author: Xavi Lluch
"""
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import WeekdayLocator

def graficar(df,tit):  

    fig, ax = plt.subplots(figsize=(20,8))
    df.fecha = df.fecha.apply(lambda x: x.strftime('%d-%b'))
    df.plot(kind = 'bar', x='fecha', y='dif', width=0.7, figsize=(15,8), ax=ax)
    ax.text(0.2, 0.8, '@xavi_runner', transform=ax.transAxes,fontsize=20, color='gray', alpha=0.3,
        ha='center', va='center', rotation='30')
    plt.grid(True)
    plt.xticks([])
    #plt.xticks(fontsize=8, rotation=45)
    plt.title(tit,fontsize=18)
    plt.show() 

def graficarS(df,tit):  

    fig, ax = plt.subplots(figsize=(15,8))
    ax.plot_date(df.fecha, df.num_casos, fmt="g-")
    ax.xaxis.set_major_locator(WeekdayLocator())
    fig.autofmt_xdate()
    plt.xticks(fontsize=8, rotation=45)
    ax.text(0.2, 0.8, '@xavi_runner', transform=ax.transAxes,fontsize=20, color='gray', alpha=0.3,
        ha='center', va='center', rotation='30')
    plt.grid(True)
    plt.title(tit,fontsize=18)
    plt.savefig("CovidVLC\\" +tit+".png")
    plt.show()

URLa = "https://cnecovid.isciii.es/covid19/resources/casos_tecnica_provincia.csv"
URLb = "https://cnecovid.isciii.es/covid19/resources/casos_hosp_uci_def_sexo_edad_provres.csv"
# #provincia_iso    sexo    grupo_edad  fecha   num_casos   num_hosp    num_uci num_def

# fecha_ini = "2020-08-31"
# fecha_fin = "2021-01-26"

dfa = pd.read_csv(URLa,encoding="utf-8")
dfb = pd.read_csv(URLb,encoding="utf-8")

dfa.fecha = pd.to_datetime(dfa.fecha)
dfb.fecha = pd.to_datetime(dfb.fecha)
dfaC = (dfa.groupby("fecha")).num_casos.sum().reset_index() 
dfbC = (dfb.groupby("fecha")).num_casos.sum().reset_index() 

graficarS(dfaC,"Serie A")
graficarS(dfbC,"Serie B")

difAB = pd.DataFrame(dfaC.fecha)
difAB['dif'] = 0
difAB['dif'] = dfbC.num_casos - dfaC.num_casos
graficar(difAB, "Diferencias entre series")

prov = dfa.provincia_iso.unique().tolist()
prov = [x for x in prov if str(x) != 'nan']
for pr in prov:
    dfaC = (dfa[dfa.provincia_iso==pr].groupby("fecha")).num_casos.sum().reset_index() 
    dfbC = (dfb[dfb.provincia_iso==pr].groupby("fecha")).num_casos.sum().reset_index() 
    difAB = pd.DataFrame(dfaC.fecha)
    difAB['dif'] = 0
    difAB['dif'] = dfbC['num_casos'] - dfaC['num_casos']
    graficar(difAB, "Diferencias entre series prov: "+pr)
    print(difAB.dif.sum())
mangelmyts commented 3 years ago

La periodicidad de las diferencias parece de cadencia semanal, y probablemente se debe a la influencia de los fines de semana en la notificación. Y es que mientras la base de datos

casos_tecnica_ccaa.csv: Número de casos por técnica diagnóstica y CCAA (de residencia) https://cnecovid.isciii.es/covid19/resources/casos_tecnica_ccaa.csv

utiliza como fecha de los casos la fecha imputada de comienzo de síntomas (el propio comienzo de síntomas o una corrección de la fecha de diagnóstico, https://cnecovid.isciii.es/covid19/resources/metadata_tecnica_ccaa_prov_res.pdf), la base de datos de ingresos utiliza directamente la fecha de diagnóstico o notificación del caso, que suele ser unos días después, cuando se obtiene el resultado de la prueba. Los casos, como dices, son los mismos, pero con diferente fecha de imputación. Entiendo que esa discrepancia no se produciría si comparas los datos de la base hospitalaria con los de la base casos_diag_ccaadecl.csv (https://cnecovid.isciii.es/covid19/resources/casos_diag_ccaadecl.csv).

Info obtenida de https://cnecovid.isciii.es/covid19/#documentaci%C3%B3n-y-datos

numeroteca commented 3 years ago

Como sugerencia para comparar series, te diría que calcularas la media (ventana de 7 días) ya así puedes mostrar las dos series, mejor que la diferencia que da lugar a esos picos y es mas difícil de intepretar. Mira cómo lo hago con ISCIIII vs scovid19data image

jlluch commented 3 years ago

Ok, he comprobado que para calcular IA14 se utiliza la serie técnica de diagnóstico. Muchas gracias. Un saludo.