En este estudio, vamos a usar la base de datos de TMDb, la cual nos muestra una gran cantidad de variables y atributos referidos a películas, actores, productoras, etc. Mediante los paquetes que ofrece R, se realizará un análisis gráfico completo, desde un tratamiento inicial de los valores atípicos, hasta mostrar las combinaciones más potentes entre dplyr, para filtrar datos y ggplot para exponerlos gráficamente. El csv ya ha sido tratado previamente y existen una gran cantidad de kernels en Kaggle sobre como extraer la información de los JSON.

1. Análisis exploratorio de datos

El análisis exploratorio de datos es uno de los procesos más utilizados para descubrir patrones, relaciones o tendencias en los datos. Aquí es donde nos vamos a encontrar con el grueso del análisis gráfico, imprescindible para transmitir la máxima cantidad de información posible, ya que, a través de la visualización, transmitimos de forma concisa y clara el objetivo de nuestro estudio. En primer lugar, vamos a cargar los datos y observar las variables continuas, las cuales, a través de una representación con Boxplot, hallaremos la existencia o no de valores atípicos. Una vez transformadas las variables continuas, podremos comenzar con las visualizaciones.

1.1 Carga y separación de los datos

En primer lugar vamos a cargar los datos que previamente hemos tratado en el script de carga y limpiado inicial de los datos, además convertimos a factor las variables que contengan varios niveles:

movies <- read.csv("D:/Master_BigData/10.TFM/tfm_r/movies_EDA.csv", header = TRUE, na = "NA")
movies$genre <- as.factor(movies$genre)
movies$country <- as.factor(movies$country)
movies$original_language <- as.factor(movies$original_language)

Cargamos las librerias necesarias:

library(tidyverse)
library(GGally)
library(wordcloud)
library(ggridges)
library(hrbrthemes)
library(gridExtra)
library(grid)
library(packcircles)
library(plotly)
library(knitr)

La base de datos es muy grande, y existe muchas disparidad en las películas, esto significa que existen películas con muy poco presupuesto, poca popularidad y pocos beneficios (apenas unas decenas de miles de dólares) comparado con películas con presupuestos millonarios y beneficios de miles de millones. Esto puede resultar en un problema de valores atípicos, ya que, si observamos, por ejemplo, la variable continua presupuesto:

summary(movies$budget)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##         0    790000  15000000  29045040  40000000 380000000

La media está en torno a 15.000.000 mientras que el máximo se va a 380.000.000. Además, incluso existen películas que no proporcionan datos de presupuesto y tienen 0 como valor. Solo con observar estos estadísticos nos podemos hacer una idea de que existirán atípicos en nuestros datos. Pero antes de entrar en profundidad, vamos a separar la base datos en películas con mayor presupuesto, es decir, aquellas mega producciones y películas con menor presupuesto, que, aunque sigan siendo películas comerciales, su presupuesto es más comedido. Esta separación se justifica, en primer lugar, para evitar en cierta forma la influencia de atípicos y, en segundo lugar, por el interés a analizar las películas más caras de la industria frente a películas que van desde producciones pequeñas a grandes producciones sin llegar a rebosar un presupuesto excesivamente grande.

Una buena forma de realizar esta separación es utilizar los estadísticos dados por el summary visto más arriba, podemos separar las películas a partir del 3 cuartil, es decir, a partir de un presupuesto de 40.000.000:

movies_sup <- movies %>%
  filter(budget > 40000000)

movies_inf <- movies %>%
  filter(budget < 40000000)

De esta forma, ahora tenemos una base de datos con 1115 películas mas comerciales y el resto, 3565 menos comerciales.

1.2 Tratamiento de los valores atípicos

Una vez realizada la separación, exploramos mediante boxplot la existencia de atípicos en la base de datos, concretamente en las cuatro variables continuas, ya que una quinta variable “vote_average” no presenta problemas al ser la nota de la película esta acotada entre 0 y 10.

par(mfrow=c(2,4), oma = c(0, 0, 2, 0))
boxplot(movies_sup$budget, main = "Presupuesto", col = "dodgerblue3")
boxplot(movies_sup$revenue, main = "Beneficio", col = "dodgerblue3")
boxplot(movies_sup$vote_count, main = "Número de votos", col = "dodgerblue3")
boxplot(movies_sup$popularity, main = "Popularidad", col = "dodgerblue3")
mtext("Figura 1. Boxplot de atípicos", outer = TRUE, cex = 1.5)
boxplot(movies_inf$budget, main = "Presupuesto", col = "goldenrod1")
boxplot(movies_inf$revenue, main = "Beneficio", col = "goldenrod1")
boxplot(movies_inf$vote_count, main = "Número de votos", col = "goldenrod1")
boxplot(movies_inf$popularity, main = "Popularidad", col = "goldenrod1")

En la parte superior, los boxplot azules representan a las películas con mayor presupuesto, mientras que los boxplot amarillos de abajo representan las películas con menor presupuesto.

El resto de las cuatro variables continuas presentan un grave problema como observamos en la figura (). Existen muchos métodos para tratar los valores atípicos, en nuestro caso hemos seleccionado la normalización de las variables a través de usar los cuartiles. Para ello, creamos una función la cual se va a encargar de normalizar los valores que superen el tercer cuartil y los valores inferiores al primer cuartil, estableciendo un valor máximo para determinadas observaciones si tienen un valor muy alto y un valor mínimo si tienen un valor muy bajo.

outlier_norm <- function(x){
  qntile <- quantile(x, probs=c(.25, .75))
  caps <- quantile(x, probs=c(.05, .95))
  H <- 1.5 * IQR(x, na.rm = T)
  x[x < (qntile[1] - H)] <- caps[1]
  x[x > (qntile[2] + H)] <- caps[2]
  return(x)
}

Después de construir la función, la aplicamos a las dos bases de datos de trabajo:

movies_sup$budget <- outlier_norm(movies_sup$budget)
movies_sup$revenue <- outlier_norm(movies_sup$revenue)
movies_sup$popularity <- outlier_norm(movies_sup$popularity)
movies_sup$vote_count <- outlier_norm(movies_sup$vote_count)

movies_inf$budget <- outlier_norm(movies_inf$budget)
movies_inf$revenue <- outlier_norm(movies_inf$revenue)
movies_inf$popularity <- outlier_norm(movies_inf$popularity)
movies_inf$vote_count <- outlier_norm(movies_inf$vote_count)

A continuación volvemos a representar gráficamente las variables continuas para ver si se ha corregido el problema.

par(mfrow=c(1,4), oma = c(0, 0, 2, 0))
boxplot(movies_sup$budget, main = "Presupuesto", col = "dodgerblue3")
boxplot(movies_sup$revenue, main = "Beneficios", col = "dodgerblue3")
boxplot(movies_sup$vote_count, main = "Número de votos", col = "dodgerblue3")
boxplot(movies_sup$popularity, main = "Popularidad", col = "dodgerblue3")
mtext("Figura 2.1. Películas con mayor presupuesto | Atípicos normalizados", outer = TRUE, cex = 1.5)

boxplot(movies_inf$budget, main = "Presupuesto", col = "goldenrod1")
boxplot(movies_inf$revenue, main = "Beneficios", col = "goldenrod1")
boxplot(movies_inf$vote_count, main = "Número de votos", col = "goldenrod1")
boxplot(movies_inf$popularity, main = "Popularidad", col = "goldenrod1")
mtext("Figura 2.2. Películas con menor presupuesto | Atípicos normalizados", outer = TRUE, cex = 1.5)

Como podemos visualizar en las dos figuras, el problema de los atípicos se ha corregido, aunque exista aún algún valor máximo bastante más alto que la media, ya no supone un problema tan grande como antes, ya que es preferible trabajar con esos valores máximo antes que eliminarlos completamente.

2. Visualización gráfica de los datos

Una vez que las variables continuas han sido tratadas, podemos comenzar con la visualización de los datos, el objetivo es intentar explorar lo máximo posible las posibilidades que nos ofrece R de cara a la visualización, explorando las variables y realizando submuestras de los datos para representaciones concretas. Por ejemplo, seleccionando un conjunto de actores más famosos, explorando los géneros de películas, etc. Todo ello lo veremos a continuación.

2.1 Estudio del género cinematográfico y del voto medio

En esta primera tanda de gráficos, nos vamos a centrar en el estudio de los géneros cinematográficos y de la variable media de votos de las películas. Nuestro objetivo por tanto es observar que géneros son más abundantes, como se distribuye los votos de los usuario a las películas y como este mismo voto se distribuye en cada género. Los géneros de películas más producidos se ven a continuación:

ggplot(data = subset(movies, !is.na(genre))) +
  geom_bar(mapping = aes(x = genre), fill = "#0060B3", color = "gray7", alpha = 0.8) +
  xlab("Género") + ylab("Conteo") +
  coord_flip() +
  
  labs(title = "Figura 3. Géneros de peliculas mas producidos",
       subtitle = "Gráfico de barras ordenado por género",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 17, face = "bold"),
        plot.subtitle = element_text(size = 13),
        plot.caption = element_text(face = "italic", size = 11),
        axis.text = element_text(size = 13),
        axis.title = element_text(size = 13))

En la figura 3 vemos el número de películas producidas por género, en este caso estamos utilizando la base de datos al completo, es decir, con las 4803 películas. Sin duda el claro ganador son las películas de la categoría thriller, las cuales superan las 1200 producidas del total de la muestra, a este género le siguen las películas de romance y de drama las cuales están entre 700 y 800 películas producidas. En una tercera tanda podríamos incluir las películas de ciencia ficción, comedia y familiares, las cuales están entre 300 y 400 películas cada género. El resto de géneros son bastante menos producidos en comparación con el tamaño de la muestra. Aun así, no hay que tomarse están conclusiones de manera estricta, ya que es bien sabido que una película podría englobarse en varios géneros, pero si atendemos estrictamente a un género por película, está claro qué géneros son los predominantes.

