Ir al contenido

Conjunto de funciones para apoyar la descarga de datos abiertos de la Direccion General de Epidemiologia (DGE)

La funcion de descarga principal es descarga_datos_abiertos() llama las siguientes funciones en orden:

  • descarga_diccionario() Se encarga de descargar y formatear el diccionario de datos

  • descarga_db() Se encarga de descargar y formatear la base de datos

  • pega_db_datos_abiertos_tbl_y_diccionario() Pega ambos en el formato lista de covidmx

A su vez descarga_diccionario() ejecuta las siguientes para obtener el diccionario de datos:

  • descarga_db_diccionario_ssa() Descarga el diccionario de la DGE

  • unzip_db_diccionario_ssa() Libera el archivo zip descargado

  • parse_db_diccionario_ssa() Genera una lista de tiblles con el diccionario por variable

Por otro lado,descarga_db() ejecuta las siguientes para obtener los datos abiertos:

  • descarga_db_datos_abiertos_tbl() Descarga las bases de datos de covid de la DGE

  • unzip_db_datos_abiertos_tbl() Libera el archivo zip descargado

  • parse_db_datos_abiertos_tbl() Genera una base de datos en duckdb (o tibble) con la informacion

Si en algun momento se interrumpio la descarga o hubo problemas de conexion o detuviste el proceso de generacion de la base de datos abiertos puedes llamar a las funciones de read_datos_abiertos().

Uso

descarga_db(
  read_format = c("duckdb", "tibble"),
  tblname = "covidmx",
  pragma_memory_limit = Sys.getenv("pragma_memory_limit"),
  drv = duckdb::duckdb(),
  dbdir = tempfile(fileext = ".duckdb"),
  colClasses = get_col_class(),
  sites.covid = get_sites_covid(),
  download_process = c("pins", "download.file"),
  unzip_command = Sys.getenv("unzip_command"),
  unzip_args = Sys.getenv("unzip_args"),
  check_unzip_install = TRUE,
  clear_zip = (download_process[1] != "pins"),
  clear_csv = TRUE,
  force_download = FALSE,
  show_warnings = TRUE,
  datos_abiertos_zip_paths = NULL,
  datos_abiertos_unzipped_path = NULL,
  datos_abiertos_tbl = NULL,
  quiet = FALSE,
  board_url_name = "datos_abiertos",
  cache = NULL,
  use_cache_on_failure = TRUE,
  download_file_args = list(method = "curl", destfile = tempfile(), quiet = quiet),
  descarga_db_datos_abiertos_tbl_args = list(),
  ...
)

descarga_diccionario(
  download_process = c("pins", "download.file"),
  site.covid.dic = get_site_dic(),
  quiet = FALSE,
  clear_zip = download_process[1] != "pins",
  clear_csv = TRUE,
  diccionario_zip_path = NULL,
  diccionario_unzipped_path = NULL,
  diccionario = NULL,
  board_url_name_dict = "diccionario_covid",
  cache_diccionario = NULL,
  use_cache_on_failure = TRUE,
  force_download = FALSE,
  show_warnings = TRUE,
  download_file_args_dict = list(method = "curl", destfile = tempfile(), quiet = quiet),
  unzip_args_dict = list(exdir = ".", overwrite = TRUE),
  descarga_db_diccionario_ssa_args = list()
)

descarga_db_datos_abiertos_tbl(
  download_process = c("pins", "download.file"),
  sites.covid = get_sites_covid(),
  quiet = FALSE,
  board_url_name = "datos_abiertos",
  cache = NULL,
  use_cache_on_failure = TRUE,
  force_download = FALSE,
  show_warnings = TRUE,
  download_file_args = list(method = "curl", destfile = tempfile(), quiet = quiet),
  ...
)

descarga_db_diccionario_ssa(
  download_process = c("pins", "download.file"),
  site.covid.dic = get_site_dic(),
  quiet = FALSE,
  board_url_name_dict = "diccionario_covid",
  cache_diccionario = NULL,
  use_cache_on_failure = TRUE,
  force_download = FALSE,
  show_warnings = TRUE,
  download_file_args_dict = list(method = "curl", destfile = tempfile(), quiet = quiet),
  ...
)

unzip_db_datos_abiertos_tbl(
  datos_abiertos_zip_paths,
  unzip_command = Sys.getenv("unzip_command"),
  unzip_args = Sys.getenv("unzip_args"),
  check_unzip_install = TRUE,
  quiet = FALSE,
  clear_zip = FALSE
)

unzip_db_diccionario_ssa(
  diccionario_zip_path,
  unzip_args_dict = list(exdir = ".", overwrite = TRUE),
  clear_zip = FALSE
)

parse_db_diccionario_ssa(diccionario_unzipped_path, clear_csv = FALSE)

parse_db_datos_abiertos_tbl(
  datos_abiertos_unzipped_path,
  read_format = c("duckdb", "tibble"),
  pragma_memory_limit = Sys.getenv("pragma_memory_limit"),
  dbdir = tempfile(fileext = ".duckdb"),
  drv = duckdb::duckdb(),
  colClasses = get_col_class(),
  tblname = "covidmx",
  quiet = TRUE,
  clear_csv = FALSE,
  ...
)

