Auxiliares para la descarga de datos abiertos
Código:R/descarga_datos_abiertos_aux.R
descarga_db.Rd
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 datosdescarga_db()
Se encarga de descargar y formatear la base de datospega_db_datos_abiertos_tbl_y_diccionario()
Pega ambos en el formato lista decovidmx
A su vez descarga_diccionario()
ejecuta las siguientes para obtener el diccionario de datos:
descarga_db_diccionario_ssa()
Descarga el diccionario de la DGEunzip_db_diccionario_ssa()
Libera el archivozip
descargadoparse_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 DGEunzip_db_datos_abiertos_tbl()
Libera el archivozip
descargadoparse_db_datos_abiertos_tbl()
Genera una base de datos enduckdb
(otibble
) 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 llamacovidmx
. Solo es relevante si estas usando el mismodbdir
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
(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()
.- 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 esc("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
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.- 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))
.- 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
.- 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 archivozip
en uncsv
- 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 llamadatos_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 archivozip
en uncsv
- 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 llamadiccionario_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()
(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
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.`
# }