Ir al contenido

read_datos_abiertos Lee los datos abiertos almacenados en tu base de duckdb que bajaste con descarga_datos_abiertos. Intenta de manera automática determinar si los lee de duckdb, csv ó zip

Uso

read_datos_abiertos(
  datos_abiertos_path = NULL,
  dbdir = tempfile(fileext = ".duckdb"),
  tblname = "covidmx",
  pragma_memory_limit = Sys.getenv("pragma_memory_limit"),
  drv = duckdb::duckdb(),
  colClasses = get_col_class(),
  read_format = c("duckdb", "tibble"),
  ...
)

Argumentos

datos_abiertos_path

(obligatorio) Camino a los datos abiertos si son un zip, un csv o un .duckdb

dbdir

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

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

colClasses

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

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.

...

(opcional) parametros adicionales para descarga_datos_abiertos()

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{
#Archivo temporal donde guardar las cosas es cualquier .duckdb
file_duck <- 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"

if (RCurl::url.exists(dlink) & RCurl::url.exists(diclink)){
  # EJEMPLO 0: Descarga los datos abiertos en archivo file_duck
  descarga_datos_abiertos(dbdir = file_duck, sites.covid = dlink, show_warnings = FALSE, 
      site.covid.dic = diclink)$disconnect()

  # EJEMPLO 1: Lee los datos de duckdb una vez descargados
  datos_covid <- read_datos_abiertos(file_duck, show_warnings = FALSE, 
                                      site.covid.dic = diclink) # Lee duckdb
  datos_covid$disconnect()

# EJEMPLO 2: Lee los datos desde un zip descargado
# Descarga archivos de la DGE y guarda el zip
direccion_zip <- descarga_db_datos_abiertos_tbl(sites.covid = dlink, show_warnings = FALSE)
# Lee zip
datos_covid <- read_datos_abiertos(direccion_zip, dbdir = file_duck, show_warnings = FALSE,
                    site.covid.dic = diclink)
datos_covid$disconnect()

# EJEMPLO 3: Lee los datos desde un zip descargado
# Descarga archivos zip de la DGE
direccion_zip <- descarga_db_datos_abiertos_tbl(sites.covid = dlink, show_warnings = FALSE)
direccion_csv <- unzip_db_datos_abiertos_tbl(direccion_zip) # Descomprime el zip para tener csv
# Lee los csv
datos_covid <- read_datos_abiertos(direccion_csv, dbdir = file_duck, show_warnings = FALSE,
                                     site.covid.dic = diclink) 
datos_covid$disconnect()

# EJEMPLO 4: Si ya tenias el diccionario lo puedes agregar
# Simula la idea de ya tener el diccionario
diccionario <- descarga_diccionario(show_warnings = FALSE, site.covid.dic = diclink) 
datos_covid <- read_datos_abiertos(file_duck, diccionario = diccionario, show_warnings = FALSE)
datos_covid$disconnect()

# EJEMPLO 5: Si ya tenias el diccionario como archivo zip
# Descarga el diccionario para tenerlo como zip
diccionario_zip <- descarga_db_diccionario_ssa(show_warnings = FALSE, site.covid.dic = diclink) 
datos_covid <- read_datos_abiertos(file_duck, diccionario_zip_path = diccionario_zip, 
                                    show_warnings = FALSE)
datos_covid$disconnect()

# EJEMPLO 6: Si ya tenias el diccionario como archivo xlsx
# Descarga el diccionario para tenerlo como zip
diccionario_zip <- descarga_db_diccionario_ssa(show_warnings = FALSE, site.covid.dic = diclink)
# Abre el csv del diccionario
diccionario_csv <- unzip_db_diccionario_ssa(diccionario_zip) 
datos_covid <- read_datos_abiertos(file_duck,
  diccionario_unzipped_path = diccionario_csv,
  show_warnings = FALSE
)
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:
#>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:
#>  Ya lo tienes.
#> 2. Diccionario de datos de covid-19 de la Direccion General de Epidemiologia:
#>  Ya lo tienes.
#> 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:
#>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:
#>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
# }