Krijimi i histogramave të animuara me ndihmën e R

Krijimi i histogramave të animuara me ndihmën e R

Histogramat e animuar që mund të integrohen direkt në publikime në çdo faqe webi po bëhen gjithnjë e më të njohura. Ato shfaqin dinamikën e ndryshimeve të karakteristikave të ndryshme për një periudhë të caktuar kohe dhe e bëjnë këtë në një mënyrë vizuale. Le të shohim se si t'i krijojmë ato me ndihmën e R dhe paketave universale.

Skillbox rekomandon: Kurs praktik "Zhvillues Python nga zero".

KujtojmĂ«: pĂ«r tĂ« gjithĂ« lexuesit e «Habra» — zbritje prej 10,000 rublesh pĂ«r regjistrimin nĂ« çdo kurs Skillbox me kodin promovues «Habr».

Paketa

Na duhen paketat në R:

Këto dy janë thelbësore. Gjithashtu, do të nevojiten tidyverse, janitor dhe scales për menaxhimin e të dhënave, pastrimin e grupeve dhe formatimin përkatës.

Të dhënat

Seti origjinal i tĂ« dhĂ«nave qĂ« do tĂ« pĂ«rdorim nĂ« kĂ«tĂ« projekt merret nga faqja e BankĂ«s BotĂ«rore. Ja ata — TĂ« DhĂ«nat e BankĂ«s BotĂ«rore. TĂ« njĂ«jtat tĂ« dhĂ«na, nĂ«se ju nevojiten nĂ« formatin e gatshĂ«m, mund tĂ« shkarkohen nga folderi i projektit.

ÇfarĂ« informacioni Ă«shtĂ« kjo? Mostra pĂ«rmban vlerat e PBB-sĂ« pĂ«r shumicĂ«n e vendeve pĂ«r disa vite (nga 2000 nĂ« 2017).

Përpunimi i të dhënave

Ne do tĂ« pĂ«rdorim kodin e vendosur mĂ« poshtĂ« pĂ«r tĂ« pĂ«rgatitur formatin e nevojshĂ«m tĂ« tĂ« dhĂ«nave. Pastroni emrat e kolonave, shndĂ«rroni numrat nĂ« format numerik dhe konvertoni tĂ« dhĂ«nat me funksionin gather(). Çdo gjĂ« qĂ« fitohet, ruhet nĂ« gdp_tidy.csv pĂ«r pĂ«rdorim tĂ« mĂ«tejshĂ«m.

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")

Histogramat e animuar

Krijimi i tyre kërkon dy etapa:

  • NdĂ«rtimi i njĂ« seti tĂ« plotĂ« tĂ« histogramave statike me pĂ«rdorimin e ggplot2.
  • Animimi i histogramave statike me parametrat e dĂ«shiruara pĂ«rmes gganimate.

Hapi pĂ«rfundimtar — renderimi i animacionit nĂ« formatin e dĂ«shiruar, duke pĂ«rfshirĂ« GIF ose MP4.

Ngarkimi i biblioteka

  • biblioteka(tidyverse)
  • library(gganimate)

Menaxhimi i të dhënave

Në këtë hap duhet të filtrojmë të dhënat për të marrë 10 vendet kryesore për çdo vit. Do të shtojmë disa kolona që do të lejojnë shfaqjen e legjendës për histogramin.

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()

Ndërtimi i histogramave statike

Tani qĂ« kemi paketen e tĂ« dhĂ«nave nĂ« formatin e nevojshĂ«m, fillojmĂ« vizatimin e histogramave statike. Informacioni bazĂ« — 10 vendet kryesore me PBB-nĂ« mĂ« tĂ« lartĂ« pĂ«r periudhĂ«n e zgjedhur. Grafikat do tĂ« ndĂ«rtohen pĂ«r çdo vit.

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"))

Të ndërtosh grafika me ggplot2 është shumë e thjeshtë. Siç mund ta shihni në fragmentin e kodit më sipër, ka disa aspekte kyçe me funksionin theme (). Ato janë të nevojshme për të garantuar që të gjithë elementet të animohen pa probleme. Disa prej tyre mund të mos shfaqen sipas nevojës. Shembull: vizatohen vetëm vijat vertikale të gridit dhe legjendat, ndërsa titujt e boshtit dhe disa komponente të tjera hiqen nga skena.

Animacioni

Funksioni kyç këtu është transition_states(), i cili bashkon grafikët statikë të veçanta. view_follow () përdoret për të vizatuar vijat e gridit.

anim = staticplot + transition_states(viti, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP për Vit: {closest_state}',
subtitle = "10 Shtetet Kryesore",
caption = "GDP në Miliarda USD | Burimi i Dhënave: Të Dhëna nga Banka Botërore")

Rendering

Pasi animacioni është krijuar dhe ruajtur në objektin anim, arrin koha për ta vizualizuar atë duke përdorur funksionin animate (). Renderer-i që përdoret në animate () mund të jetë i ndryshëm në varësi të llojit të skedarit të daljes që kërkohet.

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 )

Rezultati

Krijimi i histogramave të animuara me ndihmën e R

Siç e shohim, nuk është asgjë e komplikuar. I gjithë projekti është i disponueshëm në GitHub-in tim, mund ta përdorni ashtu siç e shihni të arsyeshme.

Skillbox rekomandon:

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster