ืฉืึทืคึฟืŸ ืึทื ื™ืžืึทื˜ืขื“ ื”ื™ืกื˜ืึทื’ืจืึทืžืก ื ื™ืฆืŸ ืจ

ืฉืึทืคึฟืŸ ืึทื ื™ืžืึทื˜ืขื“ ื”ื™ืกื˜ืึทื’ืจืึทืžืก ื ื™ืฆืŸ ืจ

ืึทื ื™ืžืึทื˜ืขื“ ื‘ืึทืจ ื˜ืฉืึทืจืฅ ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืขืžื‘ืขื“ื™ื“ ื’ืœื™ื™ึทืš ืื™ืŸ ืึท ืคึผืึธืกื˜ืŸ ืื•ื™ืฃ ืงื™ื™ืŸ ื•ื•ืขื‘ื–ื™ื™ื˜ืœ, ื•ื•ืขืจืŸ ื™ื ืงืจื™ืกื™ื ื’ืœื™ ืคืึธืœืงืก. ื–ื™ื™ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ื“ื™ื ืึทืžื™ืง ืคื•ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ืงื™ื™ืŸ ืงืขืจืึทืงื˜ืขืจื™ืกื˜ื™ืงืก ืื™ื‘ืขืจ ืึท ื–ื™ื›ืขืจ ืฆื™ื™ื˜ ืื•ืŸ ื˜ืึธืŸ ื“ืึธืก ืงืœืืจ. ืœืึธืžื™ืจ ื–ืขืŸ ื•ื•ื™ ืฆื• ืฉืึทืคึฟืŸ ื–ื™ื™ ืžื™ื˜ R ืื•ืŸ ื“ื–ืฉืึทื ืขืจื™ืง ืคึผืึทืงืึทื“ื–ืฉืึทื–.

Skillbox ืจืขืงืึทืžืขื ื“ื–: ืคึผืจืึทืงื˜ื™ืฉ ืงื•ืจืก "Python ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืคึฟื•ืŸ ืงืจืึทืฆืŸ".

ืžื™ืจ ื“ืขืจืžืึธื ืขืŸ ืื™ืจ: ืคึฟืึทืจ ืึทืœืข ืœื™ื™ืขื ืขืจ ืคื•ืŸ "ื”ื‘ืจ" - ืึท ืึทืจืึธืคึผืจืขื›ืขื ืขืŸ ืคื•ืŸ 10 ืจื•ื‘ืœ ื•ื•ืขืŸ ืื™ืจ ืคืึทืจืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ืงื™ื™ืŸ ืกืงื™ืœื‘ืึธืงืก ืงื•ืจืก ื ื™ืฆืŸ ื“ื™ ืคึผืขืจืžืึธื•ืฉืึทื ืึทืœ ืงืึธื“ "ื”ื‘ืจ".

ืคึผืึทืงืงืึทื’ืขืก

ืžื™ืจ ื“ืึทืจืคึฟืŸ ืคึผืึทืงืึทื“ื–ืฉืึทื– ืื™ืŸ R:

ื“ื™ ืฆื•ื•ื™ื™ ื–ืขื ืขืŸ ื’ืึธืจ ื ื™ื™ื˜ื™ืง. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ื˜ื™ื“ื™ื•ื•ืขืจืกืข, ืกื˜ืจืึธื–ืฉ ืื•ืŸ ื•ื•ืึธื’ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคืืจืœืื ื’ื˜ ืฆื• ืคื™ืจืŸ ื“ื™ ื“ืึทื˜ืŸ, ืจื™ื™ื ื™ืงืŸ ื“ื™ ืžืขื ื’ืข ืื•ืŸ ืคึฟืึธืจืžืึทื˜ ืึทืงืึธืจื“ื™ื ื’ืœื™.

ื“ืึทื˜ืข

ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ื“ืึทื˜ืึทืกืขื˜ ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ืื™ืŸ ื“ืขื ืคึผืจื•ื™ืขืงื˜ ืื™ื– ื“ืึทื•ื ืœืึธื•ื“ื™ื“ ืคื•ืŸ ื“ื™ ื•ื•ืขืœื˜ ื‘ืึทื ืง ื•ื•ืขื‘ื–ื™ื™ื˜ืœ. ื“ืึธ ื–ื™ื™ ื–ืขื ืขืŸ - WorldBank Data. ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื“ืึทื˜ืŸ, ืื•ื™ื‘ ืื™ืจ ื“ืึทืจืคึฟืŸ ืขืก ืคืึทืจื˜ื™ืง, ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ืึทื•ื ืœืึธื•ื“ื™ื“ ืคึฟื•ืŸ ืคึผืจื•ื™ืขืงื˜ ืคืึธืœื“ืขืจืก.

ื•ื•ืึธืก ืžื™ืŸ ืคื•ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื™ื– ื“ืึธืก? ื“ืขืจ ืžื•ืกื˜ืขืจ ื›ึผื•ืœืœ ื“ื™ ื’ื“ืคึผ ื•ื•ืขืจื˜ ืคื•ืŸ ืจื•ื‘ึฟ ืœืขื ื“ืขืจ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ื™ืึธืจืŸ (ืคื•ืŸ 2000 ืฆื• 2017).

