Демографические данные России за 5 лет: различия между версиями

Материал из Поле цифровой дидактики
Нет описания правки
Строка 167: Строка 167:


=== Пример интегрированной страницы ===
=== Пример интегрированной страницы ===
= Демография России: 2024 =
[[Has data type::Demographic report]]
[[Has country::Russia]]
[[Has year::2024]]
[[Has data source::Demo (based on OWID)]]
== Показатели ==
== Показатели ==
* Население: 144.0 млн чел  [[Has population value::144.0]]
* Население: 144.0 млн чел  [[Has population value::144.0]]
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]
== Связь с Digida ==
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]


== Интерпретация ==
== Интерпретация ==
Строка 202: Строка 193:
   - Для интеграции данных по своей тематике (экономика, социология, экология)
   - Для интеграции данных по своей тематике (экономика, социология, экология)
   - Для создания автоматизированных пайплайнов обновления внешних данных
   - Для создания автоматизированных пайплайнов обновления внешних данных
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]


== Приложения ==
== Приложения ==
* API документация - https://ourworldindata.org/
* API документация - https://ourworldindata.org/

Версия от 07:47, 14 апреля 2026

Интеграция демографических данных

Введение

Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.

Данные и методы

Источники данных

  • Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)
  • Формат: локальные CSV-файлы или демо-данные при отсутствии файлов
  • Выборка: 5 лет

Пайплайн интеграции демографических данных в Digida

Динамика населения и продолжительности жизни России, 2020-2024

Все данные о демографической ситуации в мире взяты

Очистка данных в OpenRefine

В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data) Отделение данных, которые относятся к России от остальных стран.

Динамика населения и продолжительности жизни России, 2020-2024


Код для получения данных

library(ggplot2)
library(patchwork)
library(dplyr)
library(readr)
library(scales)

options(encoding = "UTF-8")
# === НАСТРОЙКИ ===
data_path <- "C:/R/data/owid/"  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!
country <- "Russia"
years <- 2020:2024
# === ФУНКЦИЯ: загрузка данных по России ===
load_russia <- function(filepath, value_col, new_name) {
  if (!file.exists(filepath)) return(NULL)
  
  tryCatch({
    read_csv(filepath, show_col_types = FALSE) %>%
      filter(Entity == country, Year %in% years) %>%
      select(year = Year, !!new_name := all_of(value_col)) %>%
      filter(!is.na(!!sym(new_name))) %>%
      mutate(year = as.integer(year))
  }, error = function(e) {
    message(paste("⚠ Ошибка", filepath, ":", e$message))
    NULL
  })
}

# === ЗАГРУЗКА ДАННЫХ ===
cat("📊 Загрузка данных...\n")

# 1. Население (в млн)
df_pop <- load_russia(file.path(data_path, "population.csv"), 
                      "Population (historical estimates)", "population")
if (!is.null(df_pop)) df_pop$population <- df_pop$population / 1e6

# 2. Продолжительность жизни
df_life <- load_russia(file.path(data_path, "life_expectancy.csv"), 
                       "Life expectancy", "life_expectancy")

# Сборка датафрейма
df_final <- data.frame(year = years)
if (!is.null(df_pop)) df_final <- left_join(df_final, df_pop, by = "year")
if (!is.null(df_life)) df_final <- left_join(df_final, df_life, by = "year")

# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===
if (nrow(df_final) < 3 || sum(!is.na(df_final$population)) < 3) {
  cat("⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n")
  
  df_final <- data.frame(
    year = 2020:2024,
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет
  )
  source_label <- "Demo (based on OWID)"
} else {
  source_label <- "Our World in Data (локально)"
  cat("✅ Данные загружены успешно.\n")
}

# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===
df_final <- df_final %>%
  mutate(
    pop_change = c(NA, diff(population) / population[-n()] * 100),
    life_change = c(NA, diff(life_expectancy))
  )

# === ВЫВОД СВОДКИ ===
cat(sprintf("\n📅 Период: %d - %d\n", min(years), max(years)))
if (!all(is.na(df_final$population))) {
  cat(sprintf("👥 Население: %.1f → %.1f млн чел (%.2f%%)\n", 
              df_final$population[1], df_final$population[nrow(df_final)],
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))
}
if (!all(is.na(df_final$life_expectancy))) {
  cat(sprintf("❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n", 
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))
}

# === ГРАФИКИ ===

# 1. Динамика численности населения
p1 <- ggplot(df_final, aes(x = year, y = population)) +
  geom_line(color = "#2E86AB", linewidth = 1.5) +
  geom_point(size = 3, color = "#2E86AB") +
  geom_text(aes(label = paste0(population, " млн")), 
            vjust = -1, size = 3.5, check_overlap = TRUE) +
  scale_x_continuous(breaks = df_final$year) +
  theme_minimal() +
  labs(title = "Численность населения России", 
       subtitle = paste("Источник:", source_label),
       x = "Год", y = "Млн человек") +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

# 2. Ожидаемая продолжительность жизни
p2 <- ggplot(df_final, aes(x = year, y = life_expectancy)) +
  geom_col(fill = "#28A745", alpha = 0.85) +
  geom_text(aes(label = paste0(life_expectancy, " лет")), 
            vjust = -0.5, size = 3.5) +
  scale_x_continuous(breaks = df_final$year) +
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +
  theme_minimal() +
  labs(title = "Продолжительность жизни", 
       x = "Год", y = "Лет") +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

# 3. Темп изменения населения (дополнительный мини-график)
p3 <- ggplot(df_final, aes(x = year, y = pop_change)) +
  geom_col(fill = ifelse(df_final$pop_change >= 0, "#28A745", "#DC3545"), 
           alpha = 0.8, na.rm = TRUE) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
  geom_text(aes(label = ifelse(is.na(pop_change), "", 
                               paste0(round(pop_change, 2), "%"))), 
            vjust = ifelse(df_final$pop_change >= 0, -0.5, 1.5), 
            size = 3, na.rm = TRUE) +
  scale_x_continuous(breaks = df_final$year) +
  theme_minimal() +
  labs(title = "Темп изменения населения", 
       x = "Год", y = "% к предыдущему году") +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 12))

# === КОМПОНОВКА И СОХРАНЕНИЕ ===
final_plot <- (p1 / p2) + p3 +
  plot_layout(heights = c(1, 1, 0.6)) &
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))

print(final_plot)

# Сохранение
output_file <- "russia_demographics_simple.png"
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = "white")

cat(sprintf("\n✅ Готово! Файл сохранён: %s\n", output_file))

Результаты

Дашборд демографических показателей

Динамика населения и продолжительности жизни России, 2020-2024


Пример интегрированной страницы

Показатели

  • Население: 144.0 млн чел 144.0
  • Продолжительность жизни: 73.5 лет 73.5
  • Изменение населения: ↘ -0.55% -0.55

Интерпретация

Что показывает интеграция?

  • Демографические данные успешно структурируются через вики-страницы с семантической разметкой
  • Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети
  • Шаблон страницы обеспечивает единообразие и возможность автоматической обработки

Как это масштабируется?

  • Механизм применим к любым социальным данным: экономика, образование, здравоохранение
  • Ключевой элемент — семантическое связывание через категории и внутренние ссылки
  • Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных

Обсуждение

  • Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям
  • Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания
  • Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida

Рефлексия и вклад

  • Как этот проект изменил наше понимание границ социосемантической системы?
  • Как другие участники могут использовать этот подход:
 - Для интеграции данных по своей тематике (экономика, социология, экология)
 - Для создания автоматизированных пайплайнов обновления внешних данных

Приложения