R istifadə edərək animasiya edilmiş histoqramlar yaradın

R istifadə edərək animasiya edilmiş histoqramlar yaradın

İstənilən veb-saytda birbaşa yazıya daxil edilə bilən cizgi zolağı diaqramları getdikcə populyarlaşır. Müəyyən bir zaman ərzində hər hansı xüsusiyyətlərdəki dəyişikliklərin dinamikasını nümayiş etdirirlər və bunu aydın şəkildə edirlər. R və ümumi paketlərdən istifadə edərək onları necə yaratmağa baxaq.

Skillbox tövsiyə edir: Praktik kurs "Sıfırdan Python tərtibçisi".

Xatırladırıq: "Habr" ın bütün oxucuları üçün - "Habr" promosyon kodundan istifadə edərək hər hansı bir Skillbox kursuna yazılarkən 10 000 rubl endirim.

Paketlər

R-də paketlərə ehtiyacımız var:

Bu ikisi son dərəcə zəruridir. Bundan əlavə, məlumatları idarə etmək, massivi təmizləmək və buna uyğun formatlaşdırmaq üçün səliqəli, qapıçı və tərəzi tələb olunacaq.

Məlumat

Bu layihədə istifadə edəcəyimiz orijinal məlumat dəsti Dünya Bankının saytından endirilib. Budurlar - Dünya Bankının Məlumatı. Eyni məlumatları, əgər hazır ehtiyacınız varsa, buradan endirmək olar layihə qovluqları.

Bu nə cür məlumatdır? Nümunə bir neçə il (2000-ci ildən 2017-ci ilə qədər) əksər ölkələrin ÜDM dəyərini ehtiva edir.

Verilənlərin emalı

Tələb olunan məlumat formatını hazırlamaq üçün aşağıda yerləşdirilən kodu istifadə edəcəyik. Sütun adlarını təmizləyirik, rəqəmləri rəqəm formatına çeviririk və toplama () funksiyasından istifadə edərək məlumatları çeviririk. Biz gdp_tidy.csv-də alınan hər şeyi sonrakı istifadə üçün saxlayırıq.

library(tidyverse)
library(janitor)

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

#select required columns

gdp <- gdp %>% select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

gdp_tidy <- gdp %>%
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")

Animasiya edilmiş histoqramlar

Onların yaradılması iki mərhələdən ibarətdir:

  • Ggplot2 istifadə edərək, faktiki histoqramların tam dəstini tərtib etmək.
  • gganimate istifadə edərək istədiyiniz parametrlərlə statik histoqramları canlandırın.

Son addım animasiyanı istədiyiniz formatda, o cümlədən GIF və ya MP4 formatında göstərməkdir.

Kitabxanalar yüklənir

  • kitabxana (səliqəli)
  • kitabxana(gganimate)

Məlumatların idarə olunması

Bu addımda, hər il üçün ilk 10 ölkəni əldə etmək üçün məlumatları süzgəcdən keçirməlisiniz. Histoqram üçün əfsanə göstərməyə imkan verəcək bir neçə sütun əlavə edək.

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

gdp_formatted <- gdp_tidy %>%
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 <=10) %>%
ungroup()

Statik histoqramların qurulması

İndi tələb olunan formatda məlumat paketimiz var, biz statik histoqramları çəkməyə başlayırıq. Əsas məlumat - seçilmiş vaxt intervalı üçün maksimum ÜDM-ə malik ilk 10 ölkə. Hər il üçün qrafiklər yaradırıq.

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

Ggplot2 istifadə edərək süjetlər yaratmaq çox sadədir. Yuxarıdakı kod bölməsində gördüyünüz kimi theme() funksiyası ilə bağlı bir neçə əsas məqam var. Bütün elementlərin problemsiz canlanması üçün onlar lazımdır. Lazım gələrsə, onlardan bəziləri göstərilməyə bilər. Nümunə: Yalnız şaquli şəbəkə xətləri və əfsanələr çəkilir, lakin ox başlıqları və bir neçə digər komponentlər ərazidən çıxarılır.

canlandırma

Burada əsas funksiya keçid_states() funksiyasıdır, o, ayrı-ayrı statik qrafikləri birləşdirir. view_follow() tor xətləri çəkmək üçün istifadə olunur.

anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP per Year : {closest_state}',
subtitle = "Top 10 Countries",
caption = "GDP in Billions USD | Data Source: World Bank Data")

Göstərir

Animasiya yaradıldıqdan və anim obyektində saxlandıqdan sonra onu animate() funksiyasından istifadə edərək göstərməyin vaxtı gəldi. animate()-də istifadə olunan renderer tələb olunan çıxış faylının növündən asılı olaraq fərqli ola bilər.

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 )

Nəticə

R istifadə edərək animasiya edilmiş histoqramlar yaradın

Gördüyünüz kimi, mürəkkəb bir şey yoxdur. Bütün layihə mövcuddur mənim GitHub, istədiyiniz kimi istifadə edə bilərsiniz.

Skillbox tövsiyə edir:

Mənbə: www.habr.com

Добавить комментарий