Во овој документ се посветивме повеќе на групирање на податоци според категорички вариабли и контруирање графици од такви групирани табели. Исто така дискутиравме малку повеќе за различните стилови на форматирање на код. Допревме малку на темата за користење на tidyverse
пакети за поврзување со надворешни дата бази (без код). Конечно, воведовме и нов пакет за прикажување на географски податоци со фацети кои се позиционо (релативно) точни (geofacet
).
.Rmd
(R Markdown) е околината во која ќе работиме;File -> New File -> R notebook
ctrl+alt+i
)ctrl+shift+m
)<-
)view()
install.packages("geofacet")
„Бавен ggplot“ значи постепено пишување, наместо спојување на цели елементи заедно, како следи:
Вообичаено:
ggplot(my_data, aes(var1, y = var2, col = var3)) +
geom_point() +
ggtitle("My Title") +
labs(x = "the x label", y = "the y label", col = "legend title")
Бавно:
ggplot(data = my_data) +
aes(x = var1) +
labs(x = "the x label") +
aes(y = var2) +
labs(y = "the y label") +
geom_point() +
aes(col = var3) +
labs(col = "legend title") +
labs(title = "My title")
Вчитајте го tidyverse
.
library(tidyverse)
И вчитајте ги податоците од github страницата на tidytuesday.
school_diversity <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-09-24/school_diversity.csv")
glimpse(school_diversity)
## Rows: 27,944
## Columns: 15
## $ LEAID <chr> "0100002", "0100005", "0100005", "0100006", "0100006",...
## $ LEA_NAME <chr> "alabama youth services", "albertville city", "albertv...
## $ ST <chr> "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", ...
## $ d_Locale_Txt <chr> NA, "town-distant", "town-distant", "rural-distant", "...
## $ SCHOOL_YEAR <chr> "1994-1995", "1994-1995", "2016-2017", "1994-1995", "2...
## $ AIAN <dbl> 0.00000000, 0.00000000, 0.29373967, 0.10436857, 0.4923...
## $ Asian <dbl> 0.5893910, 0.3207184, 0.5507619, 0.1341882, 0.2989274,...
## $ Black <dbl> 71.7092338, 1.2828736, 3.1944189, 0.3727449, 1.0726218...
## $ Hispanic <dbl> 0.19646365, 4.52212957, 46.74132550, 0.90949754, 21.29...
## $ White <dbl> 27.504912, 93.874278, 46.778043, 98.479201, 75.804466,...
## $ Multi <dbl> NA, NA, 2.441711, NA, 1.037454, NA, 4.089539, 4.300766...
## $ Total <dbl> 509, 3118, 5447, 6707, 5687, 7671, 13938, 10440, 1973,...
## $ diverse <chr> "Diverse", "Extremely undiverse", "Diverse", "Extremel...
## $ variance <dbl> NA, NA, 0.011556081, NA, NA, NA, 0.031555535, 0.002656...
## $ int_group <chr> NA, NA, "Highly integrated", NA, NA, NA, "Highly integ...
Ова е трансформација заради олеснување. Сакаме кога ќе правиме други трансформации да не грешиме во Total или d_Locale како што се оригиналните имиња на колоните.
names(school_diversity) <- c("leaid", "lea_name", "state", "locale", "school_year", "aian", "asian", "black", "hispanic", "white", "multi", "total", "diverse", "variance", "int_group")
Секој круг да биде вредноста од total. Но тоа можеби се премногу податоци за на еден графикон (27.944). Можеби подобро групирање по тип (урбано/рурално/итн.) и посебни графикони (facet) да бидат регионите од САД. Но, нив ги нема во податоците.
По сличен начин на размислување, групирај ги податоците по држава и подели ги (facet) по региони, така што за секоја држава ќе има по еден bar што ќе покажува ентичка распределба на учениците.
NE.abrv <- c("CT","ME","MA","NH","RI","VT","NJ","NY","PA")
MW.abrv <- c("IN","IL","MI","OH","WI","IA","KS","MN","MO","NE",
"ND","SD")
S.abrv <- c("DE","DC","FL","GA","MD","NC","SC","VA","WV","AL",
"KY","MS","TN","AR","LA","OK","TX")
W.abrv <- c("AZ","CO","ID","NM","MT","UT","NV","WY","AK","CA",
"HI","OR","WA")
NE_tbl <- tibble(state=NE.abrv, region="Northeast")
MW_tbl <- tibble(state=MW.abrv, region="Midwest")
S_tbl <- tibble(state=S.abrv, region="South")
W_tbl <- tibble(state=W.abrv, region="West")
Не ги знаев регионите, ги ископирав од интернет.
region_df <- dplyr::bind_rows(NE_tbl, MW_tbl, S_tbl, W_tbl)
school_diversity_w_regions <- dplyr::left_join(x = school_diversity, y = region_df, by="state")
Што е tibble? R специфичен формат на dataframe што се користи во tidyverse. Не мора да се грижите за тоа сега.
Можеби забележавте дека спојувањето се прави со left_join.
dplyr (што е библиотека дел од tidyverse) (и уште повеќе dbplyr) можат да се поврзат со надворешни бази на податоци (mySQL, PostgressSQL, SQLite) и да работат со податочни сетови кои се преголеми да се чуваат во една csv датотека.
Ова можеби е пренапредно за овој момент во учењето R, но убавото е во тоа што синтаксата е иста, ако научите dplyr, освен поврзување со датабазата што изгледа поразлично, сите други команди се исти.
school_diversity <- school_diversity %>%
mutate(region = case_when(
is.element(state, NE.abrv) ~ "Northeast",
is.element(state, MW.abrv) ~ "Midwest",
is.element(state, S.abrv) ~ "South",
is.element(state, W.abrv) ~ "West",
TRUE ~ as.character(state)
))
sd_grouped <- school_diversity_w_regions %>%
group_by(region, school_year, locale) %>%
summarise_at(vars("total"),
list("total_per_locale"=sum))
ggplot(data = drop_na(sd_grouped)) +
aes(x = total_per_locale / 10^5) +
labs(x = "Број на ученици (во сто илјади) ") +
aes(y = school_year) +
labs(y = "Години") +
aes(size = total_per_locale) +
labs(size = "total_per_locale") +
aes(group = locale, color = locale) +
scale_colour_viridis_d(option = "plasma") +
geom_point(alpha = 0.25) +
geom_jitter(size = 2.5, alpha = 0.25, width = 1) +
facet_grid(rows = vars(region)) +
ggthemes::theme_fivethirtyeight() +
theme(legend.position = "bottom", legend.title = element_blank()) +
theme(panel.spacing.y = unit(0.5, 'cm')) +
guides(size=FALSE)
Не видов дека SCHOOL_YEAR се само две години, мислев дека е секоја учебна од 1994 до 2017.
Дискусија?
Уште една обработка на податоците
reorganized <-
school_diversity %>%
group_by(state, school_year, diverse) %>%
tally() %>%
select(state, school_year, diverse, n) %>%
mutate(diverse = factor(
diverse,
levels = c("Extremely undiverse", "Undiverse", "Diverse")
)) %>%
group_by(state, school_year) %>%
mutate(percent = n / sum(n)) %>%
filter(school_year == "1994-1995")
library(geofacet)
ggplot(data = reorganized) +
labs(title="School diversity in the US in 1994-1995") +
aes(x=diverse) +
labs(x="") +
aes(y=percent) +
labs(y="") +
aes(fill=diverse) +
labs(fill="") +
geom_col() +
scale_fill_manual(values=c("grey10", "grey40", "forestgreen")) +
scale_y_continuous(breaks=c(0, .5, 1), labels = scales::percent) +
coord_flip() +
facet_geo(~state, grid = "us_state_grid1") +
theme_minimal()+
theme(
strip.text = element_text(
margin = margin(3, 3, 3, 3)
)) +
theme(legend.position = "bottom") +
theme(axis.text.x = element_text(angle=30, hjust=1, vjust=1)) +
theme(axis.line.x = element_blank()) +
theme(panel.grid.major = element_line(color = "gray80")) +
theme(panel.background = element_rect(fill = "gray90"))