Skip to content

Instantly share code, notes, and snippets.

@tukachev
Created March 2, 2022 00:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tukachev/9ed0a0cadfea2183e43d8e15feeda3ce to your computer and use it in GitHub Desktop.
Save tukachev/9ed0a0cadfea2183e43d8e15feeda3ce to your computer and use it in GitHub Desktop.
library(rvest)
library(ggplot2)
library(stringr)
url <- "https://ru.wikipedia.org/wiki/Часы_Судного_дня"
df <- url %>%
read_html(url) %>%
html_node("table") %>%
html_table()
# Небольшие преобразования:
df$Причина <- str_trim(df$Причина)
df$Год <- as.numeric(df$Год)
df$`Минут осталось` <- as.numeric(str_replace(df$`Минут осталось`, "\\:", "."))
df$Изменение[1] <- 0
df$Изменение[23] <- str_replace(df$Изменение[23], "\\:", ".")
df$Изменение[24] <- str_replace(df$Изменение[24], "\\:", ".")
df$Изменение[25] <- str_replace(df$Изменение[25], "\\:", ".")
df$Изменение <- as.numeric(str_replace(df$Изменение, "\\−", "-"))
df$Изменение <- as.numeric(df$Изменение)
df$f <- ifelse(df$Изменение >= 0, 1, 0)
df$vj <- df$f * -1
df$vj[df$vj == 0] <- 1.8
head(df)
ggplot(df, aes(`Год`, `Минут осталось`)) +
scale_x_continuous(breaks = c(1947, 1951, 1955, seq(1960, 2020, 4))) +
scale_y_continuous(expand = c(0,0), limits = c(0,18), breaks = c(seq(0,17,1)),
sec.axis = sec_axis(~., breaks = c(17:0),
labels = c(paste0("23:", 43:59), "00:00"),
name = "Время до полуночи")) +
geom_step(linetype = 1, size = 2, alpha = 0.5, color = "brown") +
geom_point(shape = 15, size = 2.5, aes(colour = factor(ifelse(Изменение >= 0, 1, 0)))) +
geom_text(aes(label = `Год`), size = 2.5,
position = position_dodge(0.8),
vjust = df$vj) +
labs(title = "Часы Cудного дня: число минут до полуночи, 1947 − 2020",
subtitle = "Колебания минутной стрелки на протяжении нескольких десятилетий",
caption = "Источник данных: https://ru.wikipedia.org/wiki/Часы_Судного_дня\nВизуализация: Лаборатория HR-DataLab http://hr-datalab.ru") +
theme_grey(base_size = 14, base_family = "Open Sans") +
theme(legend.position = "none",
# panel.background = element_blank(),
panel.grid.minor.y = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.major = element_line(size = 0.3),
axis.text.x = element_text(size = 12),
plot.caption = element_text(margin = margin(t = 5), family = "Open Sans",
color = "grey", size = 11))
ggsave("dc2022.png", width = 7, height = 3.5, dpi = 300, scale = 1.5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment