Hoje vamos analisar alguns filmes que Vin Diesel atuou em sua carreira, e baseado na aceitação e bilheteria que o filme obteve, vamos separar os filmes em grupos e tentar identificar se existe alguma relação entre os filmes em seus respectivos grupos. Para isso vamos utilizar os dados disponíveis no site rottentomatoes.

filmes = read_imported_data("vin_diesel")
glimpse(filmes)
## Rows: 24
## Columns: 6
## $ avaliacao      <int> 59, 30, 85, 45, 85, 67, 44, 18, 82, 92, 71, 57, 77, 28,~
## $ nota_audiencia <dbl> 82, 78, 91, 37, 87, 72, 41, 43, 82, 92, 84, 56, 83, 67,~
## $ filme          <chr> "F9 The Fast Saga", "Bloodshot", "Avengers: Infinity Wa~
## $ papel          <chr> "Dominic Toretto (Character),Producer", "Ray Garrison/B~
## $ bilheteria     <dbl> 171.0, 10.1, 678.8, 44.9, 389.8, 225.7, 1.7, 27.4, 350.~
## $ ano            <int> 2021, 2020, 2018, 2017, 2017, 2017, 2016, 2015, 2015, 2~

São esses os dados disponíveis:

Visualizando as características dos dados

Neste gráfico abaixo podemos ver a relação entre a bilheteria e a aceitação de alguns filmes que o autor participou. Vemos que os filmes que obtiveram valores mais altos são filmes produzidos pela Marvel, como Guardiões da galáxia e Vingadores: Guerra infinita. Os filmes da série Velozes e furiosos também fazem parte do topo, apesar que alguns terem uma avaliação menos positiva, também é possível ver que dois títulos tiveram uma bilheteria menor que dois milhões de dólares.

Com essa visualização já é possível observar alguns conjuntos de filmes próximos, podendo agrupá-los e observar se existem algo em comum.

a <-filmes %>% 
    ggplot(aes(x = avaliacao, y = bilheteria, label = filme)) + 
    geom_point(size = 2, color = 'blue') + 
    scale_y_log10()+
labs(
        x = "Aceitação",
        y = "Bilheteria"
    )
    
ggplotly(a)

Para realizar o agrupamento vamos utilizar do KMeans, que basicamente tenta encontrar a menor distância de um ponto escolhido com cada filme, e classifica aqueles filmes que estão próximos a esse ponto como pertencentes ao mesmo grupo. Dessa forma vamos utilizar os dados de bilheteria e aceitação de cada filme, realizando uma normalização nos dados para que o agrupamento não seja enviesado com dados de escalas distintas.

dados2 <- filmes %>% 
    select(avaliacao, bilheteria)

dados <- log10(dados2)

dadosNorm <- as.data.frame(scale(dados))

# Original data
p1 <- ggplot(dados2, aes(x=avaliacao, y=bilheteria)) +
  geom_point() +
  labs(title="Dados originais") +
  theme_bw()

# Normalized data 
p2 <- ggplot(dadosNorm, aes(x=avaliacao, y=bilheteria)) +
  geom_point() +
  labs(title="Dados normalizados") +
  theme_bw()

# Subplot
grid.arrange(p1, p2, ncol=2)

No gráfico acima podemos observar os dados em seu estado original e com a normalização. Com a normalização fica mais claro e mais fácil realizar o agrupamento dos filmes

set.seed(1234)
k4 <- kmeans(dadosNorm, centers=4)

filmes$cluster <- k4$cluster

Visualizando o gráfico normalizado e executando algumas vezes o kmeans com quantidade de grupos diferentes, foi escolhido o melhor com 3 grupos que pode ser visualizado logo abaixo.

a <-filmes %>% 
    ggplot(aes(x = avaliacao, y = bilheteria, label = filme, colour = cluster)) + 
    geom_point(size = 2, colour = filmes$cluster) + 
    scale_y_log10()+
labs(
        x = "Aceitação",
        y = "Bilheteria"
    )
    
ggplotly(a)

Antes de realizar esse agrupamento eu esperava que os filmes da série Velozes e furiosos estivessem próximos, bem como os filmes xXx, os velozes e furiosos tiveram uma boa proximidade no grupo verde, menos dois deles que cairam no grupo vermelho. O verde ficou com os filmes com maior bilheteria da Marvel, mas com dominância da série Velozes e furiosos, e o xXx no grupo vermelho. Baseado nesses agrupamentos eu diria que o verde representa o corredor de rua em Veloses e furiosos, o vermelho representaria o bandido espião, o preto seria os filmes esquecidos e o azul é o grupo com histórias mais densas.