En la siguiente figura vamos a mostrar cómo se distribuye la nota dada a las películas según los usuarios, igualmente utilizamos la base completa de datos:

ggplot(movies, aes(x=vote_average)) + 
  geom_histogram(aes(y=..density..), colour="black", fill= "#0060B3", alpha = 0.8) +
  xlab("Media de voto") + ylab("Densidad") +
  geom_vline(xintercept = 5, size = 1) +
  
  labs(title = "Figura 4. Media de voto del usuario",
       subtitle = "Histograma (Densidad de voto)",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 17, face = "bold"),
        plot.subtitle = element_text(size = 13),
        plot.caption = element_text(face = "italic", size = 11),
        axis.text = element_text(size = 13),
        axis.title = element_text(size = 12))

En la figura 4 observamos la distribución de los votos para la totalidad de las películas en una puntuación del 1 al 10. Para visualizar mejor como se distribuyen los votos se ha dibujado una línea vertical justo en el 5. Al observar el gráfico nos llama la atención que la mayoría de las películas están puntuadas de 5 para arriba, siguiendo en cierta medida una distribución normal, donde a simple vista vemos que la mayoría de las películas estarían puntuadas entre un 5,5 y un 6,5, muy pocas muy encima del 7,5 o por debajo del 4. En el 0 vemos que existe un pequeño conjunto, seguramente sean películas las cuales no hay información sobre su puntuación. ¿Por qué esta distribución y no otra? Para alguien que este metido en el mundo cinematográfico se dará cuenta que en general la puntuación es más elevada que otros campos como por ejemplo, cuando se evalúan las notas en cualquier institución educativa. En general, una película por debajo del 5 suele considerarse una mala película y películas por encima del 7 como películas notablemente buenas.

Ya hemos visto como se distribuyen los géneros en nivel de producción y además hemos visto la distribución de las notas, pero ¿Variará de alguna forma la distribución de las notas de las películas según el género al que pertenezca? Lo vemos en el gráfico de a continuación:

ggplot(data = subset(movies, !is.na(genre)), aes(x = vote_average, y = genre, fill = genre)) +
  geom_density_ridges() +
  theme_ridges() + 
  theme(legend.position = "none") +
  theme(axis.title = element_text(size=13, face=2)) +
  xlab("Media de voto") + ylab("Género") +
  
  labs(title = "Figura 5. Media de voto del usuario por género",
       subtitle = "Gráfico de densidad",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 17, face = "bold"),
        plot.subtitle = element_text(size = 13),
        plot.caption = element_text(face = "italic", size = 11))

En la figura 5 al igual que la figura 3 observamos los géneros de películas en su mismo orden, junto a un gráfico de densidad de tal forma que podemos comparar de forma muy visual las diferencias de puntuación en los diferentes géneros. La distribución es muy similar a la vista en la figura 4, es decir, el grueso de la distribución se encuentro en torno a 6 de media. Si miramos abajo, nos damos cuenta que el género animación se comporta de una manera extraña, teniendo una parte de su puntuación en torno al 1 y muy diluido entre el 5 y el 8, es posible que los datos de su puntuación no sean del todo correctos. Con respecto al resto vemos como la puntuación en los géneros es muy similar. Aun así, vemos como existen algunas géneros cuyas películas o series están mejor valoradas, como el género musical o los documentales están un poco por encima de la media. Sin embargo, existen otros géneros peor puntuados en general por la media, como las películas de televisión, las cuales además tiene una distribución menos uniforme o el género de terror. Sin embargo, la tendencia es encontrar una uniformidad en todos los géneros, ya que ninguno destaca sobradamente sobre la media, y por tanto todos los géneros reciben puntuaciones medias similares.

2.2 Estudio de la correlación entre las variables continuas

En este apartado nos vamos a centrar exclusivamente en las variables continuas, las cuales son un total de 5. Sin duda la mejor forma de observar el comportamiento de estas es viendo las correlaciones. Dichas correlaciones pueden mostraste gráficamente a continuación:

subset <- names(movies) %in% c("X", "id")
movies_c <- movies[!subset]
movies_c <- movies_c %>% 
                rename(
                    Presupuesto = budget,
                    Popularidad = popularity,
                    Beneficio = revenue,
                    Media_voto = vote_average,
                    Total_votos = vote_count
                    )
ggcorr(movies_c, method = c("everything", "pearson")) +
  
  labs(title = "Figura 6. Relación entre las variables continuas",
       subtitle = "Matriz de correlaciones",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 17, face = "bold"),
        plot.subtitle = element_text(size = 13),
        plot.caption = element_text(face = "italic", size = 11))

