R Language
Data-acquisitie
Zoeken…
Invoering
Ontvang gegevens rechtstreeks in een R-sessie. Een van de leuke kenmerken van R is het gemak van gegevensverzameling. Er zijn verschillende manieren om gegevens te verspreiden met behulp van R-pakketten.
Ingebouwde datasets
R
heeft een uitgebreide verzameling ingebouwde gegevenssets. Gewoonlijk worden ze gebruikt voor onderwijsdoeleinden om snel en gemakkelijk reproduceerbare voorbeelden te maken. Er is een mooie webpagina met de ingebouwde gegevenssets:
https://vincentarelbundock.github.io/Rdatasets/datasets.html
Voorbeeld
Gegevens over Zwitserse vruchtbaarheid en sociaaleconomische indicatoren (1888). Laten we het verschil in vruchtbaarheid bekijken op basis van het platteland en de dominantie van de katholieke bevolking.
library(tidyverse)
swiss %>%
ggplot(aes(x = Agriculture, y = Fertility,
color = Catholic > 50))+
geom_point()+
stat_ellipse()
Datasets binnen pakketten
Er zijn pakketten die gegevens bevatten of die specifiek zijn gemaakt om gegevenssets te verspreiden. Wanneer een dergelijk pakket wordt geladen ( library(pkg)
), worden de bijgevoegde gegevenssets beschikbaar als R-objecten; of ze moeten worden aangeroepen met de functie data()
.
Gapminder
Een mooie dataset over de ontwikkeling van landen.
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 - Bevolking van de Verenigde Naties
Laten we eens kijken hoe de wereld is samengekomen in de levensverwachting van mannen bij de geboorte in de periode 1950-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")
Pakketten voor toegang tot open databases
Tal van pakketten zijn specifiek gemaakt om toegang te krijgen tot sommige databases. Het gebruik hiervan kan een hoop tijd besparen bij het lezen / formatteren van de gegevens.
Eurostat
Hoewel eurostat
pakket een functie search_eurostat()
, vindt het niet alle relevante datasets beschikbaar. Dit is handiger om handmatig door de code van een gegevensset te bladeren op de website van Eurostat: landendatabase of regionale database . Als de geautomatiseerde download niet werkt, kunnen de gegevens handmatig worden opgehaald via Bulk Download Facility .
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))
Pakketten voor toegang tot beperkte gegevens
Human Mortality Database
Human Mortality Database is een project van het Max Planck Instituut voor demografisch onderzoek dat gegevens over menselijke sterfte verzamelt en voorwerkt in die landen, waar min of meer betrouwbare statistieken beschikbaar zijn.
# 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
Let op, de argumenten user_hmd
en pass_hmd
zijn de inloggegevens op de website van Human Mortality Database. Om toegang tot de gegevens te krijgen, moet u een account maken op http://www.mortality.org/ en hun eigen gegevens readHMDweb()
voor de functie 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))