Heat map ou geom_tile

Cette semaine, le #Tidytuesday nous fait découvrir les films d’horreurs produit entre 2012 et 2017. Comme la base de donnée fourni comprenait le budget investi pour chaque film, j’étais curieuse de voir quel pays dépense le plus pour produire des films d’horreur. J’ai choisi de visualiser cees différences avec un heat map en utilisant geom_tile dans R.



CONTEXTE

Les données de cette semaine proviennent de IMDB.



OBJECTIFS

1)Visualiser les différences dans les sommes investies pour créer des films d’horreur entre les pays.



IMPORTER

horror_movies <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-10-22/horror_movies.csv")
FALSE Parsed with column specification:  
FALSE cols(  
FALSE   title = col_character(),  
FALSE   genres = col_character(),  
FALSE   release_date = col_character(),  
FALSE   release_country = col_character(),  
FALSE   movie_rating = col_character(),  
FALSE   review_rating = col_double(),  
FALSE   movie_run_time = col_character(),  
FALSE   plot = col_character(),  
FALSE   cast = col_character(),  
FALSE   language = col_character(),  
FALSE   filming_locations = col_character(),  
FALSE   budget = col_character()  
FALSE 
)



EXPLORER

summary(horror_movies)
##     title              genres          release_date        
##  Length:3328        Length:3328        Length:3328        
##  Class :character   Class :character   Class :character    
##  Mode  :character   Mode  :character   Mode  :character    
##                                                            
##                                                            
##                                                            
##                                                            
##  release_country    movie_rating       review_rating   movie_run_time      
##  Length:3328        Length:3328        Min.   :1.000   Length:3328         
##  Class :character   Class :character   1st Qu.:4.000   Class :character    
##  Mode  :character   Mode  :character   Median :5.000   Mode  :character    
##                                        Mean   :5.077                       
##                                        3rd Qu.:6.100                       
##                                        Max.   :9.800                       
##                                        NA's   :252                         
##      plot               cast             language          
##  Length:3328        Length:3328        Length:3328         
##  Class :character   Class :character   Class :character    
##  Mode  :character   Mode  :character   Mode  :character    
##                                                            
##                                                            
##                                                            
##                                                            
##  filming_locations     budget           
##  Length:3328        Length:3328         
##  Class :character   Class :character    
##  Mode  :character   Mode  :character    
##                                         
##                                         
##                                         
## 

Les dates doivent être converties pour être utilisées et l’année doit être extraite. La colonne budget est sous forme de caractère. Pour pouvoir utiliser ces données, il faut extraire la devise et la valeur et convertir cette valeur sous une même base pour être comparable.



PRÉPARER

horror_movies$date<-as.Date(horror_movies$release_date, format="%d-%b-%y")  
horror_movies$release_year<-year(horror_movies$date)  
horror_movies$devise  <- str_match(horror_movies$budget,"^[^0-9]+")[,1]  
horror_movies$devise<-str_remove_all(horror_movies$devise,"[\\s]+")  
horror_movies$budget_numeric  <- as.numeric(gsub(horror_movies$budget, pattern = "[^0-9]",replacement = ""))    

#Convertir toutes les devises en $US 
conv_devise=data.frame("conversion"=c(1.290, 1.110, 0.760, 0.014, 0.680, 0.016,1,1,0.00085), "devise"=c("£", "€", "CAD", "INR", "AUD", "RUR ","$", NA,"KRW"))    
#Sélectionner les 15 pays les plus présents dans les données  country<-horror_movies %>%
     select('release_country') %>%
     group_by(release_country) %>%
     summarise(count=n()) %>%
     top_n(15) %>%
     select('release_country')

movie<-horror_movies %>%
     filter(release_country %in% country$release_country) %>%
     left_join(conv_devise, by="devise") %>%
     mutate(budget_numeric_conv=budget_numeric*conversion) %>%
     group_by(release_country, release_year) %>%
     summarise(sum=sum(budget_numeric_conv,na.rm=TRUE), count=n()) %>%
    mutate(sum=ifelse(sum==0, NA, sum)) %>%
     mutate(prix_film=sum/count) %>%
     drop_na(release_year)    

#Calculer les moyennes  
autres<-movie %>%
     filter(!release_country=="USA") %>%
     group_by() %>%
     summarise(moy=mean(sum, na.rm=TRUE))   
#Réponse: 24 244 745$US pour période de 5 ans    

USA<-movie %>%
     filter(release_country=="USA") %>%
     summarise(moy=mean(sum, na.rm=TRUE))  
#Réponse: 305 680 008$ en 5 ans!!



VISUALISER

#Graphique  
gg<- ggplot(data=movie,aes(x = release_year, y= reorder(release_country, desc(release_country))))  
gg <- gg +  geom_tile(aes(fill=sum), color="black")  
gg <- gg + scale_fill_gradient(low = "#F5BB00", high = "#FF4C00", na.value = "#D7D7D7")  
#retirer la légende  
gg <- gg +  theme(legend.position = "none")  
#ajuster les axes  
gg<-gg + scale_x_continuous(breaks=seq(2012,2017,1), limits=c(2011.5, 2017.5), expand = c(0,0))  
#modifier le thème  
gg <- gg +  theme(panel.border = element_rect(color="black",size=1, fill=NA),
                      panel.background = element_rect(fill="black"),
                      plot.background = element_rect(fill="black"),
                      panel.grid.major.x= element_blank(),
                      panel.grid.major.y= element_blank(),
                      panel.grid.minor = element_blank(),
                      axis.line.x = element_blank(),
                      axis.line.y =element_blank(),
                      axis.ticks.x = element_blank(),
                      axis.ticks.y = element_blank())  
#ajouter les titres  
gg<-gg + labs(title=" ",
              subtitle = " ",
              x=" ",
              y=" ",
              caption="\nSOURCE: IMDB   |  DESIGN: Johanie Fournier, agr.")  
gg<-gg + theme(  plot.title    =  element_blank(),
                 plot.subtitle = element_blank(),
                 plot.caption  = element_text(size=10, hjust=1,vjust=0.5, family="Tw Cen MT", color="#8B8B8B"),
                 axis.title.y  = element_blank(),
                 axis.title.x  = element_blank(),
                 axis.text.y   = element_text(size=14, hjust=0,vjust=0.5, family="Tw Cen MT", color="#8B8B8B"),
                 axis.text.x   = element_text(size=14, hjust=0.5,vjust=0.5, family="Tw Cen MT", color="#8B8B8B"))

Voici ce que ça donne:





CONCLUSION

Finalement, le heat map créé montre clairement que ce sont les États-Unis qui ont le plus dépensés pour créer des films d’horreur entre 2012 et 2017. 

Alors, tu veux en savoir plus sur ma démarche? Un épisode de podcast sera bientôt disponible dans lequel je t’explique toute la réflexion et les concepts de data visualisation qui ont menés à la création de cette viz.

Publicités

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.