El gráfico muestra las relaciones entre cada par de variables, el resultado es el correspondiente cuadriculo con diferentes tonos de colores, ¿Qué significa el color? Pues si nos fijamos en la leyenda a la izquierda vemos un medidor de color con una numeración, en estadística, la correlación alude a la proporcionalidad y la relación lineal que existe entre distintas variables. Esta correlación viene representada entre 1 y -1, un valor nulo, es decir, el 0, significa que no existe correlación entre las variables, entre 0 y 1 existe una correlación positiva, y entre -1 y 0 existe una correlación negativa. El color indica lo mismo, conforme más rojo sea la cuadricula, mayor relación positiva habrá entre las variables, y azul, una relación negativa.

Lo que vemos en el gráfico son solamente relaciones positivas, es decir, que las variables se mueven en la misma dirección, en concreto, encontramos relaciones muy fuertes entre el beneficio y los votos totales, la popularidad y los votos totales y entre el beneficio y el presupuesto. Pero también existe una relación, aunque menos fuerte, entre popularidad y beneficio, popularidad y presupuesto y presupuesto y votos totales. Esta información es muy útil, ya que a priori, a faltar de modelizar o realizar comprobaciones más avanzadas, podríamos afirmar que conforme más presupuesto tenga una película, su beneficio tiende a ser mayor o qué una película muy popular se traduce en mayores ganancias.

A continuación, vemos, por ejemplo, la relación entre la popularidad y el número de votos y la relación entre el beneficio y el número de votos y posteriormente veremos la relación entre el beneficio y el presupuesto.

p1 <- ggplot(movies, aes(x=popularity, y=vote_count)) +
        geom_point() +
        geom_smooth(method=lm , color="#0060B3", fill="#69b3a2", se=TRUE) +
        theme_ipsum() +
        coord_cartesian(ylim = c(0, 15000), xlim = c(0,250)) +
        xlab("Popularidad") + ylab("Número de votos") +
  
        labs(title = "Figura 7.1. Relación Popularidad - Nº de votos",
          subtitle = "Gráfico de puntos (Con línea de tendencia)") +
        theme(plot.title = element_text(size = 15, face = "bold"),
          plot.subtitle = element_text(size = 10),
          axis.text = element_text(size = 13))

p2 <- ggplot(movies, aes(x=revenue, y=vote_count)) +
        geom_point() +
        geom_smooth(method=lm , color="#0060B3", fill="#69b3a2", se=TRUE) +
        theme_ipsum() +
        coord_cartesian(ylim = c(0, 15000), xlim = c(0, 2e+09)) +
        xlab("Beneficio") + ylab("Número de votos") +
  
        labs(title = "Figura 7.2. Relación Beneficio - Nº de votos",
          subtitle = "Gráfico de puntos (Con línea de tendencia)") +
        theme(plot.title = element_text(size = 15, face = "bold"),
          plot.subtitle = element_text(size = 10),
          axis.text = element_text(size = 13))

grid.arrange(p1, p2, nrow = 1,
             bottom = textGrob("Fuente: Elaboración propia (Datos de TMDb)",
               gp = gpar(fontface = 3, fontsize = 13),
               hjust = 1.1,
               x = 1))

La figura 7.1 y 7.2 nos muestra las relaciones de las que hablábamos, a la izquierda se muestra cómo se relaciona la variable Popularidad con la variable Número de votos, si nos fijamos en la tendencia (línea azul) observamos que a medida que la popularidad de la película crece, se ve reflejado en un aumento del número de votos dados a dicha película, es lógico ya que las películas que absorben mayor popularidad suelen ser más comentadas y criticadas.

En la gráfica de la derecha observábamos en el eje Y la misma variable de antes, el número de votos, frente al beneficio obtenido por la cinta en el eje X. Igualmente, al observar la tendencia, vemos como también existe una relación ascendente y conforme aumente el beneficio de la cinta, el número de votos debería también incrementarse, solo que esta vez la tendencia es más vertical y por tanto, si el beneficio de la cinta el muy elevado, también lo será el número de votos.

Hasta ahora hemos trabajado con la base de datos sin desglosar, pero, ¿Existe realmente diferencia de comportamiento entre aquellas películas con un presupuesto muy grande, y películas con menos presupuesto o casi sin presupuesto? A continuación vamos a explorar la relación entre beneficio y presupuesto y además vamos a ir un paso más allá, ya que vamos a explorar esta relación con los géneros cinematográficos más importantes, los cuales ya los vimos en la figura 3. ¿Existe entonces alguno género cinematográfico en películas con presupuesto mayor donde mayor presupuesto signifique mayor beneficio?

subgenres_sup <- filter(movies_sup, grepl('Thriller|Comedy|Fantasy|Science Fiction|Romance|Drama',genre))
subgenres_inf <- filter(movies_inf, grepl('Thriller|Comedy|Fantasy|Science Fiction|Romance|Drama',genre))

subgenres_sup %>%
  filter(budget < 1.6e+08) %>%
  ggplot() +
  geom_point(mapping = aes(x = budget, y = revenue)) +
  geom_smooth(mapping = aes(x = budget, y = revenue), color="#0060B3") +
  facet_wrap(~ genre) +
  xlab("Presupuesto") + ylab("Beneficio") +
  
  labs(title = "Figura 8. Relación entre Presupuesto y Beneficio por género",
       subtitle = "Gráfico de puntos | Películas con más presupuesto",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 18, face = "bold"),
        plot.subtitle = element_text(size = 13),
        axis.text.x = element_text(angle = 90),
        axis.title = element_text(size = 13),
        plot.caption = element_text(face = "italic", size = 12))

Al observar el gráfico vemos como existen dos ejemplos claros donde a mayor presupuesto, mayor es el beneficio, esto es en los géneros ciencia ficción y thriller, ya que se observa una tendencia clara a la alza del beneficio a medida que vamos incrementando el presupuesto, además, la sombra gris alrededor de la línea de tendencia nos muestra el intervalo de confianza, siendo este más preciso en el género thriller que en ciencia ficción. Con respecto al resto de los géneros la tendencia es más difusa, en comedia no existen películas con un presupuesto muy elevado, y el beneficio no aumenta en exceso por aumentar el presupuesto, lo mismo ocurre con las películas de romances. Para drama y fantasía, la tendencia es ligeramente alcista al principio, pero después cae y se mantiene casi constante. En películas con mayor presupuesto si se puede confirmar, sobre todo en dos géneros, la existencia de un comportamiento alcista en el beneficio al aumentar el presupuesto.

Si ahora nos centramos en las películas con un presupuesto menor, ¿Llegará a ocurrir lo mismo? Lo vemos en la siguiente gráfica que nos muestra la misma relación y los mismo géneros, pero siendo con presupuestos más ajustados:

subgenres_inf %>%
  filter(revenue < 1.4e+08) %>%
  ggplot() +
  geom_point(mapping = aes(x = budget, y = revenue)) +
  geom_smooth(mapping = aes(x = budget, y = revenue),color="#0060B3") +
  facet_wrap(~ genre) +
  xlab("Presupuesto") + ylab("Beneficio") +
  
  labs(title = "Figura 9. Relación entre Presupuesto y Beneficio por género",
       subtitle = "Gráfico de puntos | Películas con menos presupuesto",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 18, face = "bold"),
        plot.subtitle = element_text(size = 13),
        axis.text.x = element_text(angle = 90),
        axis.title = element_text(size = 13),
        plot.caption = element_text(face = "italic", size = 12))

Sin embargo, al observa ahora la figura 9 vemos como a priori, en la nube de puntos no hay relación ninguna, los datos están muy dispersos por todo el gráfico, por lo que no es muy fiable sacar conclusiones muy anticipadas a no ser que después se compruebe mediante la modelización. Aun así, la líneas de tendencia nos muestran ahora un claro aumento de beneficio al aumentar el presupuesto en todos los géneros. El comportamiento es más raro en el género fantasía, donde además el romance, el drama y el thriller aumentan al principio para después mantenerse constante. Sin embargo, y a diferencia de las películas con un super presupuesto, aquí el género comedia si tiene un aumento notable del beneficio al aumentar el presupuesto, lo cual no se veía tan claro en la figura 8.

2.3 Estudio de los actores, productoras y películas

El estudio de los actores puede derivar de análisis muy interesantes, especialmente si lo relacionamos con las variables continuas. En este apartado vamos a centrarnos en ver, que actores han aparecido más en los últimos años, que popularidad tienen estos y finalmente veremos cómo dicha popularidad se puede traducir o no en mayores beneficios. Además, veremos las principales productoras de cine, en concreto, cuáles son las productoras que reportan la mayor cantidad de beneficio en la industria, y por último, veremos un top 10 de las películas mejor valoradas de TMDb.

Para esta primera tanda de gráficos vamos a continuar con la separación realizada para las películas con mayor presupuesto y con menor, en concreto vamos a mostrar el registro de actores con más apariciones en la industria, tanto para las superproducciones como el resto de películas del cine. Para mostrarlo de forma más visual utilizamos el paquete wordcloud.

actor_1 <- movies_sup %>% group_by(principal_actor) %>% summarise(count=n()) %>% arrange(desc(count))
actor_2 <- movies_inf %>% filter(principal_actor != "") %>% group_by(principal_actor) %>% 
  summarise(count=n()) %>% arrange(desc(count)) 

set.seed(1)
layout(matrix(c(1, 2), nrow=2), heights=c(1, 5))
par(mar=rep(0, 4))
plot.new()
text(x=0.5, y=0.5, "Figura 10. Actores con mayor apariciones | Mayor presupuesto", cex = 1.3)
wordcloud(words=actor_1$principal_actor, freq=actor_1$count,
          max.words = 25,color =rainbow(7),scale=c(2,0.4))

En la figura 10 vemos a los actores con mayor cantidad de películas protagonizadas, es decir, aquellos actores que han recibido el papel de actor o actriz principal. Si nos fijamos en figura, algunos de estos actores son Bruce Willis, Tom Cruise, Adam Sandler o Nicolas Cage. Son nombres que en líneas generales conoce todo el mundo, ya que han protagonizado decenas de películas hollywoodienses. Además, si nos fijamos en el resto de nombres, la mayoría son altamente conocidos. Llama mucho la atención que no halla apenas mujeres y que son los hombres quienes reportan aparecer en mayor cantidad como actores principales.

