R Kullanarak Animasyonlu Histogramlar Oluşturun

R Kullanarak Animasyonlu Histogramlar Oluşturun

Herhangi bir web sitesindeki bir gönderiye doğrudan yerleştirilebilen animasyonlu çubuk grafikler giderek daha popüler hale geliyor. Herhangi bir özellikteki değişimin dinamiklerini belirli bir süre içinde gösterirler ve bunu net bir şekilde yaparlar. R ve genel paketleri kullanarak bunları nasıl oluşturacağımızı görelim.

Skillbox şunları önerir: pratik kurs "Sıfırdan Python geliştiricisi".

Hatırlatıyoruz: tüm "Habr" okuyucuları için - "Habr" promosyon kodunu kullanarak herhangi bir Skillbox kursuna kayıt olurken 10 ruble indirim.

paketler

R'deki paketlere ihtiyacımız var:

Bu ikisi son derece gerekli. Ayrıca verileri yönetmek, diziyi temizlemek ve buna göre biçimlendirmek için tidyverse, hademe ve teraziye ihtiyaç duyulacaktır.

Veri

Bu projede kullanacağımız orijinal veri seti Dünya Bankası web sitesinden indirilmiştir. İşte buradalar - Dünya Bankası Verileri. Aynı veriler, eğer hazır olarak ihtiyacınız varsa, şuradan indirilebilir: proje klasörleri.

Bu ne tür bir bilgi? Örnek, çoğu ülkenin birkaç yıldaki (2000'den 2017'ye) GSYİH değerini içermektedir.

Veri işleme

Gerekli veri formatını hazırlamak için aşağıda yayınlanan kodu kullanacağız. Sütun adlarını temizliyoruz, sayıları sayı biçimine dönüştürüyoruz ve toplama() işlevini kullanarak verileri dönüştürüyoruz. Alınan her şeyi daha sonra kullanmak üzere gdp_tidy.csv dosyasına kaydediyoruz.

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

Animasyonlu histogramlar

Yaratılışları iki aşama gerektirir:

  • Ggplot2 kullanarak gerçek histogramların tam bir setini çizmek.
  • Gganimate'i kullanarak statik histogramları istenen parametrelerle canlandırın.

Son adım, animasyonu GIF veya MP4 dahil olmak üzere istenen formatta oluşturmaktır.

Kitaplıklar yükleniyor

  • kitaplık (tidyverse)
  • kütüphane(gganimate)

Veri yönetimi

Bu adımda, her yılın ilk 10 ülkesine ulaşmak için verileri filtrelemeniz gerekir. Histogram için bir açıklama görüntülememize olanak sağlayacak birkaç sütun ekleyelim.

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 histogramlar oluşturma

Artık gerekli formatta bir veri paketimiz olduğuna göre statik histogramlar çizmeye başlıyoruz. Temel bilgiler - seçilen zaman aralığında maksimum GSYİH'ye sahip ilk 10 ülke. Her yıl için grafikler oluşturuyoruz.

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'yi kullanarak grafikler oluşturmak çok basittir. Yukarıdaki kod bölümünde görebileceğiniz gibi theme() işleviyle ilgili birkaç önemli nokta vardır. Tüm unsurların sorunsuz bir şekilde canlanması için gereklidirler. Gerektiğinde bazıları görüntülenmeyebilir. Örnek: Yalnızca dikey ızgara çizgileri ve açıklamalar çizilir, ancak eksen başlıkları ve diğer bazı bileşenler alandan kaldırılır.

animasyon

Buradaki anahtar işlev,transition_states()'tir, ayrı statik grafikleri bir araya getirir. view_follow() ızgara çizgileri çizmek için kullanılır.

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

Rendering

Animasyon oluşturulup anim nesnesinde saklandıktan sonra, onu animate() işlevini kullanarak oluşturmanın zamanı gelir. animate()'te kullanılan oluşturucu, gereken çıktı dosyasının türüne bağlı olarak farklı olabilir.

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 )

sonuç

R Kullanarak Animasyonlu Histogramlar Oluşturun

Gördüğünüz gibi karmaşık bir şey yok. Projenin tamamı mevcut GitHub'ım, uygun gördüğünüz şekilde kullanabilirsiniz.

Skillbox şunları önerir:

Kaynak: habr.com

Yorum ekle