Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
r_hadleyverse_fr [2016/11/09 14:13] xaviergb created |
r_hadleyverse_fr [2016/11/09 22:24] (current) xaviergb [Atelier 3: Introduction à ggplot2, tidyr & dplyr] |
||
|---|---|---|---|
| Line 14: | Line 14: | ||
| Lien vers la présentation Prezi associée : [[http://prezi.com/c8w7zdbfv0ap/|Prezi]] | Lien vers la présentation Prezi associée : [[http://prezi.com/c8w7zdbfv0ap/|Prezi]] | ||
| - | Téléchargez le script R pour cet atelier : [[http://qcbs.ca/wiki/_media/ggplot.r|Script]] | + | Téléchargez le script R pour cet atelier : {{:atelier3.r|Script}} |
| ===== 1. Tracer des graphiques avec R en utilisant la grammaire des graphiques (ggplot2) ===== | ===== 1. Tracer des graphiques avec R en utilisant la grammaire des graphiques (ggplot2) ===== | ||
| Line 597: | Line 596: | ||
| <code rsplus | > | <code rsplus | > | ||
| - | CO2.long <- melt(CO2) | + | CO2.long <- gather(CO2, response, value, c(conc, uptake)) |
| - | head(CO2) | + | head(CO2) |
| - | head(CO2.long) | + | head(CO2.long) |
| tail(CO2.long) | tail(CO2.long) | ||
| </code> | </code> | ||
| Line 725: | Line 724: | ||
| <code rsplus | > | <code rsplus | > | ||
| - | fMonth<- factor(airquality$Month) # Convertit la variable "Month" en facteur. | + | fMonth <- factor(airquality$Month) # Convertit la variable "Month" en facteur. |
| - | + | ozone.box <- ggplot(airquality, aes(x = fMonth, y = Ozone)) + geom_boxplot() | |
| - | ozone.box <- ggplot(airquality, aes(x=fMonth, y=Ozone)) + geom_boxplot() | + | solar.box <- ggplot(airquality, aes(x = fMonth, y = Solar.R)) + geom_boxplot() |
| - | solar.box <- ggplot(airquality, aes(x=fMonth, y=Solar.R)) + geom_boxplot() | + | temp.box <- ggplot(airquality, aes(x = fMonth, y = Temp)) + geom_boxplot() |
| - | temp.box <- ggplot(airquality, aes(x=fMonth, y=Temp)) + geom_boxplot() | + | wind.box <- ggplot(airquality, aes(x = fMonth, y = Wind)) + geom_boxplot() |
| - | wind.box <- ggplot(airquality, aes(x=fMonth, y=Wind)) + geom_boxplot() | + | |
| </code> | </code> | ||
| Vous pouvez utiliser la fonction ''grid.arrange()'' du paquet ''gridExtra'' pour regrouper tous ces diagrammes en une seule figure : | Vous pouvez utiliser la fonction ''grid.arrange()'' du paquet ''gridExtra'' pour regrouper tous ces diagrammes en une seule figure : | ||
| <code rsplus | > | <code rsplus | > | ||
| - | combo.box <- grid.arrange(ozone.box, solar.box, temp.box, wind.box, nrow=2) | + | combo.box <- grid.arrange(ozone.box, solar.box, temp.box, wind.box, nrow = 2) |
| # nrow = argument spécifiant le nombre de lignes sur lesquelles les diagrammes seront affichés. | # nrow = argument spécifiant le nombre de lignes sur lesquelles les diagrammes seront affichés. | ||
| </code> | </code> | ||
| Line 748: | Line 746: | ||
| <code rsplus | > | <code rsplus | > | ||
| - | ozone.plot <- ggplot(airquality, aes(x=Day, y=Ozone)) + geom_point() + geom_smooth() | + | ozone.plot <- ggplot(airquality, aes(x = Day, y = Ozone)) + |
| - | ozone.plot <- ozone.plot + facet_wrap(~Month, nrow=2) | + | geom_point() + |
| + | geom_smooth() + | ||
| + | facet_wrap(~Month, nrow = 2) | ||
| - | solar.plot <- ggplot(airquality, aes(x=Day, y=Solar.R)) + geom_point() +geom_smooth() | + | solar.graph <- ggplot(airquality, aes(x = Day, y = Solar.R)) + |
| - | solar.plot <- solar.plot + facet_wrap(~Month, nrow=2) | + | geom_point() + |
| + | geom_smooth() + | ||
| + | facet_wrap(~Month, nrow = 2) | ||
| - | wind.plot <- ggplot(airquality, aes(x=Day, y=Wind)) + geom_point() +geom_smooth() | + | wind.graph <- ggplot(airquality, aes(x = Day, y = Wind)) + |
| - | wind.plot <- wind.plot + facet_wrap(~Month, nrow=2) | + | geom_point() + |
| + | geom_smooth() + | ||
| + | facet_wrap(~Month, nrow = 2) | ||
| - | temp.plot <- ggplot(airquality, aes(x=Day, y=Temp)) + geom_point() +geom_smooth() | + | temp.graph <- ggplot(airquality, aes(x = Day, y = Temp)) + |
| - | temp.plot <- temp.plot + facet_wrap(~Month, nrow=2) | + | geom_point() + |
| + | geom_smooth() + | ||
| + | facet_wrap(~Month, nrow = 2) | ||
| </code> | </code> | ||
| On peut également regrouper tous ces diagrammes (même si ce n'est pas très joli pour le moment !) : | On peut également regrouper tous ces diagrammes (même si ce n'est pas très joli pour le moment !) : | ||
| <code rsplus | > | <code rsplus | > | ||
| - | combo.facets <- grid.arrange(ozone.plot, solar.plot, wind.plot, temp.plot, nrow=4) | + | combo.facets <- grid.arrange(ozone.graph, solar.graph, wind.graph, temp.graph, nrow = 4) |
| </code> | </code> | ||
| Line 775: | Line 781: | ||
| <code rsplus | > | <code rsplus | > | ||
| air.long <- gather(airquality, variable, value, -Month, -Day) | air.long <- gather(airquality, variable, value, -Month, -Day) | ||
| - | air.wide <- spread(air.long , variable, value) | + | air.large <- spread(air.long , variable, value) |
| </code> | </code> | ||
| Line 781: | Line 787: | ||
| <code rsplus | > | <code rsplus | > | ||
| fMonth.long <- factor(air.long$Month) | fMonth.long <- factor(air.long$Month) | ||
| - | + | meteo <- ggplot(air.long, aes(x = fMonth.long, y = value)) + | |
| - | weather <- ggplot(air.long, aes(x=fMonth.long, y=value)) + geom_boxplot() | + | geom_boxplot() + |
| - | weather <- weather + facet_wrap(~variable, nrow=2) | + | facet_wrap(~variable, nrow = 2) |
| + | meteo | ||
| </code> | </code> | ||
| - | Comparez les diagrammes ''weather'' avec ceux de ''combo.box'' : | + | Comparez les diagrammes ''meteo'' avec ceux de ''combo.box'' : |
| {{::weather_plot.png?nolink|600}} | {{::weather_plot.png?nolink|600}} | ||
| Line 792: | Line 799: | ||
| Dans chacun des cas, on a utilisé les mêmes données, mais les graphiques sont légèrement différents. | Dans chacun des cas, on a utilisé les mêmes données, mais les graphiques sont légèrement différents. | ||
| - | Les variables de l'objet ''weather'' sont sur la même échelle en utilisant la fonction ''facet_wrap()''. | + | Les variables de l'objet ''meteo'' sont sur la même échelle en utilisant la fonction ''facet_wrap()''. |
| Ça peut être utile dans plusieurs circonstances, mais ça ne permet pas de voir toute la variation de la variable "Wind". | Ça peut être utile dans plusieurs circonstances, mais ça ne permet pas de voir toute la variation de la variable "Wind". | ||
| Dans ce cas, on peut modifier le script pour permettre à R de déterminer l'échelle pour chaque variable avec l'argument ''scales'' : | Dans ce cas, on peut modifier le script pour permettre à R de déterminer l'échelle pour chaque variable avec l'argument ''scales'' : | ||
| <code rsplus | > | <code rsplus | > | ||
| - | weather <- weather + facet_wrap(~variable, nrow=2, scales="free") | + | meteo <- meteo + facet_wrap(~variable, nrow = 2, scales = "free") |
| </code> | </code> | ||
| {{::weather_scaled_free.png?nolink|600}} | {{::weather_scaled_free.png?nolink|600}} | ||
| - | |||
| - | |||
| On peut aussi utiliser le format long pour créer un graphique qui inclut **toutes les variables sur un seul panneau** : | On peut aussi utiliser le format long pour créer un graphique qui inclut **toutes les variables sur un seul panneau** : | ||
| <code rsplus | > | <code rsplus | > | ||
| - | weather2 <- ggplot(air.long, aes(x=Day, y=value, colour=variable))+ geom_point() | + | meteo2 <- ggplot(air.long, aes(x = Day, y = value, colour = variable)) + |
| - | #Ce graphique regroupe toutes les variables sur un même graphique. | + | geom_point() + |
| - | + | facet_wrap(~Month, nrow = 1) | |
| - | weather2 <- weather2 + facet_wrap(~Month, nrow=1) # Ajoutez cette partie et on retrouve un graphique séparé par mois. | + | meteo2 |
| </code> | </code> | ||
| Line 909: | Line 914: | ||
| <code rsplus | > | <code rsplus | > | ||
| - | > air_mess <- sample_frac(airquality, 1) | + | > air_degat <- sample_frac(airquality, 1) |
| - | > head(air_mess) | + | > head(air_degat) |
| Ozone Solar.R Wind Temp Month Day | Ozone Solar.R Wind Temp Month Day | ||
| 21 1 8 9.7 59 5 21 | 21 1 8 9.7 59 5 21 | ||
| Line 923: | Line 928: | ||
| <code rsplus | > | <code rsplus | > | ||
| - | > air_chron <- arrange(air_mess, Month, Day) | + | > air_chron <- arrange(air_degat, Month, Day) |
| > head(air_chron) | > head(air_chron) | ||
| Ozone Solar.R Wind Temp Month Day | Ozone Solar.R Wind Temp Month Day | ||
| Line 997: | Line 1002: | ||
| <code rsplus | > | <code rsplus | > | ||
| - | > month_sum <- airquality %>% | + | > mois_moy <- airquality %>% |
| group_by(Month) %>% | group_by(Month) %>% | ||
| summarise(mean_temp = mean(Temp), | summarise(mean_temp = mean(Temp), | ||
| - | sd_temp = sd(Temp)) | + | sd_temp = sd(Temp)) |
| - | > month_sum | + | mois_moy |
| Source: local data frame [5 x 3] | Source: local data frame [5 x 3] | ||
| Line 1020: | Line 1025: | ||
| ++++Solution| | ++++Solution| | ||
| <code rsplus | > | <code rsplus | > | ||
| - | > weight_diff <- ChickWeight %>% | + | > mass_diff <- ChickWeight %>% |
| group_by(Chick) %>% | group_by(Chick) %>% | ||
| - | summarise(weight_diff = max(weight) - min(weight)) | + | summarise(mass_diff = max(weight) - min(weight)) |
| - | > weight_diff | + | > mass_diff |
| Source: local data frame [50 x 2] | Source: local data frame [50 x 2] | ||
| Line 1043: | Line 1048: | ||
| Notez qu'ici on mesure simplement la différence de masse entre le maximum et le minimum. Il ne s'agit donc pas de la différence de masse entre le début et la fin de l'étude (différence en ordre chronologique de la masse). Inspectez de plus près les observations liées au poussin # 18 : | Notez qu'ici on mesure simplement la différence de masse entre le maximum et le minimum. Il ne s'agit donc pas de la différence de masse entre le début et la fin de l'étude (différence en ordre chronologique de la masse). Inspectez de plus près les observations liées au poussin # 18 : | ||
| <code rsplus | > | <code rsplus | > | ||
| - | > chick_18 <- ChickWeight %>% filter(Chick == 18) | + | > poussin_18 <- ChickWeight %>% filter(Chick == 18) |
| - | > chick_18 | + | > poussin_18 |
| weight Time Chick Diet | weight Time Chick Diet | ||
| 1 39 0 18 1 | 1 39 0 18 1 | ||
| Line 1068: | Line 1073: | ||
| ++++Solution| | ++++Solution| | ||
| <code rsplus | > | <code rsplus | > | ||
| - | > diet_summ <- ChickWeight %>% | + | > diet_mass <- ChickWeight %>% |
| group_by(Diet, Chick) %>% | group_by(Diet, Chick) %>% | ||
| - | summarise(weight_gain = last(weight) - first(weight)) %>% | + | summarise(gain_masse = last(weight) - first(weight)) %>% |
| group_by(Diet) %>% | group_by(Diet) %>% | ||
| - | summarise(mean_gain = mean(weight_gain)) | + | summarise(gain_moyen = mean(gain_masse)) |
| - | > diet_summ | + | > diet_mass |
| - | # A tibble: 4 × 2 | + | Source: local data frame [4 x 2] |
| - | Diet mean_gain | + | |
| - | <fctr> <dbl> | + | Diet gain_moyen |
| - | 1 1 114.9 | + | (fctr) (dbl) |
| - | 2 2 174.0 | + | 1 1 114.9 |
| - | 3 3 229.5 | + | 2 2 174.0 |
| - | 4 4 188.3 | + | 3 3 229.5 |
| + | 4 4 188.3 | ||
| </code> | </code> | ||
| Cette solution démontre bien la simplicité et l'élégance de la syntaxe de ''dplyr'' et ''magrittr'' en situation où nous devons manipuler nos données en plusieurs étapes consécutives. Un défi encore plus difficile, même pour les experts en fonctions dans ''R'' de base, serait de reproduire les mêmes opérations avec moins de touches de votre clavier. Nous avons essayé et nous avons échoué... Peut-être sommes-nous trop habitués à ''dplyr'' maintenant? | Cette solution démontre bien la simplicité et l'élégance de la syntaxe de ''dplyr'' et ''magrittr'' en situation où nous devons manipuler nos données en plusieurs étapes consécutives. Un défi encore plus difficile, même pour les experts en fonctions dans ''R'' de base, serait de reproduire les mêmes opérations avec moins de touches de votre clavier. Nous avons essayé et nous avons échoué... Peut-être sommes-nous trop habitués à ''dplyr'' maintenant? | ||