En la siguiente figura veremos la misma premisa, pero con las películas con menor presupuesto.

set.seed(1)
layout(matrix(c(1, 2), nrow=2), heights=c(1, 5))
par(mar=rep(0, 4))
plot.new()
text(x=0.5, y=0.5, "Figura 11. Actores con mayor apariciones | Menor presupuesto", cex = 1.3)
wordcloud(words=actor_2$principal_actor,freq=actor_2$count,
          max.words = 30,color =rainbow(7),scale=c(2,0.2))

En este tipo de películas, las cuales no solo se incluyen películas con alto presupuesto, vemos claramente que el actor con más recuento de apariciones como actor principal es Robert De Niro, actor el cual tiene un recorrido muy amplio en la industria. También nos llama la atención que, a diferencia de las películas solamente con presupuesto muy alto, aquí si aparecen nombres de actrices que tienen un mayor recuento de películas como actor principal, como Meryl Streep o Sandra Bullock.

Después de conocer un poco cuales son los actores con más papeles principales, vamos a conocer la popularidad de estos, por lo que nos podemos hacer la siguiente pregunta, ¿Qué el actor que haya salido en múltiples cintas como actor principal revela una mayor popularidad?. Nos vamos a centrar ahora en las superproducciones y ver que actores son los más conocidos a nivel mundial, durante los últimos años. Esto lo observamos en el siguiente gráfico de barras:

actor_pop_one <- movies_sup %>% group_by(principal_actor) %>% 
  summarise(
    popularity = mean(popularity),
    count = n()
  ) %>%
  arrange(desc(count))  


sub_pop_one <- actor_pop_one[1:20,]

sub_pop_one %>%
  arrange(popularity) %>%
  tail(20) %>%
  mutate(principal_actor = fct_reorder(principal_actor, popularity)) %>%
  ggplot(aes(x=principal_actor, y=popularity) ) +
  geom_bar(stat="identity", fill="#0060B3", alpha = 0.8) +
  coord_flip() +
  theme_ipsum() +
  theme(
    panel.grid.minor.y = element_blank(),
    panel.grid.major.y = element_blank(),
    legend.position="none"
  ) +
  xlab("") +
  ylab("Popularidad (De media)") +
  
  labs(title = "Figura 12. Actores principales con más popularidad",
       subtitle = "Gráfico de barras (De mayor a menor popularidad)",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 17, face = "bold"),
        plot.subtitle = element_text(size = 13),
        plot.caption = element_text(face = "italic", size = 12))

De mayor a menor observamos que el actor de media, con mayor popularidad es Leonardo DiCaprio, lo cual no es de extrañar debido a su excelente registro de películas en los últimos años, se ha convertido en unos de los iconos más populares de Hollywood, le siguen Tom Hanks, Johnny Deep y Will Smith, los cuales también tienen mucho peso en Hollywood. Si nos fijamos ahora en la figura 10, Bruce Willis, Adam Sandler o Nicolas Cage, los cuales tenían un recuento muy grande de apariciones como actores principales, quedan en puestos más bajos en media de popularidad, por lo que la popularidad es algo relativo y cambia constantemente a lo largo de los años. Hay que tener en cuenta también el propósito de este gráfico, ya que actores muy famosos con un recuento muy reducido de películas no se cuentan, únicamente tenemos aquellos actores y actrices con una popularidad alta, pero también con un número aceptable de apariciones en largometrajes. Así conseguimos estabilidad en el tiempo y no solo tenemos en cuenta un registro de actores famosos solo por su reciente popularidad.

Pero muchas veces no es importante únicamente el papel de actor principal, sino también el papel de segundos actores principales, los cuales también llegan a obtener mucha fama, a veces más que el propio actor principal. En el siguiente gráfico vemos el mismo gráfico de barras, pero ahora representado con el segundo actor principal.

actor_pop_two <- movies_sup %>% group_by(secondary_actor) %>% 
  summarise(
    popularity = mean(popularity),
    count = n()
  ) %>%
  arrange(desc(count))  


sub_pop_two <- actor_pop_two[1:20,]
sub_pop_two$secondary_actor[sub_pop_two$secondary_actor == "Penélope Cruz"] <- "Penélope Cruz"

sub_pop_two %>%
  arrange(popularity) %>%
  tail(20) %>%
  mutate(secondary_actor = fct_reorder(secondary_actor, popularity)) %>%
  ggplot(aes(x=secondary_actor, y=popularity) ) +
  geom_bar(stat="identity", fill="#D52F12", alpha = 0.8) +
  coord_flip() +
  theme_ipsum() +
  theme(
    panel.grid.minor.y = element_blank(),
    panel.grid.major.y = element_blank(),
    legend.position="none"
  ) +
  xlab("") +
  ylab("Popularidad (De media)") +
  
  labs(title = "Figura 13. Segundos actores principales con más popularidad",
       subtitle = "Gráfico de barras (De mayor a menor popularidad)",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 17, face = "bold"),
        plot.subtitle = element_text(size = 13),
        plot.caption = element_text(face = "italic", size = 12))