pega_db_datos_abiertos_tbl_y_diccionario(datos_abiertos_tbl, diccionario)

Argumentos

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 llama covidmx. Solo es relevante si estas usando el mismo dbdir para otro proyecto distinto.

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.

drv

(opcional) Un driver para dbConnect (default duckdb::duckdb())

dbdir

(opcional) Direccion donde guardar la base de datos con terminacion .duckdb. Corresponde al argumento de duckdb::dbConnect__duckdb_driver()

colClasses

(opcional) Clases de la columna para leer en duckdb::read_csv_duckdb().

sites.covid

(opcional) Sitios web con el vinculo a los archivos .zip de l os datos abiertos. Puedes cambiarlo por uno de los historicos, por ejemplo. La estructura es c("nombre" = "url", "nombre2" = "url2"). La ultima verificacion del sitio web default fue el 6 de septiembre del 2022.

download_process

(opcional) Metodo para descargar ya sea pins o download.file. Se recomienda pins 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.

unzip_command

(opcional) Forma de extraer la base de datos de datos abiertos si unzip falla. La forma de llamarla es con system2(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 con system2(unzip_command, args = c(unzip_args, file_download_data)).

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 usando pins. 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 el duckdb.

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

datos_abiertos_zip_paths

(opcional) Camino a los datos abiertos si ya los descargaste en zip

datos_abiertos_unzipped_path

(opcional) Camino a los datos abiertos csv si ya los descargaste y descomprimiste el archivo zip en un csv

datos_abiertos_tbl

(opcional) Camino a un archivo .duckdb con los datos formateados

quiet

(opcional) Variable para no mostrar mensajes

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 llama datos_abiertos

cache

parametro para el cache de pins::board_url

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.

download_file_args

(opcional) Lista de argumentos adicionales para download.file de los datos si se elige este metodo para descargar.

descarga_db_datos_abiertos_tbl_args

(opcional) Lista con argumentos adicionales para el pins::pin_download de datos abiertos

...

Parametros adicionales para pins::pin_download

site.covid.dic

(opcional) Sitio desde el cual descarga del diccionario de datos. La ultima verificacion del sitio fue el 6 de septiembre 2022.

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 archivo zip en un csv

diccionario

(opcional) Lo que resulta de realizar una descarga del diccionario usando descarga_diccionario

board_url_name_dict

(opcional) Establece el nombre del pins::board_url para los datos abiertos. Por default se llama diccionario_covid

cache_diccionario

(opcional) Direccion donde guardar el diccionario en memoria usando pins para no tener que volver a descargarlo si nada ha cambiado

download_file_args_dict

(opcional) Lista de argumentos adicionales para download.file del diccionario si se elige este metodo de descarga.

unzip_args_dict

(opcional) Lista de argumentos para usar utils::unzip en el diccionario de datos.

descarga_db_diccionario_ssa_args

(opcional) Lista con argumentos adicionales para el pins::pin_download de datos abiertos

Valor

Lista de valores:

  • dats - Tabla conectada mediante duckdb::dbConnect__duckdb_driver() (si duckdb) o tibble (si tibble)

  • disconnect - Funcion para cerrar la conexion a la base de datos.

  • dict - Lista de tibbles con el diccionario de datos para cada variable

Ejemplos

# \donttest{
#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.
diclink   <- "https://github.com/RodrigoZepeda/covidmx/raw/main/diccionario_datos_covid19.zip"
dlink     <- "https://github.com/RodrigoZepeda/covidmx/raw/main/datos_abiertos_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)){
  
  # Descarga solo el diccionario no oficial (omite el site.covid.dic para el de DGE)
  diccionario <- descarga_diccionario(show_warnings = FALSE, site.covid.dic = diclink)

  # O bien descarga solo los datos abiertos de ejemplo desde Github
  # omite el dlink (o cámbialo por el vínculo correcto) para descargar los datos de la DGE
  datos_abiertos <- descarga_db(sites.covid = dlink, show_warnings = FALSE)

  # Pegalos en el formato que se necesita para el resto de funciones
  datos_covid <- pega_db_datos_abiertos_tbl_y_diccionario(datos_abiertos, diccionario)

  # Desconectamos
  datos_covid$disconnect()

  # Tambien puedes descargar paso por paso
  datos_abiertos <- descarga_db_datos_abiertos_tbl(
    sites.covid = dlink,
    show_warnings = FALSE
  ) |> # Descarga
  unzip_db_datos_abiertos_tbl() |> # Unzippea
  parse_db_datos_abiertos_tbl() # Duckdb

  # O bien el diccionario
  diccionario <- descarga_db_diccionario_ssa(site.covid.dic = diclink) |> # Descarga
  unzip_db_diccionario_ssa() |> # Unzippea
  parse_db_diccionario_ssa() # Tibble

  # Si descargaste cada uno por separado necesitas la funcion pega para
  # juntarlos en un unico objeto
  datos_covid <- pega_db_datos_abiertos_tbl_y_diccionario(datos_abiertos, diccionario)
}
#>  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
#> Warning: La descarga mas reciente de fue hace 0.84823 dias. Como tiene menos de un dia
#> usare esa. Escribe `force_download = TRUE` si quieres descargar de todas
#> formas. Para desactivar este mensaje `show_warnings = FALSE.`
# }