Analizando resultados mediante gráficos (histogramas) con R. Realizamos scraping de sitios web y mostramos los resultados en gráficos.
- Requisitos para hacer scraping con R.
- Obtener datos en gráficos (histogramas) con R, URL relativas y absolutas.
- Obtener gráfico de barras de URL wiki y no wiki con R.
- Gráfico de tarta (pie chart) con porcentajes de estado en R.
- Unir varios gráficos para mostrarlos en la misma pantalla con R.
Requisitos para hacer scraping con R
El requisito único será disponer de R y RStudio, así como de sus librerías básicas. En el siguiente artículo explicamos cómo instalar R, RStudio y sus librerías básicas:
Para la técnica de scraping con R, necesitaremos instalar en R Studio las siguientes librerías: httr, httr2, XML y dplyr. Podremos instalarlas, desde RStudio, ejecutando los siguientes comandos:
1 2 3 4 |
install.packages("httr"); install.packages("httr2"); install.packages("XML"); install.packages("dplyr"); |
Y para dibujar gráficos en R, añadiremos las siguientes librerías: ggplot2 y ggpubr.
1 2 |
install.packages("ggplot2"); install.packages("ggpubr"); |
Para este tutorial, usaremos los resultados obtenidos en estos otros dos tutoriales:
Obtener datos en gráficos (histogramas) con R, URL relativas y absolutas
Se pretende obtener un histograma con la frecuencia de aparición de los enlaces, pero separado por URL absolutas y relativas. El objetivo es ver en un histograma cuantas veces aparece cada URL.
Prepararemos los datos para mostrar los gráficos. Partiendo del data frame dfEnlacesFinal con las URL obtenidas en los tutoriales anteriores, generamos un nuevo data frame con una columna nueva “Tipo”, que contendrá “Absoluto” o “Relativo” en función de si la URL empieza por http o no:
1 |
dfEnlacesRelAb <- dfEnlacesFinal %>% mutate("Tipo" = if_else(startsWith(urlEnlacesV, "http"), "Absoluta", "Relativa")); |
Ahora agruparemos por número de repeticiones y por Tipo, dejando el resultado en el data frame dfHistogramaNAbRel:
1 |
dfHistogramaNAbRel <- dfEnlacesRelAb %>% count(count,Tipo); |
Para mostrar un histograma con el número de enlaces repetidos y agrupado por tipo (absoluto/relativo) usaremos ggplot, que nos permitirá agrupar por la columna “Tipo”, mostrando de una vez, y en un solo gráfico, el resultado requerido:
1 2 |
library(ggplot2); ggplot(dfHistogramaNAbRel, aes(x=count, y=n, fill = Tipo)) + geom_col(); |
Mostrará un gráfico representando los datos pasados por argumento:
Obtener gráfico de barras de URL wiki y no wiki con R
Continuamos analizando la información con gráficos en R. En este caso, obtendremos un gráfico de barras indicando la suma de enlaces que apuntan a otros dominios o servicios (distinto a https://www.mediawiki.org en el caso de ejemplo) y la suma de los otros enlaces. Sabemos que las URL relativas ya apuntan al dominio, por lo tanto hay que analizar las URL absolutas y comprobar que apunten a https://www.mediawiki.org o a otro dominio. Añadiremos a nuestro data frame una columna indicando si el enlace es interno o no. Usaremos ggplot para generar este gráfico de barras, donde cada barra indicará la suma de enlaces para cada grupo. para conseguir este objetivo, en primer lugar, añadimos una nueva columna al data frame visitarHTTP, indicando si es wiki o no:
1 2 |
dominio <- "https://www.mediawiki.org/wiki/MediaWiki"; dfEnlacesWiki <- visitarHTTP %>% mutate(Wiki = if_else(startsWith(as.character(urlEnlacesV), dominio), "Wiki", "No Wiki")); |
Agrupamos para obtener el gráfico:
1 |
dfEnlacesWikiAg <- dfEnlacesWiki %>% count(Wiki); |
Dibujamos el gráfico:
1 |
ggplot(dfEnlacesWikiAg, aes(x = Wiki, y = n)) + geom_col(); |
Quedando:
Gráfico de tarta (pie chart) con porcentajes de estado en R
Por último, para mostrar un gráfico de tarta (pie chart) indicando los porcentajes de estado (status) de nuestro análisis. Preparamos el data frame con los datos para el gráfico. En este caso, necesitaremos el porcentaje de apariciones del campo “estado” en el data frame origen dfResultadoFinal. Calculamos el porcentaje de apariciones de cada estado:
1 |
dfRFGrafico <- dfResultadoFinal %>% group_by(estado) %>% summarise(num = n(), porc = n() / nrow(dfResultadoFinal) * 100); |
Convertimos la columna «estado» a character para dibujar el gráfico de tarta:
1 |
dfRFGrafico <- transform(dfRFGrafico, estado = as.character(estado)); |
Y dibujamos el gráfico:
1 |
ggplot(dfRFGrafico, aes(x = "", y = porc, fill = estado)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start = 0); |
Unir varios gráficos para mostrarlos en la misma pantalla con R
Si quisiéramos unir todos los gráficos anteriores, para mostrarlos en una misma pantalla, los guardaremos en una variable y, posteriormente, mostraremos la variable en pantalla. Para dibujar la variable usaremos la librería ggpubr:
1 |
library(ggpubr); |
Guardaremos los gráficos anteriores en una variable cada uno:
1 2 3 |
g1 <- ggplot(dfRFGrafico, aes(x = "", y = porc, fill = estado)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start = 0); g2 <- ggplot(dfEnlacesWikiAg, aes(x = Wiki, y = n)) + geom_col(); g3 <- ggplot(dfHistogramaNAbRel, aes(x=count, y=n, fill = Tipo)) + geom_col(); |
Los unimos y los mostramos los tres en una sola página:
1 |
ggarrange(g1,g2,g3); |
El resultado: