Code
library(tidyverse)
library(readxl)
library(openxlsx)
library(DBI)
library(RSQLite)title: “Semana 05 - Lectura de Archivos y Bases de Datos” author: “Johamnely Mateo” date: today
format: html: toc: true number-sections: true code-fold: true
execute: warning: false message: false —
En esta práctica se realiza un proceso de ingesta de datos utilizando tres fuentes distintas: archivos CSV, archivos Excel y una base de datos SQLite. Posteriormente se realizan consultas y análisis básicos para validar la correcta integración de los datos.
library(tidyverse)
library(readxl)
library(openxlsx)
library(DBI)
library(RSQLite)Se carga el archivo empleados.csv especificando manualmente los tipos de datos de cada columna.
empleados_csv <- read_csv(
"empleados.csv",
col_types = cols(
id_empleado = col_character(),
nombre = col_character(),
departamento = col_character(),
salario_mensual = col_double(),
fecha_ingreso = col_date()
)
)
empleados_csv# A tibble: 20 × 5
id_empleado nombre departamento salario_mensual fecha_ingreso
<chr> <chr> <chr> <dbl> <date>
1 001 Ana Torres Tecnología 58000 2019-03-15
2 002 Pedro Méndez Auditoría 45000 2021-07-01
3 003 María López Tecnología 63000 2018-11-20
4 004 Luis García RRHH 41000 2022-01-10
5 005 Carmen Díaz Auditoría 52000 2020-05-30
6 006 Carlos Mendoza Tecnología 70000 2017-04-12
7 007 Elena Rostova Riesgo 65000 2021-09-18
8 008 Jorge Ortiz Finanzas 48000 2023-02-05
9 009 Lucía Blanco RRHH 39000 2022-11-11
10 010 Andrés Castro Riesgo 59000 2020-08-24
11 011 Sofia Martínez Tecnología 61000 2019-06-30
12 012 Ricardo Gómez Auditoría 47000 2022-04-15
13 013 Daniela Vega Finanzas 53000 2021-01-20
14 014 Manuel Soler Tecnología 55000 2020-10-05
15 015 Beatriz Luna Riesgo 67000 2018-05-14
16 016 Roberto Peña Auditoría 51000 2023-07-19
17 017 Irene Castillo RRHH 42000 2021-12-01
18 018 Fernando Plaza Finanzas 46000 2022-08-10
19 019 Gabriela Núñez Tecnología 72000 2016-11-03
20 020 Héctor Vargas Riesgo 58000 2020-02-28
glimpse(empleados_csv)Rows: 20
Columns: 5
$ id_empleado <chr> "001", "002", "003", "004", "005", "006", "007", "008"…
$ nombre <chr> "Ana Torres", "Pedro Méndez", "María López", "Luis Gar…
$ departamento <chr> "Tecnología", "Auditoría", "Tecnología", "RRHH", "Audi…
$ salario_mensual <dbl> 58000, 45000, 63000, 41000, 52000, 70000, 65000, 48000…
$ fecha_ingreso <date> 2019-03-15, 2021-07-01, 2018-11-20, 2022-01-10, 2020-…
datos_2022 <- empleados_csv %>%
filter(format(fecha_ingreso,"%Y") <= "2022") %>%
select(id_empleado,nombre,departamento,salario_mensual)
datos_2023 <- empleados_csv %>%
select(id_empleado,nombre,departamento,salario_mensual)
lista_hojas <- list(
"2022" = datos_2022,
"2023" = datos_2023
)
write.xlsx(lista_hojas,"empleados.xlsx")sheet_2022 <- read_excel("empleados.xlsx", sheet = "2022")
sheet_2023 <- read_excel("empleados.xlsx", sheet = "2023")empleados_excel <- bind_rows(
mutate(sheet_2022, anio = 2022),
mutate(sheet_2023, anio = 2023)
)
empleados_excel# A tibble: 38 × 5
id_empleado nombre departamento salario_mensual anio
<chr> <chr> <chr> <dbl> <dbl>
1 001 Ana Torres Tecnología 58000 2022
2 002 Pedro Méndez Auditoría 45000 2022
3 003 María López Tecnología 63000 2022
4 004 Luis García RRHH 41000 2022
5 005 Carmen Díaz Auditoría 52000 2022
6 006 Carlos Mendoza Tecnología 70000 2022
7 007 Elena Rostova Riesgo 65000 2022
8 009 Lucía Blanco RRHH 39000 2022
9 010 Andrés Castro Riesgo 59000 2022
10 011 Sofia Martínez Tecnología 61000 2022
# ℹ 28 more rows
promedio_departamento <- empleados_excel %>%
group_by(departamento) %>%
summarise(
promedio_salario = mean(salario_mensual),
.groups = "drop"
)
promedio_departamento# A tibble: 5 × 2
departamento promedio_salario
<chr> <dbl>
1 Auditoría 48429.
2 Finanzas 49200
3 RRHH 40667.
4 Riesgo 62250
5 Tecnología 63167.
con <- dbConnect(
SQLite(),
"empleados.sqlite"
)empleados_bd <- tibble(
id_empleado = c("001","002","003","004","005"),
anio = c(2023,2023,2022,2023,2022),
monto_total_año = c(
696000,
540000,
756000,
492000,
624000
)
)
empleados_bd# A tibble: 5 × 3
id_empleado anio monto_total_año
<chr> <dbl> <dbl>
1 001 2023 696000
2 002 2023 540000
3 003 2022 756000
4 004 2023 492000
5 005 2022 624000
dbWriteTable(
con,
"empleados",
empleados_bd,
overwrite = TRUE
)consulta_2023 <- dbGetQuery(
con,
"SELECT * FROM empleados
WHERE anio = 2023"
)
consulta_2023 id_empleado anio monto_total_año
1 001 2023 696000
2 002 2023 540000
3 004 2023 492000
dbListTables(con)[1] "empleados"
dbDisconnect(con)Durante esta práctica se trabajó con diferentes fuentes de datos utilizando herramientas del ecosistema Tidyverse y DBI. Se realizó la lectura de archivos CSV y Excel, la integración de información proveniente de múltiples hojas, el cálculo de estadísticas descriptivas y la creación y consulta de una base de datos SQLite. Estas actividades permiten comprender el flujo completo de ingesta y procesamiento de datos en R.