[20] Données du chômage au format “xkcd”

Aujourd’hui on reprend les données du chômage récupérées hier sur le site de l’Insee. On va transformer le graphe qu’on a créé avec ggplot2 pour le faire ressembler aux graphes de l’excellent comic xkcd. On va utiliser pour cela le package R xkcd :

install.packages("xkcd", dependencies = T)

Il faut ensuite installer la police “xkcd”. Le script suivant fait l’affaire :

library(extrafont)

download.file("http://simonsoftware.se/other/xkcd.ttf",
 dest="xkcd.ttf", mode="wb")
system("mkdir ~/.fonts")
system("cp xkcd.ttf ~/.fonts")
font_import(pattern = "[X/x]kcd", prompt=FALSE)
fonts()
fonttable()
if(.Platform$OS.type != "unix") {
 ## Register fonts for Windows bitmap output
 loadfonts(device="win")
} else {
 loadfonts()
}

Il ne reste plus qu’à modifier un peu notre graphe original et utiliser le thème theme_xkcd() dans ggplot2. Notez l’utilisation de geom_smooth à la place de geom_line afin de lisser la courbe pour renforcer l’aspect bande dessinée.

library(xkcd)
library(ggplot2)

plot_chomage <- ggplot(donnees_chomage, aes(x=TIME_PERIOD, y=OBS_VALUE)) +
 geom_smooth(colour="red", size=2, level=0, formula = y ~ poly(x, 9), method="lm") +
 xlab("Annee") +
 ylab("Taux de chomage") +
 geom_vline(xintercept = c(1993,2008), color="grey", linetype="dashed") +
 annotate("text", c(1993,2008), c(0.15), label=c("1993","2008"), 
 color="grey", family="xkcd") +
 theme_xkcd()

print(plot_chomage)
Taux de chômage en France entre 1975 et 2016 – style “xkcd”

Et voilà un graphe au style “xkcd” pour le taux de chômage en France ! Le sujet n’étant peut-être pas le plus adapté au format BD, je donne pour l’exemple le graphe des prénoms de l’article du 13 décembre que je me suis également amusé à xkcd-iser :

Part des 10 prénoms les plus populaires en France - style xkcd
Part des 10 prénoms les plus populaires en France – style xkcd

[19] Données du chômage avec R et SDMX-ML

Aujourd’hui un petit post un peu plus “pratique”. On va réaliser le graphique du taux de chômage en France depuis 1975 en utilisant R. Les données sont disponibles sur le site de l’INSEE. En suivant ce lien on va pouvoir les télécharger au format csv. Mais il est beaucoup plus sympathique d’utiliser une méthode un peu plus automatique pour récupérer ces données. Ainsi, dès que l’INSEE les mettra à jour (le trimestre prochain par exemple), il suffira de relancer le script R et le graphe se mettra automatiquement à jour.

Pour ce faire, on va utiliser la compatibilité du nouveau site de l’Insee avec la norme SDMX. Le package R rsdmx va nous permettre de récupérer facilement les données en utilisant cette fonctionnalité :

install.packages("rsdmx")
library(rsdmx)

Sur la page correspondant aux données sur le site de l’Insee, on récupère l’identifiant associé : 001688526. Cela permet de construire l’adresse à laquelle on va pouvoir demander à rsdmx de récupérer les données : http://www.bdm.insee.fr/series/sdmx/data/SERIES_BDM/001688526. On peut également ajouter des paramètres supplémentaires en les ajoutant à la suite de l’url (en les séparant par un “?”). On utilise ensuite cette adresse avec la fonction readSDMX:

url_chomage_insee <- "http://www.bdm.insee.fr/series/sdmx/data/SERIES_BDM/001688526?periodeDebut=1&anneeDebut=1975&periodeFin=3&anneeFin=2016&recherche=criteres&codeGroupe=1533"
donnees_chomage_sdmx <- readSDMX(url_chomage_insee)
donnees_chomage <- as.data.frame(donnees_chomage_sdmx)

On peut regarder la structure des données que l’on a à ce stade :