La dinámica es la misma, actores y actrices con un recuento aceptable de apariciones en largometrajes, y que además sean muy populares de media. En esta segunda tanda de actores, vemos los segundos actores principales más reconocidos y populares en la industria, por ejemplo, en primer lugar, tenemos a Ian McKellen, actor muy conocido debido a su interpretación como Gandalf en El Señor de los Anillos. Rupert Grint es de sobra conocido también por su interpretación como Ron Weasley en Harry Potter, Josh Hutcherson también muy conocido por su papel como Peeta Mellark en Los Juegos del Hambre. Los 3 actores tiene un factor común que puede explicar su altísima popularidad, y es el haber realizado un papel fundamental en sagas muy conocidas y que a día de hoy siguen muy marcadas en la sociedad.

La popularidad de los actores es clave, ya que una persona puede decidir sobre qué película ir a ver en función de si conoce a los actores o no, entonces, ¿Existe algún tipo de relación entre la popularidad de los actores y el beneficio que reporta la película? ¿Qué actores maximizan la relación popularidad-beneficio? Para ello vamos a mostrar a continuación un gráfico interactivo donde podamos explorar la relación comentada, veremos si, de la figura 12, los actores más populares, y con mayor recuento de películas, son también los que reportan mayor beneficio. Para evitar el solapamiento, hemos escogido una muestra de hasta 100 actores.

actor_reve <- movies_sup %>% filter(principal_actor != "") %>% 
  group_by(principal_actor) %>% 
  summarise(
    Beneficio = mean(revenue),
    Popularidad = mean(popularity),
    count = n()
  ) %>%
  arrange(desc(count)) 

data <- actor_reve[1:100,]


p <- data %>%
  mutate(Beneficio=round(Beneficio,0)) %>%
  mutate(Popularidad=round(Popularidad,0)) %>%
  mutate(text = paste("Beneficio: ", Beneficio, "\nPopularidad: ", Popularidad, 
                      "\nActor: ", principal_actor, "\nNº de películas: ", count, sep = "")) %>%
  
  ggplot(aes(Beneficio, Popularidad, size = count, text = text)) +
    geom_point(alpha=0.7, color = "#D52F12") +
    theme_ipsum() +
    labs(title = "Figura 14. Relación Popularidad-Beneficio en los actores (De media)")

ggplotly(p, tooltip="text")

En primer lugar, observamos una clara relación entre el beneficio y la popularidad, además, esta vez, a diferencia de las figuras 12 y 13, aparecen los actores que tienen un registro menor de películas, pero una popularidad muy alta. El conteo de películas lo vemos en el grosor de los círculos, si pasamos el cursor por los círculos más grandes, veremos que coinciden con los actores de la figura 12, como Bruce Willis o Will Smith. Pero realmente estos actores, a pesar de tener una popularidad muy alta y tener una mayor participación en la industria, no son los actores que más reportan beneficio ni los más populares. En la esquina superior derecha tenemos los actores que más producen beneficio a día de hoy, nombres como Daniel Radcliffe, Kristen Stewart o Jennifer Lawrence han ganado mucha popularidad en los últimos años y han participado en películas que han reportado mucho beneficio, sin embargo, si nos fijamos en el grosor, estos actores no reportan haber participado en una amplia cantidad de películas. Pero han participado en sagas muy exitosas y que han ganado mucha popularidad, por ejemplo, Jennifer Lawrence siendo la protagonista de los Juegos del Hambre, Daniel Radcliffe al interpretar a Harry Potter o Kristen Stewart al protagonizar el personaje de Bella en la saga de Crepúsculo.

A continuación vamos a explorar las productoras que más beneficio reportan en el cine.

produc <- movies_sup %>% group_by(production) %>% 
  summarise(
    Revenue = mean(revenue),
    count = n()
  ) %>%
  arrange(desc(count))

# Representamos graficamente las 25 con más beneficios
data <- produc[1:25,]
data$production[data$production == "Twentieth Century Fox Film Corporation"] <- "Twentieh Century Fox"

# Relizamos un gráfico de circulos para observar la proporción
packing <- circleProgressiveLayout(data$Revenue, sizetype='area')
data <- cbind(data, packing)
dat.gg <- circleLayoutVertices(packing, npoints=50)


