ืึทื ืืืึทืืขื ืืึทืจ ืืฉืึทืจืฅ ืืืึธืก ืงืขื ืขื ืืืื ืขืืืขืืื ืืืืึทื ืืื ืึท ืคึผืึธืกืื ืืืืฃ ืงืืื ืืืขืืืืืื, ืืืขืจื ืื ืงืจืืกืื ืืื ืคืึธืืงืก. ืืื ืืืืึทืื ืื ืืื ืึทืืืง ืคืื ืขื ืืขืจืื ืืขื ืืื ืงืืื ืงืขืจืึทืงืืขืจืืกืืืงืก ืืืืขืจ ืึท ืืืืขืจ ืฆืืื ืืื ืืึธื ืืึธืก ืงืืืจ. ืืึธืืืจ ืืขื ืืื ืฆื ืฉืึทืคึฟื ืืื ืืื R ืืื ืืืฉืึทื ืขืจืืง ืคึผืึทืงืึทืืืฉืึทื.
Skillbox ืจืขืงืึทืืขื ืื: ืคึผืจืึทืงืืืฉ ืงืืจืก
"Python ืืขืืืขืืึธืคึผืขืจ ืคึฟืื ืงืจืึทืฆื" .ืืืจ ืืขืจืืึธื ืขื ืืืจ: ืคึฟืึทืจ ืึทืืข ืืืืขื ืขืจ ืคืื "ืืืจ" - ืึท ืึทืจืึธืคึผืจืขืืขื ืขื ืคืื 10 ืจืืื ืืืขื ืืืจ ืคืึทืจืฉืจืืึทืื ืืื ืงืืื ืกืงืืืืึธืงืก ืงืืจืก ื ืืฆื ืื ืคึผืขืจืืึธืืฉืึทื ืึทื ืงืึธื "ืืืจ".
ืคึผืึทืงืงืึทืืขืก
ืืืจ ืืึทืจืคึฟื ืคึผืึทืงืึทืืืฉืึทื ืืื R:
- ggplot2
-
ืืึทื ืืืึทืืข
ืื ืฆืืืื ืืขื ืขื ืืึธืจ ื ืืืืืง. ืืื ืึทืืืฉืึทื, ืืืืืืืขืจืกืข, ืกืืจืึธืืฉ ืืื ืืืึธื ืืืขื ืืืื ืคืืจืืื ืื ืฆื ืคืืจื ืื ืืึทืื, ืจืืื ืืงื ืื ืืขื ืืข ืืื ืคึฟืึธืจืืึทื ืึทืงืึธืจืืื ืืื.
ืืึทืืข
ืืขืจ ืึธืจืืืื ืขื ืืึทืืึทืกืขื ืืืจ ืืืขืื ื ืืฆื ืืื ืืขื ืคึผืจืืืขืงื ืืื ืืึทืื ืืึธืืืื ืคืื ืื ืืืขืื ืืึทื ืง ืืืขืืืืืื. ืืึธ ืืื ืืขื ืขื -
ืืืึธืก ืืื ืคืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืื ืืึธืก? ืืขืจ ืืืกืืขืจ ืึผืืื ืื ืืืคึผ ืืืขืจื ืคืื ืจืืึฟ ืืขื ืืขืจ ืคึฟืึทืจ ืขืืืขืืข ืืึธืจื (ืคืื 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 ืจืขืงืึทืืขื ืื:
- ืฆืืืื-ืืึธืจ ืคึผืจืึทืงืืืฉ ืงืืจืก
"ืืื ืืื ืึท ืคึผืจืึธ ืืืขื ืืขืืืขืืึธืคึผืขืจ" .- ืึธื ืืืื ืงืืจืก
"C# ืืขืืืขืืึธืคึผืขืจ ืคึฟืื ืงืจืึทืฆื" .- ืคึผืจืึทืงืืืฉ ืืึธืจ ืงืืจืก
"PHP ืืขืืืขืืึธืคึผืขืจ ืคึฟืื 0 ืฆื ืคึผืจืึธ" .
ืืงืืจ: www.habr.com