From f88d413acb39122764cf9f240a62cf6548aa8eb5 Mon Sep 17 00:00:00 2001 From: aaaaaa Date: Mon, 15 Jun 2020 11:06:59 +0200 Subject: [PATCH] ajout fichiers pour graphe + repro graphe --- module3/exo3/exercice_fr.Rmd | 177 +++++++++++++++++++++++++++++--- module3/exo3/wheat.csv | 54 ++++++++++ module3/exo3/wheat_monarchs.csv | 13 +++ 3 files changed, 231 insertions(+), 13 deletions(-) create mode 100644 module3/exo3/wheat.csv create mode 100644 module3/exo3/wheat_monarchs.csv diff --git a/module3/exo3/exercice_fr.Rmd b/module3/exo3/exercice_fr.Rmd index 7eece5e..7d56349 100644 --- a/module3/exo3/exercice_fr.Rmd +++ b/module3/exo3/exercice_fr.Rmd @@ -1,5 +1,5 @@ --- -title: "Votre titre" +title: "Etude du pouvoir d'achat des ouvriers anglais du XVIe au XIXe siècle" author: "Votre nom" date: "La date du jour" output: html_document @@ -7,27 +7,178 @@ output: html_document ```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) +knitr::opts_chunk$set(echo = TRUE, fig.dim=c(10,5)) ``` -## Quelques explications +## Introduction -Ceci est un document R markdown que vous pouvez aisément exporter au format HTML, PDF, et MS Word. Pour plus de détails sur R Markdown consultez . +[William Playfair](https://fr.wikipedia.org/wiki/William_Playfair) était un des pionniers de la présentation graphique des données. Il est notamment considéré comme l'inventeur de l'histogramme. Un de ses graphes célèbres, tiré de son livre *"A Letter on Our Agricultural Distresses, Their Causes and Remedies"*, montre l'évolution du prix du blé et du salaire moyen entre 1565 et 1821. -Lorsque vous cliquerez sur le bouton **Knit** ce document sera compilé afin de ré-exécuter le code R et d'inclure les résultats dans un document final. Comme nous vous l'avons montré dans la vidéo, on inclue du code R de la façon suivante: +Le but de ce document est de reproduire dans un premier temps le graphique produit par William Playfair, puis de tenter de l'améliorer pour faire ressortir des informations plus pertinentes. +![Graphe de Playfair](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Chart_Showing_at_One_View_the_Price_of_the_Quarter_of_Wheat%2C_and_Wages_of_Labour_by_the_Week%2C_from_1565_to_1821.png/640px-Chart_Showing_at_One_View_the_Price_of_the_Quarter_of_Wheat%2C_and_Wages_of_Labour_by_the_Week%2C_from_1565_to_1821.png) -```{r cars} -summary(cars) +### Chargement des libraries utilisées + +```{r message=FALSE} +library(tidyverse) # Manipulation de données, graphiques +library(knitr) # +library(kableExtra) # Formattage des tableaux +``` + +## Chargement des données + +Playfair n'a pas publié les données numériques brutes qu'il a utilisées, car à son époque la réplicabilité n'était pas encore considérée comme essentielle. +Celles-ci ont été déduites par numérisation et sont disponibles [ici](https://vincentarelbundock.github.io/Rdatasets/doc/HistData/Wheat.html), ou [ici au format CSV](https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/HistData/Wheat.csv). + +Nous téléchargeons le fichier de données en local (si celui-ci n'existe pas). Ceci afin de nous prémunir contre un éventuel problème de connexion à ce fichier. +```{r} +data_url <- "https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/HistData/Wheat.csv" +dest_file <- "./wheat.csv" +if(!file.exists(dest_file)) { + download.file(url = data_url, destfile = dest_file, method = "auto") +} +``` + +On peut maintenant charger les données depuis le fichier local, en renommant les colonnes (la première ligne devient donc inutile) et en supprimant la première colonne (simples numéros d'identification). +```{r} +playfair <- read_csv("wheat.csv", + skip = 1, # suppression de la 1ere ligne (titre des colonnes) + col_types = c("_ddd"), # suppression de la 1ere colonne + col_names = c("year", "wheat", "wages")) # renommer les colonnes +``` + +Les données obtenues sont de la forme : +```{r} +head(playfair) %>% + kable(format = "html", escape = FALSE, align ="c") %>% + kable_styling(bootstrap_options = "striped", full_width = FALSE, position = "left") +``` + +On peut vérifier si nous avons des valeurs manquantes. +```{r} +playfair %>% + filter_all(any_vars(is.na(.))) +``` + +Les dernières valeurs pour la variable `wages` sont manquantes, ce qu'on retrouve sur le graphe de Playfair. + + +## Reproduction du graphique de William Playfair + +Le graphique doit permettre de visualiser le prix du blé (sous forme de barres) et le salaire moyen (par une courbe et une surface) en fonction des années. + +Afin de visualiser le prix sous forme de barres comme sur le graphique, nous pourrions utiliser la fonction `geom_step()`, qui répond à la forme voulue, mais sans la possibilité de colorier les barres. +```{r} +# graphe de base : geom_step +ggplot(playfair, aes(x = year)) + + geom_step(aes(y = wheat)) ``` -Et on peut aussi aisément inclure des figures. Par exemple: +Pour palier ce problème, nous allons utiliser à la place la fonction `geom_ribbon()` avec une astuce pour faciliter le coloriage des barres ([source](https://gist.github.com/Teebusch/db0ab76d31fd31a13ccf93afa7d77df5)). +```{r playfair-plot} +# astuce de construction, pour correspondre aux différentes marches du graphique +playfair_area <- bind_rows(old = playfair, + new = playfair %>% mutate(wheat = lag(wheat)), + .id = "source") %>% + arrange(year, source) -```{r pressure, echo=FALSE} -plot(pressure) +# Graphe de base : geom_ribbon +p <- ggplot(playfair, aes(x = year)) + + geom_ribbon(data = playfair_area, aes(ymin = 20, ymax = wheat), fill = "grey19", alpha = 0.9) + +p +``` + +Nous pouvons maintenant ajouter la courbe et la surface correspondant aux salaires. +```{r warning=FALSE} +# Graphe de base : prix du blé + courbe salaire +p <- p + + geom_line(aes(y = wages), color = "firebrick", na.rm = TRUE, size = 2.5) + + geom_area(aes(y = wages), fill = "lightblue", na.rm = TRUE, alpha = 0.9) +p ``` -Vous remarquerez le paramètre `echo = FALSE` qui indique que le code ne doit pas apparaître dans la version finale du document. Nous vous recommandons dans le cadre de ce MOOC de ne pas utiliser ce paramètre car l'objectif est que vos analyses de données soient parfaitement transparentes pour être reproductibles. -Comme les résultats ne sont pas stockés dans les fichiers Rmd, pour faciliter la relecture de vos analyses par d'autres personnes, vous aurez donc intérêt à générer un HTML ou un PDF et à le commiter. +On peut continuer à modifier ce graphe, pour se rapprocher au maximum de la représentation de William Fairplay. +***Note*** *: on ajoute volontairement un espace supplémentaire sur la partie supérieure du graphe (au-delà de la valeur y = 100) afin de produire par la suite les indications concernant les siècles. * +```{r warning=FALSE} +# Modification des axes +p <- p + + #geom_segment(aes(xend = year, y = 0, yend = wheat), linetype = "dotted", color = "black") + + scale_x_continuous(expand = expansion(add = c(0, 0)), + breaks = c(1565, seq(1600, 1800, by = 50), 1830), + minor_breaks = seq(1565, 1830, by = 5), + name = "5 Years each division") + + scale_y_continuous(expand = c(0, 0), limits = c(0, 109), breaks = seq(0, 100, by = 10), name = "", + sec.axis = sec_axis(~., name = "Price of the Quarter of Wheat in Shillings", + breaks = seq(0, 100, by = 10))) +p +``` + +```{r warning=FALSE} +# Modification de l'arrière-plan et de la police +p <- p + + theme(panel.background = element_blank(), + panel.grid.major = element_line(colour = "grey25", size = 0.8), + panel.grid.minor = element_line(colour = "grey25", size = 0.3), + text = element_text(family = "NewCenturySchoolbook", face = "italic"), + axis.title.x = element_text(hjust = 0.2, vjust = 1, size = 8), + axis.title.y.right = element_text(angle = 90, size = 8)) +p +``` + +```{r warning=FALSE} +# Ajout du titre dans le graphe et des annotations +p <- p + + annotate(geom = "label", x = 1650, y = 70, + label = "CHART,\n Showing at One View\nThe Price of the Quater of Wheat,\n& Wages of Labour by the Week,\nfrom The Year 1565 to 1821,\nby William Playfair.", + fontface = "bold.italic", size = 3.5, family = "NewCenturySchoolbook", + label.r = unit(3, "lines")) + + annotate(geom = "text", x = c(1635, 1748), y = c(9, 18), label = "Weekly Wages of a Good Mechanic", + size = 2.7, angle = c(2, 10), family = "NewCenturySchoolbook") +p +``` + +Pour la frise chronologique des rois et reines, nous allons utiliser les données disponibles [ici](https://mbostock.github.io/protovis/ex/wheat.js), et formattées au format CSV. +```{r message=FALSE, warning=FALSE} +# Fichier des rois et reines +wheat_monarchs <- read_csv("wheat_monarchs.csv") +wheat_monarchs %>% + kable(format = "html", escape = FALSE, align ="c") %>% + kable_styling(bootstrap_options = "striped", full_width = FALSE, position = "left") + +# Ajout frise chronologique des rois et reines +p <- p + + # rois/reines sur la barre supérieure + geom_rect(data = wheat_monarchs %>% filter(row_number() %% 2 == 1, is.na(commonwealth)), aes(xmin = start, xmax = end, ymin = 97, ymax = 98), inherit.aes = FALSE) + + geom_text(data = wheat_monarchs %>% filter(row_number() %% 2 == 1, is.na(commonwealth)), aes(x = start + (end -start) / 2,y = 96, label = name), size = 3, family = "NewCenturySchoolbook", fontface = "italic") + + # rois/reines sur la barre inférieure + geom_rect(data = wheat_monarchs %>% filter(row_number() %% 2 == 0, is.na(commonwealth)), aes(xmin = start, xmax = end, ymin = 96, ymax = 97), inherit.aes = FALSE) + + geom_text(data = wheat_monarchs %>% filter(row_number() %% 2 == 0, is.na(commonwealth)), aes(x = start + (end -start) / 2,y = 95, label = name), size = 3, family = "NewCenturySchoolbook", fontface = "italic") + + # cas particulier de Cromwell + geom_rect(data = wheat_monarchs %>% filter(commonwealth), aes(xmin = start, xmax = end, ymin = 97, ymax = 98), inherit.aes = FALSE, fill = "white", color = "black") + + geom_text(data = wheat_monarchs %>% filter(commonwealth), aes(x = start + (end -start) / 2,y = 96, label = name), size = 3, family = "NewCenturySchoolbook", fontface = "italic") +p +``` + +```{r warning=FALSE} +# Ajout des siècles +p + + geom_rect(aes(xmin = 1565.5, xmax = 1829.5, ymin = 100, ymax = 109), fill = "white") + + annotate(geom = "text", + x = c(1580, 1650, 1750, 1820), y = 101.5, + label = c("16th Century", "17th Century", "18th Century", "19th Century"), + size = 2.7, family = "NewCenturySchoolbook") + + geom_curve(aes(x = 1565, y = 105, xend = 1600, yend = 100), curvature = -0.1, size = 1) + + geom_curve(aes(x = 1600, y = 100, xend = 1700, yend = 100), curvature = -0.17, size = 1) + + geom_curve(aes(x = 1700, y = 100, xend = 1800, yend = 100), curvature = -0.17, size = 1) + + geom_curve(aes(x = 1800, y = 100, xend = 1830, yend = 105), curvature = -0.1, size = 1) + + annotate(geom = "text", x = 1700, y = 104, label = "N°1", + size = 4, family = "NewCenturySchoolbook", fontface = "bold") +``` + +Ces différentes étapes permettent d'obtenir un graphique assez proche de celui de William Playfair. + + + -Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel. diff --git a/module3/exo3/wheat.csv b/module3/exo3/wheat.csv new file mode 100644 index 0000000..1a201c3 --- /dev/null +++ b/module3/exo3/wheat.csv @@ -0,0 +1,54 @@ +"","Year","Wheat","Wages" +"1",1565,41,5 +"2",1570,45,5.05 +"3",1575,42,5.08 +"4",1580,49,5.12 +"5",1585,41.5,5.15 +"6",1590,47,5.25 +"7",1595,64,5.54 +"8",1600,27,5.61 +"9",1605,33,5.69 +"10",1610,32,5.78 +"11",1615,33,5.94 +"12",1620,35,6.01 +"13",1625,33,6.12 +"14",1630,45,6.22 +"15",1635,33,6.3 +"16",1640,39,6.37 +"17",1645,53,6.45 +"18",1650,42,6.5 +"19",1655,40.5,6.6 +"20",1660,46.5,6.75 +"21",1665,32,6.8 +"22",1670,37,6.9 +"23",1675,43,7 +"24",1680,35,7.3 +"25",1685,27,7.6 +"26",1690,40,8 +"27",1695,50,8.5 +"28",1700,30,9 +"29",1705,32,10 +"30",1710,44,11 +"31",1715,33,11.75 +"32",1720,29,12.5 +"33",1725,39,13 +"34",1730,26,13.3 +"35",1735,32,13.6 +"36",1740,27,14 +"37",1745,27.5,14.5 +"38",1750,31,15 +"39",1755,35.5,15.7 +"40",1760,31,16.5 +"41",1765,43,17.6 +"42",1770,47,18.5 +"43",1775,44,19.5 +"44",1780,46,21 +"45",1785,42,23 +"46",1790,47.5,25.5 +"47",1795,76,27.5 +"48",1800,79,28.5 +"49",1805,81,29.5 +"50",1810,99,30 +"51",1815,78,NA +"52",1820,54,NA +"53",1821,54,NA diff --git a/module3/exo3/wheat_monarchs.csv b/module3/exo3/wheat_monarchs.csv new file mode 100644 index 0000000..6855137 --- /dev/null +++ b/module3/exo3/wheat_monarchs.csv @@ -0,0 +1,13 @@ +"name","start","end","commonwealth" +"Elizabeth","1565","1603","" +"James I","1603","1625","" +"Charles I","1625","1649","" +"Cromwell","1649","1660","True" +"Charles II","1660","1685","" +"James II","1685","1689","" +"W&M","1689","1702","" +"Anne","1702","1714","" +"George I","1714","1727","" +"George II","1727","1760","" +"George III","1760","1820","" +"George IV","1820","1821","" -- 2.18.1