R ашиглан хөдөлгөөнт гистограмм үүсгэх

R ашиглан хөдөлгөөнт гистограмм үүсгэх

Аливаа вэбсайт дээрх нийтлэлд шууд оруулах боломжтой хөдөлгөөнт баганан графикууд улам бүр түгээмэл болж байна. Тэд тодорхой хугацааны туршид аливаа шинж чанарын өөрчлөлтийн динамикийг харуулдаг бөгөөд үүнийг тодорхой хийдэг. R болон ерөнхий багцуудыг ашиглан тэдгээрийг хэрхэн үүсгэхийг харцгаая.

Skillbox зөвлөж байна: Практик курс "Эхнээс нь Python хөгжүүлэгч".

Бид танд сануулж байна: "Хабр" -ын бүх уншигчдад - "Habr" сурталчилгааны кодыг ашиглан Skillbox-ын аль ч курст бүртгүүлэхдээ 10 рублийн хөнгөлөлт.

Багцууд

Бидэнд R-д багц хэрэгтэй:

Энэ хоёр маш хэрэгтэй. Нэмж дурдахад, өгөгдлийг удирдах, массивыг цэвэрлэж, форматлахын тулд эмх цэгцтэй, цэвэрлэгч, жинлүүр шаардлагатай болно.

мэдээ

Энэхүү төсөлд бидний ашиглах анхны мэдээллийн багцыг Дэлхийн банкны вэбсайтаас татаж авсан болно. Тэд энд байна - Дэлхийн банкны мэдээлэл. Үүнтэй ижил өгөгдлийг, хэрэв танд бэлэн байгаа бол эндээс татаж авч болно төслийн хавтаснууд.

Энэ ямар мэдээлэл вэ? Түүвэрт ихэнх улс орны хэдэн жилийн (2000-2017 он) ДНБ-ий үнэ цэнийг оруулсан болно.

Өгөгдөл боловсруулах

Бид шаардлагатай өгөгдлийн форматыг бэлтгэхийн тулд доор байрлуулсан кодыг ашиглана. Бид баганын нэрийг цэвэрлэж, тоонуудыг тооны формат болгон хувиргаж, gather() функцийг ашиглан өгөгдлийг хөрвүүлдэг. Бид gdp_tidy.csv-д хүлээн авсан бүх зүйлийг цаашид ашиглах зорилгоор хадгалдаг.

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

Хөдөлгөөнт гистограмууд

Тэдгээрийг бүтээхэд хоёр үе шат шаардлагатай:

  • ggplot2 ашиглан бодит гистограммуудын бүрэн багцыг зурах.
  • gganimate ашиглан статик гистограммыг хүссэн параметрүүдээр хөдөлгөөнтэй болгоно.

Эцсийн алхам бол хөдөлгөөнт дүрсийг GIF эсвэл MP4 зэрэг хүссэн форматаар гаргах явдал юм.

Номын сангуудыг ачаалж байна

  • номын сан (эмх цэгц)
  • номын сан(gganimate)

Өгөгдлийн менежмент

Энэ алхамд та жил бүрийн шилдэг 10 улсыг авахын тулд өгөгдлийг шүүж үзэх хэрэгтэй. Гистограмын домог харуулах боломжийг олгох хэд хэдэн багана нэмье.

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

Статик гистограмм бүтээх

Одоо бид шаардлагатай форматтай өгөгдлийн багцтай болсон тул статик гистограмм зурж эхэлнэ. Үндсэн мэдээлэл - сонгосон хугацааны интервалд хамгийн их ДНБ-тэй эхний 10 улс. Бид жил бүр график үүсгэдэг.

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 ашиглан график үүсгэх нь маш энгийн. Дээрх код хэсгээс харж байгаачлан theme() функцтэй холбоотой хэд хэдэн гол зүйл байдаг. Эдгээр нь бүх элементүүд асуудалгүйгээр амилахын тулд зайлшгүй шаардлагатай. Шаардлагатай бол заримыг нь харуулахгүй байж болно. Жишээ: Зөвхөн босоо шугам, тэмдэглэгээг зурсан боловч тэнхлэгийн гарчиг болон бусад хэд хэдэн бүрэлдэхүүн хэсгүүдийг талбайгаас хассан.

хөдөлгөөнт дүрс

Энд байгаа гол функц нь transition_states() бөгөөд тусдаа статик графикуудыг хооронд нь холбодог. view_follow() нь сүлжээний шугам зурахад ашиглагддаг.

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

Үзүүлж байна

Хөдөлгөөнт дүрсийг үүсгэн, animate() функцийг ашиглан дүрслэх цаг нь анимацийн объектод хадгалагдсан болно. animate()-д ашигласан рендер нь шаардлагатай гаралтын файлын төрлөөс хамаарч өөр байж болно.

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 )

үр дүн

R ашиглан хөдөлгөөнт гистограмм үүсгэх

Таны харж байгаагаар ямар ч төвөгтэй зүйл байхгүй. Төслийг бүхэлд нь эндээс авах боломжтой миний GitHub, та үүнийг хүссэнээрээ ашиглаж болно.

Skillbox зөвлөж байна:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх