R Language
L'acquisition des données
Recherche…
Introduction
Obtenez des données directement dans une session R. Une des fonctionnalités intéressantes de R est la facilité d’acquisition de données. Il existe plusieurs manières de diffuser les données en utilisant des packages R.
Jeux de données intégrés
R
possède une vaste collection de jeux de données intégrés. Habituellement, ils sont utilisés à des fins pédagogiques pour créer des exemples rapides et facilement reproductibles. Il y a une belle page Web répertoriant les jeux de données intégrés:
https://vincentarelbundock.github.io/Rdatasets/datasets.html
Exemple
Indicateurs suisses de fécondité et socioéconomiques (1888). Vérifions la différence de fécondité fondée sur la ruralité et la domination de la population catholique.
library(tidyverse)
swiss %>%
ggplot(aes(x = Agriculture, y = Fertility,
color = Catholic > 50))+
geom_point()+
stat_ellipse()
Ensembles de données dans les packages
Il existe des packages qui incluent des données ou qui sont créés spécifiquement pour diffuser des ensembles de données. Lorsqu'un tel paquet est chargé ( library(pkg)
), les jeux de données attachés deviennent disponibles en tant qu'objets R; ou ils doivent être appelés avec la fonction data()
.
Gapminder
Un bel ensemble de données sur le développement des pays.
library(tidyverse)
library(gapminder)
gapminder %>%
ggplot(aes(x = year, y = lifeExp,
color = continent))+
geom_jitter(size = 1, alpha = .2, width = .75)+
stat_summary(geom = "path", fun.y = mean, size = 1)+
theme_minimal()
World Population Prospects 2015 - Département de la population des Nations Unies
Voyons comment le monde a convergé dans l'espérance de vie masculine à la naissance entre 1950 et 2015.
library(tidyverse)
library(forcats)
library(wpp2015)
library(ggjoy)
library(viridis)
library(extrafont)
data(UNlocations)
countries <- UNlocations %>%
filter(location_type == 4) %>%
transmute(name = name %>% paste()) %>%
as_vector()
data(e0M)
e0M %>%
filter(country %in% countries) %>%
select(-last.observed) %>%
gather(period, value, 3:15) %>%
ggplot(aes(x = value, y = period %>% fct_rev()))+
geom_joy(aes(fill = period))+
scale_fill_viridis(discrete = T, option = "B", direction = -1,
begin = .1, end = .9)+
labs(x = "Male life expectancy at birth",
y = "Period",
title = "The world convergence in male life expectancy at birth since 1950",
subtitle = "Data: UNPD World Population Prospects 2015 Revision",
caption = "ikashnitsky.github.io")+
theme_minimal(base_family = "Roboto Condensed", base_size = 15)+
theme(legend.position = "none")
Packages pour accéder aux bases de données ouvertes
De nombreux packages sont créés spécifiquement pour accéder à certaines bases de données. Leur utilisation permet de gagner beaucoup de temps lors de la lecture / mise en forme des données.
Eurostat
Bien que le paquet eurostat
ait une fonction search_eurostat()
, il ne trouve pas tous les ensembles de données pertinents disponibles. Il est plus pratique de parcourir manuellement le code d’un ensemble de données sur le site Web d’Eurostat: base de données des pays ou base de données régionale . Si le téléchargement automatisé ne fonctionne pas, les données peuvent être récupérées manuellement via la fonction de téléchargement en bloc .
library(tidyverse)
library(lubridate)
library(forcats)
library(eurostat)
library(geofacet)
library(viridis)
library(ggthemes)
library(extrafont)
# download NEET data for countries
neet <- get_eurostat("edat_lfse_22")
neet %>%
filter(geo %>% paste %>% nchar == 2,
sex == "T", age == "Y18-24") %>%
group_by(geo) %>%
mutate(avg = values %>% mean()) %>%
ungroup() %>%
ggplot(aes(x = time %>% year(),
y = values))+
geom_path(aes(group = 1))+
geom_point(aes(fill = values), pch = 21)+
scale_x_continuous(breaks = seq(2000, 2015, 5),
labels = c("2000", "'05", "'10", "'15"))+
scale_y_continuous(expand = c(0, 0), limits = c(0, 40))+
scale_fill_viridis("NEET, %", option = "B")+
facet_geo(~ geo, grid = "eu_grid1")+
labs(x = "Year",
y = "NEET, %",
title = "Young people neither in employment nor in education and training in Europe",
subtitle = "Data: Eurostat Regional Database, 2000-2016",
caption = "ikashnitsky.github.io")+
theme_few(base_family = "Roboto Condensed", base_size = 15)+
theme(axis.text = element_text(size = 10),
panel.spacing.x = unit(1, "lines"),
legend.position = c(0, 0),
legend.justification = c(0, 0))
Packages pour accéder aux données restreintes
Base de données sur la mortalité humaine
Human Mortality Database est un projet de l’ Institut Max Planck de recherche démographique qui rassemble et pré-traite des données sur la mortalité humaine dans les pays où des statistiques plus ou moins fiables sont disponibles.
# load required packages
library(tidyverse)
library(extrafont)
library(HMDHFDplus)
country <- getHMDcountries()
exposures <- list()
for (i in 1: length(country)) {
cnt <- country[i]
exposures[[cnt]] <- readHMDweb(cnt, "Exposures_1x1", user_hmd, pass_hmd)
# let's print the progress
paste(i,'out of',length(country))
} # this will take quite a lot of time
Veuillez noter que les arguments user_hmd
et pass_hmd
sont les identifiants de connexion sur le site Web de Human Mortality Database. Pour accéder aux données, il faut créer un compte sur http://www.mortality.org/ et fournir leurs propres informations d'identification à la fonction readHMDweb()
.
sr_age <- list()
for (i in 1:length(exposures)) {
di <- exposures[[i]]
sr_agei <- di %>% select(Year,Age,Female,Male) %>%
filter(Year %in% 2012) %>%
select(-Year) %>%
transmute(country = names(exposures)[i],
age = Age, sr_age = Male / Female * 100)
sr_age[[i]] <- sr_agei
}
sr_age <- bind_rows(sr_age)
# remove optional populations
sr_age <- sr_age %>% filter(!country %in% c("FRACNP","DEUTE","DEUTW","GBRCENW","GBR_NP"))
# summarize all ages older than 90 (too jerky)
sr_age_90 <- sr_age %>% filter(age %in% 90:110) %>%
group_by(country) %>% summarise(sr_age = mean(sr_age, na.rm = T)) %>%
ungroup() %>% transmute(country, age=90, sr_age)
df_plot <- bind_rows(sr_age %>% filter(!age %in% 90:110), sr_age_90)
# finaly - plot
df_plot %>%
ggplot(aes(age, sr_age, color = country, group = country))+
geom_hline(yintercept = 100, color = 'grey50', size = 1)+
geom_line(size = 1)+
scale_y_continuous(limits = c(0, 120), expand = c(0, 0), breaks = seq(0, 120, 20))+
scale_x_continuous(limits = c(0, 90), expand = c(0, 0), breaks = seq(0, 80, 20))+
xlab('Age')+
ylab('Sex ratio, males per 100 females')+
facet_wrap(~country, ncol=6)+
theme_minimal(base_family = "Roboto Condensed", base_size = 15)+
theme(legend.position='none',
panel.border = element_rect(size = .5, fill = NA))