ggplot() + 
  
  # Creamos las burbujas
  geom_polygon(data = dat.gg, aes(x, y, production=id, fill=as.factor(id)), colour="black", alpha=0.6) +
  # Añadimos la productora al centro de cada burbuja y controlamos su tamaño
  geom_text(data = data, aes(x, y, size=Revenue, label = production)) +
  scale_size_continuous(range = c(1,4)) +
  # Ajustamos el formato
  theme_void() + 
  theme(legend.position="none") +
  coord_equal() +
  
  labs(title = "Figura 15. Productoras que reportan mayor beneficio de media",
       subtitle = "Gráfico de círculos (Mayor tamaño, mayor beneficio)",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") +
  theme(plot.title = element_text(size = 18, face = "bold"),
        plot.subtitle = element_text(size = 14),
        plot.caption = element_text(face = "italic", size = 12))

Al observar la figura 15, vemos que productoras tienen un mayor beneficio de media, las ganadoras se ven a ojo, siendo Marvel Studios, Twentieth Century Fox Animation, WingNut Films o DreamWorks Animation de las más fuertes de la industria, lo cual no es de extrañar, ya que ¿Quién no ha visto el mítico logo de Twentieth Century Fox en la gran pantalla? También es el caso de Marvel Studios, cuyas películas se han convertido en ventas masivas en los últimos años, lanzando a la fama a actores como Chris Pratt, Chris Evans o Robert Downey Jr, esto lo podemos en la figura 14, cuyos actores mencionados aparecen en la parte superior derecha.

En esta última gráfica vamos a mostrar que películas tienen una mejor nota media. Hay que tener en cuenta que es la nota media recibida en TMDB, lo cual puede diferir de otras páginas como IMDb. Además, y para evitar sesgos en las notas, filtramos para mostrar aquellas que reciben más de 50 votos. El gráfico se muestra a continuación y muestra un top 10:

peli_max <- movies %>% 
  filter(vote_count > 50) %>%
  group_by(title) %>%
  summarise(
    Mayor_nota= max(vote_average)
  ) %>%
  arrange(desc(Mayor_nota))


peli_max[1:10,] %>%
  mutate(title = fct_reorder(title, Mayor_nota)) %>% 
  
  ggplot(aes(x=title, y=Mayor_nota, fill=Mayor_nota) ) +
  geom_bar(stat="identity", alpha = 0.9) +
  coord_flip() +
  theme_ipsum() +
  theme(
    panel.grid.minor.y = element_blank(),
    panel.grid.major.y = element_blank(),
    legend.position="none",
    plot.title = element_text(size = 17, face = "bold"),
    plot.subtitle = element_text(size = 13.5),
    plot.caption = element_text(face = "italic", size = 12)
  ) +
  xlab("") +
  ylab("Nota media recibida") +
  
  labs(title = "Figura 16. Top 10 películas con más nota media",
       subtitle = "Gráfico de barras",
       caption = "Fuente: Elaboración propia (Datos de TMDb)") 

Lo primero que nos llama la atención es que en este top 10 las películas tienen una nota parecida, todas superan el 8 y oscilan entre esta nota y el 8,5 aproximadamente. Además, excepto Whiplash, las demás son de muy principios del siglo XXI o del siglo XX. Las pelicuals mejor puntuadas son del siglo pasado o del principio del presente siglo. Además, si nos fijamos en la figura 16, las películas más puntuadas también son muy famosas, debido a la repercusión mediatica que han tenido películas como El Padrino o Pulp Fiction.

En la siguiente tabla mostramos como al ampliar la muestra a las 20 películas mas valoradas de TMDb, vemos que existe una tendencia similar a lo dicho anteriormente con respecto a la fecha de estreno, la mayoria de películas mejor valoradas son antiguas.

peli_fec <- movies %>%
  filter(vote_count > 50) %>%
  group_by(title, release_date) %>%
  summarise(
    Nota= max(vote_average),
  ) %>%
  arrange(desc(Nota)) %>%
  rename(Fecha_estreno = release_date,
         Titulo = title)


kable(peli_fec[1:20,])
Titulo Fecha_estreno Nota
The Shawshank Redemption 1994-09-23 8.5
The Godfather 1972-03-14 8.4
Fight Club 1999-10-15 8.3
Pulp Fiction 1994-10-08 8.3
Schindler’s List 1993-11-29 8.3
Spirited Away 2001-07-20 8.3
The Godfather: Part II 1974-12-20 8.3
Whiplash 2014-10-10 8.3
12 Angry Men 1957-03-25 8.2
American History X 1998-10-30 8.2
Anne of Green Gables 1985-12-01 8.2
Forrest Gump 1994-07-06 8.2
GoodFellas 1990-09-12 8.2
Howl’s Moving Castle 2004-11-19 8.2
Once Upon a Time in America 1984-02-16 8.2
One Flew Over the Cuckoo’s Nest 1975-11-18 8.2
Princess Mononoke 1997-07-12 8.2
Psycho 1960-06-16 8.2
Seven Samurai 1954-04-26 8.2
The Dark Knight 2008-07-16 8.2

3. Bibliografía

The Movie Database «TMDB 5000 Movie Dataset». Recuperado el 10 de junio de 2020 de https://www.kaggle.com/tmdb/tmdb-movie-metadata

Yan Holtz «the R graph gallery». Recuperado el 20 de junio de 2020 de https://www.r-graph-gallery.com/index.html

TMDb. (2020). About Us. Recuperado el 01 de junio de 2020 de https://www.themoviedb.org/