Π‘Γ¨ ΠΏΠΎΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈ ΡΡΠ°Π½ΡΠ²Π°Π°Ρ Π°Π½ΠΈΠΌΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ°Π±Π΅Π»ΠΈ ΡΠΎ ΡΡΠΎΠ»Π±ΠΎΠ²ΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ Π²Π³ΡΠ°Π΄Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ ΠΎΠ±ΡΠ°Π²Π° Π½Π° ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°. Π’ΠΈΠ΅ ΡΠ° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΠΎ ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π²ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΈ Π³ΠΎ ΠΏΡΠ°Π²Π°Ρ ΡΠΎΠ° ΡΠ°ΡΠ½ΠΎ. ΠΡΠ΄Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ R ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ.
Skillbox ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°: ΠΡΠ°ΠΊΡΠΈΡΠ΅Π½ ΠΊΡΡΡ
βΠΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ Π½Π° Python ΠΎΠ΄ Π½ΡΠ»Π°β .ΠΠΎΡΡΠ΅ΡΡΠ²Π°ΠΌΠ΅: Π·Π° ΡΠΈΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ Π½Π° βΠ₯Π°Π±Ρβ - ΠΏΠΎΠΏΡΡΡ ΠΎΠ΄ 10 ΡΡΠ±Π»ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΠΊΡΡΡ Skillbox ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΏΡΠΎΠΌΠΎΡΠΈΠ²Π½ΠΈΠΎΡ ΠΊΠΎΠ΄ βΠ₯Π°Π±Ρβ.
ΠΠ°ΠΊΠ΅ΡΠΈ
ΠΠΈ ΡΡΠ΅Π±Π°Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π²ΠΎ Π :
- ggplot2
-
Π³Π°Π½ΠΈΠΌΠ°Ρ
ΠΠ²ΠΈΠ΅ Π΄Π²Π΅ ΡΠ΅ ΠΊΡΠ°ΡΠ½ΠΎ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΈ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΡΠ΅Π΄Π½ΠΎ ΡΡΠ΅Π΄ΡΠ²Π°ΡΠ΅, ΡΠΈΡΡΠ°Ρ ΠΈ Π²Π°Π³Π° Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅, ΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π½ΠΈΠ·Π°ΡΠ° ΠΈ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°ΡΠ΅.
ΠΠΎΠ΄Π°ΡΠΎΡΠΈ
ΠΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ ΡΠ΅ ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ Π΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½Π° ΠΎΠ΄ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° Π‘Π²Π΅ΡΡΠΊΠ° Π±Π°Π½ΠΊΠ°. Π’ΡΠΊΠ° ΡΠ΅ -
ΠΠ°ΠΊΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° Π΅ ΠΎΠ²Π°? ΠΡΠΈΠΌΠ΅ΡΠΎΠΊΠΎΡ ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΠΠ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π·Π΅ΠΌΡΠΈ Π·Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π³ΠΎΠ΄ΠΈΠ½ΠΈ (ΠΎΠ΄ 2000 Π΄ΠΎ 2017 Π³ΠΎΠ΄ΠΈΠ½Π°).
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ
ΠΠ΅ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΠΊΠΎΠ΄ΠΎΡ ΠΎΠ±ΡΠ°Π²Π΅Π½ ΠΏΠΎΠ΄ΠΎΠ»Ρ Π·Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΠΎΡ ΡΠΎΡΠΌΠ°Ρ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠΈ Π±ΡΠΈΡΠ΅ΠΌΠ΅ ΠΈΠΌΠΈΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅, Π³ΠΈ ΠΏΡΠ΅ΡΠ²ΠΎΡΠ°ΠΌΠ΅ Π±ΡΠΎΠ΅Π²ΠΈΡΠ΅ Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ Π½Π° Π±ΡΠΎΠ΅Π²ΠΈ ΠΈ Π³ΠΈ ΠΏΡΠ΅ΡΠ²ΠΎΡΠ°ΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° collect(). Π‘Γ¨ ΡΡΠΎ Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΎ Π³ΠΎ Π·Π°ΡΡΠ²ΡΠ²Π°ΠΌΠ΅ Π²ΠΎ 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.
Π‘Π΅ Π²ΡΠΈΡΡΠ²Π°Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
- Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° (tidyverse)
- Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° (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 Π²Π΅Π±-ΡΠ°Π·Π²ΠΈΠ²Π°Ρβ .- ΠΠ½Π»Π°ΡΠ½ ΠΊΡΡΡ
βC# ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ ΠΎΠ΄ Π½ΡΠ»Π°β .- ΠΡΠ°ΠΊΡΠΈΡΠ΅Π½ Π³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΊΡΡΡ
βΠΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ Π½Π° PHP ΠΎΠ΄ 0 Π΄ΠΎ PROβ .
ΠΠ·Π²ΠΎΡ: www.habr.com