> str(donnees_chomage)
'data.frame':	167 obs. of  12 variables:
 $ IDBANK          : Factor w/ 1 level "001688526": 1 1 1 1 1 1 1 1 1 1 ...
 $ FREQ            : Factor w/ 1 level "T": 1 1 1 1 1 1 1 1 1 1 ...
 $ TITLE           : Factor w/ 1 level "Taux de chômage au sens du BIT - Ensemble - France métropolitaine - Données CVS": 1 1 1 1 1 1 1 1 1 1 ...
 $ LAST_UPDATE     : Factor w/ 1 level "2016-11-17": 1 1 1 1 1 1 1 1 1 1 ...
 $ UNIT_MEASURE    : Factor w/ 1 level "PCT": 1 1 1 1 1 1 1 1 1 1 ...
 $ UNIT_MULT       : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
 $ REF_AREA        : Factor w/ 1 level "FM": 1 1 1 1 1 1 1 1 1 1 ...
 $ DECIMALS        : Factor w/ 1 level "1": 1 1 1 1 1 1 1 1 1 1 ...
 $ TIME_PER_COLLECT: Factor w/ 1 level "PERIODE": 1 1 1 1 1 1 1 1 1 1 ...
 $ TIME_PERIOD     : chr  "2016-Q3" "2016-Q2" "2016-Q1" "2015-Q4" ...
 $ OBS_VALUE       : chr  "9.7" "9.6" "9.9" "9.9" ...
 $ OBS_STATUS      : chr  "P" "A" "A" "A" ...

Les deux colonnes qui vont nous intéresser sont “TIME_PERIOD” (date de la mesure) et “OBS_VALUE” (taux de chômage estimé). Pour le moment, ces données sont au format “caractère”. On va les transformer respectivement en “date” et en “numérique”. Notez que l’intégration du trimestre nécessite de passer par le package “zoo” (pour la fonction as.yearqtr) :

library(zoo)

donnees_chomage$OBS_VALUE <- as.numeric(donnees_chomage$OBS_VALUE)

donnees_chomage$TIME_PERIOD <- as.yearqtr(donnees_chomage$TIME_PERIOD, format = "%Y-Q%q")

Il ne reste plus qu’à utiliser l’excellent package ggplot2 pour créer le graphe. On en profite pour ajouter des lignes verticales en 1993 et 2008 (dates des deux dernières crises économiques majeures) :

library(ggplot2)
 
plot_chomage <- ggplot(donnees_chomage, aes(x=TIME_PERIOD, y=OBS_VALUE)) +
 geom_line(colour="red") +
 xlab("Annee") +
 ylab("Taux de chomage") +
 geom_vline(xintercept = c(1993,2008), color="grey", linetype="dashed") +
 annotate("text", c(1993,2008), c(0.15), label=c("1993","2008"), 
 color="grey")

print(plot_chomage)
Taux de chômage en France entre 1975 et 2016
Taux de chômage en France entre 1975 et 2016

Rendez-vous demain pour un article où on s’amusera à faire ressembler ce graphe à ceux du comic xkcd.

[18] Recensement et constitution américaine

C’est l’avent, sans nul doute la meilleure période pour faire un petit post sur le recensement.

Le principe du recensement

Un recensement consiste à établir un registre de toutes les personnes vivant dans un pays. Le principe en est même inscrit dans l’article 1 de la constitution américaine. Le gouvernement américain est ainsi tenu de dénombrer régulièrement le nombre de ses citoyens, afin notamment d’ajuster le nombre de représentants de chaque Etat dans les différentes institutions démocratiques, entre autres, le sénat, la chambre des représentants et le collège électoral.

Recensement en Alaska en 1940. Source : https://en.wikipedia.org/wiki/United_States_Census#/media/File:1940_Census_-_Fairbanks,_Alaska.jpg
Recensement en Alaska en 1940. By Dwight Hammack, U.S. Bureau of the Census

Recenser toute la population d’un pays est bien entendu long et coûteux. C’est pourquoi historiquement, ces opérations n’étaient conduites qu’à certains moments (une fois tous les 7 ans en moyenne en France aux XIXe et XXe siècles). Un des inconvénients de cette façon de procéder est que le dernier recensement disponible à date peut présenter une information un peu datée ! Si les évolutions démographiques sont rapides, le données d’un recensement effectué plusieurs années auparavant ne refléteront pas la réalité.

Introduction d’une petite partie de sondages

Ainsi, dans le courant des années 2000, quelques instituts nationaux de statistiques ont introduit une petite part de sondage dans leur recensement. L’idée est de ne plus effectuer un dénombrement complètement exhaustif, mais d’effectuer un sondage avec un taux assez fort dans certaines zones géographiques. Ceci à la fois pour gagner en coûts, corriger certains biais de la méthode exhaustive, et surtout permettre d’effectuer le recensement plus souvent, c’est-à-dire de donner aux statisticiens des informations plus récentes !

En France, cette petite part de sondage a été combinée avec un recensement tournant. Les communes de moins de 10000 habitants sont entièrement recensées tous les cinq ans, par roulement, alors que les communes de plus de 10000 habitants ne voient chaque année qu’une fraction (8%) de leur population recensée (plus de détails ici).

