--- title: "Correction exercice ggplot2" author: "Julien Chiquet" date: "June 26, 2018" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ## Exercice (thanks to Sophie Donnet) {.allowframebreaks} On s'intéresse à la base de données IMdb ```{r, eval=FALSE, echo=TRUE} install.packages("ggplot2movies") ``` ```{r, echo=TRUE, eval=TRUE} library(ggplot2movies) library(tidyverse) data(movies) movies ``` ## Questions ### 1. Vérifier que le jeu de données est bien de type `tibble` ```{r} class(movies) ``` ### 2. Tracer le `rate` en fonction de l'année de sortie du film. ```{r} movies %>% ggplot(aes(x = year, y = rating)) + geom_point(alpha = .25) + geom_smooth() + theme_bw() ``` ### 3. Créer grâce aux fonctions de `dplyr` et `tidyr` un sous jeu de données ne contenant les variables `title`, `year`, `length`, `rating` et durant moins de 300 minutes; les films devront être classés pas ordre décroissant de durée. ```{r} sub_movies <- movies %>% select(year, title, length, rating) %>% filter(length < 300) %>% arrange(desc(length)) sub_movies ``` ### 4. Mettre les points dans une couleur entre cyan et violet en fonction de la durée du film (utiliser `scale_colour_gradient`) ```{r} sub_movies %>% ggplot(aes(x = year, y = rating, color = length)) + theme_bw() + geom_point(alpha = .1) + geom_smooth() + scale_color_gradient(low = "orange", high = "purple") ``` ### 5. À partir du jeu de données complet, créer une variable "genre" à valeur dans ("Action", "Animation", "Comedy", "Drama", "Documentary", "Romance", "Short") ```{r} library(magrittr) movies %<>% # add a column other for movies with no label mutate(Other = 1*((Animation | Comedy | Drama | Documentary | Romance | Short) == 0)) %>% # select(Action, Animation, Comedy, Drama, Documentary, Romance, Short, Other, title) %>% gather(genre, indicator, -title) %>% # some movies have several "genre", I only keep the first one filter(indicator != 0) %>% distinct(title, .keep_all = TRUE) %>% select(-indicator) %>% # I join the result to the original data once removed useless columns left_join(., movies %>% select(-Action, -Animation, -Comedy, -Drama, -Documentary, -Romance, -Short)) %>% arrange(title) ``` ### 6. Créer maintenant un jeu de données contenant les films de moins de 300 minutes qui sont des drames, des romances, des films d'action ou des comédies. ```{r} sub_movies <- movies %>% filter(length < 300, genre %in% c("Drama", "Romance", "Action", "Comedy")) ``` ### 7. On s'intéresse aux films dont on a le budget et qui ne sont par des courts-métrages, ni des documentaires ni de genre inconnu. Tracer les densités de probabilités des budgets par type de film ```{r} movies %>% filter(!(genre %in% c("Short", "Documentary", "Other"))) %>% ggplot(aes(budget, color = genre), alpha = .25) + geom_density() + facet_grid(. ~ genre) + scale_x_log10() ``` ```{r} movies %>% filter(!(genre %in% c("Short", "Documentary", "Other"))) %>% ggplot(aes(budget, color = genre, fill = genre), alpha = .25) + geom_density() + scale_x_log10() ``` ### Ajuster un modèle linéaire entre $\log$ budget et le rating des films pour chaque genre de film. ```{r} movies %>% group_by(genre) %>% ggplot(aes(x = budget, y = rating, color = genre)) + geom_smooth(formula = y ~ x + 1, method = lm) + geom_point(alpha = .25) + scale_x_log10() ```