ืชืจืฉืืื ืขืืืืืช ืืื ืคืฉืื ืฉื ืืชื ืืืืืืข ืืฉืืจืืช ืืคืืกื ืืื ืืชืจ ืืืคืืื ืคืืคืืืจืืื ืืืชืจ ืืืืชืจ. ืื ืืฆืืืื ืืช ืืืื ืืืงื ืฉื ืฉืื ืืืื ืืื ืืืคืืื ืื ืืืืจื ืืื ืืกืืื ืืขืืฉืื ืืืช ืืืืจืืจ. ืืืื ื ืจืื ืืืฆื ืืืฆืืจ ืืืชื ืืืืฆืขืืช R ืืืืืืืช ืื ืจืืืช.
Skillbox ืืืืืฆื: ืงืืจืก ืืขืฉื
"ืืคืชื Python ืืืคืก" .ืื ื ืืืืืจืื: ืืื ืงืืจืื Habr - ืื ืื ืฉื 10 ืจืืื ืืขืช ืืจืฉืื ืืื ืงืืจืก Skillbox ืืืืฆืขืืช ืงืื ืืืืื ืฉื Habr.
ืืืืืืช
ืื ืื ื ืฆืจืืืื ืืืืืืช ื-R:
- ggplot2
-
gganimate
ืฉื ื ืืื ื ืืืฆืื ืืืืชืจ. ืื ืืกืฃ, ืืืืจืฉื tidyverse, ืฉืจืช ืืืืื ืืื ืื ืืืื ืื ืชืื ืื, ื ืืงืื ืืืขืจื ืืคืจืืื ืืืชืื.
ื ืชืื ืื
ืืขืจื ืื ืชืื ืื ืืืงืืจื ืื ื ืฉืชืืฉ ืืคืจืืืงื ืื ืืืืจื ืืืชืจ ืืื ืง ืืขืืืื. ืื ื ืื -
ืืืื ืกืื ืืืืข ืื? ืืืืื ืืืื ืืช ืขืจื ืืชื"ื ืฉื ืจืื ืืืืื ืืช ืืืกืคืจ ืฉื ืื (ื-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.
ืืืขื ืกืคืจืืืช
- ืกืคืจืืื (ืืกืืืจืื)
- library(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 )
ืชืืฆืื
ืืคื ืฉืืชื ืืืื ืืจืืืช, ืฉืื ืืืจ ืื ืืกืืื. ืืคืจืืืงื ืืืื ืืืื ื
Skillbox ืืืืืฆื:
- ืงืืจืก ืืขืฉื ืฉื ืชืืื
"ืื ื ืืคืชื ืืชืจืื PRO" .- ืงืืจืก ืืงืืื
"ืืคืชื C# ืืืคืก" .- ืงืืจืก ืืขืฉื ืื ืฉื ื
"ืืคืชื PHP ื-0 ื-PRO" .
ืืงืืจ: www.habr.com