Auxiliares de lectura para la base de la Direccion General de Epidemiologia
Código:R/read_datos_abiertos_aux.R
read_datos_abiertos_zip.Rd
La funcion principal es read_datos_abiertos()
la cual decide si los lee de zip
,
duckdb
o csv
Tambien puedes usar las auxiliares respectivas
read_datos_abiertos_zip()
Si sólo descargaste los datos de la DGE en.zip
read_datos_abiertos_csv()
Si descargaste los datos de la DGE en.zip
y los descomprimiste.read_datos_abiertos_duckdb()
Si ya creaste tu table enduckdb
Uso
read_datos_abiertos_zip(
datos_abiertos_zip_paths,
diccionario_zip_path = NULL,
diccionario_unzipped_path = NULL,
diccionario = NULL,
read_format = c("duckdb", "tibble"),
tblname = "covidmx",
drv = duckdb::duckdb(),
dbdir = tempfile(fileext = ".duckdb"),
colClasses = get_col_class(),
download_process = c("pins", "download.file"),
site.covid.dic = paste0("http://datosabiertos.salud.", "gob.mx/gobmx/salud/datos_a",
"biertos/diccionario_datos_", "covid19.zip"),
unzip_command = Sys.getenv("unzip_command"),
unzip_args = Sys.getenv("unzip_args"),
unzip_args_dict = list(exdir = ".", overwrite = TRUE),
check_unzip_install = TRUE,
clear_zip = (download_process[1] != "pins"),
clear_csv = TRUE,
use_dict = TRUE,
quiet = FALSE,
cache_datos = NULL,
use_cache_on_failure = TRUE,
cache_diccionario = NULL,
force_download = FALSE,
show_warnings = TRUE,
board_url_name = "datos_abiertos",
board_url_name_dict = "diccionario_covid",
download_file_args = list(method = "curl", destfile = tempfile(), quiet = quiet),
descarga_db_diccionario_ssa_args = list(),
...
)
read_datos_abiertos_csv(
datos_abiertos_unzipped_path,
diccionario_zip_path = NULL,
diccionario_unzipped_path = NULL,
diccionario = NULL,
read_format = c("duckdb", "tibble"),
tblname = "covidmx",
drv = duckdb::duckdb(),
dbdir = tempfile(fileext = ".duckdb"),
colClasses = get_col_class(),
download_process = c("pins", "download.file"),
site.covid.dic = paste0("http://datosabiertos.salud.", "gob.mx/gobmx/salud/datos_a",
"biertos/diccionario_datos_", "covid19.zip"),
unzip_args_dict = list(exdir = ".", overwrite = TRUE),
clear_csv = TRUE,
quiet = FALSE,
use_cache_on_failure = TRUE,
cache_diccionario = NULL,
force_download = FALSE,
show_warnings = TRUE,
board_url_name_dict = "diccionario_covid",
download_file_args = list(method = "curl", destfile = tempfile(), quiet = quiet),
descarga_db_diccionario_ssa_args = list(),
...
)
read_datos_abiertos_duckdb(
datos_abiertos_tbl,
drv = duckdb::duckdb(),
tblname = "covidmx",
pragma_memory_limit = Sys.getenv("pragma_memory_limit"),
diccionario_zip_path = NULL,
diccionario_unzipped_path = NULL,
diccionario = NULL,
download_process = c("pins", "download.file"),
site.covid.dic = paste0("http://datosabiertos.salud.", "gob.mx/gobmx/salud/datos_a",
"biertos/diccionario_datos_", "covid19.zip"),
unzip_args_dict = list(exdir = ".", overwrite = TRUE),
clear_zip = download_process[1] != "pins",
clear_csv = TRUE,
use_dict = TRUE,
quiet = FALSE,
use_cache_on_failure = TRUE,
cache_diccionario = NULL,
force_download = FALSE,
show_warnings = TRUE,
board_url_name_dict = "diccionario_covid",
download_file_args = list(method = "curl", destfile = tempfile(), quiet = quiet),
descarga_db_diccionario_ssa_args = list(),
...
)
Argumentos
- datos_abiertos_zip_paths
(opcional) Camino a los datos abiertos si ya los descargaste en
zip
- diccionario_zip_path
(opcional) Camino al diccionario si ya losdescargaste en
zip
- diccionario_unzipped_path
(opcional) Camino al diccionario
csv
si ya lo descargaste y descomprimiste el archivozip
en uncsv
- diccionario
(opcional) Lo que resulta de realizar una descarga del diccionario usando
descarga_diccionario
- read_format
(opcional)
"duckdb"
o"tibble"
establece el formato de lectura de la base de datos. En la mayoria de los casos"tibble"
va a resultar en un error de memoria. La opcion de"duckdb"
siempre es mas rapida por lo cual es el default.- tblname
(opcional) Nombre de la tabla de
duckdb
donde guardar los datos por default se llamacovidmx
. Solo es relevante si estas usando el mismodbdir
para otro proyecto distinto.- drv
(opcional) Un driver para
dbConnect
(defaultduckdb::duckdb()
)- dbdir
(opcional) Direccion donde guardar la base de datos con terminacion
.duckdb
. Corresponde al argumento deduckdb::dbConnect__duckdb_driver()
- colClasses
(opcional) Clases de la columna para leer en
duckdb::read_csv_duckdb()
.- download_process
(opcional) Metodo para descargar ya sea
pins
odownload.file
. Se recomiendapins
pues guarda en memoria la fecha de la ultima descarga y analiza si ha pasado mas de un dia desde la descarga. En caso afirmativo verifica si el archivo ha cambiado y si hubo cambios entonces lo descarga.- site.covid.dic
(opcional) Sitio desde el cual descarga del diccionario de datos. La ultima verificacion del sitio fue el 6 de septiembre 2022.
- unzip_command
(opcional) Forma de extraer la base de datos de datos abiertos si
unzip
falla. La forma de llamarla es consystem2(unzip_command, args = c(unzip_args, file_download_data))
.- unzip_args
(opcional) Argumentos de extraccion de la base de datos de datos abiertos si
unzip
falla. La forma de llamarla es consystem2(unzip_command, args = c(unzip_args, file_download_data))
.- unzip_args_dict
(opcional) Lista de argumentos para usar
utils::unzip
en el diccionario de datos.- check_unzip_install
(opcional) Bandera de verificacion para checar si tienes lo necesario para unzippear los datos en el caso de que
unzip
no sirva.- clear_zip
(opcional) Si borrar los archivos
.zip
descargados para el diccionario y los datos abiertos. No se recomienda si estas usandopins
. Ve la nota para mas informacion.- clear_csv
(opcional) Si borrar los archivos
.csv
que se generan despues de abrir el zip. El default es que si pues en general solo requieres elduckdb
.- use_dict
(opcional) Si descargar el diccionario de
site.covid.dic
.- quiet
(opcional) Variable para no mostrar mensajes
- cache_datos
(opcional) Direccion donde guardar los datos en memoria usando
pins
para no tener que volver a descargarlos si nada ha cambiado- use_cache_on_failure
(opcional) Booleana. Establece que si no se pueden descargar datos nuevos utilice los que tenga en memoria. Por default es
TRUE
.- cache_diccionario
(opcional) Direccion donde guardar el diccionario en memoria usando
pins
para no tener que volver a descargarlo si nada ha cambiado- force_download
(opcional) Analiza si cambio el pin y descarga datos nuevos en caso afirmativo aunque haya pasado menos de un dia.
- show_warnings
(opcional) si arrojar
warnings
- board_url_name
(opcional) Establece el nombre del
pins::board_url
para los datos abiertos (si ya usas pins para que no se empalme). Por default se llamadatos_abiertos
- board_url_name_dict
(opcional) Establece el nombre del
pins::board_url
para los datos abiertos. Por default se llamadiccionario_covid
- download_file_args
(opcional) Lista de argumentos adicionales para
download.file
de los datos si se elige este metodo para descargar.- descarga_db_diccionario_ssa_args
(opcional) Lista con argumentos adicionales para el
pins::pin_download
de datos abiertos- ...
(opcional) Parametros adicionales para
DBI::dbConnect
.- datos_abiertos_unzipped_path
(opcional) Camino a los datos abiertos
csv
si ya los descargaste y descomprimiste el archivozip
en uncsv
- datos_abiertos_tbl
(opcional) Camino a un archivo
.duckdb
con los datos formateados- pragma_memory_limit
(opcional) Limite de memoria para el programa (ver PRAGMAS). Cambialo a que sea mas o menos la mitad de tu RAM. La forma mas sencilla es como una variable ambiental con
Sys.setenv('pragma_memory_limit' = '1GB')
por ejemplo para un limite de 1 gigabyte.
Valor
Lista de valores:
dats - Tabla conectada mediante
DBI::dbConnect
(siduckdb
) o tibble (sitibble
)disconnect - Funcion para cerrar la conexion a la base de datos.
dict - Lista de
tibble
s con el diccionario de datos para cada variable
Nota
Para guardar tu base con duckdb
cambia el dbdir
a un archivo .duckdb
. Como ejemplo
dbdir = "ejemplo.duckdb"
.
Ejemplos
# \donttest{
# Lee los datos de duckdb una vez descargados
# quita la opción de sites.covid para descargar los de la DGE.
# Esto es solo un ejemplo.
file_ejemplo <- tempfile(fileext = ".duckdb")
#Estos links deben omitirse en una corrida normal. Se incluyen por ahora como ejemplo
#pero las opciones site.covid.dic y sites.covid deben eliminarse de abajo.
dlink <- "https://github.com/RodrigoZepeda/covidmx/raw/main/datos_abiertos_covid19.zip"
diclink <- "https://github.com/RodrigoZepeda/covidmx/raw/main/diccionario_datos_covid19.zip"
#En el ejemplo de R por normas de CRAN tenemos que hacerlo así pero en tu
#computadora puedes solo usar descargar datos sin el if else
if (RCurl::url.exists(dlink) & RCurl::url.exists(diclink)){
#Necesitamos la base para verificar los reads
datos_covid <- descarga_datos_abiertos(
dbdir = file_ejemplo,
sites.covid = dlink,
site.covid.dic = diclink,
show_warnings = FALSE
)
datos_covid$disconnect()
datos_covid <- read_datos_abiertos(file_ejemplo, show_warnings = FALSE,
site.covid.dic = diclink)
datos_covid$disconnect()
# Es lo mismo que:
datos_covid <- read_datos_abiertos_duckdb(file_ejemplo, show_warnings = FALSE,
site.covid.dic = diclink)
datos_covid$disconnect()
# Descarga los datos y lee de un zip guardandolos a la vez en
# base de nombre datos_desde_zip.duckdb
direccion_zip <- descarga_db_datos_abiertos_tbl(sites.covid = dlink, show_warnings = FALSE,
site.covid.dic = diclink)
datos_covid <- read_datos_abiertos(direccion_zip,
dbdir = file_ejemplo,
site.covid.dic = diclink,
show_warnings = FALSE
)
datos_covid$disconnect()
# Es lo mismo que:
datos_covid <- read_datos_abiertos_zip(direccion_zip,
site.covid.dic = diclink,
dbdir = file_ejemplo,
show_warnings = FALSE
)
datos_covid$disconnect()
# Descarga los datos y lee de un csv
direccion_zip <- descarga_db_datos_abiertos_tbl(sites.covid = dlink, show_warnings = FALSE)
direccion_csv <- unzip_db_datos_abiertos_tbl(direccion_zip)
datos_covid <- read_datos_abiertos(direccion_csv, show_warnings = FALSE,
site.covid.dic = diclink)
datos_covid$disconnect()
# Es lo mismo que:
direccion_csv <- unzip_db_datos_abiertos_tbl(direccion_zip)
datos_covid <- read_datos_abiertos_csv(direccion_csv, show_warnings = FALSE,
site.covid.dic = diclink)
datos_covid$disconnect()
}
#>
#> ── Hola esto es lo que hare hoy para ti: ───────────────────────────────────────
#> 1. Base de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descargar las bases de datos abiertos
#> • Descomprimir las bases de datos abiertos
#> • Consolidar en una sola base de datos
#> 2. Diccionario de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descargar el diccionario
#> • Descomprimir el diccionario
#> • Consolidar todos los diccionarios en una lista
#> 3. Unir datos y diccionario en una sola lista
#>
#> ── Comenzamos (por favor ten paciencia): ───────────────────────────────────────
#> ℹ Descargando la informacion...
#> ℹ Descomprimiendo los archivos .zip...
#> ℹ Consolidando los archivos .csv en duckdb...
#> ℹ Cargando los datos en duckdb...
#> ℹ Conectando a la tabla `covidmx` creada en duckdb...
#> ℹ Eliminando los archivos .csv
#> ✔ Terminado. No olvides desconectar la base con `datos_covid$disconnect()`
#> al terminar de trabajar.
#> ✔ Desconectado
#>
#> ── Hola esto es lo que hare hoy para ti: ───────────────────────────────────────
#> 1. Base de datos de covid-19 de la Direccion General de Epidemiologia:
#> ✔ Ya lo tienes.
#> 2. Diccionario de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descargar el diccionario
#> • Descomprimir el diccionario
#> • Consolidar todos los diccionarios en una lista
#> 3. Unir datos y diccionario en una sola lista
#>
#> ── Comenzamos (por favor ten paciencia): ───────────────────────────────────────
#> ℹ Conectando a la tabla `covidmx` creada en duckdb...
#> ✔ Terminado. No olvides desconectar la base con `datos_covid$disconnect()`
#> al terminar de trabajar.
#> ✔ Desconectado
#>
#> ── Hola esto es lo que hare hoy para ti: ───────────────────────────────────────
#> 1. Base de datos de covid-19 de la Direccion General de Epidemiologia:
#> ✔ Ya lo tienes.
#> 2. Diccionario de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descargar el diccionario
#> • Descomprimir el diccionario
#> • Consolidar todos los diccionarios en una lista
#> 3. Unir datos y diccionario en una sola lista
#>
#> ── Comenzamos (por favor ten paciencia): ───────────────────────────────────────
#> ℹ Conectando a la tabla `covidmx` creada en duckdb...
#> ✔ Terminado. No olvides desconectar la base con `datos_covid$disconnect()`
#> al terminar de trabajar.
#> ✔ Desconectado
#>
#> ── Hola esto es lo que hare hoy para ti: ───────────────────────────────────────
#> 1. Base de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descomprimir las bases de datos abiertos
#> • Consolidar en una sola base de datos
#> 2. Diccionario de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descargar el diccionario
#> • Descomprimir el diccionario
#> • Consolidar todos los diccionarios en una lista
#> 3. Unir datos y diccionario en una sola lista
#>
#> ── Comenzamos (por favor ten paciencia): ───────────────────────────────────────
#> ℹ Descomprimiendo los archivos .zip...
#> ℹ Consolidando los archivos .csv en duckdb...
#> ℹ Cargando los datos en duckdb...
#> ℹ Conectando a la tabla `covidmx` creada en duckdb...
#> ℹ Eliminando los archivos .csv
#> ✔ Terminado. No olvides desconectar la base con `datos_covid$disconnect()`
#> al terminar de trabajar.
#> ✔ Desconectado
#>
#> ── Hola esto es lo que hare hoy para ti: ───────────────────────────────────────
#> 1. Base de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descomprimir las bases de datos abiertos
#> • Consolidar en una sola base de datos
#> 2. Diccionario de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descargar el diccionario
#> • Descomprimir el diccionario
#> • Consolidar todos los diccionarios en una lista
#> 3. Unir datos y diccionario en una sola lista
#>
#> ── Comenzamos (por favor ten paciencia): ───────────────────────────────────────
#> ℹ Descomprimiendo los archivos .zip...
#> ℹ Consolidando los archivos .csv en duckdb...
#> ℹ Cargando los datos en duckdb...
#> ℹ Conectando a la tabla `covidmx` creada en duckdb...
#> ℹ Eliminando los archivos .csv
#> ✔ Terminado. No olvides desconectar la base con `datos_covid$disconnect()`
#> al terminar de trabajar.
#> ✔ Desconectado
#>
#> ── Hola esto es lo que hare hoy para ti: ───────────────────────────────────────
#> 1. Base de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Consolidar en una sola base de datos
#> 2. Diccionario de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descargar el diccionario
#> • Descomprimir el diccionario
#> • Consolidar todos los diccionarios en una lista
#> 3. Unir datos y diccionario en una sola lista
#>
#> ── Comenzamos (por favor ten paciencia): ───────────────────────────────────────
#> ℹ Consolidando los archivos .csv en duckdb...
#> ℹ Cargando los datos en duckdb...
#> ℹ Conectando a la tabla `covidmx` creada en duckdb...
#> ℹ Eliminando los archivos .csv
#> ✔ Terminado. No olvides desconectar la base con `datos_covid$disconnect()`
#> al terminar de trabajar.
#> ✔ Desconectado
#>
#> ── Hola esto es lo que hare hoy para ti: ───────────────────────────────────────
#> 1. Base de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Consolidar en una sola base de datos
#> 2. Diccionario de datos de covid-19 de la Direccion General de Epidemiologia:
#> • Descargar el diccionario
#> • Descomprimir el diccionario
#> • Consolidar todos los diccionarios en una lista
#> 3. Unir datos y diccionario en una sola lista
#>
#> ── Comenzamos (por favor ten paciencia): ───────────────────────────────────────
#> ℹ Consolidando los archivos .csv en duckdb...
#> ℹ Cargando los datos en duckdb...
#> ℹ Conectando a la tabla `covidmx` creada en duckdb...
#> ℹ Eliminando los archivos .csv
#> ✔ Terminado. No olvides desconectar la base con `datos_covid$disconnect()`
#> al terminar de trabajar.
#> ✔ Desconectado
# }