En este proyecto se realiza el raspado de datos de la web (web scraping [WS]) en R. El objetivo principal es obtener los datos del Producto Interno Bruto (PIB) departamental de Bolivia y el ranking de acuerdo a su contribución al PIB nacional.
La información de interés se encuentra almacenada en tablas para cada año desde 1988 hasta 2023 dentro de Wikipedia.
Según el análisis de datos en R, una manera eficiente de obtener esta
información es a través del web scraping.
Las librerías empleadas para este proceso son:
Para obtener los datos se utiliza la siguiente url: https://es.wikipedia.org/wiki/Anexo:Departamentos_de_Bolivia_por_PIB.
#url
url <- "https://es.wikipedia.org/wiki/Anexo:Departamentos_de_Bolivia_por_PIB"
#Leer url
wiki <- read_html(url)
wiki
## {html_document}
## <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available" lang="es" dir="ltr">
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 ...
## [2] <body class="skin--responsive skin-vector skin-vector-search-vue mediawik ...
Para extraer los datos de la tabla, se revisa el código HTML de la
página y se observa que las tablas son almacenadas dentro de elementos
tipo
| Elementos | Selecciona |
|---|---|
<p> |
Párrafos |
<h1>, <h2>, etc. |
Encabezados |
<a> |
Enlaces |
<li> |
Lista |
<table> |
Tablas |
#Extraer tabla
Datos <- wiki %>%
html_nodes("table") %>%
html_table()
#Iterar para conocer la dim de cada tabla
length(Datos)
## [1] 36
En esta etapa se desarrolla el proceso de:
#Creación de una función que automatice todo el proceso.
Fun_ETL <- function(lista_W){
for (i in 1:length(lista_W)){
#Filtro de datos y col de interes
lista_W[[i]] <- lista_W[[i]][2:10,c(1:3)]
#Agregar una columna para señalar el año de la Inf
lista_W[[i]]["Año"] <- str_extract(names(lista_W[[i]][3]),"(\\d{4})")
#Cambiar los nombres para Anexar las tablas
names(lista_W[[i]]) <- c("Posicion","Departamento","PIB","Años")
}
bind_rows(lista_W)
}
#Aplicar la FUN
Dat_Econ <- Fun_ETL(Datos)
head(Dat_Econ, 7)
## # A tibble: 7 × 4
## Posicion Departamento PIB Años
## <chr> <chr> <chr> <chr>
## 1 1.º Santa Cruz US$ 16 314 millones 2023
## 2 2.º La Paz US$ 12 408 millones 2023
## 3 3.º Cochabamba US$ 8 737 millones 2023
## 4 4.º Tarija US$ 2 888 millones 2023
## 5 5.º Potosí US$ 2 637 millones 2023
## 6 6.º Chuquisaca US$ 2 408 millones 2023
## 7 7.º Oruro US$ 2 269 millones 2023
Por otra parte, la información obtenida se encuentra sucia, dado que los valores de interés (PIB) se encuentran en formato texto, lo que dificulta su análisis.
En este caso vamos a extraer los valores de la columna PIB, en una nueva columna que tenga por nombre PIB_USD y que además esté en formato tipo double.
Dat_Final <- Dat_Econ %>%
mutate(PIB_USD=str_replace_all(
str_extract(PIB, "(\\d+)\\s*(\\d+)"),#Extreamos los Valores
"\\s",#Eliminar los espacios en blanco
"")) %>%
mutate(PIB_USD=as.double(PIB_USD))
head(Dat_Final)
## # A tibble: 6 × 5
## Posicion Departamento PIB Años PIB_USD
## <chr> <chr> <chr> <chr> <dbl>
## 1 1.º Santa Cruz US$ 16 314 millones 2023 16314
## 2 2.º La Paz US$ 12 408 millones 2023 12408
## 3 3.º Cochabamba US$ 8 737 millones 2023 8737
## 4 4.º Tarija US$ 2 888 millones 2023 2888
## 5 5.º Potosí US$ 2 637 millones 2023 2637
## 6 6.º Chuquisaca US$ 2 408 millones 2023 2408
Dat_Final %>%
filter(Años=="2023") %>%
mutate(Posi=str_c(Posicion,Departamento, sep=" "),
Parti=PIB_USD/sum(PIB_USD)) %>%
select(Posi,PIB_USD, Parti) %>%
ggplot(aes(x=Posi, y=PIB_USD))+
geom_col(fill=alpha("yellow3",.7), width = 0.8)+
geom_text(aes(label =paste0("USD ",format(PIB_USD,big.mark = ",")," Mill")), color="darkgreen", vjust=-0.7,size=12, size.unit = "pt")+
geom_text(aes(label =scales::percent(Parti)), color="red", vjust=1, size=12, size.unit = "pt")+
scale_y_continuous(expand = c(0, 0), limits = c(0, 17500))+
labs(title = "Ranking de la Participación Departamental en el PIB Nacional, 2023",
subtitle = "(USD/%)",x="",y="")+
theme(
panel.background = element_rect(fill = NA),
text = element_text(face = "bold", size=12,family = "calibri", color="red"),
axis.ticks = element_blank(),
axis.text.y = element_blank(),
plot.subtitle = element_text(size = 10, color="gray30"),
plot.title.position = "plot"
)
Dat_Final %>%
ggplot(aes(x=Años,y=PIB_USD, color=Departamento,group = Departamento))+
geom_line(stat = "identity", size=1,show.legend = F)+
scale_y_continuous(expand = expansion(add = c(0.3,4)) ,limits = c(0,17500))+
scale_x_discrete(expand = expansion(add = c(0.3,4)))+
geom_text(aes(label = ifelse(Años=="2023",Departamento,NA ), hjust = -0.3), size=12,
size.unit = "pt", show.legend = F)+
labs(title = "Producto Interno Bruto Departamental, 1988-2023", subtitle = "Mill. USD")+
scale_color_brewer(palette = "Paired")+
theme_bw()+
theme(
axis.title = element_blank(),
panel.grid.major.y = element_line(color=alpha("red",.7), size=1,linetype=3),
panel.grid.major.x = element_blank(),
text = element_text(face = "bold", color = "black", size=12,family = "calibri"),
plot.title.position = "plot",
plot.title = element_text(color="yellow3"),
plot.subtitle = element_text(size=10, color="grey30"),
axis.text.x = element_text(angle = 45),
axis.ticks.length.x = unit(.25, "cm")
)
Dat_Final %>%
select(.,Departamento,Años,PIB_USD) %>%
filter(Años %in% c("2023","2000")) %>%
group_by(Años) %>%
pivot_wider(names_from = Años, values_from = PIB_USD) %>%
adorn_percentages(denominator = "col") %>%
ggplot()+
geom_segment(aes(x=reorder(Departamento,`2023`),
xend =Departamento, y=`2000`, yend = `2023`), color=alpha("yellow3",.7), size=1.5)+
geom_point(aes(x=Departamento,y=`2023`, color="2023"),size=3)+
geom_point(aes(x=Departamento,y=`2000`, color="2000"), size=3)+
scale_y_continuous(limits = c(0,0.4), n.breaks = 10, labels = scales::percent)+
labs(title = "Participación del PIB Departamental en el Nacional, 2000 vs 2023",x="",y="Participación",
colour="Años")+
coord_flip()+
scale_color_manual(values = c("2023"="darkgreen",
"2000"="red3"))+
theme_bw()+
theme(
plot.title = element_text(color = "darkgreen"),
text = element_text(face = "bold", size = 12,family = "calibri"),
plot.title.position = "plot",
legend.position = "top",
legend.justification = "left",
legend.location = "plot"
)
De acuerdo al reporte, las conclusiones que se pueden obtener son:
En 2023, Santa Cruz lidera la contribución en el PIB nacional con aproximadamente 16,314 millones de USD (32.98%), seguido por el departamento de La Paz.
Con relación a la evolución del PIB por departamentos, se puede observar que a partir de 2003 departamentos pertenecientes al eje central y Tarija experimentaron un proceso de despegue hasta la actualidad, con excepción de Tarija, que a partir de 2014 experimenta un quiebre dado que la tendencia cambia (decreciente), llegando en 2023 a confundirse entre los demás departamentos en términos de PIB.
Por otra parte, cuando se compara la contribución del PIB departamental en el nacional en dos períodos distintos (2000 y 2023), se puede notar una diferencia positiva marcada en el departamento de Santa Cruz con relación al resto. La contribución de Santa Cruz al PIB nacional desde 2000 a 2023, según datos de Wikipedia, se incrementó en aproximadamente 3 pp. Por otra parte, también se puede notar que en este mismo periodo, en 5 de los 9 departamentos, la contribución experimentó un retroceso.