R Language
Datenerfassung
Suche…
Einführung
Holen Sie sich Daten direkt in eine R-Sitzung. Eine der schönen Eigenschaften von R ist die einfache Datenerfassung. Es gibt mehrere Möglichkeiten, Daten mit R-Paketen zu verbreiten.
Eingebaute Datensätze
R
verfügt über eine umfangreiche Sammlung eingebauter Datensätze. In der Regel werden sie zu Unterrichtszwecken verwendet, um schnell und leicht reproduzierbare Beispiele zu erstellen. Es gibt eine schöne Webseite mit den eingebauten Datensätzen:
https://vincentarelbundock.github.io/Rdatasets/datasets.html
Beispiel
Schweizer Fertilitäts- und sozioökonomische Indikatoren (1888) Daten. Untersuchen wir den Unterschied in der Fruchtbarkeit basierend auf der ländlichen Entwicklung und der Dominanz der katholischen Bevölkerung.
library(tidyverse)
swiss %>%
ggplot(aes(x = Agriculture, y = Fertility,
color = Catholic > 50))+
geom_point()+
stat_ellipse()
Datensätze in Paketen
Es gibt Pakete, die Daten enthalten oder speziell zur Verbreitung von Datensätzen erstellt wurden. Wenn ein solches Paket geladen wird ( library(pkg)
), werden die angehängten Datensätze entweder als R-Objekte verfügbar. oder sie müssen mit der Funktion data()
aufgerufen werden.
Gapminder
Ein schöner Datensatz zur Entwicklung von Ländern.
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()
Perspektiven für die Weltbevölkerung 2015 - Bevölkerungsabteilung der Vereinten Nationen
Mal sehen, wie die Welt die männliche Lebenserwartung bei der Geburt zwischen 1950 und 2015 erreicht hat.
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")
Pakete für den Zugriff auf offene Datenbanken
Zahlreiche Pakete werden speziell für den Zugriff auf einige Datenbanken erstellt. Ihre Verwendung kann beim Lesen / Formatieren der Daten viel Zeit sparen.
Eurostat
Obwohl das Paket von eurostat
über die Funktion search_eurostat()
verfügt, werden nicht alle relevanten Datensätze gefunden. Dies ist bequemer, wenn Sie den Code eines Datensatzes manuell auf der Eurostat-Website durchsuchen: Länder- oder Regionaldatenbank . Wenn der automatisierte Download nicht funktioniert, können die Daten manuell über die Bulk Download-Funktion abgerufen werden.
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))
Pakete für den Zugriff auf eingeschränkte Daten
Datenbank der menschlichen Mortalität
Die Datenbank über die menschliche Mortalität ist ein Projekt des Max-Planck-Instituts für demografische Forschung , das Daten zur menschlichen Mortalität für jene Länder erfasst und vorverarbeitet, in denen mehr oder weniger zuverlässige Statistiken verfügbar sind.
# 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
Bitte beachten Sie, dass die Argumente user_hmd
und pass_hmd
die Anmeldeinformationen auf der Website der Human Mortality Database sind. Um auf die Daten zugreifen zu können, müssen Sie ein Konto bei http://www.mortality.org/ erstellen und Ihre eigenen Anmeldeinformationen für die Funktion 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))