L’utilisation du recensement pour la répartition des représentants

Aux Etats-Unis, le Census Bureau fait partie de ces instituts nationaux de statistiques qui ont décidé d’ajouter une petite part de théorie statistique à leur recensement. Mais la cour Suprême semble sceptique quant à l’utilisation de telles méthodes “inexactes”. En 1999, elle a décidé que les résultats du recensement qui auront été obtenus en utilisant la méthode par sondage ne pourraient pas être utilisées pour “l’apportionment“, c’est-à-dire la constitution des institutions démocratiques représentatives.

Le Census Bureau collecte quand même des données par cette méthode car elles sont utiles dans beaucoup de domaines (par exemple cet article très intéressant  sur lequel je reviendrai un de ces jours). Mais elles ne seront pas utilisées pour calculer le nombre de représentants au Sénat, à la chambre ou dans le collège électoral.

Notons que certains statisticiens pensent que le recensement “exhaustif” américain est biaisé en défaveur des minorités, ce qui fait écho aux débats récents sur la constitution du collège électoral.

Le découpage électoral en France

Circonscriptions électorales élections législatives 2012. Source : http://www.lefigaro.fr/politique/2009/07/28/01002-20090728ARTFIG00458-la-nouvelle-carte-electorale-pour-2012-.php
Circonscriptions électorales élections législatives 2012. Source : http://www.lefigaro.fr/politique/2009/07/28/01002-20090728ARTFIG00458-la-nouvelle-carte-electorale-pour-2012-.php

En France, la délimitation des circonscriptions législatives se nomme le découpage électoral. La dernière modification de ces circonscriptions a été effectuée en 2010 en utilisant les données démographiques du recensement de la population 2009. Autrement dit, notre mode de découpage des circonscriptions utilisant cette méthode de recensement serait considéré… inconstitutionnel aux Etats-Unis !

[17] Avenue, Rue ou Boulevard Jean Jaurès ?

Petit retour dans le monde de l’odonymie, après l’article de mercredi dernier, et celui plus ancien où nous vous proposions de regarder de quelle couleur politique était votre rue !

Nous allons nous intéresser aux types de voie qui sont associés aux différentes personnalités. Pour cela, nous avons sélectionné les 20 personnalités qui ressortent le plus dans les noms de voirie en France, et nous avons compté pour chaque type de voie (rue, avenue, allée, etc.) avec quelle fréquence ce nom était présent. Les résultats sont résumés par le tableau suivant, coloré à l’aide d’Excel :

On remarque plusieurs résultats intéressants :

  • Ce sont les avenues qui sont les plus fréquentes, en tout cas celles relatives à ces personnalités. Cela peut s’expliquer facilement : ce sont souvent de grandes artères et il est classique de les nommer en honneur de personnalités très célèbres.
  • Les rues et places sont très souvent associées à des personnalités militaires ou politiques, surtout le Général de Gaulle et dans une moindre mesure Clemenceau et le Général Leclerc.
  • À l’inverse, les impasses et les allées sont plus souvent associés à des personnalités du monde littéraire ou artistique, comme Émile Zola, Georges Brassens ou Jean de la Fontaine.

[16] Lettres de France

On va répondre aujourd’hui à une question que personne ne s’est jamais posé : quelle lettre a le plus d’habitants en France ? C’est à dire que par exemple pour la lettre A, on regarde toutes les communes françaises qui possèdent un A, et l’on cherche à savoir quelle partie de la population cela représente. Pour cela, on va utiliser deux choses qui ont l’air simples mais qui ne le sont pas :

  • Les données des populations légales, qui sont un des produits les plus importants de l’INSEE, mais qui sont très dures à trouver sur leur site : elles sont ici. Ouf.
  • Les expressions régulières, qui vont permettre ici de retrouver tous les noms de communes dans lesquels il y a une lettre. Ici, on va utiliser la fonction grepl de R pour faire cela. Si ça vous intéresse, un petit jeu ici.

Les résultats sont les suivants :

On a coloré en bleu les lettres de la capitale, Paris. Malgré ses deux millions et demi d’habitants, cela ne suffit pas à faire de toutes ses lettres les plus peuplées de France : rien ne dépasse le “E”.

[15] Fuseaux horaires européens