ื“ืึทื˜ืŸ ืคึผืจืึทืกืขืกื™ื ื’

ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ื“ื™ ืงืึธื“ ืคึผืึธืกื˜ืขื“ ืื•ื ื˜ืŸ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ื“ื™ ืคืืจืœืื ื’ื˜ ื“ืึทื˜ืŸ ืคึฟืึธืจืžืึทื˜. ืžื™ืจ ื•ื™ืกืžืขืงืŸ ื“ื™ ื–ื™ื™ึทืœ ื ืขืžืขืŸ, ื•ื•ืขื ื“ืŸ ื“ื™ ื ื•ืžืขืจืŸ ืื™ืŸ ืึท ื ื•ืžืขืจ ืคึฟืึธืจืžืึทื˜ ืื•ืŸ ื’ืขืจ ื“ื™ ื“ืึทื˜ืŸ ืžื™ื˜ ื“ื™ ืคื•ื ืงืฆื™ืข ืฆื•ื ื•ื™ืคืงื•ื (). ืžื™ืจ ืจืึทื˜ืขื•ื•ืขืŸ ืึทืœืฅ ื•ื•ืึธืก ืื™ื– ื‘ืืงื•ืžืขืŸ ืื™ืŸ 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.

ืœืึธื•ื“ื™ื ื’ ืœื™ื™ื‘ืจืขืจื™ื–

  • ื‘ื™ื‘ืœื™ืึธื˜ืขืง (ื˜ื™ื“ื™ื•ื•ืขืจืกืข)
  • ื‘ื™ื‘ืœื™ืึธื˜ืขืง (ื’ืึทื ื™ืžืึทื˜ืข)

ื“ืึทื˜ืึท ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’

ืื™ืŸ ื“ืขื ืฉืจื™ื˜, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคื™ืœื˜ืขืจ ื“ื™ ื“ืึทื˜ืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืฉืคึผื™ืฅ 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 ืื™ื– ื–ื™ื™ืขืจ ืคึผืฉื•ื˜. ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืื™ืŸ ื“ื™ ืงืึธื“ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืื•ื™ื‘ืŸ, ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืฉืœื™ืกืœ ืคื•ื ืงื˜ืŸ ืžื™ื˜ ื“ื™ ื˜ืขืžืข () ืคึฟื•ื ืงืฆื™ืข. ื–ื™ื™ ื–ืขื ืขืŸ ื ื™ื™ื˜ื™ืง ืึทื–ื•ื™ ืึทื– ืึทืœืข ืขืœืขืžืขื ื˜ืŸ ื•ืคืœืขื‘ืŸ ืึธืŸ ืคืจืื‘ืœืขืžืขืŸ. ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ ืงืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื–ืŸ ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง. ื‘ื™ื™ึทืฉืคึผื™ืœ: ื‘ืœื•ื™ื– ื“ื™ ื•ื•ืขืจื˜ื™ืงืึทืœ ื’ืจื™ื“ ืฉื•ืจื•ืช ืื•ืŸ ืื’ื“ื•ืช ื–ืขื ืขืŸ ืฆื™ืขืŸ, ืึธื‘ืขืจ ื“ื™ ืึทืงืก ื˜ื™ื˜ืœืขืŸ ืื•ืŸ ืขื˜ืœืขื›ืข ืื ื“ืขืจืข ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ื–ืขื ืขืŸ ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ ืคื•ืŸ ื“ืขืจ ื’ืขื’ื ื˜.

ืึทื ืึทืžื™ื™ืฉืึทืŸ

ื“ืขืจ ืฉืœื™ืกืœ ืคึฟื•ื ืงืฆื™ืข ื“ืึธ ืื™ื– ื™ื‘ืขืจื’ืึทื ื’_ืกื˜ืึทื˜ืขืก (), ืขืก ืกื˜ื™ื˜ืฉื™ื– ืฆื•ื–ืึทืžืขืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืกื˜ืึทื˜ื™ืง ื’ืจืึทืคืก. 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 () ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึทื ื“ืขืจืฉ ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื“ื™ ื˜ื™ืคึผ ืคื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜ ื˜ืขืงืข ืคืืจืœืื ื’ื˜.

ื’ื™ืฃ

# For GIF

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

ืžืคึผืงืกื ื•ืžืงืก

# For MP4

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

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

ื˜ืึทื›ืœืขืก

ืฉืึทืคึฟืŸ ืึทื ื™ืžืึทื˜ืขื“ ื”ื™ืกื˜ืึทื’ืจืึทืžืก ื ื™ืฆืŸ ืจ

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ื’ืึธืจื ื™ืฉื˜ ืงืึธืžืคึผืœื™ืฆื™ืจื˜. ื“ื™ ื’ืื ืฆืข ืคึผืจื•ื™ืขืงื˜ ืื™ื– ื‘ื ื™ืžืฆื ืื™ืŸ ืžื™ื™ืŸ ื’ื™ื˜ื”ื•ื‘, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ืขืก ื•ื•ื™ ืื™ืจ ื•ื•ื™ืœื˜.

Skillbox ืจืขืงืึทืžืขื ื“ื–:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’