Vamos dar uma olhada nos filmes da atriz americana Meryl Streep para entender o perfil de seus trabalhos a partir dos dados coletados do Rotten Tomatoes.
filmes_streep = read_imported_data()
summary(filmes_streep)
## avaliacao filme papel bilheteria
## Min. :27.00 Length:25 Length:25 Min. : 7.20
## 1st Qu.:55.00 Class :character Class :character 1st Qu.: 22.20
## Median :71.00 Mode :character Mode :character Median : 33.50
## Mean :65.76 Mean : 51.03
## 3rd Qu.:80.00 3rd Qu.: 80.40
## Max. :92.00 Max. :143.80
## ano
## Min. :2002
## 1st Qu.:2006
## Median :2008
## Mean :2009
## 3rd Qu.:2012
## Max. :2018
O resumo dos dados obtidos do Rotten Tomatoes mostra que ela tem filmes muito variados com bilheterias e avaliações altas e baixas. Ao mesmo tempo, seus trabalhos estão concentrados nos anos 00’s e 10’s. Como consequência, o gráfico da relação entre bilheteria e avaliações tem distribuição variada.
filmes_streep %>%
ggplot(aes(x = avaliacao, y = bilheteria)) +
geom_point(size = 4, color="#900C3F")
Histogramas facilitam a visualização da distribuição dos dados. Então, vamos vê-los. Como visto anteriormente, a bilheteria tem valores bem distribuÃdos, com bilheterias modestas sendo mais recorrentes, mantendo a média baixa. A possibilidade de um perÃodo de sucesso de bilheteria é descartada, pois nos anos com maior dos filmes das atriz renda, também há filmes muito impopulares sob esse ponto de vista.
ano_bilheteria = filmes_streep %>%
ggplot(aes(x = ano, y = bilheteria)) +
geom_point(size = 4, color="#900C3F")
bilheteria_hist = gghistogram(filmes_streep, x = "bilheteria", bins = 15 ,
fill = "#900C3F", color = "#900C3F",
add = "mean", rug = TRUE) +
labs(y="Frequência", x="Bilheteria")
grid.arrange(bilheteria_hist, ano_bilheteria, ncol = 2)
Já olhando a avaliação, vê-se que seus filmes são, em geral medianos, mas com ocorrências excelentes e outras duas muito ruins. Tendo a média de 65 e uma mediana ainda melhor, 71, mostra que, no fim, ela participa, majoritariamente, de filmes, pelo menos, bons.
gghistogram(filmes_streep, x = "avaliacao", bins = 15 ,
fill = "#900C3F", color = "#900C3F",
add = "mean", rug = TRUE) +
labs(y="Frequência", x="Avaliação")
Vendo a distribuição dos dados e testando(testes aqui omitidos), visualmente, agrupamentos, notamos que a divisão entre três grupos é satisfatória. Vemos um grupo de filmes maus de crÃtica e maus/bons de bilheteria; muito bons de crÃtica e maus/bons de bilheteria; e os sucessos de público e de bilheteria. Como exemplos de cada grupo podemos elencar os com maior bilheteria de cada, e talvez por isso mais conhecidos: The Giver, The Manchurian Candidate, Mamma Mia!
m2 = filmes_streep %>% select(avaliacao, bilheteria) %>% as.matrix()
km_streep = kmeans(m2, 3, nstart = 15)%>%
augment(filmes_streep) %>%
mutate(.cluster = as.character(.cluster))
km_streep %>%
ggplot(aes(x = avaliacao, y = bilheteria, color = .cluster), size = 100) +
geom_quasirandom(width = 50) +
labs(title="Agrupando os dados crus", x="Avaliação", y="Bilheteria", color="Grupos")
A utilização de z-score como forma de normalizar os dados para realizar o agrupamento melhorou os resultados, apesar de, anteriormente, os grupos já estarem satisfatórios sob a informal análise visual e, de fato, permanecerem semelhantes.
filme_normalizado = filmes_streep %>%
mutate(bilheteria_normalizada = as.vector(scale(log10(bilheteria))),
avaliacao_normalizada = as.vector(scale(avaliacao)))
m2 = filme_normalizado %>% select(avaliacao_normalizada, bilheteria_normalizada) %>% as.matrix()
km2 = kmeans(m2, 3, nstart = 15)%>%
augment(filmes_streep) %>%
mutate(.cluster = as.character(.cluster))
km2%>%
ggplot(aes(x = avaliacao, y = bilheteria, color = .cluster), size = 10) +
geom_quasirandom(width = .5) +
scale_y_log10() +
labs(title="Agrupando os dados Normalizados", x="Avaliação Z-Norm", y="Bilheteria Z-Norm", color="Grupos")
Também é possÃvel ver como os dados normalizados se dispõem em relação uns aos outros numa escala resultante do mapeamento dos dados através da aplicação do Z-Score aos dados.
km3 = kmeans(m2, 3, nstart = 15)
fviz_cluster(km3, m2, ellipse.type = "norm") +
labs(title="Visualizando grupos dos dados normalizados ", x="Avaliação Z-Norm", y="Bilheteria Z-Norm")