library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(scales)
Dans ce document, j’explore un jeu de données historiques contenant des informations sur les prix du blé et les salaires entre 1565 et 1830 (en supposant des pas de 5 ans sur 53 observations).
Voici les données de William Playfair que j’ai trouve sur le MOOC
data <- read.csv("C:/Users/CASTRO PACHECO/mooc-rr/module3/exo3/playfairdata.csv")
Je verifie la structure.
# Structure du jeu de données
str(data)
## 'data.frame': 53 obs. of 4 variables:
## $ rownames: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Year : int 1565 1570 1575 1580 1585 1590 1595 1600 1605 1610 ...
## $ Wheat : num 41 45 42 49 41.5 47 64 27 33 32 ...
## $ Wages : num 5 5.05 5.08 5.12 5.15 5.25 5.54 5.61 5.69 5.78 ...
Je fais un résumé rapide
# Statistiques descriptives de base
summary(data)
## rownames Year Wheat Wages
## Min. : 1 Min. :1565 Min. :26.00 Min. : 5.000
## 1st Qu.:14 1st Qu.:1630 1st Qu.:33.00 1st Qu.: 6.145
## Median :27 Median :1695 Median :41.00 Median : 7.800
## Mean :27 Mean :1695 Mean :43.26 Mean :11.582
## 3rd Qu.:40 3rd Qu.:1760 3rd Qu.:47.00 3rd Qu.:14.875
## Max. :53 Max. :1821 Max. :99.00 Max. :30.000
## NA's :3
Maintenant je vais voir s’il y a des données manquantes. J’en vois trois sur la colonne des salaires.
# Vérification des valeurs manquantes
colSums(is.na(data))
## rownames Year Wheat Wages
## 0 0 0 3
Pour répondre à la consigne, j’ai reproduit un graphique dans l’esprit de celui de Playfair. Le prix du blé est représenté par des barres verticales, tandis que les salaires sont illustrés par une surface bleue délimitée par une courbe rouge. Ces deux séries sont superposées dans un même graphique afin de visualiser leur évolution conjointe, tout en conservant l’impression générale du graphique original.
ggplot(data, aes(x = Year)) +
geom_col(aes(y = Wheat), fill = "black",
color = "black", width = 3)+
# Ligne rouge pour les salaires, taille un peu plus épaisse
geom_line(aes(y = Wages ), color = "red", size = 2) +
# Titres et thème
labs(
title = "Prix d'un quart de boisseau de ble (barres noires) et salaires (ligne rouge)",
x = "Annee", y = "Shillings"
) +
theme(
panel.grid.major = element_line(color = "grey80"),
panel.grid.minor = element_blank(),
axis.title.y.left = element_text(color = "black", size = 12),
axis.text.y.left = element_text(color = "black")
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: `position_stack()` requires non-overlapping x intervals.
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_line()`).
Ce graphique présente l’évolution conjointe du prix du blé et des salaires des travailleurs. Le prix du blé est affiché en barres noires, avec son échelle indiquée sur l’axe droit, tandis que les salaires hebdomadaires sont représentés par une courbe rouge, avec leur échelle sur l’axe gauche. L’utilisation de deux axes y distincts permet de comparer ces deux variables aux unités différentes sur un même graphique.
# Calcul du facteur de mise à l'échelle pour que Wheat et Wages cohabitent
# On met Wheat à l'échelle de Wages
scale_factor <- max(data$Wages, na.rm = TRUE) / max(data$Wheat, na.rm = TRUE)
ggplot(data, aes(x = Year)) +
geom_col(aes(y = Wheat * scale_factor), fill = "black", color = "black", width = 3) +
geom_line(aes(y = Wages), color = "red", size = 1.5) +
scale_y_continuous(
name = "Salaires (shillings par semaine)",
sec.axis = sec_axis(~ . / scale_factor, name = "Prix du ble (prix d'un quart de boisseau)")
) +
labs(
title = "Prix du ble (barres noires) et salaires (ligne rouge)",
x = "Annee"
) +
theme_minimal() +
theme(
axis.title.y.left = element_text(color = "red", size = 12),
axis.text.y.left = element_text(color = "red"),
axis.title.y.right = element_text(color = "black", size = 12),
axis.text.y.right = element_text(color = "black")
)
## Warning: `position_stack()` requires non-overlapping x intervals.
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_line()`).
Il nous faut mainentant montrer que le pouvoir d’achat des ouvriers a monté au fil des années. Pour cela, on calculer la quantité de boisseaux de blé qu’un salarié peut acheter par semaine.
data$wheat_bags_per_wage = data$Wages / (data$Wheat*4)
ggplot(data, aes(x = Year)) +
geom_col(aes(y = wheat_bags_per_wage), fill = "black", color = "black", width = 3) +
labs(
title = "Boisseaux de ble qui peuvent etre achetes avec un salaire hebdomadaire",
x = "Annee", y = "Boisseaux de ble qui peuvent etre \n achetes avec un salaire hebdomadaire"
) +
theme_minimal() +
theme(
axis.title.y.right = element_text(color = "black", size = 12),
axis.text.y.right = element_text(color = "black")
)
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_col()`).
Ce graphique présente la relation entre le prix du blé et les salaires des travailleurs. Chaque point correspond à une année, dont la progression est indiquée par un dégradé de couleur allant des années les plus anciennes (en clair) aux plus récentes (en foncé). Cette représentation permet d’apprécier simultanément l’évolution conjointe des deux variables et leur lien au fil du temps, sans utiliser l’axe temporel classique.
ggplot(data, aes(x = Wheat, y = Wages, color = Year)) +
geom_point(size = 3) +
scale_color_gradient(low = "lightblue", high = "darkblue") +
labs(
title = "Relation entre prix du ble et salaires selon les annees",
x = "Prix du ble (prix d'un quart de boisseau)",
y = "Salaires (shillings par semaine)",
color = "Annee"
) +
theme_minimal()
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_point()`).