Trabajo elaborado para la asignatura “Programación y manejo de datos en la era del Big Data” de la Universitat de València durante el curso 2020-2021. El repo del trabajo está aquí. La página web de la asignatura y los trabajos de mis compañeros pueden verse aquí.
Antes de elegir estos datos estuve viendo datos de la web de imdb (pesaban demasiado) y de otro dataset de kaggle de la web tmdb. Finalemente me he decantado por estos porque tienen los principales datos que quiero analizar de 220 películas por cada año desde 1986 hasta 2016. También he utilizado un df de los nominados y los ganadores de los Oscar, sacado de kaggle también.
La intención principal de este trabajo es ver si existe relación entre el éxito tanto comercial (en cuanto a recaudación en USA) como de popularidad (puntuación media de los usuarios de IMDB) como de reconocimiento (premios Oscars) y el actor/actriz principal, el director o la productora.
Primero cargamos los paquetes
library(tidyverse)
library(plotly)
library(DT)
library(gridExtra)
library(formattable)
library(cowplot)
library(ggplot2)
library("wesanderson")
library(ggthemr)
library(gt)
Cargamos los datos
movies <- rio::import(here::here("datos", "movie_industry", "movies.csv"))
oscars <- rio::import(here::here("datos","oscars", "the_oscar_award.csv"))
Tuve la suerte de que los datos de los dos dataframes que utilicé ya estaban bastante limpios y los pocos cambios que tuve que hacer los hice sobre la marcha.
Primero vamos a observar quienes son los actores/actrices, directores y productoras que más recaudan, mejor valoración tienen por el público y mejor valoración tienen por la Academia de las Oscars.
Para calcular la nota media he tenido que escoger actores/directores/productoras que tengan más de 5 películas, ya que sino era más difícil encontrar una relación. Por ejemplo la película brasileña “Ciudad de Dios” tiene una de las notas más altas (8.7), pero es la única película en la lista del actor principal y de la productora.
Después en el apartado “Resultados” observaremos los actores/directores/productoras que se encuentran tanto en el Top 30 de los que más recaudan, en el Top 30 de los que mejor nota tienen sus películas y tienen por lo menos un Oscar.
#actores que más recaudan
#top 30
star_gross <- movies %>% group_by(star) %>%
summarise(recaudacion = sum(gross)) %>%
arrange(desc(recaudacion)) %>%
mutate(recaudacion = recaudacion/1000000)
DT::datatable(star_gross, caption = 'Recaudación en millones de dólares')
Comprueba lo que recuada tu actor/actriz favorito.
star_gross_10 <- star_gross %>% head(10)
star_gross_10 <- star_gross_10 %>% mutate(star = forcats::as_factor(star)) %>%
mutate(star = forcats::fct_reorder(star,recaudacion))
#Fijamos el tema para el resto de gráficos
ggthemr("solarized")
ggplot(star_gross_10, aes(star, recaudacion, fill = star)) + geom_col() + coord_flip() + theme(legend.position = "none") +
labs(title = "Top 10 actores/actrices con más recaudación",
subtitle = "En millones de dólares",
x = NULL, y = NULL)+
geom_text(aes(label= recaudacion), position = position_stack(vjust= 0.5),
colour = "grey30", size = 3) + scale_fill_manual(values = wes_palette("Zissou1", n = 10, type = "continuous"))
Para hacer esto he calculado la media de la puntuación de las películas que han hecho cada actor(he escogido actores que hayan hecho más de 5 películas).
#vamos a observar qué pasa si escogemos actores que hayan hecho más de 5 películas como protagonistas.
star_score_5 <- movies %>% group_by(star) %>%
mutate(NN = n()) %>%
filter(NN > 5) %>%
summarise(nota_media = mean(score)) %>%
arrange(desc(nota_media))
DT::datatable(star_score_5)
¡Busca a tu intérprete favorito!
#actores con oscar
oscars <- rio::import(here::here("datos","oscars", "the_oscar_award.csv"))
oscars_1 <- oscars %>% filter(category %in% c("ACTOR", "ACTRESS", "ACTOR IN A SUPPORTING ROLE", "ACTRESS IN A SUPPORTING ROLE", "ACTOR IN A LEADING ROLE", "ACTRESS IN A LEADING ROLE")) %>% filter(winner == TRUE) %>%
group_by(name) %>%
mutate(wins = n()) %>%
distinct(name,.keep_all = TRUE)
osc_act <- left_join(movies, oscars_1, by = c("star" = "name"))
osc_act_un <- osc_act %>% filter(complete.cases(.)) %>% distinct(star, .keep_all = TRUE)
#actores con oscar
act_osc <- osc_act_un %>% select(star, wins)%>%
arrange(desc(wins))
#actores con más de un oscar
act_mas_osc <- act_osc %>% slice_max(wins, n = 10) #usar head(10) para los 10 primeros resultados
library(DT)
datatable(act_osc) %>% formatStyle(
'wins',target = 'row',
backgroundColor = styleEqual(c(1, 2, 3), c('khaki', 'lightblue', 'pink'))
)
Ahora vamos a comprobar qué actores están entre los 30 con más recaudación, los 30 con mejor nota media de sus películas y además tienen un Oscar.
#Resultados
star_gross_30 <- star_gross %>% head(30) %>%
mutate(rank_rec = c(1:30))
star_score_30 <- star_score_5 %>% head(30)
actores <- merge(merge(
star_gross_30,
star_score_30, all = TRUE),
act_osc, all = TRUE)
aa <- actores %>% filter(complete.cases(.)) %>% arrange(desc(recaudacion))
customGreen0 = "#DeF7E9"
customGreen = "#71CA97"
aa %>% formattable(list(
nota_media = formatter("span",
style = x ~ style(color = ifelse(rank(-x) <= 1, "blue", "gray")),
x ~ sprintf("%.2f (rank: %02d)", x, rank(-x))),
area(col = recaudacion) ~ normalize_bar("pink", 0.2),
`rank_rec`= color_tile(customGreen, customGreen0),
wins = color_tile("khaki", "lightblue")))
star | recaudacion | rank_rec | nota_media | wins |
---|---|---|---|---|
Tom Hanks | 3973.406 | 1 | 7.07 (rank: 04) | 2 |
Leonardo DiCaprio | 2304.909 | 9 | 7.51 (rank: 01) | 1 |
Christian Bale | 1817.915 | 16 | 7.39 (rank: 02) | 1 |
Brad Pitt | 1486.238 | 28 | 7.13 (rank: 03) | 1 |
Tenemos a Tom Hanks, Leonardo DiCaprio, Brad Pitt y a Christian Bale. Siendo Tom Hanks el que más dinero recauda de todos y el que más oscars tiene (de los cuatro), aunque DiCaprio participa en películas mejor valoradas.
#Directores más taquilleros
dir_gross <- movies %>% group_by(director) %>%
summarise(recaudacion = sum(gross)) %>%
arrange(desc(recaudacion)) %>%
mutate(recaudacion = recaudacion/1000000)
DT::datatable(dir_gross, caption = 'Recaudación en millones de dólares')
¡Encuentra a tu director favorito!
dir_gross_10 <- dir_gross %>% head(10) %>% mutate(director = forcats::as_factor(director)) %>%
mutate(director = forcats::fct_reorder(director,recaudacion))
ggplot(dir_gross_10, aes(director, recaudacion, fill = director)) + geom_col() + coord_flip() + theme(legend.position = "none") +
labs(title = "Top 10 Directores con más recaudación",
subtitle = "En millones de dólares",
x = NULL, y = NULL) +
geom_text(aes(label= recaudacion), position = position_stack(vjust= 0.5),
colour = "grey30", size = 3) + scale_fill_manual(values = wes_palette("Zissou1", n = 10, type = "continuous"))
En este caso he hecho como con los actores y he escogido solo a directores con más de 5 películas
#que hayan dirigido más de 5 películas
dir_score_5 <- movies %>% group_by(director) %>%
mutate(NN = n()) %>%
filter(NN > 5) %>%
summarise(nota_media = mean(score)) %>%
arrange(desc(nota_media))
DT::datatable(dir_score_5)
oscars_2 <- oscars %>% filter(category %in% c("DIRECTING (Comedy Picture)", "DIRECTING (Dramatic Picture)", "DIRECTING")) %>% filter(winner == TRUE) %>%
group_by(name) %>%
mutate(wins = n()) %>%
distinct(name,.keep_all = TRUE)
osc_dir <- left_join(movies, oscars_2, by = c("director" = "name"))
osc_dir_un <- osc_dir %>% filter(complete.cases(.)) %>% distinct(director, .keep_all = TRUE)
#directores con oscar
dir_osc <- osc_dir_un %>% select(director, wins)%>%
arrange(desc(wins))
datatable(dir_osc) %>% formatStyle(
'wins',target = 'row',
backgroundColor = styleEqual(c(1, 2, 3), c('khaki', 'lightblue', 'pink'))
)
dir_gross_30 <- dir_gross %>% head(30) %>%
mutate(rank_rec = c(1:30))
dir_score_30 <- dir_score_5 %>% head(30)
directores <- merge(merge(
dir_gross_30,
dir_score_30, all = TRUE),
dir_osc, all = TRUE)
bb <- directores %>% filter(complete.cases(.)) %>% arrange(desc(recaudacion))
bb %>% formattable(list(
nota_media = formatter("span",
style = x ~ style(color = ifelse(rank(-x) <= 1, "blue", "gray")),
x ~ sprintf("%.2f (rank: %02d)", x, rank(-x))),
area(col = recaudacion) ~ normalize_bar("pink", 0.2),
`rank_rec`= color_tile(customGreen, customGreen0),
wins = color_tile("khaki", "lightblue")))
director | recaudacion | rank_rec | nota_media | wins |
---|---|---|---|---|
Steven Spielberg | 2890.693 | 1 | 7.39 (rank: 03) | 2 |
Peter Jackson | 2134.382 | 3 | 7.78 (rank: 02) | 1 |
James Cameron | 1909.927 | 4 | 7.88 (rank: 01) | 1 |
Podemos ver que los tres directores que han ganado un Oscar y están en el top 30 de los que más recaudan y en el de la nota media de sus películas son Steven Spielberg, Peter Jackson y James Cameron. A pesar de tener las peliculas peor valoradas de media de los tres directores, Spielberg es el director que más recauda de todos y es el director con más Oscars (empatado con otros).
prod_gross <- movies %>% group_by(company) %>%
summarise(recaudacion = sum(gross)) %>%
arrange(desc(recaudacion)) %>%
mutate(recaudacion = recaudacion/1000000)
DT::datatable(prod_gross)
prod_gross_10 <- prod_gross %>% head(10) %>% mutate(company = forcats::as_factor(company)) %>%
mutate(company = forcats::fct_reorder(company,recaudacion))
ggplot(prod_gross_10, aes(company, recaudacion, fill = company)) + geom_col() + coord_flip() + theme(legend.position = "none") +
labs(title = "Top 10 Productoras con más recaudación",
subtitle = "En millones de dólares",
x = NULL, y = NULL)+
geom_text(aes(label= recaudacion), position = position_stack(vjust= 0.5),
colour = "grey30", size = 3) + scale_y_continuous(labels=scales::comma) + scale_fill_manual(values = wes_palette("Zissou1", n = 10, type = "continuous"))
5 Majors
En la indutria del cine hoy en día se puede destacar el papel de 5 productoras que manejan gran parte del mercado, son conocidas como las 5 majors y a estas pertenecen muchas de las productoras más pequeñas.
tot_gross <- movies %>% mutate(total = sum(gross))#total de la recaudación de las películas
columbia_gross <- tot_gross %>% filter(company %in% c("Columbia Pictures", "Columbia Pictures Corporation", "Columbia Pictures Film Production Asia", "Columbia Pictures Industries", "Columbia TriStar Home Video" ,"TriStar Television", "TriStar Pictures", "Columbia TriStar Home Video", "Sony Pictures Classics", "Sony Pictures Entertainment (SPE)", "Affirm Films", "Screen Gems", "Stage 6 Films", "Destination Films")) %>%
mutate(rec = sum(gross)) %>%
filter(company == "Columbia Pictures") %>%
distinct(company, .keep_all = TRUE)
warner_gross <- tot_gross %>% filter(company %in% c( "Warner Bros.", "Warner Bros. Animation", "Warner Bros. Digital Distribution", "Warner Bros. Family Entertainment", "Warner Bros. Pictures", "Warner Independent Pictures (WIP)", "New Line Cinema", "DC Entertainment", "Castle Rock Entertainment", "HBO Films", "Home Box Office (HBO)", "Spyglass Entertainment", "Turner Pictures (I)")) %>%
mutate(rec = sum(gross)) %>%
filter(company == "Warner Bros.") %>%
distinct(company, .keep_all = TRUE)
universal_gross <- tot_gross %>% filter(company %in% c( "Universal Pictures", "Universal Pictures International (UPI)", "Universal City Studios", "NBC Productions", "National Broadcasting Company (NBC)", "Focus Features", "Working Title Films", "DreamWorks", "DreamWorks Animation", "Illumination Entertainment", "Amblin Partners", "Carnival Film & Television", "WT2 Productions"))%>%
mutate(rec = sum(gross)) %>%
filter(company == "Universal Pictures") %>%
distinct(company, .keep_all = TRUE)
paramount_gross <- tot_gross %>% filter(company %in% c( "Paramount Pictures", "Paramount Classics", "Paramount Animation", "Paramount Vantage", "Viacom18 Motion Pictures", "CBS Entertainment Production", "CBS Films", "Miramax", "BET Pictures", "Comedy Central Films", "MTV Films", "Nickelodeon Movies"))%>%
mutate(rec = sum(gross)) %>%
filter(company == "Paramount Pictures") %>%
distinct(company, .keep_all = TRUE)
disney_20th_gross <- tot_gross %>% filter(company %in% c( "Walt Disney Pictures", "Walt Disney Feature Animation Florida", "Walt Disney Feature Animation", "Walt Disney Animation Studios", "Disneytoon Studios", "Disney Television Animation" , "20th Century Fox", "Twentieth Century Fox Film Corporation", "Twentieth Century Fox Animation", "Fox Searchlight Pictures", "Lucasfilm", "Lucasfilm Animation", "Marvel Studios", "Marvel Entertainment", "Marvel Enterprises", "Blue Sky Studios", "Pixar Animation Studios", "", ""))%>%
mutate(rec = sum(gross)) %>%
filter(company == "Walt Disney Pictures") %>%
distinct(company, .keep_all = TRUE)
prod <- rbind(columbia_gross, warner_gross, universal_gross, paramount_gross, disney_20th_gross)
prod_1 <- prod %>% select(company,rec, total) %>% arrange(desc(rec)) %>% mutate(porc = rec/total*100) %>% add_row(company = "Otros", porc = 37.05033)%>% relocate(total, .after = porc)
prod_1 <- prod_1 %>%
arrange(desc(company)) %>%
mutate(lab.ypos = cumsum(porc) - 0.5*porc)
p2 <-ggplot(prod_1, aes(x = "", y = porc, fill = company)) +
geom_bar(width = 1, stat = "identity", color = "white") +
coord_polar("y", start = 0)+
geom_text(aes(y = lab.ypos, label = scales::percent(porc/100)), color = "black", size = 5.5)+
theme_void() + scale_fill_manual(values = wes_palette("FantasticFox1", n = 6, type = "continuous"))
ggdraw(p2) + draw_image("https://www.ecured.cu/images/9/9d/Columbia_pictures.jpg",x= 0.29, y = 0.75, width = 0.1, height = 0.1) + draw_image("https://www.cinemascomics.com/wp-content/uploads/2019/11/WarnerMedia_Warner_Bros.jpg",x= 0.47, y = 0.75, width = 0.1, height = 0.1) + draw_image("https://1.bp.blogspot.com/--Gh5dYahIco/XIMJmYmWw6I/AAAAAAAALRI/fXrve6ZPlqQWGpWRJ9eCip6KHO4Nxf_SgCLcBGAs/s1600/disney_pocahontas.png",x= 0.63, y = 0.48, width = 0.1, height = 0.1) + draw_image("https://static.wikia.nocookie.net/disneyypixar/images/9/95/Universal_Studios.jpg/revision/latest/scale-to-width-down/340?cb=20180920175301&path-prefix=es",x= 0.54, y = 0.2, width = 0.1, height = 0.1) + draw_image("https://www.creativosonline.org/blog/wp-content/uploads/2015/08/paramount-majestic-mountain-logo.jpg",x= 0.36, y = 0.13, width = 0.1, height = 0.1)
Vemos que Walt Disney Pictures, que empezó como una productora de animación, hoy en día ha conseguido diversificar consolidándose como la productora más rentable.
Productoras con más de 5 películas
#más de 5 peliculas
prod_score_5 <- movies %>% group_by(company) %>%
mutate(NN = n()) %>%
filter(NN > 5) %>%
summarise(nota_media = mean(score)) %>%
arrange(desc(nota_media))
DT::datatable(prod_score_5)
oscars_3 <- oscars %>% filter(winner == TRUE, film != "") %>%
group_by(film) %>%
mutate(wins = n()) %>%
distinct(film, .keep_all = TRUE)
osc_prod <- left_join(movies, oscars_3, by = c("name" = "film"))
osc_prod_un <- osc_prod %>% filter(complete.cases(.)) %>% distinct(name, .keep_all = TRUE)
#productoras con más oscars
prod_osc <- osc_prod_un %>% group_by(company) %>%
mutate(tot_wins = sum(wins)) %>%
distinct(company, .keep_all = TRUE) %>%
select(company, tot_wins)%>%
arrange(desc(tot_wins))
prod_osc_10 <- prod_osc %>% head(10)
ggplot(prod_osc_10, aes(factor(company,levels = company), tot_wins, fill = company)) + geom_col() + coord_flip() + theme(legend.position = "none") +
geom_text(aes(label= tot_wins ,hjust=-.03),size=4) +
labs(title = "Productoras con más Oscars",
subtitle = "Todas las categorías",
x = NULL , y = "número de Oscars") + scale_fill_manual(values = wes_palette("Zissou1", n = 10, type = "continuous"))
Productoras con más oscars a mejor película
(tambien mejor produccion, mejor pelicula extranjera, mejor documental y mejor `pelicUla de animacion)
oscars_4 <- oscars %>% filter(winner == TRUE, film != "", category %in% c("OUTSTANDING PICTURE", "UNIQUE AND ARTISTIC PICTURE", "OUTSTANDING PRODUCTION", "OUTSTANDING MOTION PICTURE", "DOCUMENTARY", "DOCUMENTARY (Feature)", "BEST MOTION PICTURE", "SPECIAL FOREIGN LANGUAGE FILM AWARD", "HONORARY FOREIGN LANGUAGE FILM AWARD", "FOREIGN LANGUAGE FILM", "BEST PICTURE", "ANIMATED FEATURE FILM", "INTERNATIONAL FEATURE FILM")) %>%
group_by(film) %>%
mutate(wins = n()) %>%
distinct(film, .keep_all = TRUE)
osc_prod_1 <- left_join(movies, oscars_4, by = c("name" = "film"))
osc_prod_dos <- osc_prod_1 %>% filter(complete.cases(.)) %>% distinct(name, .keep_all = TRUE)
prod_osc_peli <- osc_prod_dos %>% group_by(company) %>%
mutate(tot_wins = sum(wins)) %>%
distinct(company, .keep_all = TRUE) %>%
select(company, tot_wins)%>%
arrange(desc(tot_wins))
datatable(prod_osc_peli) %>% formatStyle(
'tot_wins',target = 'row',
backgroundColor = styleEqual(c(1, 2, 3, 5, 6), c('khaki', 'lightblue', 'pink', 'orange', 'palegreen'))
)
Vamos a coger las productoras con oscar a mejor película.
prod_gross_30 <- prod_gross %>% head(30) %>%
mutate(rank_rec = c(1:30))
prod_score_30 <- prod_score_5 %>% head(30)
productoras_1 <- merge(merge(
prod_gross_30,
prod_score_30, all = TRUE),
prod_osc_peli, all = TRUE)
hh <- productoras_1 %>% filter(complete.cases(.)) %>% arrange(desc(tot_wins))
hh %>% formattable(list(
nota_media = formatter("span",
style = x ~ style(color = ifelse(rank(-x) <= 1, "blue", "gray")),
x ~ sprintf("%.2f (rank: %02d)", x, rank(-x))),
area(col = recaudacion) ~ normalize_bar("pink", 0.2),
`rank_rec`= color_tile(customGreen, customGreen0),
tot_wins = color_tile("khaki", "orange")))
company | recaudacion | rank_rec | nota_media | tot_wins |
---|---|---|---|---|
Pixar Animation Studios | 3242.025 | 13 | 7.78 (rank: 01) | 5 |
DreamWorks Animation | 4143.974 | 11 | 6.92 (rank: 02) | 1 |
Curiosamente vemos que las dos únicas productoras en el top de recaudación, nota media de sus películas y que han ganado un Oscar son ambas de animación: Pixar Animation Studios y DreamWorks Animation. Siendo Pixar la que mejor nota media tiene y más Oscars, aunque menos recaudación que Dreamworks Animation.
Para esta comparación vamos a coger a las 10 estrellas, los 10 directores y las 10 productoras que más recaudan para ver qué peliculas han hecho y si estas han tenido el éxito comercial que se espera de ellas.
#filtrando TOP 10 actores, dir, y prod
pelis_gross <- movies %>% filter(star %in% c("Tom Hanks", "Tom Cruise", "Robert Downey Jr.", "Will Smith", "Johnny Depp", "Adam Sandler", "Daniel Radcliffe", "Ben Stiller", "Leonardo DiCaprio", "Jim Carrey")) %>%
filter(director %in% c("Steven Spielberg", "Michael Bay", "Peter Jackson", "James Cameron", "Christopher Nolan", "Tim Burton", "Robert Zemeckis", "Chris Columbus", "Ron Howard", "J.J. Abrams"))%>%
filter(company %in% c("Warner Bros.", "Universal Pictures", "Paramount Pictures", "Twentieth Century Fox Film Corporation", "Walt Disney Pictures", "Columbia Pictures", "New Line Cinema", "Columbia Pictures Corporation", "Touchstone Pictures", "DreamWorks")) %>%
arrange(desc(gross)) %>%
mutate(act_dir_prod = "si") %>%
mutate(gross = gross/1000000)
pelis_gross <- pelis_gross %>% mutate(name = forcats::as_factor(name)) %>%
mutate(name = forcats::fct_reorder(name,gross))
ggplot(pelis_gross, aes(name, gross, fill = name)) + geom_col() + coord_flip() + theme(legend.position = "none") +
labs(subtitle = "Recaudación en millones de dólares",
x = NULL, y = NULL)+
geom_text(aes(label= gross), position = position_stack(vjust= 0.5),
colour = "grey30", size = 3) + scale_fill_manual(values = wes_palette("Zissou1", n = 27, type = "continuous"))
Comparación con las peliculas que más han recaudado
Comparamos si la fórmula director + actor + productora rentables de verdad crea películas rentables. Comparamos con el top de peliculas con más recaudación (desde 1986 y en la lista).
pelis_max_gross <- movies %>% arrange(desc(gross)) %>% head(50) %>% mutate(act_dir_prod = "top_50")%>%
mutate(gross = gross/1000000)
pelis_rec <- union(pelis_gross, pelis_max_gross)
# pelis_rec <- pelis_rec[-c(30), ]
pelis_rec_1 <- pelis_rec %>% arrange(desc(gross)) %>% head(53)
pelis_rec_2 <- pelis_rec_1[-c(4, 47, 53), ]
pelis_rec_2 <- pelis_rec_2 %>% mutate(name = forcats::as_factor(name)) %>%
mutate(name = forcats::fct_reorder(name,gross))
ggplot(pelis_rec_2, aes(name, gross, fill = act_dir_prod)) + geom_col() + scale_y_continuous(labels=scales::comma) + coord_flip() +
labs(subtitle = "Recaudación en millones de dólares",
x = NULL, y = NULL) + scale_fill_manual(values = wes_palette("Moonrise3", n = 2, type = "continuous"))
pelis_list <- pelis_rec_2 %>% mutate(ranking = c(1:50)) %>%
filter(act_dir_prod == "si") %>%
select(ranking, name, director, star, company, gross)
pelis_list %>% formattable(list(
`ranking`= color_tile(customGreen, customGreen0),
area(col = gross) ~ normalize_bar("pink", 0.2)))
ranking | name | director | star | company | gross |
---|---|---|---|---|---|
3 | Titanic | James Cameron | Leonardo DiCaprio | Twentieth Century Fox Film Corporation | 658.6723 |
45 | Forrest Gump | Robert Zemeckis | Tom Hanks | Paramount Pictures | 330.2522 |
50 | Harry Potter and the Sorcerer’s Stone | Chris Columbus | Daniel Radcliffe | Warner Bros. | 317.5756 |
En el Top 50 películas más taquilleras de la historia podemos encontrar tres de las películas que cumplen la hipótesis de director + productora + actor/actriz. Estas son Titanic, Forrest Gump y Harry Potter, siendo Titanic la tercera con más recaudación desde 1986. Cabe destacar que en el año de su estreno se convirtió en la película más taquillera hasta ese momento.
#boxplot medias
movies_box <- movies %>% mutate(gross = gross/1000000) %>% mutate(act_dir_prod = "Todas")
box_pelis_gross <- union(movies_box, pelis_rec)
library("wesanderson")
p <- ggplot(box_pelis_gross, aes(x = reorder(act_dir_prod, gross, mean), y = gross, fill = act_dir_prod )) + geom_boxplot() + scale_y_continuous(breaks = seq(0, 500, 50), limits = c(NA, 500)) + scale_fill_manual(values = wes_palette("Darjeeling1", n = 3, type = "discrete")) + labs(subtitle = "Recaudación en millones de dólares", x = NULL) + theme(legend.position = "none")
library(plotly)
ggplotly(p)
Podemos ver como, teniendo en cuenta que la mediana de todas las películas de la lista es de poco más de 12 millones de dólares , contratar un actor + director + productora rentable (el boxplot “si”) sube la mediana de ingresos a más de 135 millones de dólares. Sin embargo queda lejos de la mediana de las 50 películas que más han recaudado de la lista, 368 milliones de dólares.
Recaudación, nota y Oscars
#scatterplot con nota media y oscars
oscars_pelis <- oscars %>% filter(winner == "TRUE", year_film > 1986) %>%
group_by(film) %>%
mutate(wins = n())%>%
distinct(film,.keep_all = TRUE) %>%
mutate(film = case_when(
film == "Dr. Seuss' How the Grinch Stole Christmas" ~ "How the Grinch Stole Christmas",
film == "Sweeney Todd The Demon Barber of Fleet Street" ~ "Sweeney Todd: The Demon Barber of Fleet Street",
TRUE ~ film ))
oscars_pelis_gross <- left_join(pelis_gross, oscars_pelis, by = c("name" = "film"))
oscars_pelis_gross$wins[is.na(oscars_pelis_gross$wins)] <- 0
library(ggrepel)
p1 <- ggplot(oscars_pelis_gross, aes(gross, score, size = wins , color = name)) + geom_point() + theme(legend.position = "none") + scale_x_continuous(labels=scales::dollar, breaks = seq(0, 700, 100)) + scale_color_manual(values = wes_palette("Zissou1", n = 27, type = "continuous"))
library(plotly)
ggplotly(p1)
En esta gráfica vemos cómo estas películas con act + dir + prod más rentables, han sido luego recibidas por los usuarios de imdb (score) y además según su tamaño cuántos Oscars ganaron.
Vemos en el caso de Titanic como a parte de convertirse en la película más taquillera, se llevó la mayor cantidad de Óscars (record que sigue vigente, solo igualado por el Señor de los Anillos 3) en su momento. También cabe destacar las películas Salvar al soldado Ryan, Inception y Forrest Gump, que aparte de llevarse entre 4 y 6 Oscars, están valoradas por los usuarios con más de un 8.5.
#filtrando TOP 10 actores, dir, y prod
pelis_score_5 <- movies %>% filter(star %in% c("Aamir Khan", "Ricardo Darín","Leonardo DiCaprio", "Shah Rukh Khan", "Takeshi Kitano", "Christian Bale", "Andrew Garfield", "Ian McKellen", "Tom Hardy", "Javier Bardem")) %>%
filter(director %in% c("Christopher Nolan", "Quentin Tarantino","James Cameron","Giuseppe Tornatore", "Peter Jackson", "Alejandro González Iñárritu", "David Fincher", "Éric Rohmer", "Denis Villeneuve", "Chan-wook Park"))%>%
filter(company %in% c("Pixar Animation Studios", "Marvel Studios", "Warner Independent Pictures (WIP)", "MK2 Productions", "Bandai Visual Company", "Walt Disney Animation Studios", "Lucasfilm", "Zentropa Entertainments", "Canal+ España", "Good Machine")) %>%
arrange(desc(score)) %>%
mutate(act_dir_prod = "si")
No se han encontrado películas con los actores + directores + productoras mejor valorados.
(tomando los datos de act_osc, dir_osc y prod_osc_peli <- oscar a MEJOR PELICULA)
pelis_oscar <- movies %>% filter(star %in% c("Meryl Streep", "Jack Nicholson","Robert De Niro", "Tom Hanks", "Gene Hackman", "Sean Penn", "Jane Fonda", "Jack Lemmon", "Michael Caine", "Denzel Washington", "Bette Davis", "Jason Robards", "Jodie Foster", "Sally Field", "Dustin Hoffman","Daniel Day-Lewis", "Peter Ustinov", "Jessica Lange","Glenda Jackson", "Marlon Brando","Frances McDormand", "Kevin Spacey", "Cate Blanchett","Hilary Swank", "Maggie Smith", "Christoph Waltz", "Mahershala Ali")) %>%
filter(director %in% c("Oliver Stone", "Clint Eastwood","Steven Spielberg","Milos Forman", "Ang Lee"))%>%
filter(company %in% c("Warner Bros.", "Pixar Animation Studios", "Universal Pictures", "Walt Disney Pictures", "Recorded Picture Company (RPC)", "Columbia Pictures Corporation", "Paramount Pictures", "Miramax")) %>%
arrange(desc(gross)) %>%
mutate(act_dir_prod = "si")
peliculas_oscar <- pelis_oscar %>% select(name, director, star, company, gross)
#Mystic River y Million Dollar Baby
ee <- oscars %>% filter(film %in% c("Mystic River", "Million Dollar Baby"), winner == TRUE) %>% select(film, category, name, winner)
datatable(ee) %>% formatStyle(
'film',target = 'row',
backgroundColor = styleEqual(c("Mystic River", "Million Dollar Baby"), c('pink', 'lightblue'))) %>% formatStyle('name',
backgroundColor = styleEqual(c("Sean Penn", "Hilary Swank", "Clint Eastwood"), c('khaki', 'khaki', 'khaki'))) %>% formatStyle('category',
backgroundColor = styleEqual(c("ACTOR IN A LEADING ROLE", "ACTRESS IN A LEADING ROLE", "DIRECTING", "BEST PICTURE"), c('khaki', 'khaki', 'khaki', 'khaki'))) %>% formatStyle('name', target = 'row',
backgroundColor = styleEqual(c("Clint Eastwood, Albert S. Ruddy and Tom Rosenberg, Producers"), c('khaki'))) %>% formatStyle('name', target = "row",
fontWeight = styleEqual("Clint Eastwood, Albert S. Ruddy and Tom Rosenberg, Producers", "bold"))
Podemos ver como la combinación de productora ganadora de Oscar, actor ganador de Oscar y director ganador de Oscar fue fructífera en estas dos películas. Mirando los datos con detenimiento vemos como Sean Penn ganó su primer Oscar con Mystic River (con lo cual cuando se le escogió para la pelicula todavía no era ganador de Oscar).
En el caso de Million Dollar Baby, Clint Eastwood, Hilary Swank y Warner Bros ya habían ganado un oscar (casualmente con Clint Eastwood en Unforgiven), y el resultado fue el Oscar a Mejor Película, el Oscar a Mejor Actriz para Hillary Swank y el Oscar a Mejor Director para Clint Eastwood, con lo cual en este caso les salió bien la estrategia de escoger a ganadores de oscar.
Actor, director y productora
Primero probamos a ver si hay películas que cuenten con actor, director y productora que cumplen los 3 criterios (más taquilleros, mejor nota y ganadores de óscar; es decir los que salen en Resultados)
#todo: nada
df <- movies %>% filter(star %in% c( "Brad Pitt", "Christian Bale", "Leonardo DiCaprio", "Tom Hanks")) %>% filter(director %in% c("Steven Spielberg", "Peter Jackson", "James Cameron")) %>% filter(company %in% c("Pixar Animation Studios", "DreamWorks Animation"))
No sale ningún resultado, vamos a probar con actor y director:
Actor y director
df_1 <- movies %>% filter(star %in% c( "Brad Pitt", "Christian Bale", "Leonardo DiCaprio", "Tom Hanks")) %>% filter(director %in% c("Steven Spielberg", "Peter Jackson", "James Cameron"))#6 resultados
df_1 %>% select(name, director, star, company, gross, score)
name | director | star | company | gross | score |
---|---|---|---|---|---|
Empire of the Sun | Steven Spielberg | Christian Bale | Amblin Entertainment | 22238696 | 7.8 |
Titanic | James Cameron | Leonardo DiCaprio | Twentieth Century Fox Film Corporation | 658672302 | 7.8 |
Saving Private Ryan | Steven Spielberg | Tom Hanks | DreamWorks | 216540909 | 8.6 |
Catch Me If You Can | Steven Spielberg | Leonardo DiCaprio | DreamWorks | 164615351 | 8.1 |
The Terminal | Steven Spielberg | Tom Hanks | DreamWorks | 77872883 | 7.3 |
Bridge of Spies | Steven Spielberg | Tom Hanks | DreamWorks | 72313754 | 7.6 |
Tenemos 6 películas. Vamos a ver con actor y productora:
Actor y productora
df_2 <- movies %>% filter(star %in% c( "Brad Pitt", "Christian Bale", "Leonardo DiCaprio", "Tom Hanks")) %>% filter(company %in% c("Pixar Animation Studios", "DreamWorks Animation"))#Toy Story 1 y 2
df_2 %>% select(name, director, star, company, gross, score)
name | director | star | company | gross | score |
---|---|---|---|---|---|
Toy Story | John Lasseter | Tom Hanks | Pixar Animation Studios | 191796233 | 8.3 |
Toy Story 2 | John Lasseter | Tom Hanks | Pixar Animation Studios | 245852179 | 7.9 |
Tenemos dos resultados.
Director y productora
df_3 <- movies %>% filter(director %in% c("Steven Spielberg", "Peter Jackson", "James Cameron")) %>% filter(company %in% c("Pixar Animation Studios", "DreamWorks Animation"))#nada
Ningún resultado, ahora vamos a quitar a las productoras de animación, ya que podían estar entorpeciendo la relación entre actores o directores que no suelen dedicarse al ámbito de la animación.
sin_anim <- movies %>% filter(genre != "Animation")
prod_gross_1 <- sin_anim %>% group_by(company) %>%
summarise(recaudacion = sum(gross)) %>%
arrange(desc(recaudacion)) %>%
head(30)
prod_score_1 <- sin_anim %>% group_by(company) %>%
summarise(nota_media = mean(score)) %>%
arrange(desc(nota_media)) %>%
head(30)
#más de 5 peliculas
prod_score_5_1 <- sin_anim %>% group_by(company) %>%
mutate(NN = n()) %>%
filter(NN > 5) %>%
summarise(nota_media = mean(score)) %>%
arrange(desc(nota_media)) %>%
head(30)
productoras_1 <- merge(merge(
prod_gross_1,
prod_score_5_1, all = TRUE),
prod_osc, all = TRUE)
dd <- productoras_1 %>% filter(complete.cases(.)) %>% arrange(desc(tot_wins))
dd
company | recaudacion | nota_media | tot_wins |
---|---|---|---|
Focus Features | 811903004 | 6.802857 | 8 |
Vemos que la única productora que cumple ahora los tres criterios es Focus Features.
Actor, director y productora
#SIN ANIMACION
df_rel_1 <- movies %>% filter(star %in% c( "Brad Pitt", "Christian Bale", "Leonardo DiCaprio", "Tom Hanks")) %>% filter(director %in% c("Steven Spielberg", "Peter Jackson", "James Cameron")) %>% filter(company == "Focus Features")#nada
Incorporando la productora Focus Features sigue sin haber ninguna pelicula que cumpla los tres criterios. Vamos a ver actor y productora que hayan trabajado juntos.
Actor y productora
df_rel_2 <- movies %>% filter(star %in% c( "Brad Pitt", "Christian Bale", "Leonardo DiCaprio", "Tom Hanks")) %>% filter(company == "Focus Features")
#Burn After Reading
df_rel_2
budget | company | country | director | genre | gross | name | rating | released | runtime | score | star | votes | writer | year |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
37000000 | Focus Features | USA | Ethan Coen | Comedy | 60355347 | Burn After Reading | R | 2008-09-12 | 96 | 7 | Brad Pitt | 264758 | Joel Coen | 2008 |
Tenemos un resultado. Nos saltamos Actor y director porque es el mismo resultado de antes.
Director y productora
df_rel_4 <- movies %>% filter(director %in% c("Steven Spielberg", "Peter Jackson", "James Cameron")) %>% filter(company == "Focus Features")#nada
Nada, ahora vamos a comparar todas estas películas.
qq <- Reduce(union, list(df_1, df_2, df_rel_2))
qq <- qq %>% mutate(gross = gross/1000000)
#scatterplot con nota media y oscars
oscars_pelis_df <- left_join(qq, oscars_pelis, by = c("name" = "film"))
oscars_pelis_df$wins[is.na(oscars_pelis_df$wins)] <- 0
library(ggrepel)
p3 <- ggplot(oscars_pelis_df, aes(gross, score, label = name, color = name, size = wins)) + geom_point() + theme(legend.position = "none") + geom_label_repel(size = 3) + scale_color_manual(values = wes_palette("FantasticFox1", n = 10, type = "continuous")) + scale_x_continuous( breaks = seq(0, 700, 100))
#con los nombres
p3
Se puede apreciar una ligera correlación entre recaudación y nota media. También vemos que las dos películas con más Oscars son la película con mejor nota y la más taquillera.
Vemos que las notas de los usuarios de imdb no son malas, todas por encima de un 7 y destacando la película Salvar al soldado Ryan con un 8,6 de nota. En temas de taquilla, vemos que todas superan la mediana de 12 millones de dólares, destaca Titanic, que durante muchos años fue la película que más había recaudado en USA (hasta 2009 que ese récord fue superado por Avatar, otra película del mismo director, James Cameron)
Ahora vamos a ver su éxito en comparación con el Top 30 películas con más recaudación, mejor nota y más Oscars.
#top50 pelis con más recaudación ya tenemos -> pelis_max_gross
qq <- qq %>% mutate(act_dir_prod = "final")
pelis_rec_fin <- union(qq, pelis_max_gross)
pelis_rec_fin <- pelis_rec_fin %>% arrange(desc(gross)) %>% head(31)
pelis_rec_fin <- pelis_rec_fin[-c(4), ]
pelis_rec_fin <- pelis_rec_fin %>% mutate(name = forcats::as_factor(name)) %>%
mutate(name = forcats::fct_reorder(name,gross))
pelis_list_1 <- pelis_rec_fin %>% mutate(ranking = c(1:30)) %>%
filter(act_dir_prod == "final") %>%
select(ranking, name, director, star, company, gross)
urls_tit <- "https://upload.wikimedia.org/wikipedia/en/1/19/Titanic_%28Official_Film_Poster%29.png"
tit_urls <- pelis_list_1 %>% add_column(urls_tit)
tit_urls %>% gt() %>%
gt::text_transform(locations = cells_body(columns = vars(urls_tit)),
fn = function(x) {gt::web_image(x, height = 100)}) %>% tab_style(
style = cell_fill(color = "pink"),
locations = cells_body(columns = vars(gross),
rows = gross > 1 )) %>% tab_style(
style = cell_fill(color = "lightgreen"),
locations = cells_body(columns = vars(ranking),
rows = ranking > 2 )) %>% data_color(columns = vars(name),
colors = "lightblue")
ranking | name | director | star | company | gross | urls_tit |
---|---|---|---|---|---|---|
3 | Titanic | James Cameron | Leonardo DiCaprio | Twentieth Century Fox Film Corporation | 658.6723 |
#top30 pelis con mejor nota
pelis_max_score <- movies %>% arrange(desc(score))%>% ungroup() %>% head(30) %>% mutate(act_dir_prod = "top_30")
pelis_score_fin <- union(qq, pelis_max_score)
pelis_score_fin <- pelis_score_fin %>% arrange(desc(score)) %>% head(31)
pelis_score_fin <- pelis_score_fin[-c(21), ]
pelis_list_2 <- pelis_score_fin %>% mutate(ranking = c(1:30)) %>%
filter(act_dir_prod == "final") %>%
select(ranking, name, director, star, company, score)
urls_sav <- "https://es.web.img3.acsta.net/pictures/14/03/05/09/42/163621.jpg"
sav_urls <- pelis_list_2 %>% add_column(urls_sav)
sav_urls %>% gt() %>%
gt::text_transform(locations = cells_body(columns = vars(urls_sav)),
fn = function(x) {gt::web_image(x, height = 100)}) %>% tab_style(
style = cell_fill(color = "pink"),
locations = cells_body(columns = vars(score),
rows = score > 5 )) %>% tab_style(
style = cell_fill(color = "lightgreen"),
locations = cells_body(columns = vars(ranking),
rows = ranking > 2 )) %>% data_color(columns = vars(name),
colors = "lightblue")
ranking | name | director | star | company | score | urls_sav |
---|---|---|---|---|---|---|
15 | Saving Private Ryan | Steven Spielberg | Tom Hanks | DreamWorks | 8.6 |
#top30 pelis con más oscars
pelis_max_oscars <- oscars_pelis %>% filter(year_film > 1986) %>% arrange(desc(wins)) %>% head(31) %>% mutate(act_dir_prod = "top_30")
pelis_max_oscars <- pelis_max_oscars[-c(1), ]
pelis_osc_fin <- left_join(oscars_pelis_df, pelis_max_oscars, by = c("name" = "film"))
pelis_osc_fin <- pelis_osc_fin %>% select(year_film = year_film.x, year_ceremony = year_ceremony.y, ceremony = ceremony.y, category = category.y, name = name.y, film = name, winner = winner.y, wins = wins.y) %>% mutate(act_dir_prod = "final")
pelis_oscars_fin <- union(pelis_osc_fin, pelis_max_oscars)
pelis_oscars_fin <- pelis_oscars_fin %>% arrange(desc(wins)) %>% head(32)
pelis_oscars_fin <- pelis_oscars_fin[-c(2, 19), ]
pelis_list_3 <- pelis_oscars_fin %>% mutate(ranking = case_when(
film == "Titanic" ~ 1,
film == "Saving Private Ryan" ~ 15,
TRUE ~ 0 ))%>%
filter(act_dir_prod == "final") %>%
select(film, ranking, wins)
#en el ultimo momento me daba error lo de mutate(ranking = c(1:30)) habiéndome funcionado antes, y tuve que hacer la chapuza con el case_when.
urls_osc <- c("https://upload.wikimedia.org/wikipedia/en/1/19/Titanic_%28Official_Film_Poster%29.png", "https://es.web.img3.acsta.net/pictures/14/03/05/09/42/163621.jpg")
osc_urls <- pelis_list_3 %>% add_column(urls_osc)
osc_urls %>% gt() %>%
gt::text_transform(locations = cells_body(columns = vars(urls_osc)),
fn = function(x) {gt::web_image(x, height = 100)})%>%
data_color(columns = vars(film),
colors = "lightblue") %>%
data_color(columns = vars(ranking),
colors = "pink")%>%
data_color(columns = vars(wins),
colors = "khaki") %>% tab_style(
style = cell_fill(color = "orange"),
locations = cells_body(columns = vars(wins),
rows = wins > 5 )) %>% tab_style(
style = cell_fill(color = "lightgreen"),
locations = cells_body(columns = vars(ranking),
rows = ranking < 2 )
)
ranking | wins | urls_osc |
---|---|---|
Titanic | ||
1 | 11 | |
Saving Private Ryan | ||
15 | 5 |
Para concluir tenemos que destacar las películas Titanic y Salvar al soldado Ryan, ambas con protagonista y director que cumplían los 3 requisitos y el resultado ha dado sus frutos.
Titanic fue en su momento la película más taquillera de historia (ahora la número 3) y la que más Óscars se llevó. Salvar al soldado Ryan se encuentra en el puesto 15 de las películas mejor valoradas por los usuarios de imdb y además se encuentra también en el puesto 15 de las películas con más Oscars (con 5 galardones).
Sobre si el éxito de estas películas es debido a la elección del actor principal, director o productora no se puede decir con total precisión.
En el caso de Titanic es difícil de decir, ya que se puede discutir si las figuras de James Cameron y Leonardo Dicaprio estaban tan consolidadas como hoy en día.
En el caso de Salvar al soldado Ryan sí que se podría decir con más seguridad que tanto Steven Spielberg como Tom Hanks estaban más consolidados, puesto que Spielberg ya tenía un Oscar (ganó el segundo precisamente con esta película) y Hanks tenía dos. También hemos visto que ambos son los que más recaudan en su oficio.