This document describes the steps performed for data reading and transformation of COVID-19 data from México. The data is downloaded from the Mexican government data repository https://datos.gob.mx. The actual data is on a csv file, but contains many categorical variables with numbers. Those numbers represent a category that it is described in another diccionary file. By using the dictionary the original csv file is transformed and each categorical variable is transformed by using the actual values to obtain a more descriptive dataset. The files are provided in the same Website. Additionally, there is another file with that describes each variable and to which catalog corresponds to.
The link to México’s COVID-19 related data is the following:
https://datos.gob.mx/busca/dataset/informacion-referente-a-casos-covid-19-en-mexico
After downloading the data from the link, the csv is loaded into R.
covidmx <- read.csv("data_covid19_mexico/200816COVID19MEXICO.csv")
The dataframe has the following structure.
str(covidmx)
## 'data.frame': 1176931 obs. of 35 variables:
## $ FECHA_ACTUALIZACION: Factor w/ 1 level "2020-08-16": 1 1 1 1 1 1 1 1 1 1 ...
## $ ID_REGISTRO : Factor w/ 1176931 levels "000001","000002",..: 1145126 625165 159252 725228 844154 58254 547194 402130 48832 382044 ...
## $ ORIGEN : int 2 2 2 2 2 2 2 2 2 2 ...
## $ SECTOR : int 3 3 3 3 3 3 4 3 4 3 ...
## $ ENTIDAD_UM : int 15 25 27 15 25 15 19 25 9 2 ...
## $ SEXO : int 1 1 2 2 1 2 1 1 2 1 ...
## $ ENTIDAD_NAC : int 15 25 27 7 25 9 19 25 9 2 ...
## $ ENTIDAD_RES : int 15 25 27 15 25 15 19 25 9 2 ...
## $ MUNICIPIO_RES : int 76 6 6 81 6 87 10 6 5 2 ...
## $ TIPO_PACIENTE : int 1 2 1 2 1 2 1 1 1 1 ...
## $ FECHA_INGRESO : Factor w/ 229 levels "2020-01-01","2020-01-02",..: 135 183 157 170 175 148 122 161 123 147 ...
## $ FECHA_SINTOMAS : Factor w/ 229 levels "2020-01-01","2020-01-02",..: 132 180 156 156 162 144 120 156 122 144 ...
## $ FECHA_DEF : Factor w/ 175 levels "2020-01-13","2020-01-14",..: 175 175 175 175 175 175 175 175 175 175 ...
## $ INTUBADO : int 97 2 97 2 97 2 97 97 97 97 ...
## $ NEUMONIA : int 2 1 2 1 2 1 2 2 2 2 ...
## $ EDAD : int 33 25 51 40 45 33 43 50 52 45 ...
## $ NACIONALIDAD : int 1 1 1 1 1 1 1 1 1 1 ...
## $ EMBARAZO : int 2 2 97 97 2 97 2 2 97 2 ...
## $ HABLA_LENGUA_INDIG : int 2 2 2 2 2 2 2 2 2 99 ...
## $ DIABETES : int 1 2 2 2 2 2 2 2 2 2 ...
## $ EPOC : int 2 2 2 2 2 2 2 2 2 2 ...
## $ ASMA : int 2 2 2 2 2 2 2 2 2 2 ...
## $ INMUSUPR : int 2 2 2 2 2 2 2 2 2 2 ...
## $ HIPERTENSION : int 2 2 2 2 2 2 2 1 2 2 ...
## $ OTRA_COM : int 2 2 2 2 1 2 2 1 2 2 ...
## $ CARDIOVASCULAR : int 2 2 2 2 2 2 2 1 2 2 ...
## $ OBESIDAD : int 1 1 2 2 1 2 2 1 2 2 ...
## $ RENAL_CRONICA : int 2 2 2 2 2 2 2 2 2 1 ...
## $ TABAQUISMO : int 2 2 2 2 2 2 2 2 2 2 ...
## $ OTRO_CASO : int 1 99 2 2 1 2 99 1 99 1 ...
## $ RESULTADO : int 1 1 1 1 1 1 1 1 1 1 ...
## $ MIGRANTE : int 99 99 99 99 99 99 99 99 99 99 ...
## $ PAIS_NACIONALIDAD : Factor w/ 114 levels "Alemania","Archipiélago de Svalbard",..: 69 69 69 69 69 69 69 69 69 69 ...
## $ PAIS_ORIGEN : Factor w/ 71 levels "99","Alemania",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ UCI : int 97 2 97 2 97 2 97 97 97 97 ...
The file that describes each variable is loaded, the description and format of each variable is shown in the following table.
library(readxl)
library(kableExtra)
columnInformation <- read_excel("data_covid19_mexico/diccionario_datos_covid19/Descriptores_0419.xlsx",
sheet=1)
kable(columnInformation, format = "html", align = "cllc",
caption="Description of each column") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = T)
Nº | NOMBRE DE VARIABLE | DESCRIPCIÓN DE VARIABLE | FORMATO O FUENTE |
---|---|---|---|
1 | FECHA_ACTUALIZACION | La base de datos se alimenta diariamente, esta variable permite identificar la fecha de la ultima actualizacion. | AAAA-MM-DD |
2 | ID_REGISTRO | Número identificador del caso | TEXTO |
3 | ORIGEN | La vigilancia centinela se realiza a través del sistema de unidades de salud monitoras de enfermedades respiratorias (USMER). Las USMER incluyen unidades médicas del primer, segundo o tercer nivel de atención y también participan como USMER las unidades de tercer nivel que por sus características contribuyen a ampliar el panorama de información epidemiológica, entre ellas las que cuenten con especialidad de neumología, infectología o pediatría. (Categorías en Catalógo Anexo). | CATÁLOGO: ORIGEN |
4 | SECTOR | Identifica el tipo de institución del Sistema Nacional de Salud que brindó la atención. | CATÁLOGO: SECTOR |
5 | ENTIDAD_UM | Identifica la entidad donde se ubica la unidad medica que brindó la atención. | CATALÓGO: ENTIDADES |
6 | SEXO | Identifica al sexo del paciente. | CATÁLOGO: SEXO |
7 | ENTIDAD_NAC | Identifica la entidad de nacimiento del paciente. | CATALÓGO: ENTIDADES |
8 | ENTIDAD_RES | Identifica la entidad de residencia del paciente. | CATALÓGO: ENTIDADES |
9 | MUNICIPIO_RES | Identifica el municipio de residencia del paciente. | CATALÓGO: MUNICIPIOS |
10 | TIPO_PACIENTE | Identifica el tipo de atención que recibió el paciente en la unidad. Se denomina como ambulatorio si regresó a su casa o se denomina como hospitalizado si fue ingresado a hospitalización. | CATÁLOGO: TIPO_PACIENTE |
11 | FECHA_INGRESO | Identifica la fecha de ingreso del paciente a la unidad de atención. | AAAA-MM-DD |
12 | FECHA_SINTOMAS | Idenitifica la fecha en que inició la sintomatología del paciente. | AAAA-MM-DD |
13 | FECHA_DEF | Identifica la fecha en que el paciente falleció. | AAAA-MM-DD |
14 | INTUBADO | Identifica si el paciente requirió de intubación. | CATÁLOGO: SI_ NO |
15 | NEUMONIA | Identifica si al paciente se le diagnosticó con neumonía. | CATÁLOGO: SI_ NO |
16 | EDAD | Identifica la edad del paciente. | NÚMERICA EN AÑOS |
17 | NACIONALIDAD | Identifica si el paciente es mexicano o extranjero. | CATÁLOGO: NACIONALIDAD |
18 | EMBARAZO | Identifica si la paciente está embarazada. | CATÁLOGO: SI_ NO |
19 | HABLA_LENGUA_INDIG | Identifica si el paciente habla lengua índigena. | CATÁLOGO: SI_ NO |
20 | DIABETES | Identifica si el paciente tiene un diagnóstico de diabetes. | CATÁLOGO: SI_ NO |
21 | EPOC | Identifica si el paciente tiene un diagnóstico de EPOC. | CATÁLOGO: SI_ NO |
22 | ASMA | Identifica si el paciente tiene un diagnóstico de asma. | CATÁLOGO: SI_ NO |
23 | INMUSUPR | Identifica si el paciente presenta inmunosupresión. | CATÁLOGO: SI_ NO |
24 | HIPERTENSION | Identifica si el paciente tiene un diagnóstico de hipertensión. | CATÁLOGO: SI_ NO |
25 | OTRAS_COM | Identifica si el paciente tiene diagnóstico de otras enfermedades. | CATÁLOGO: SI_ NO |
26 | CARDIOVASCULAR | Identifica si el paciente tiene un diagnóstico de enfermedades cardiovasculares. | CATÁLOGO: SI_ NO |
27 | OBESIDAD | Identifica si el paciente tiene diagnóstico de obesidad. | CATÁLOGO: SI_ NO |
28 | RENAL_CRONICA | Identifica si el paciente tiene diagnóstico de insuficiencia renal crónica. | CATÁLOGO: SI_ NO |
29 | TABAQUISMO | Identifica si el paciente tiene hábito de tabaquismo. | CATÁLOGO: SI_ NO |
30 | OTRO_CASO | Identifica si el paciente tuvo contacto con algún otro caso diagnósticado con SARS CoV-2 | CATÁLOGO: SI_ NO |
31 | RESULTADO | Identifica el resultado del análisis de la muestra reportado por el laboratorio de la Red Nacional de Laboratorios de Vigilancia Epidemiológica (INDRE, LESP y LAVE). (Catálogo de resultados diagnósticos anexo). | CATÁLOGO: RESULTADO |
32 | MIGRANTE | Identifica si el paciente es una persona migrante. | CATÁLOGO: SI_ NO |
33 | PAIS_NACIONALIDAD | Identifica la nacionalidad del paciente. | TEXTO, 99= SE IGNORA |
34 | PAIS_ORIGEN | Identifica el país del que partió el paciente rumbo a México. | TEXTO, 97= NO APLICA |
35 | UCI | Identifica si el paciente requirió ingresar a una Unidad de Cuidados Intensivos. | CATÁLOGO: SI_ NO |
On an Excel file on each sheet there is a dictionary for the categorical variables. The file is loaded into a list. Each sheet (or catalog) becomes an element of the list.
dictionaries <- NULL
dict.colnames <- c("ORIGEN", "SECTOR", "SEXO", "TIPO_PACIENTE", "SI_NO",
"NACIONALIDAD", "RESULTADO", "ENTIDADES", "MUNICIPIOS")
i <- 1
for(s in dict.colnames){
dictionaries[[s]] <- read_excel("data_covid19_mexico/diccionario_datos_covid19/Catalogos_0412.xlsx",
sheet=i)
i <- i + 1
}
The categorical variables are converted into class factor and the levels and labels are obtained from the dictionaries list.
covidmx$ORIGEN <- factor(covidmx$ORIGEN,
levels=dictionaries[["ORIGEN"]]$CLAVE,
labels=dictionaries[["ORIGEN"]]$DESCRIPCIÓN)
covidmx$SECTOR <- factor(covidmx$SECTOR,
levels=dictionaries[["SECTOR"]]$CLAVE,
labels=dictionaries[["SECTOR"]]$DESCRIPCIÓN)
covidmx$SEXO <- factor(covidmx$SEXO,
levels=dictionaries[["SEXO"]]$CLAVE,
labels=dictionaries[["SEXO"]]$DESCRIPCIÓN)
covidmx$TIPO_PACIENTE <- factor(covidmx$TIPO_PACIENTE,
levels=dictionaries[["TIPO_PACIENTE"]]$CLAVE,
labels=dictionaries[["TIPO_PACIENTE"]]$DESCRIPCIÓN)
covidmx$NACIONALIDAD <- factor(covidmx$NACIONALIDAD,
levels=dictionaries[["NACIONALIDAD"]]$CLAVE,
labels=dictionaries[["NACIONALIDAD"]]$DESCRIPCIÓN)
covidmx$RESULTADO <- factor(covidmx$RESULTADO,
levels=dictionaries[["RESULTADO"]]$CLAVE,
labels=dictionaries[["RESULTADO"]]$DESCRIPCIÓN)
## Labels of dictionari of ENTIDADES and MUNICIPIOS is character, it is transformed to integer
dictionaries[["ENTIDADES"]]$CLAVE_ENTIDAD <- as.integer(dictionaries[["ENTIDADES"]]$CLAVE_ENTIDAD)
dictionaries[["MUNICIPIOS"]]$CLAVE_MUNICIPIO <- as.integer(dictionaries[["MUNICIPIOS"]]$CLAVE_MUNICIPIO)
covidmx$ENTIDAD_NAC <- factor(covidmx$ENTIDAD_NAC,
levels=dictionaries[["ENTIDADES"]]$CLAVE_ENTIDAD,
labels=dictionaries[["ENTIDADES"]]$ENTIDAD_FEDERATIVA)
covidmx$ENTIDAD_RES <- factor(covidmx$ENTIDAD_RES,
levels=dictionaries[["ENTIDADES"]]$CLAVE_ENTIDAD,
labels=dictionaries[["ENTIDADES"]]$ENTIDAD_FEDERATIVA)
covidmx$ENTIDAD_UM <- factor(covidmx$ENTIDAD_UM,
levels=dictionaries[["ENTIDADES"]]$CLAVE_ENTIDAD,
labels=dictionaries[["ENTIDADES"]]$ENTIDAD_FEDERATIVA)
covidmx$MUNICIPIO_RES <- factor(covidmx$MUNICIPIO_RES,
levels=dictionaries[["MUNICIPIOS"]]$CLAVE_MUNICIPIO,
labels=dictionaries[["MUNICIPIOS"]]$MUNICIPIO)
## SI-NO columns
si_no.columnames <- c("INTUBADO", "NEUMONIA", "EMBARAZO", "HABLA_LENGUA_INDIG",
"DIABETES", "EPOC", "ASMA", "INMUSUPR", "HIPERTENSION",
"OTRA_COM", "CARDIOVASCULAR", "OBESIDAD", "RENAL_CRONICA",
"TABAQUISMO", "OTRO_CASO", "MIGRANTE", "UCI")
for(s in si_no.columnames){
covidmx[[s]] <- factor(covidmx[[s]],
levels=dictionaries[["SI_NO"]]$CLAVE,
labels=dictionaries[["SI_NO"]]$DESCRIPCIÓN)
}
## Clean all temporary variables
rm(i, s, dict.colnames, si_no.columnames, dictionaries)
The structure of the transformed dataframe is the following.
str(covidmx)
## 'data.frame': 1176931 obs. of 35 variables:
## $ FECHA_ACTUALIZACION: Factor w/ 1 level "2020-08-16": 1 1 1 1 1 1 1 1 1 1 ...
## $ ID_REGISTRO : Factor w/ 1176931 levels "000001","000002",..: 1145126 625165 159252 725228 844154 58254 547194 402130 48832 382044 ...
## $ ORIGEN : Factor w/ 3 levels "USMER","FUERA DE USMER",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ SECTOR : Factor w/ 14 levels "CRUZ ROJA","DIF",..: 3 3 3 3 3 3 4 3 4 3 ...
## $ ENTIDAD_UM : Factor w/ 36 levels "AGUASCALIENTES",..: 15 25 27 15 25 15 19 25 9 2 ...
## $ SEXO : Factor w/ 3 levels "MUJER","HOMBRE",..: 1 1 2 2 1 2 1 1 2 1 ...
## $ ENTIDAD_NAC : Factor w/ 36 levels "AGUASCALIENTES",..: 15 25 27 7 25 9 19 25 9 2 ...
## $ ENTIDAD_RES : Factor w/ 36 levels "AGUASCALIENTES",..: 15 25 27 15 25 15 19 25 9 2 ...
## $ MUNICIPIO_RES : Factor w/ 2326 levels "AGUASCALIENTES",..: 156 6 6 161 6 167 10 6 5 2 ...
## $ TIPO_PACIENTE : Factor w/ 3 levels "AMBULATORIO",..: 1 2 1 2 1 2 1 1 1 1 ...
## $ FECHA_INGRESO : Factor w/ 229 levels "2020-01-01","2020-01-02",..: 135 183 157 170 175 148 122 161 123 147 ...
## $ FECHA_SINTOMAS : Factor w/ 229 levels "2020-01-01","2020-01-02",..: 132 180 156 156 162 144 120 156 122 144 ...
## $ FECHA_DEF : Factor w/ 175 levels "2020-01-13","2020-01-14",..: 175 175 175 175 175 175 175 175 175 175 ...
## $ INTUBADO : Factor w/ 5 levels "SI","NO","NO APLICA",..: 3 2 3 2 3 2 3 3 3 3 ...
## $ NEUMONIA : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 1 2 1 2 1 2 2 2 2 ...
## $ EDAD : int 33 25 51 40 45 33 43 50 52 45 ...
## $ NACIONALIDAD : Factor w/ 3 levels "MEXICANA","EXTRANJERA",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ EMBARAZO : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 3 3 2 3 2 2 3 2 ...
## $ HABLA_LENGUA_INDIG : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 2 2 2 2 2 5 ...
## $ DIABETES : Factor w/ 5 levels "SI","NO","NO APLICA",..: 1 2 2 2 2 2 2 2 2 2 ...
## $ EPOC : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ ASMA : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ INMUSUPR : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ HIPERTENSION : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 2 2 2 1 2 2 ...
## $ OTRA_COM : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 1 2 2 1 2 2 ...
## $ CARDIOVASCULAR : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 2 2 2 1 2 2 ...
## $ OBESIDAD : Factor w/ 5 levels "SI","NO","NO APLICA",..: 1 1 2 2 1 2 2 1 2 2 ...
## $ RENAL_CRONICA : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 2 2 2 2 2 1 ...
## $ TABAQUISMO : Factor w/ 5 levels "SI","NO","NO APLICA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ OTRO_CASO : Factor w/ 5 levels "SI","NO","NO APLICA",..: 1 5 2 2 1 2 5 1 5 1 ...
## $ RESULTADO : Factor w/ 3 levels "Positivo SARS-CoV-2",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ MIGRANTE : Factor w/ 5 levels "SI","NO","NO APLICA",..: 5 5 5 5 5 5 5 5 5 5 ...
## $ PAIS_NACIONALIDAD : Factor w/ 114 levels "Alemania","Archipiélago de Svalbard",..: 69 69 69 69 69 69 69 69 69 69 ...
## $ PAIS_ORIGEN : Factor w/ 71 levels "99","Alemania",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ UCI : Factor w/ 5 levels "SI","NO","NO APLICA",..: 3 2 3 2 3 2 3 3 3 3 ...
The dataframe with COVID-19 data is stored in a csv for further analysis.
write.csv(covidmx, file = "data_covid19_mexico/200816COVID19MEXICO_T.csv")