Ir al contenido

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 en duckdb

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

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

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().

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.

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 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)).

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 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.

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

board_url_name_dict

(opcional) Establece el nombre del pins::board_url para los datos abiertos. Por default se llama diccionario_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 archivo zip en un csv

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 (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

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
# }