Este trabajo describe el análisis de los datos de préstamo de libros durante 2024 en la red de bibliotecas públicas de la ciudad de Madrid.
Cargamos los paquetes que utilizaremos en el análisis.
library(tidyverse)
library(stringr)
library(ineq)
library(scales)
library(DT)
Los datos mensuales de préstamo en 2024 están disponibles en el Portal de Datos Abiertos del Ayuntamiento de Madrid.
a2024.01 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-214-bibliotecas-prestamos-historico.csv")
a2024.02 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-216-bibliotecas-prestamos-historico.csv")
a2024.03 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-218-bibliotecas-prestamos-historico.csv")
a2024.04 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-220-bibliotecas-prestamos-historico.csv")
a2024.05 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-222-bibliotecas-prestamos-historico.csv")
a2024.06 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-224-bibliotecas-prestamos-historico.csv")
a2024.07 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-232-bibliotecas-prestamos-historico.csv")
a2024.08 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-228-bibliotecas-prestamos-historico.csv")
a2024.09 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-230-bibliotecas-prestamos-historico.csv")
a2024.10 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-233-bibliotecas-prestamos-historico.csv")
a2024.11 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-235-bibliotecas-prestamos-historico.csv")
a2024.12 <- read_csv2(
"https://datos.madrid.es/egob/catalogo/212700-237-bibliotecas-prestamos-historico.csv")
a2024.12 <- a2024.12[, colSums(!is.na(a2024.12)) > 0]
Agrupamos los datos mensuales de préstamo en un único fichero.
prestamos.2024 <- bind_rows(a2024.01,
a2024.02,
a2024.03,
a2024.04,
a2024.05,
a2024.06,
a2024.07,
a2024.08,
a2024.09,
a2024.10,
a2024.11,
a2024.12)
Seleccionamos los préstamos de libros.
prestamos.libros <- prestamos.2024 %>%
filter(prcocs == "LIB")
Si buscamos, por ejemplo, el número de préstamos de la novela “El camino del ninja” observamos que los títulos incluyen una barra que, en el catálogo de la biblioteca, sirve para separarlos del nombre del autor. Asimismo, se observa que la inconsistencia en el uso de mayúsculas iniciales provoca la existencia de dos entradas diferentes para la misma obra. Antes de proceder al análisis de los datos, resolveremos estos problemas.
prestamos.libros %>%
filter(str_detect(tititu, regex("El camino del ninja", ignore_case = TRUE))) %>%
count(tititu, tiauto, sort = TRUE)
## # A tibble: 2 × 3
## tititu tiauto n
## <chr> <chr> <int>
## 1 El Camino del Ninja / Gómez-Jurado, Juan (1977-) 272
## 2 El camino del ninja / Gómez-Jurado, Juan (1977-) 22
Eliminamos de los títulos las barras que sirven, en el catálogo de la biblioteca, para separarlos del nombre del autor.
prestamos.libros$tititu <- gsub(" */ *$", "", prestamos.libros$tititu)
Convertimos todos los títulos a minúsculas.
prestamos.libros <- prestamos.libros %>%
mutate(tititu = str_to_lower(tititu))
Separamos en dos ficheros los préstamos a usuarios adultos e infantiles.
adulto <- prestamos.libros %>%
filter(pradul == "1")
infantil <- prestamos.libros %>%
filter(pradul == "0")
Nos quedamos con los datos de autores y títulos, que serán los que analizaremos. También conservamos el ISBN para buscar las obras en el catálogo.
adulto <- adulto %>%
select(autor = tiauto,
titulo = tititu,
ISBN = tiisxn)
infantil <- infantil %>%
select(autor = tiauto,
titulo = tititu,
ISBN = tiisxn)
Para determinar el número de préstamos de cada obra, agrupamos los registros por autor y, a continuación, por título. No podemos hacer el recuento directamente por título ya que hay casos de diferentes obras con el mismo título. Por ejemplo, numerosos autores han escrito “Diarios”. Conservamos el primer ISBN para buscar la obra en el catálogo.
prestamos <- adulto %>%
group_by(autor, titulo) %>%
summarise(prestamos = n(),
ISBN = first(ISBN),
.groups = "drop")
La siguiente tabla muestra, para cada autor, el número de títulos prestados y el total de préstamos. Es posible modificar el número de registros que se visualizan y realizar búsquedas.
autores <- prestamos %>%
filter(!is.na(autor)) %>%
group_by(autor) %>%
summarise(num_titulos = n(),
total_prestamos = sum(prestamos), .groups = "drop")
autores_ordenados <- autores %>%
arrange(desc(total_prestamos))
datatable(autores_ordenados,
options = list(pageLength = 10),
rownames = FALSE)
La siguiente tabla muestra el número de préstamos de cada título.
tabla_prestamos <- prestamos %>%
arrange(desc(prestamos)) %>%
select(1:3)
datatable(tabla_prestamos,
options = list(pageLength = 10),
rownames = FALSE)