ΠΠ½ΠΈΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠΎΠΈΡΡ ΠΏΡΡΠΌΠΎ Π² ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ°ΠΉΡΠ΅, ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π²ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌΠΈ. ΠΠ½ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π»ΡΠ±ΡΡ
Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈΡ
ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ R ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
Skillbox ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ: ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΡΡΡ
Β«Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ Π½ΡΠ»ΡΒ» .ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ: Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Β«Π₯Π°Π±ΡΠ°Β» β ΡΠΊΠΈΠ΄ΠΊΠ° 10 000 ΡΡΠ±Π»Π΅ΠΉ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΊΡΡΡ Skillbox ΠΏΠΎ ΠΏΡΠΎΠΌΠΎΠΊΠΎΠ΄Ρ Β«Π₯Π°Π±ΡΒ».
ΠΠ°ΠΊΠ΅ΡΡ
ΠΠ°ΠΌ Π½ΡΠΆΠ½Ρ ΠΏΠ°ΠΊΠ΅ΡΡ Π² R:
- ggplot2
-
gganimate
ΠΡΠΈ Π΄Π²Π° ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ tidyverse, janitor ΠΈ scales Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΎΡΠΈΡΡΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
ΠΠ°Π½Π½ΡΠ΅
ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Ρ ΡΠ°ΠΉΡΠ° ΠΡΠ΅ΠΌΠΈΡΠ½ΠΎΠ³ΠΎ Π±Π°Π½ΠΊΠ°. ΠΠΎΡ ΠΎΠ½ΠΈ β
Π§ΡΠΎ ΡΡΠΎ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ? ΠΡΠ±ΠΎΡΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΠΠ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΡΡΠ°Π½ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ (Ρ 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(tidyverse)
- 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")
Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π° ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ anim, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ΠΌΡ Π΅Π΅ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ 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Β» .- ΠΠ½Π»Π°ΠΉΠ½-ΠΊΡΡΡ
Β«Π‘#-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ Π½ΡΠ»ΡΒ» .- ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΊΡΡΡ
Β«PHP-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ 0 Π΄ΠΎ PROΒ» .
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com