Stvaramo animirane histograme pomoću R

Stvaramo animirane histograme pomoću R

Animirane histograme koje se mogu ugraditi direktno u objavu na bilo kojoj stranici postaju sve popularnije. One prikazuju dinamiku promjena bilo kojih karakteristika tijekom određenog vremena na vizualno privlačan način. Pogledajmo kako ih stvoriti koristeći R i univerzalne pakete.

Skillbox preporučuje: Praktični tečaj "Python programer od nule".

Podsjećamo: za sve čitatelje "Habra" — popust od 10 000 rubalja prilikom upisa na bilo koji tečaj Skillbox uz promo kod "Habr".

Paketi

Potrebni su nam paketi u R:

Ova dva su izuzetno potrebna. Osim toga, bit će potrebni tidyverse, janitor i scales za upravljanje podacima, čišćenje skupa i formatiranje, redom.

Podaci

Izvorni set podataka koji ćemo koristiti u ovom projektu preuzima se s web stranice Svjetske banke. Evo ih — WorldBank Data. Isti podaci, ako su vam potrebni u gotovom obliku, mogu se preuzeti iz mape projekta.

Što su to za informacije? Uzorak sadrži vrijednosti BDP-a većine zemalja tijekom nekoliko godina (od 2000. do 2017. godine).

Obrada podataka

Koristit ćemo kod koji je naveden u nastavku za pripremu potrebnog formata podataka. Čistimo nazive stupaca, pretvaramo brojeve u numerički format i konvertiramo podatke pomoću funkcije gather(). Sve što dobijemo, spremamo u gdp_tidy.csv za daljnju upotrebu.

biblioteka(tidyverse)
biblioteka(janitor)

gdp <- read_csv("./data/GDP_Data.csv")

#select required columns

gdp % select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

gdp_tidy %
mutate_at(vars(contains("YR")),as.numeric) %>%
gather(year,value,3:13) %>%
janitor::clean_names() %>%
mutate(year = as.numeric(stringr::str_sub(year,1,4)))

write_csv(gdp_tidy,"./data/gdp_tidy.csv")

Animirane histograme

Njihovo stvaranje zahtijeva dva koraka:

  • Izrada kompletnog skupa aktualnih historograma korištenjem ggplot2.
  • Animiranje statičnih historograma s željenim parametrima uz pomoć gganimate.

Konačni korak — renderiranje animacije u željenom formatu, uključujući GIF ili MP4.

Učitavanje biblioteka

  • biblioteka(tidyverse)
  • library(gganimate)

Upravljanje podacima

U ovoj fazi potrebno je filtrirati podatke kako bismo dobili top-10 zemalja svake godine. Dodajmo nekoliko stupaca koji će omogućiti prikazivanje legende za histogram.

gdp_tidy <- read_csv("./data/gdp_tidy.csv")

gdp_formatted %
group_by(year) %>%
# The * 1 makes it possible to have non-integer ranks while sliding
mutate(rank = rank(-value),
Value_rel = value/value[rank==1],
Value_lbl = paste0(" ",round(value/1e9))) %>%
group_by(country_name) %>%
filter(rank %
ungroup()

Izrada statičnih historograma

Sada kada imamo skup podataka u pravom formatu, započinjemo crtanje statičnih historograma. Osnovne informacije — top-10 zemalja s najvećim BDP-om tijekom odabranog vremenskog razdoblja. Grafikoni se crtaju za svaku godinu.

staticplot = ggplot(gdp_formatted, aes(rank, group = country_name,
fill = as.factor(country_name), color = as.factor(country_name))) +
geom_tile(aes(y = value/2,
height = value,
width = 0.9), alpha = 0.8, color = NA) +
geom_text(aes(y = 0, label = paste(country_name, " ")), vjust = 0.2, hjust = 1) +
geom_text(aes(y=value,label = Value_lbl, hjust=0)) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
legend.position="none",
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.grid.major.x = element_line(size=.1, color="grey"),
panel.grid.minor.x = element_line(size=.1, color="grey"),
plot.title=element_text(size=25, hjust=0.5, face="bold", colour="grey", vjust=-1),
plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="grey"),
plot.caption =element_text(size=8, hjust=0.5, face="italic", color="grey"),
plot.background=element_blank(),
plot.margin = margin(2,2,2,4, "cm"))

Izrada grafikona pomoću ggplot2 je vrlo jednostavna. Kao što možete vidjeti u prethodnom odlomku koda, postoje nekoliko ključnih elemenata s funkcijom theme(). Oni su potrebni kako bi se svi elementi animirali bez problema. Neki od njih se mogu i ne prikazivati po potrebi. Primjer: prikazuju se samo vertikalne linije mreže i legende, dok se naslovi osi i još nekoliko komponenti uklanjaju iz prikaza.

Animacija

Ključna funkcija ovdje je transition_states(), koja spaja pojedinačne statične grafikone. view_follow() se koristi za prikazivanje linija mreže.

anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'BDP po godini : {closest_state}',
subtitle = "Top 10 zemalja",
caption = "BDP u milijardama USD | Izvor podataka: Svjetska banka")

Renderiranje

Nakon što je animacija stvorena i spremljena u objektu anim, dolazi vrijeme za njezino vizualiziranje pomoću funkcije animate(). Renderer koji se koristi u animate() može biti različit ovisno o vrsti potrebne izlazne datoteke.

GIF

# For GIF

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = gifski_renderer("gganim.gif"))

MP4

# For MP4

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = ffmpeg_renderer()) -> for_mp4

anim_save("animation.mp4", animation = for_mp4)

Rezultat

Stvaramo animirane histograme pomoću R

Kao što vidimo, nije ništa komplicirano. Cjeli projekt je dostupan na mojem GitHubu, možete ga koristiti kako smatrate potrebnim.

Skillbox preporučuje:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster