Clase práctica Semana 10

Autor/a

Santiago Sotelo y Nadia Duffó

Material para el ejercicio

Descarga la carpeta .zip para acceder al material de esta sesión. Haga click en el siguiente enlace. No olvides unzipear el archivo.

Introducción

¿Cómo funciona R?

“Todo lo que existe en R es un objeto, todo lo que sucede en R es una función.”

-John Chambers

R es un lenguaje de programación que tradicionalmente opera como funciones anidadas. Por ejemplo:

supermercado <- c("manzana", "pera", "uva")
gsub("a", "A", paste("mi", supermercado))
[1] "mi mAnzAnA" "mi perA"    "mi uvA"    

Se podría comparar con una matrioska o muñeca rusa en la medida en que una función encapsula a otra función y así sucesivamente ejecutándose de adentro hacia afuera.

La manera moderna de programar en R es utilizando el operador %>% o pipeta. El mismo ejemplo se vería así:

library(dplyr)
supermercado <- c("manzana", "pera", "uva")
supermercado %>% 
  paste("mi", .) %>% 
  gsub("a", "A", .)
[1] "mi mAnzAnA" "mi perA"    "mi uvA"    

La pipeta se puede importar desde el paquete {dplyr} y se puede comparar con una tubería que pasa el resultado hacia la siguiente función, es decir, primero llamamos al objeto supermercado y luego aplicamos la función paste, y luego aplicamos la función gsub. Esta manera de programar se lee de arriba a abajo. El atajo para escribir la pipeta es ctrl + shift + m

En la práctica utilizaremos una combinación de la manera tradicional y moderna al momento de programar en R.

Preparación

Para iniciar un proyecto de R nos dirigiremos a la pestaña

File > New Project > New Directory > New Project > Create Project

Luego creamos un nuevo archivo R markdown (.Rmd), nos dirigimos a la pestaña

File > New File > R Markdown > Ok

Para crear un bloque de código en R podemos hacer click en el ícono verde con la letra C en la barra superior o utilizar el atajo ctrl + alt + i

Ahora instalamos los paquetes necesarios para el ejercicio de hoy.

install.packages("pacman")
pacman::p_load(tidyverse, rio)

La función p_load() del paquete {pacman} se utiliza para importar paquetes desde el repositorio virtual CRAN.

Importación de data

En esta clase, se importa la base de datos filmaffinity que contiene información sobre filmes publicados entre 1900 y 2020. Para mayor información revise el enlace.

filmaffinity <- rio::import("data/filmaffinity_dataset.xlsx")

La función import() del paquete {rio} se utiliza para importar bases de datos en distintos formatos como .xlsx, .csv, .sav, entre otras.

Exploración de data

Una vez importada la base de datos a la sesión, es necesario explorarla para familiarizarnos con la información.

filmaffinity

La base de filmes cuenta con 119,003 observaciones y 9 variables.

filmaffinity %>% 
  count(`Tipo filme`)

La mayoría de observaciones corresponden al tipo filme con 73,651 observaciones.

glimpse(filmaffinity)
Rows: 119,003
Columns: 9
$ ...1         <dbl> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,…
$ Título       <chr> "'49-'17", "10,000 Years B.C. (C)", "1812", "20.000 legua…
$ Año          <dbl> 1917, 1916, 1912, 1907, 1909, 1916, 1912, 1916, 1908, 191…
$ País         <chr> "Estados Unidos", "Estados Unidos", "Rusia", "Francia", "…
$ Dirección    <chr> "Ruth Ann Baldwin", "Willis H. O'Brien", "Vasili Goncharo…
$ Reparto      <chr> "Joseph W. Girard, Leo Pierson, William Dyer, Mattie Witt…
$ Nota         <chr> "--", "5,1", "--", "6,0", "5,3", "--", "5,4", "--", "4,6"…
$ `Tipo filme` <chr> "Película", "Cortometraje", "Película", "Cortometraje", "…
$ Género       <chr> "Western", "Comedia", "Drama", "Fantástico", "Comedia", "…

En la base de datos se tienen las variables ...1, Título, Año, País, Dirección, Reparto, Nota, Tipo filme, Género.

Limpieza de data

La primera columna que corresponde al index del filme en la tabla no tiene un nombre inteligible, por lo que procedemos a renombrar esta columna.

filmaffinity2 <- 
  filmaffinity %>% 
  rename(index = 1)

filmaffinity2
1
Renombrar la variable de la posición 1.

La variable Nota actualmente figura como character en vez de numeric dado que el punto decimal está representado como una , y los valores perdidos como --. Ajustemos esta variable para poder utilizarla como variable numérica.

filmaffinity3 <- 
  filmaffinity2 %>% 
  mutate(
    Nota = gsub(",", ".", Nota),
    Nota = gsub("--", NA, Nota),
    Nota = as.numeric(Nota),
  )
filmaffinity3
1
Reemplazar el símbolo , por . en la columna Nota.
2
Reemplazar el símbolo -- por el valor perdido NA en la columna Nota.
3
Convertir la columna Nota a variable numérica.

Luego de aplicar este proceso podemos realizar operaciones aritméticas con la variable Nota:

tab1 <- 
  filmaffinity3 %>% 
  group_by(`Tipo filme`) %>% 
  summarise(Nota_promedio = mean(Nota, na.rm =T))
tab1

El promedio de los filmes, considerando los puntuados, para el caso de miniserie es de 6.10.

En el caso de Estados Unidos, si se genera la misma tabla de frecuencias, se obtendría el siguiente resultado:

tab2 <- 
  filmaffinity3 %>% 
  filter(País %in% c("Estados Unidos")) %>%
  group_by(`Tipo filme`) %>% 
  summarise(Nota_promedio = mean(Nota, na.rm =T))
tab2
1
Se filtra el valor "Estados Unidos" en la variable País.

Se observa que, para el caso de miniseries, descendió a 5.99.

Exportación de data

Finalmente, para exportar la tabla inicial sobre la nota promedio de los filmes a excel se puede utilizar la siguiente función del paquete {rio}:

tab1 %>% 
  rio::export("data/tab1.xlsx")

La función export() del paquete {rio} se utiliza para exportar bases de datos en distintos formatos como .xlsx, .csv, .sav, entre otras.

Usaremos el mismo procedimiento para exportar la base que limpiamos:

filmaffinity3 %>% 
  rio::export("data/filmaffinity_dataset_limpio.xlsx")

Ejercicio final

Responda las siguientes preguntas:

  1. Cuál es la película más antigua de Estados Unidos, Perú, Chile, España
  2. Cuál es el puntaje promedio por tipo de estos países.