Inauguro este espacio escribiendo sobre cosas que me gustan y por las que me interesé en las bases de datos. Una de esas cosas es la de recopilar información de la internet y jugar con ella, con liberad y quizás como detonante de otras ideas.
Un ejemplo es la base de la Fundación Barragán, establecida en 1996 en Birsfelden en Suiza. Llegué a ella por una discusión en twitter y me impresioné del trabajo tan minucioso de la fundación por recuerar el legado de Barragán. Pensé que sería interesante tener esa información en una base de datos y jugar con ella a voluntad. Acá les comparto el proceso.
Bibliotecas
Voy a usar el conjunto de paquetes del tidyverse
para el tratamiento general de los datos y el raspador web (scrapeador) rvest
.
pacman::p_load(tidyverse, rvest, rayshader, tmap)
Definir el URL
Extraeré la información Barragán en mi computadora.
url <- "https://www.barragan-foundation.org/works/list"
Iniciar el raspado (scraping)
Utilicé Selector Gadget para seleccionar en la página de la Fundación Barragán las ubicaciones de las piezas de información que necesitaba. Esta herramiente me permitió por ejemplo, seleccionar todos los años de las obras gracias que están ubicadas en .work-year. Al poner esta ubicación en el comando html_nodes()
puedo extraer todo lo que se encuentre en ese lugar.
Así fue como construí un objeto para cada uno de los elementos que necesitaba. Probablemente este es un buen espacio para pensar en una función o en un apply
que ahorre líneas de código.
yr <- read_html(url) %>%
html_nodes(".work-year") %>%
html_text()
titulo <- read_html(url) %>%
html_nodes(".work-title") %>%
html_text()
categoria <- read_html(url) %>%
html_nodes(".category") %>%
html_text()
colaboracion <- read_html(url) %>%
html_nodes(".meta-collab") %>%
html_text()
locacion <- read_html(url) %>%
html_nodes(".short-location") %>%
html_text()
Coordenadas
url_map <- "https://www.barragan-foundation.org/works/map"
lat <- read_html(url_map) %>%
html_nodes("section")%>%
html_attr("data-lat")
long <- read_html(url_map) %>%
html_nodes("section")%>%
html_attr("data-lon")
dir <- read_html(url_map) %>%
html_nodes("section")%>%
html_attr("data-addr")
Pegamos todo en un tibble
Uní todas las partes que fui recolectando en una sola tabla.
barragan <- tibble(
year = yr %>% str_squish(),
titulo,
categoria = categoria %>% str_squish(),
colaboracion=colaboracion %>% str_squish(),
locacion=locacion %>% str_squish(),
latitud = lat,
longitud = long,
direccion = dir
)
glimpse(barragan)
Rows: 168
Columns: 8
$ year "1927", "1927, 1936", "Late 1920s", "L~
$ titulo "Houses for Adolfo Robles Castillo", "~
$ categoria "Semi-detached residences", "Townhouse~
$ colaboracion "", "Collaborating architect in the 19~
$ locacion "Guadalajara, State of Jalisco", "Guad~
$ latitud "20.674519", "20.673354", "20.681558",~
$ longitud "-103.361219", "-103.353713", "-103.34~
$ direccion "1095 Avenida Vallarta and 27 Calle Ar~
¿Qué hacer con esta base? Pues, además de conocer la obra de Barragán, quizás sea una buena oportunidad para visualizar. Por ejemplo, la localización de cada una de sus obras. Voy a usar sf
de Edzer Pebesma y tmap
de Martijn Tennekes.
tmap_mode("view")
mapa <- barragan %>%
mutate(across(c(latitud, longitud),
as.numeric)) %>%
filter(!is.na(longitud)) %>%
sf::st_as_sf(coords = c("longitud", "latitud"),
crs = 4329)
tm_shape(mapa) + tm_dots()
Pièce de résistance
Y aquí es donde se me ocurrió una idea: "imaginemos que cada punto en donde se localiza una obra de Barragán fuera una torre de Satélite". Así es como hice los pasos prohibidos: rayshader
de Tyler Morgan-Wall.
primcol <- c("white","yellow", "blue", "grey80", "red")
#color=sample(primcol, 16, replace=T)
satelite <- barragan %>%
filter(locacion == "Guadalajara, State of Jalisco") %>%
filter(!is.na(latitud)) %>%
mutate(alto = floor(runif(n(), min=1, max=5))) %>%
add_row(alto = 0) %>%
ggplot(aes(latitud, longitud,
color = alto)) +
geom_point(size = 5, shape=17) +
scale_color_gradientn(colours = primcol) +
guides(color = "none") +
theme(axis.text = element_blank(),
axis.title = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank())
satelite
plot_gg(satelite, width = 5,
multicore = TRUE, windowsize = c(1400, 700),
zoom = 0.3, phi = 35,
theta = 30, sunangle = 200,
soliddepth = -100)
Sys.sleep(5)
render_snapshot()
Datos sobre la sesión
sessionInfo()
R version 4.1.1 (2021-08-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)
Matrix products: default
locale:
[1] LC_COLLATE=Spanish_Mexico.1252 LC_CTYPE=Spanish_Mexico.1252
[3] LC_MONETARY=Spanish_Mexico.1252 LC_NUMERIC=C
[5] LC_TIME=Spanish_Mexico.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] tmap_3.3-2 rayshader_0.26.1 rvest_1.0.0
[4] forcats_0.5.1 stringr_1.4.0 dplyr_1.0.7
[7] purrr_0.3.4 readr_1.4.0 tidyr_1.1.3
[10] tibble_3.1.2 ggplot2_3.3.4 tidyverse_1.3.1
loaded via a namespace (and not attached):
[1] fs_1.5.0 sf_1.0-0 lubridate_1.7.10
[4] doParallel_1.0.16 RColorBrewer_1.1-2 progress_1.2.2
[7] httr_1.4.2 tools_4.1.1 backports_1.2.1
[10] utf8_1.2.1 R6_2.5.0 KernSmooth_2.23-20
[13] DBI_1.1.1 colorspace_2.0-1 raster_3.4-13
[16] sp_1.4-5 withr_2.4.2 tidyselect_1.1.1
[19] prettyunits_1.1.1 leaflet_2.0.4.1 curl_4.3.1
[22] compiler_4.1.1 extrafontdb_1.0 leafem_0.1.6
[25] cli_3.0.1 pacman_0.5.1 xml2_1.3.2
[28] bookdown_0.22 scales_1.1.1 classInt_0.4-3
[31] proxy_0.4-26 digest_0.6.27 rmarkdown_2.9
[34] base64enc_0.1-3 dichromat_2.0-0 pkgconfig_2.0.3
[37] htmltools_0.5.1.1 extrafont_0.17 dbplyr_2.1.1
[40] htmlwidgets_1.5.3 rlang_0.4.11 readxl_1.3.1
[43] rstudioapi_0.13 generics_0.1.0 jsonlite_1.7.2
[46] crosstalk_1.1.1 magrittr_2.0.1 Rcpp_1.0.7
[49] munsell_0.5.0 fansi_0.5.0 abind_1.4-5
[52] lifecycle_1.0.0 stringi_1.7.3 leafsync_0.1.0
[55] yaml_2.2.1 tmaptools_3.1-1 grid_4.1.1
[58] parallel_4.1.1 crayon_1.4.1 lattice_0.20-44
[61] haven_2.4.1 stars_0.5-3 hms_1.1.0
[64] knitr_1.33 pillar_1.6.2 codetools_0.2-18
[67] reprex_2.0.0 XML_3.99-0.6 glue_1.4.2
[70] evaluate_0.14 blogdown_1.4 modelr_0.1.8
[73] selectr_0.4-2 png_0.1-7 vctrs_0.3.8
[76] foreach_1.5.1 Rttf2pt1_1.3.8 cellranger_1.1.0
[79] gtable_0.3.0 assertthat_0.2.1 xfun_0.24
[82] lwgeom_0.2-7 broom_0.7.7 e1071_1.7-7
[85] class_7.3-19 viridisLite_0.4.0 iterators_1.0.13
[88] units_0.7-2 rgl_0.107.10 ellipsis_0.3.2
Discussion (0)