R Language
Datainsamling
Sök…
Introduktion
Få data direkt till en R-session. En av de trevliga funktionerna i R är att datainsamlingen är enkel. Det finns flera sätt att sprida data med R-paket.
Inbyggda datasätt
R
har en stor samling inbyggda datasätt. Vanligtvis används de för undervisningsändamål för att skapa snabba och lätt reproducerbara exempel. Det finns en trevlig webbsida med de inbyggda datasätten:
https://vincentarelbundock.github.io/Rdatasets/datasets.html
Exempel
Swiss Fertility and Socioeconomic Indicators (1888) Data. Låt oss kontrollera skillnaden i fertilitet baserat på ruralitet och dominans av den katolska befolkningen.
library(tidyverse)
swiss %>%
ggplot(aes(x = Agriculture, y = Fertility,
color = Catholic > 50))+
geom_point()+
stat_ellipse()
Datasätt inom paket
Det finns paket som innehåller data eller skapas specifikt för att sprida datasätt. När ett sådant paket laddas ( library(pkg)
) blir de bifogade datasätten antingen tillgängliga som R-objekt; eller så måste de ringas med data()
-funktionen.
Gapminder
Ett trevligt datasæt om utvecklingen av länder.
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()
Världsbefolkningsutsikter 2015 - FN: s befolkningsavdelning
Låt oss se hur världen har konvergerat i manlig förväntad livslängd vid födelsen under 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")
Paket för åtkomst till öppna databaser
Många paket skapas specifikt för åtkomst till vissa databaser. Att använda dem kan spara en massa tid på att läsa / formulera data.
Eurostat
Även om eurostat
har en funktion search_eurostat()
, hittar den inte alla relevanta datasätt tillgängliga. Detta är mer bekvämt att manuellt bläddra igenom koden för ett datasätt på Eurostat-webbplatsen: Ländernas databas eller regional databas . Om den automatiska nedladdningen inte fungerar, kan data hämtas manuellt 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))
Paket för åtkomst till begränsade data
Mänsklig dödlighetdatabas
Human Mortality Database är ett projekt från Max Planck Institute for Demographic Research som samlar in och förbereder mänsklig dödlighet för dessa länder, där mer eller mindre tillförlitlig statistik finns tillgänglig.
# 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
Observera att argumenten user_hmd
och pass_hmd
är inloggningsuppgifterna på webbplatsen för Human Mortality Database. För att få åtkomst till uppgifterna måste man skapa ett konto på http://www.mortality.org/ och ge sina egna referenser till 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))