La construction de l’Union Européenne est un projet datant de la fin de la Seconde Guerre Mondiale. Cependant, on ne se pose pas toujours les bonnes questions à son sujet : comment faire pour mettre tout le monde dans une même pièce pour discuter si nous n’avons pas tous la même heure ? Concrètement, et en négligeant les parties hors Europe des pays de l’Union, il y a trois fuseaux horaires différents en Europe :

  • L’heure d’Europe de l’Ouest (WET), par exemple au Royaume-Uni (qu’on compte toujours avec nous, tant que le Brexit n’est pas acté).
  • L’heure d’Europe Centrale (CET), par exemple en France.
  • L’heure d’Europe de l’Est (EET), par exemple en Grèce.

Nous n’avons donc pas tous la même heure. Mais quelle est la probabilité, si l’on choisit deux européens au hasard, que leurs montres indiquent la même heure (en admettant qu’elles soient suisses et donc parfaitement réglées) ? Pour cela, nous avons besoin de données sur la population des différents pays européens, disponibles sur le site de l’INED. On calcule ensuite le tableau suivant, qui résume la probabilité des “couples” de fuseaux horaires obtenus par notre tirage au hasard :

WET CET EET
WET 2,5 % 11,7 % 1,6 %
CET 11,7 % 55,4 % 7,3 %
EET 1,6 % 7,3 % 1 %

Pour répondre à notre question initiale, il suffit de sommer les cases en gras du tableau : nous avons donc 58,8 % de chances que les deux personnes aient bien la même heure à leur montre. Ou sur leur téléphone portable, plus probablement.

Si l’on compare aux États-Unis, pour lesquels les données sont disponibles ici, on trouve que deux américains ont la même heure dans seulement 34,7% des cas. Cela ne devrait pas être si compliqué que ça de se mettre d’accord ?

[14] Noms de rues et personnalités

Nous avions étudié il y a quelques temps les relations entre les différents noms de rue et la couleur politique de la ville dans un article. L’application que nous avions mise en place pour tester la couleur politique de la rue où vous habitez ou travaillez est toujours accessible ici. Pour ce petit article, nous allons nous limiter aux personnalités publiques : lesquelles sont les plus fréquentes dans les villes ? Cette question est assez classique (voir ici par exemple, sur Slate), mais nous allons coupler cette analyse avec la couleur politique de la ville pour voir si les mêmes personnalités ressortent. Nos résultats sont les suivants :

Extrême Gauche Gauche Droite
1 Victor Hugo De Gaulle De Gaulle
2 De Gaulle Pasteur Pasteur
3 Pasteur Victor Hugo Victor Hugo
4 Voltaire Jean Jaurès Jean Moulin
5 Jean Jaurès Jean Moulin Jean Mermoz

On ne retrouve bien pas les mêmes résultats selon la couleur politique ! Si De Gaulle, Pasteur et Victor Hugo sont globalement présents partout, Voltaire et Jean Jaurès sont très marqués à gauche. Cela se vérifie à l’aide de notre application :

Pour les villes de droite, les marqueurs de personnalités sont plus rares : la plupart des rues portent des noms plus traditionnels, comme la rue de l’Église, ou des Lilas.

[13] Prénoms : part du top 10 et diversification

Avec chaque nouvelle année vient sa liste des prénoms tendance. Je suis toujours étonné de constater que beaucoup d’enfants possèdent des prénoms peu portés. Je me suis demandé si mon ressenti était exact, et le cas échéant si la tendance était récente. J’ai utilisé pour cela le fichier des prénoms de l’INSEE de 1946 à 2006, et fait un graphe de la part dans le total des 10 prénoms les plus populaires de chaque année :

Part du total pour les 10 prénoms les plus populaires donnés par année
Part du total pour les 10 prénoms les plus populaires donnés par année. Lecture : en 1960, les 10 prénoms les plus populaires représentaient 40% du total des naissances

Mis à part une hausse de la courbe (donc une baisse de la diversité) des prénoms féminins dans les années soixante, la tendance est bien à la baisse. La loi de 1993 qui libéralise le choix des prénoms ne semble d’ailleurs pas avoir eu d’effet sur cette tendance. En conséquence, j’imagine qu’il y a bien moins de doublons dans les classes qu’il ne pouvait y en avoir il y a quelques années.

[12] Le paradoxe d’Alexander

Il paraît que tout mathématicien apprécie un bon paradoxe. Et il semblerait aussi qu’il n’y ait pas de bon blog de maths sans paradoxe, comme nous le prouvent par exemple Freakonometrics, Science étonnante ou encore la chaîne youtube Science4All ! Donc aujourd’hui on inaugure la section paradoxe de ce blog avec un petit problème dû à Alexander (1989).

