library(rvest)
<- "http://www.boxofficemojo.com/alltime/weekends/" url
Tema 5. Ejercicio.
Muestreo y Análisis de Datos - Universidad de Alicante
Scraping con rvest
Internet es un gran lugar para obtener datos. Podemos usar rvest
para extraer (en inglés, scrap significa literalmente raspar o rascar una superficie) los datos en tablas HTML de la web, pero a menudo requerirá una limpieza extensa antes de que se puedan usar adecuadamente.
Considerar la siguiente lista de los fines de semana de apertura de taquillas más grandes:
(http://www.boxofficemojo.com/alltime/weekends/)
Usando rvest
podemos traer esta tabla a R.
Primero, necesitaremos leer el contenido de la página en HTML. La función read_html()
proporcionada por rvest
procesa el HTML:
<- read_html(url)
html_bom class(html_bom)
html_bom
Desafortunadamente, esto no es muy legible. Lo que queremos es extraer los datos que están incrustados en las tablas HTML. Empecemos por tomar esas tablas que están dentro de los elementos del html llamados “table”. Para ello podemos utilizar html_nodes()
:
<- html_bom %>%
tables html_nodes("table")
tables
En este caso, solo hay 1 elementos de tabla en esa página .
1]] tables[[
La función html_table()
extraerá los datos de esta tabla y los convertirá en un data frame. La opción header = TRUE
indica a R que queremos usar la primera fila como nuestros nombres de variable.
<- tables[[1]] %>%
movies html_table(header = TRUE)
glimpse(movies)
En algunas ocasiones, existen más de una table en una página web. Si son pocas se puede determinar cuál nos interesa mediante prueba y error. En particular, en esta caso sabemos que los datos tienen 200 observaciones y 9 columnas; si lo que leemos tiene una dimensiones (obtenidas con glimpse()
o str()
) muy diferentes no debe ser la tabla que buscamos. En cualquier caso, con muchas tablas en la página web, necesitaremos nuevas herramientas de programación que veremos en breve.
Limpieza de datos
Si bien ahora tenemos los datos, podemos ver que son muy confusos:
los nombres de las variables contienen caracteres especiales, como asteriscos, paréntesis y espacios. Esto puede causar problemas, así que queremos cambiarlos.
la mayoría de las columnas se almacenan como vectores de caracteres, aunque contienen información cuantitativa. En particular, hay columnas para dólares, porcentajes y fechas que están en el formato equivocado.
Debido a este desajuste, si intentamos dibujar los datos, esto no funcionará como se esperaba.
ggplot(
data = movies,
aes(x = Date, y = Opening)
+
) geom_point(aes(size = `% of Total`))
Usaremos parse_number()
junto con el verbo mutate()
para renombrar las columnas al mismo tiempo.
<- movies %>%
movies mutate(opening = parse_number(Opening),
percent_total = parse_number(`% of Total`)/100)
glimpse(movies)
Ahora, cuando dibujamos los datos cuantitativos, obtenemos algo que tiene más sentido.
ggplot(data = movies, aes(x = Date, y = opening)) +
geom_point(aes(size = percent_total))
Fechas con lubridate
Desafortunadamente, las fechas siguen siendo un problema. Echemos un vistazo a esas fechas:
%>%
movies select(Date) %>%
glimpse()
Vemos que las fechas están en formato mes/día/año. Ya hemos visto anterioreme el paquete lubridate
que proporciona funcionalidad para trabajar con fechas. Podemos utilizar la función mdy()
para convertir el vector de caracteres en una clase de fecha.
library(lubridate)
<- movies %>%
movies mutate(release_date = mdy(Date))
glimpse(movies)
ggplot(data = movies, aes(x = release_date, y = opening/1e6)) +
geom_point(aes(color = percent_total), size = 4) +
scale_y_continuous(name = "Recaudación en el Día de Apertura (en millones de $)") +
scale_x_date("Fecha de estreno")
Vuestro Ejercicio
- Repetir el ejercicio con la siguiente fuente de información: http://www.the-numbers.com/movie/records/Biggest-Opening-Weekend-at-the-Box-Office. Es decir, debéis extraer los datos relevantes de la web, limpiarlos y dejarlos preparados para trabajar,
Partiendo de la tabla de datos obtenida en el apartado 1, realizar un BREVE análisis exploratorio de los datos. Crear dos variables adicionales: año y mes de estreno. Notad que el mes debe ser tratada como factor; el año puede ser numérica o categórica.
Describid la variación de algunas variables (no necesariamente todas) y algunas pocas relaciones que consideréis relevantes.
Entrega del ejercicio
Rellenad este FORMULARIO con vuestros datos usando vuestra cuenta institucional de Google Cloud (@gcloud.ua.es) y subid
vuestro archivo de .qmd
el resultado de compilarlo: bien un archivo .html autocontenido o bien un archivo .html y el directorio relacionado con el mismo nombre; en ambos casos, se recomienda comprimir todo para enviarlo.
IMPORTANTE: el nombre de los ficheros que subáis DEBE seguir el siguiente formato que incluye vuestro número de DNI: ej.,
Tema05ej_123456789.qmd
Tema05ej_123456789.zip