рдПрдирд┐рдореЗрдЯреЗрдб рдмрд╛рд░ рдЪрд╛рд░реНрдЯ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕реАрдзреЗ рдкреЛрд╕реНрдЯ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЗрдЬреА рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрд░ рдФрд░ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо
"рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░" .рдЕрдиреБрд╕реНрдорд╛рд░рдХ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░рдЪрд╛рд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдирд╛рдорд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп 10 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рд╕рдВрдХреБрд▓
рд╣рдореЗрдВ R рдореЗрдВ рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- ggplot2
-
gganimate
рдпреЗ рджреЛрдиреЛрдВ рдмреЗрд╣рдж рдЬрд░реВрд░реА рд╣реИрдВ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ, рд╕рд░рдгреА рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдбреАрд╡рд░реНрд╕, рдЪреМрдХреАрджрд╛рд░ рдФрд░ рд╕реНрдХреЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдбреЗрдЯрд╛
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рдореВрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рд╡рд┐рд╢реНрд╡ рдмреИрдВрдХ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реЗ рдпрд╣рд╛рдБ рд╣реИрдВ -
рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ? рдирдореВрдиреЗ рдореЗрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ (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 рд╕рд╣рд┐рдд рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред
рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИрдВ
- рдкреБрд╕реНрддрдХрд╛рд▓рдп(рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд)
- рдкреБрд╕реНрддрдХрд╛рд▓рдп(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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд▓реЙрдЯ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдереАрдо() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрдИ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рд╣реИрдВред рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рднреА рддрддреНрд╡ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЪреЗрддрди рд╣реЛ рд╕рдХреЗрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг: рдХреЗрд╡рд▓ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЧреНрд░рд┐рдб рд░реЗрдЦрд╛рдПрдВ рдФрд░ рд▓реЗрдЬреЗрдВрдбреНрд╕ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╖ рд╢реАрд░реНрд╖рдХ рдФрд░ рдХрдИ рдЕрдиреНрдп рдШрдЯрдХ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдПрдиреАрдореЗрд╢рди
рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди_рд╕реНрдЯреЗрдЯреНрд╕() рд╣реИ, рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рд░ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИред 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")
рдкреНрд░рддрд┐рдкрд╛рджрди
рдПрдХ рдмрд╛рд░ рдЬрдм рдПрдиреАрдореЗрд╢рди рдмрди рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдиреАрдореЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдирд┐рдореЗрдЯ() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЬрд╛рддрд╛ рд╣реИред рдПрдирд┐рдореЗрдЯ() рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд░реЗрдВрдбрд░рд░ рдЖрд╡рд╢реНрдпрдХ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
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 )
рдкрд░рд┐рдгрд╛рдо
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:
- рджреЛ рд╡рд░реНрд╖реАрдп рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо
"рдореИрдВ рдПрдХ PRO рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ" .- рдСрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдо
"рд╢реБрд░реБрдЖрдд рд╕реЗ рд╕реА# рдбреЗрд╡рд▓рдкрд░" .- рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡рд░реНрд╖ рдкрд╛рдареНрдпрдХреНрд░рдо
"PHP рдбреЗрд╡рд▓рдкрд░ 0 рд╕реЗ PRO рддрдХ" .
рд╕реНрд░реЛрдд: www.habr.com