Imaginez une tombola où il y a n = 3 prix distribués. Une même personne ne pourra recevoir qu’un seul prix, mais il n’y a pas de limite dans le nombre de tickets que chacun peut acheter pour maximiser ses chances de remporter un lot. Le tirage se déroule comme suit : on met tous les tickets dans l’urne et on tire le gagnant du premier lot. Si la personne tirée possédait plusieurs tickets, on les retire tous de l’urne, et on recommence jusqu’à ce que les trois prix aient été attribués.

Obtenir un de ces prix vous tient très à cœur et vous achetez 225 000 tickets de loterie ! Votre éternel rival (noté R) lui aussi veut un de ces lots à tout prix et achète également 225 000 tickets. 50 000 autres personnes ont joué à la loterie, mais elles n’ont acheté qu’un seul ticket chacune.

Vous manquez malheureusement le tirage mais vous croisez votre rival qui en sort, tout dépité. Logiquement, vous devriez vous réjouir, non ? Le fait qu’il n’ait pas gagné malgré ses 225 000 tickets devrait vous donner mécaniquement plus de chances. En termes plus mathématiques, on devrait donc avoir :

\(\Pr(vous~perdez~|~R~a~perdu) \leq \Pr(vous~perdez) \)

 

On peut très simplement faire des simulations de cette loterie en R (et avec l’aide du package foreach, que j’apprécie beaucoup). On va faire 100000 simulations parce que la différence entre les deux probabilités n’est pas très élevée :

library(foreach)


N <- 500000
multiTickets <- 225000

id_self <- 1
id_rival <- 2
pop <- c(rep(1,multiTickets),rep(2,multiTickets),3:(N-2*multiTickets))

n <- 3

nSim <- 100000

successive_sample <- function(pop, n) {
 
 sample_set <- rep(0,n)
 popTemp <- pop
 k <- 1 ## temp size of sample
 
 cont <- TRUE
 
 while(cont) {
 
 drawn_unit <- sample(popTemp,1)
 sample_set[k] <- drawn_unit
 k <- k+1
 popTemp <- popTemp[popTemp != drawn_unit]
 
 if( k > n ) {
 cont <- FALSE
 }
 
 }
 
 return(sample_set)
}

sim_lottery <- foreach(k = 1:nSim, .combine=rbind) %do% {
 successive_sample(pop, n)
}


p_lost <- sum(as.numeric(
 apply(sim_lottery,1, function(x) { return(!(id_self %in% x)) } )
)) / nSim

sim_rival_lost <- sim_lottery[apply(sim_lottery,1,function(x) { return(!(id_rival %in% x)) }),]
p_lost_conditional <- sum(as.numeric(
 apply(sim_rival_lost,1,
 function(x) { return(!(id_self %in% x)) })
)) / nrow(sim_rival_lost)

Et on observe :

> p_lost
[1] 0.02871
> p_lost_conditional
[1] 0.03449465

C’est-à-dire :

\(\Pr(vous~perdez~|~R~a~perdu) > \Pr(vous~perdez) \)

 

Donc contrairement à notre intuition, le fait de savoir que notre rival a perdu ne doit pas nous réjouir, car nous avons maintenant moins de chances de gagner que sans cette information !

Plutôt rigolo, non ? Vous pouvez essayer de faire tourner le code précédent avec des allocations en tickets un peu moins “bizarres”. Vous observerez par exemple que pour 1000 tickets distribués parmi 1000 joueurs différents, la condition “intuitive” est bien vérifiée. Le “paradoxe d’Alexander” a en fait des applications en statistique théorique et en sondages.

 

Image de couverture © The Pokémon Company

[11] Nombre de naissances et astrologie chinoise

Dans l’article de jeudi, on s’est limité à regarder ce qui se passait pour notre zodiaque “occidental”. Mais il existe un autre jeu de signes astrologiques qui est utilisé à travers le monde : il s’agit du zodiaque chinois. Ici, ce qui détermine le signe n’est pas le mois de naissance mais l’année (selon le calendrier de type lunaire, qui est également ce qui conduit la date de Pâques à varier selon les années). On va ici faire l’approximation année calendaire = année chinoise, ce qui revient à mal spécifier les signes astrologiques des naissances en janvier. Cela permet en revanche d’utiliser directement une information de type pyramide des âges.

En effet, à partir du jeu de données des répartitions par âge, on peut en déduire le nombre de personnes possédant chacun des signes astrologiques. À partir de là, on peut calculer l’écart au nombre moyen dans la population française fin 2015 :

Il manque donc des Singes, des Coqs et des Chiens. Que dire alors des Singes capricornes ?