<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://digida.mgpu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RabotaNS</id>
	<title>Поле цифровой дидактики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RabotaNS"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/RabotaNS"/>
	<updated>2026-07-24T00:15:39Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46177</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46177"/>
		<updated>2026-04-14T08:07:23Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Данные и методы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
@startuml&lt;br /&gt;
&lt;br /&gt;
title Пайплайн представления демографических данных в Digida (с OpenRefine)&lt;br /&gt;
skinparam handwritten false&lt;br /&gt;
&lt;br /&gt;
rectangle &amp;quot;Внешние данные (OWID CSV)&amp;quot; as external #LightBlue&lt;br /&gt;
rectangle &amp;quot;R: предварительная загрузка&amp;quot; as r_load #LightGreen  &lt;br /&gt;
rectangle &amp;quot;OpenRefine: очистка и обогащение&amp;quot; as refine #LightYellow&lt;br /&gt;
rectangle &amp;quot;R: визуализация + экспорт&amp;quot; as r_export #LightPink&lt;br /&gt;
rectangle &amp;quot;Digida: публикация&amp;quot; as platform #LightCoral&lt;br /&gt;
&lt;br /&gt;
external --&amp;gt; r_load : read_csv()&lt;br /&gt;
r_load --&amp;gt; refine : экспорт demo_raw_for_refine.csv&lt;br /&gt;
refine --&amp;gt; refine : Нормализация, расчёт метрик&lt;br /&gt;
refine --&amp;gt; r_export : экспорт demo_clean_with_wiki.csv&lt;br /&gt;
r_export --&amp;gt; r_export : ggplot2 + patchwork дашборд&lt;br /&gt;
r_export --&amp;gt; platform : загрузка страниц + дашборд&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@enduml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактор страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46174</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46174"/>
		<updated>2026-04-14T08:05:22Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Данные и методы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
@startuml&lt;br /&gt;
&lt;br /&gt;
title Пайплайн представления демографических данных в Digida (с OpenRefine)&lt;br /&gt;
skinparam handwritten false&lt;br /&gt;
&lt;br /&gt;
rectangle &amp;quot;Внешние данные (OWID CSV)&amp;quot; as external #LightBlue&lt;br /&gt;
rectangle &amp;quot;R: предварительная загрузка&amp;quot; as r_load #LightGreen  &lt;br /&gt;
rectangle &amp;quot;OpenRefine: очистка и обогащение&amp;quot; as refine #LightYellow&lt;br /&gt;
rectangle &amp;quot;R: визуализация + экспорт&amp;quot; as r_export #LightPink&lt;br /&gt;
rectangle &amp;quot;Digida: публикация&amp;quot; as platform #LightCoral&lt;br /&gt;
&lt;br /&gt;
external --&amp;gt; r_load : read_csv()&lt;br /&gt;
r_load --&amp;gt; refine : экспорт demo_raw_for_refine.csv&lt;br /&gt;
refine --&amp;gt; refine : Нормализация, расчёт метрик&lt;br /&gt;
refine --&amp;gt; r_export : экспорт demo_clean_with_wiki.csv&lt;br /&gt;
r_export --&amp;gt; r_export : ggplot2 + patchwork дашборд&lt;br /&gt;
r_export --&amp;gt; platform : загрузка страниц + дашборд&lt;br /&gt;
platform --&amp;gt; platform : Связывание через [[ссылки]] + категории&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@enduml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактор страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46173</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46173"/>
		<updated>2026-04-14T08:04:26Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
@startuml&lt;br /&gt;
&lt;br /&gt;
title Пайплайн интеграции демографических данных в Digida (с OpenRefine)&lt;br /&gt;
skinparam handwritten false&lt;br /&gt;
&lt;br /&gt;
rectangle &amp;quot;Внешние данные (OWID CSV)&amp;quot; as external #LightBlue&lt;br /&gt;
rectangle &amp;quot;R: предварительная загрузка&amp;quot; as r_load #LightGreen  &lt;br /&gt;
rectangle &amp;quot;OpenRefine: очистка и обогащение&amp;quot; as refine #LightYellow&lt;br /&gt;
rectangle &amp;quot;R: визуализация + экспорт&amp;quot; as r_export #LightPink&lt;br /&gt;
rectangle &amp;quot;Digida: публикация&amp;quot; as platform #LightCoral&lt;br /&gt;
&lt;br /&gt;
external --&amp;gt; r_load : read_csv()&lt;br /&gt;
r_load --&amp;gt; refine : экспорт demo_raw_for_refine.csv&lt;br /&gt;
refine --&amp;gt; refine : Нормализация, расчёт метрик&lt;br /&gt;
refine --&amp;gt; r_export : экспорт demo_clean_with_wiki.csv&lt;br /&gt;
r_export --&amp;gt; r_export : ggplot2 + patchwork дашборд&lt;br /&gt;
r_export --&amp;gt; platform : загрузка страниц + дашборд&lt;br /&gt;
platform --&amp;gt; platform : Связывание через [[ссылки]] + категории&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@enduml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактор страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46168</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46168"/>
		<updated>2026-04-14T08:02:53Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Пайплайн представления демографических данных в Digida */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
@startuml&lt;br /&gt;
&lt;br /&gt;
title Пайплайн интеграции демографических данных в Digida (с OpenRefine)&lt;br /&gt;
skinparam handwritten false&lt;br /&gt;
&lt;br /&gt;
rectangle &amp;quot;Внешние данные (OWID CSV)&amp;quot; as external #LightBlue&lt;br /&gt;
rectangle &amp;quot;R: предварительная загрузка&amp;quot; as r_load #LightGreen  &lt;br /&gt;
rectangle &amp;quot;OpenRefine: очистка и обогащение&amp;quot; as refine #LightYellow&lt;br /&gt;
rectangle &amp;quot;R: визуализация + экспорт&amp;quot; as r_export #LightPink&lt;br /&gt;
rectangle &amp;quot;Digida: публикация&amp;quot; as platform #LightCoral&lt;br /&gt;
&lt;br /&gt;
external --&amp;gt; r_load : read_csv()&lt;br /&gt;
r_load --&amp;gt; refine : экспорт demo_raw_for_refine.csv&lt;br /&gt;
refine --&amp;gt; refine : Нормализация, расчёт метрик, генерация вики-разметки&lt;br /&gt;
refine --&amp;gt; r_export : экспорт demo_clean_with_wiki.csv&lt;br /&gt;
r_export --&amp;gt; r_export : ggplot2 + patchwork дашборд&lt;br /&gt;
r_export --&amp;gt; platform : загрузка страниц + дашборд&lt;br /&gt;
platform --&amp;gt; platform : Связывание через [[ссылки]] + категории&lt;br /&gt;
&lt;br /&gt;
note right of refine&lt;br /&gt;
  Ключевые операции:&lt;br /&gt;
  • toNumber(), round()&lt;br /&gt;
  • cells[&amp;quot;col&amp;quot;].value[-1]&lt;br /&gt;
  • if(value &amp;lt; -0.5, &amp;quot;decline&amp;quot;, ...)&lt;br /&gt;
  • Генерация вики-разметки&lt;br /&gt;
  • Export operations.json&lt;br /&gt;
end note&lt;br /&gt;
&lt;br /&gt;
note right of platform&lt;br /&gt;
  Результат:&lt;br /&gt;
  • Страницы Demographics/Russia/Год&lt;br /&gt;
  • Категории: External data, Russia&lt;br /&gt;
  • Семантические свойства [[Has ...::]]&lt;br /&gt;
  • Дашборд с трендами&lt;br /&gt;
end note&lt;br /&gt;
&lt;br /&gt;
@enduml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактор страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46157</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46157"/>
		<updated>2026-04-14T07:12:58Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн представления демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактор страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46156</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46156"/>
		<updated>2026-04-14T07:11:17Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Редактирование страницы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн представления демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактор страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46155</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46155"/>
		<updated>2026-04-14T07:08:42Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Пайплайн интеграции демографических данных в Digida */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн представления демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактирование страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46153</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46153"/>
		<updated>2026-04-14T07:07:24Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Интеграция демографических данных */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактирование страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46152</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46152"/>
		<updated>2026-04-14T06:56:14Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Our World in Data - https://ourworldindata.org&lt;br /&gt;
* API документация:&lt;br /&gt;
Население - https://ourworldindata.org/grapher/population.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
&lt;br /&gt;
Продолжительность жизни - https://ourworldindata.org/grapher/life-expectancy.csv?v=1&amp;amp;csvType=full&amp;amp;useColumnShortNames=true&lt;br /&gt;
== Редактирование страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46144</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46144"/>
		<updated>2026-04-14T06:46:54Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;br /&gt;
== Редактирование страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png|400px|middle]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46141</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46141"/>
		<updated>2026-04-14T06:45:20Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Редактирование страницы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;br /&gt;
== Редактирование страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user|timestamp&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
data &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(data, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
revisions &amp;lt;- page$revisions&lt;br /&gt;
users &amp;lt;- revisions$user&lt;br /&gt;
&lt;br /&gt;
head(users, 10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:редактор.png]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80.png&amp;diff=46139</id>
		<title>Файл:Редактор.png</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80.png&amp;diff=46139"/>
		<updated>2026-04-14T06:44:51Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46134</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46134"/>
		<updated>2026-04-14T06:34:35Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;br /&gt;
== Редактирование страницы ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Установка (если нужно)&lt;br /&gt;
install.packages(c(&amp;quot;httr&amp;quot;, &amp;quot;jsonlite&amp;quot;, &amp;quot;igraph&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(igraph)&lt;br /&gt;
&lt;br /&gt;
# --- 1. Запрос ---&lt;br /&gt;
url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
response &amp;lt;- GET(url, query = list(&lt;br /&gt;
  action = &amp;quot;query&amp;quot;,&lt;br /&gt;
  prop = &amp;quot;revisions&amp;quot;,&lt;br /&gt;
  titles = &amp;quot;Демографические данные России за 5 лет&amp;quot;,&lt;br /&gt;
  rvprop = &amp;quot;user&amp;quot;,&lt;br /&gt;
  rvlimit = 100,&lt;br /&gt;
  format = &amp;quot;json&amp;quot;&lt;br /&gt;
))&lt;br /&gt;
&lt;br /&gt;
# --- 2. Преобразование ---&lt;br /&gt;
json_text &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
json_data &amp;lt;- fromJSON(json_text, flatten = TRUE)&lt;br /&gt;
&lt;br /&gt;
# --- 3. Извлечение пользователей ---&lt;br /&gt;
pages &amp;lt;- json_data$query$pages&lt;br /&gt;
&lt;br /&gt;
page &amp;lt;- pages[[1]]&lt;br /&gt;
&lt;br /&gt;
# ПРОВЕРКА&lt;br /&gt;
print(names(page))&lt;br /&gt;
&lt;br /&gt;
# если есть revisions — извлекаем&lt;br /&gt;
if (&amp;quot;revisions&amp;quot; %in% names(page)) {&lt;br /&gt;
  revisions &amp;lt;- page$revisions&lt;br /&gt;
  &lt;br /&gt;
  users &amp;lt;- revisions$user&lt;br /&gt;
  &lt;br /&gt;
  print(users)&lt;br /&gt;
  &lt;br /&gt;
} else {&lt;br /&gt;
  stop(&amp;quot;Нет revisions — проверь название страницы или API&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# --- 4. Уникальные пользователи ---&lt;br /&gt;
unique_users &amp;lt;- unique(users)&lt;br /&gt;
&lt;br /&gt;
# --- 5. Создание графа ---&lt;br /&gt;
edges &amp;lt;- data.frame(&lt;br /&gt;
  from = rep(&amp;quot;Page&amp;quot;, length(unique_users)),&lt;br /&gt;
  to = unique_users&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
g &amp;lt;- graph_from_data_frame(edges, directed = FALSE)&lt;br /&gt;
&lt;br /&gt;
# --- 6. Визуализация ---&lt;br /&gt;
plot(g,&lt;br /&gt;
     vertex.size = ifelse(V(g)$name == &amp;quot;Page&amp;quot;, 40, 25),&lt;br /&gt;
     vertex.color = ifelse(V(g)$name == &amp;quot;Page&amp;quot;, &amp;quot;red&amp;quot;, &amp;quot;lightblue&amp;quot;),&lt;br /&gt;
     layout = layout_with_fr(g),&lt;br /&gt;
     main = &amp;quot;Граф редактирования страницы Digida&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46125</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46125"/>
		<updated>2026-04-14T06:08:34Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Расчеты, метрики ==&lt;br /&gt;
Темп изменения населения (годовой прирост/убыль)&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
p[t] = (P[t] - P[t-1]) / P[t-1] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P[t] — численность населения в году t;&lt;br /&gt;
P[t-1] — численность населения в предыдущем году&lt;br /&gt;
Результат выражается в процентах (%)&lt;br /&gt;
&lt;br /&gt;
Абсолютное изменение продолжительности жизни&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
ΔL[t] = L[t] - L[t-1] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
L[t] — ожидаемая продолжительность жизни в году t (в годах)&lt;br /&gt;
Результат выражается в годах (положительное значение = рост, отрицательное = снижение)&lt;br /&gt;
&lt;br /&gt;
Общий темп роста за период&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
G = (P[end] - P[start]) / P[start] × 100%&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46124</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46124"/>
		<updated>2026-04-14T05:54:45Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
В современном мире данные становятся фундаментальным ресурсом для понимания социальных процессов. Демографические показатели — такие как численность населения и ожидаемая продолжительность жизни — представляют собой не просто сухие статистические цифры, а важнейшие индикаторы социального благополучия, качества жизни и устойчивости развития общества. Эти данные позволяют нам отслеживать долгосрочные тренды, выявлять проблемные зоны и оценивать эффективность социальной политики. Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
Для данного исследования мы используем данные из открытой базы Our World in Data (OWID) — одного из наиболее авторитетных и широко используемых источников глобальной статистики. OWID предоставляет свободный доступ к данным о населении, здравоохранении, экономике, окружающей среде и многих других аспектах человеческого развития. Данные проходят тщательную проверку, документируются и регулярно обновляются, что делает их надёжной основой для исследований.В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира. Конкретно для нашего анализа мы используем два набора данных:&lt;br /&gt;
*Население (Population): Данные о общей численности населения России за период 2020-2024 годов. Эти данные представляют собой исторические оценки, основанные на национальных переписях населения, регистрах и демографических моделях.&lt;br /&gt;
*Ожидаемая продолжительность жизни (Life Expectancy): Данные о средней ожидаемой продолжительности жизни при рождении для России за тот же период. Этот показатель отражает среднее количество лет, которое предположительно проживёт новорождённый при условии, что текущие уровни смертности останутся неизменными на протяжении его жизни.&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Исходные файлы OWID содержат данные по всем странам мира за длительный период времени. Для нашего исследования мы отбираем только записи, относящиеся к России и попадающие в интересующий нас временной диапазон (2020:2024). Это позволяет существенно сократить объём данных и ускорить последующую обработку.&lt;br /&gt;
&lt;br /&gt;
Числовые данные могут содержать ошибки формата (например, текст вместо чисел, лишние пробелы, неправильные разделители десятичных дробей). Для обеспечения корректности последующих расчётов мы приводим все числовые колонки к единому формату.&lt;br /&gt;
&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
После того как данные очищены и обогащены в OpenRefine, мы возвращаемся в R для создания визуализаций. Визуализация — это важно, ведь графики позволяют быстро уловить основные тренды и закономерности, которые могут быть неочевидны при просмотре таблиц с числами.&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46122</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46122"/>
		<updated>2026-04-14T05:22:20Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46121</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46121"/>
		<updated>2026-04-14T05:16:17Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Введение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
Данный проект иллюстрирует возможности репрезентации демографических данных Российской Федерации посредством стандартных инструментов на цифровой платформе Digida.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46120</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46120"/>
		<updated>2026-04-14T05:14:26Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Выводы ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46119</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46119"/>
		<updated>2026-04-14T05:13:31Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Как это масштабируется? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46118</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46118"/>
		<updated>2026-04-14T05:13:09Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Что показывает интеграция? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывают результаты? ===&lt;br /&gt;
* Устойчивое сокращение численности населения&lt;br /&gt;
** Тренд: Наблюдается стабильная нисходящая динамика.&lt;br /&gt;
**Цифры: Население уменьшилось с примерно 146,7 млн чел. в 2020 году до 144 млн чел. в 2024 году.&lt;br /&gt;
**Итог: За 4 года потеря составила около 2,7 млн человек.&lt;br /&gt;
* Рост продолжительности жизни&lt;br /&gt;
** Тренд: Несмотря на общее сокращение населения, показатель продолжительности жизни демонстрирует уверенный рост.&lt;br /&gt;
** Цифры: Показатель увеличился с 68,9 лет (2020 г.) до 73,5 лет (2024 г.).&lt;br /&gt;
**Итог: Прирост составил +4,6 года за период. Это указывает на улучшение условий жизни или здравоохранения, что позволяет людям жить дольше.&lt;br /&gt;
* Отрицательные темпы прироста&lt;br /&gt;
** Тренд: График «Темп изменения населения» показывает исключительно отрицательные значения (красные столбцы).&lt;br /&gt;
** Динамика: В 2021 году спад составил -0,34%.В 2022 и 2023 годах темп снижения ускорился до -0,48%. В 2024 году тенденция к снижению сохраняется (столбец сопоставим с предыдущими годами).&lt;br /&gt;
* Общий демографический парадокс&lt;br /&gt;
**Графики демонстрируют классическую ситуацию для развитых стран или стран в кризисе: «сжатие» населения при повышении его долголетия.&lt;br /&gt;
**Сокращение населения в данном случае не связано с ростом смертности (так как продолжительность жизни растет).&lt;br /&gt;
**Вероятные причины убыли (исходя из данных): низкая рождаемость или миграционный отток.&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RabotaNS&amp;diff=46117</id>
		<title>Участник:RabotaNS</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RabotaNS&amp;diff=46117"/>
		<updated>2026-04-14T05:04:49Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Робототехника, Образование, Искусственный интеллект, Культура, Игра, Мехатроника&lt;br /&gt;
|Environment=Python, Python IDLE, Информатика, Компас 3D и др.), Excel, Scratch, Desmos, Сообщество МЭШ&lt;br /&gt;
|Position=Бакалавриат&lt;br /&gt;
|Profile=Информатика, Робототехника&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
|Working_On=Смурфики и Гаргамель, Демографические данные России за 5 лет&lt;br /&gt;
}}&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=46116</id>
		<title>Интеграция демографических данных</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=46116"/>
		<updated>2026-04-14T05:03:17Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: RabotaNS переименовал страницу Интеграция демографических данных в Демографические данные России за 5 лет&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Демографические данные России за 5 лет]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46115</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46115"/>
		<updated>2026-04-14T05:03:17Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: RabotaNS переименовал страницу Интеграция демографических данных в Демографические данные России за 5 лет&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46114</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46114"/>
		<updated>2026-04-14T05:01:41Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
* &#039;&#039;&#039;Автор:&#039;&#039;&#039; Студент группы [[Категория:ИНДОР-211]] -   [[Участник:RabotaNS|RabotaNS]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46113</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46113"/>
		<updated>2026-04-14T04:56:53Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Пример интегрированной страницы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46112</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46112"/>
		<updated>2026-04-14T04:56:41Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Дашборд демографических показателей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|500px|middle|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46111</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46111"/>
		<updated>2026-04-14T04:56:00Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Очистка данных в OpenRefine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах мира (сайт Open World in Data). В OpenRefine отделяем данные, которые относятся к России от данных остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46110</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46110"/>
		<updated>2026-04-14T04:54:42Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Очистка данных в OpenRefine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46109</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46109"/>
		<updated>2026-04-14T04:54:19Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Очистка данных в OpenRefine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|400 px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46108</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46108"/>
		<updated>2026-04-14T04:53:30Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Пайплайн интеграции демографических данных в Digida */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46107</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46107"/>
		<updated>2026-04-14T04:52:52Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Пайплайн интеграции демографических данных в Digida */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|middle]]&lt;br /&gt;
&lt;br /&gt;
Все данные о демографической ситуации в мире взяты&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46106</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46106"/>
		<updated>2026-04-14T04:51:44Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Данные и методы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|400px|thumb|middle]]&lt;br /&gt;
&lt;br /&gt;
Все данные о демографической ситуации в мире взяты &lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46105</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46105"/>
		<updated>2026-04-14T04:48:20Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Дашборд демографических показателей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
Все данные о демографической ситуации в мире взяты &lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46104</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46104"/>
		<updated>2026-04-14T04:47:57Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: /* Демография России: 2024 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
Все данные о демографической ситуации в мире взяты &lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46103</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46103"/>
		<updated>2026-04-14T04:46:20Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
Все данные о демографической ситуации в мире взяты &lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
= Демография России: 2024 =&lt;br /&gt;
[[Has data type::Demographic report]]&lt;br /&gt;
[[Has country::Russia]]&lt;br /&gt;
[[Has year::2024]]&lt;br /&gt;
[[Has data source::Demo (based on OWID)]]&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Связь с Digida ==&lt;br /&gt;
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]&lt;br /&gt;
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46102</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46102"/>
		<updated>2026-04-14T04:45:35Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России могут быть представлены на платформе через стандартные механизмы.&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
=== Интеграция внешних данных ===&lt;br /&gt;
* Генерация вики-страниц формата `Demographics/Russia/Год`&lt;br /&gt;
* Семантическая разметка: `[[Has population value::...]]`, `[[Has data source::...]]`&lt;br /&gt;
* Связывание через категории: `[[Category:External demographic data]]`, `[[Category:Russia statistics]]`&lt;br /&gt;
* Использование ссылок на смежные темы: `[[Социосемантические системы]]`, `[[Агентное моделирование]]`&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
Все данные о демографической ситуации в мире взяты &lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
= Демография России: 2024 =&lt;br /&gt;
[[Has data type::Demographic report]]&lt;br /&gt;
[[Has country::Russia]]&lt;br /&gt;
[[Has year::2024]]&lt;br /&gt;
[[Has data source::Demo (based on OWID)]]&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Связь с Digida ==&lt;br /&gt;
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]&lt;br /&gt;
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46101</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46101"/>
		<updated>2026-04-14T04:44:02Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России интегрируются в платформу через стандартные механизмы: страницы, категории и внутренние ссылки.&lt;br /&gt;
&lt;br /&gt;
**Исследовательский вопрос:** Как связать внешние демографические данные с эпистемическим пространством Digida?&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
=== Интеграция внешних данных ===&lt;br /&gt;
* Генерация вики-страниц формата `Demographics/Russia/Год`&lt;br /&gt;
* Семантическая разметка: `[[Has population value::...]]`, `[[Has data source::...]]`&lt;br /&gt;
* Связывание через категории: `[[Category:External demographic data]]`, `[[Category:Russia statistics]]`&lt;br /&gt;
* Использование ссылок на смежные темы: `[[Социосемантические системы]]`, `[[Агентное моделирование]]`&lt;br /&gt;
&lt;br /&gt;
=== Пайплайн интеграции демографических данных в Digida ===&lt;br /&gt;
[[Файл:startumlowid.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
Все данные о демографической ситуации в мире взяты &lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
В работе используются два сsv файла с данными по населению и продолжительности жизни во всех странах (сайт Open World in Data)&lt;br /&gt;
Отделение данных, которые относятся к России от остальных стран.&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
= Демография России: 2024 =&lt;br /&gt;
[[Has data type::Demographic report]]&lt;br /&gt;
[[Has country::Russia]]&lt;br /&gt;
[[Has year::2024]]&lt;br /&gt;
[[Has data source::Demo (based on OWID)]]&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Связь с Digida ==&lt;br /&gt;
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]&lt;br /&gt;
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46100</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46100"/>
		<updated>2026-04-14T04:37:31Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России интегрируются в платформу через стандартные механизмы: страницы, категории и внутренние ссылки.&lt;br /&gt;
&lt;br /&gt;
**Исследовательский вопрос:** Как связать внешние демографические данные с эпистемическим пространством Digida?&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
=== Интеграция внешних данных ===&lt;br /&gt;
* Генерация вики-страниц формата `Demographics/Russia/Год`&lt;br /&gt;
* Семантическая разметка: `[[Has population value::...]]`, `[[Has data source::...]]`&lt;br /&gt;
* Связывание через категории: `[[Category:External demographic data]]`, `[[Category:Russia statistics]]`&lt;br /&gt;
* Использование ссылок на смежные темы: `[[Социосемантические системы]]`, `[[Агентное моделирование]]`&lt;br /&gt;
&lt;br /&gt;
==Пайплайн интеграции демографических данных в Digida ==&lt;br /&gt;
[[Файл:startumlowid.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
Все данные о демографической ситуации в мире взяты &lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Отделение данных, которые относятся к России от остальных&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
= Демография России: 2024 =&lt;br /&gt;
[[Has data type::Demographic report]]&lt;br /&gt;
[[Has country::Russia]]&lt;br /&gt;
[[Has year::2024]]&lt;br /&gt;
[[Has data source::Demo (based on OWID)]]&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Связь с Digida ==&lt;br /&gt;
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]&lt;br /&gt;
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* API документация - https://ourworldindata.org/&lt;br /&gt;
* Данные: [[Has data export::File:wiki_demographic_pages.tsv]], [[Has data export::File:demo_table_for_wiki.csv]]&lt;br /&gt;
* Шаблон страницы: [[Has template::Page:Demographic report template]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Russia_row.png&amp;diff=46099</id>
		<title>Файл:Russia row.png</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Russia_row.png&amp;diff=46099"/>
		<updated>2026-04-14T04:31:09Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Startumlowid.png&amp;diff=46098</id>
		<title>Файл:Startumlowid.png</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Startumlowid.png&amp;diff=46098"/>
		<updated>2026-04-14T04:31:00Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46097</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46097"/>
		<updated>2026-04-14T04:30:44Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России интегрируются в платформу через стандартные механизмы: страницы, категории и внутренние ссылки.&lt;br /&gt;
&lt;br /&gt;
**Исследовательский вопрос:** Как связать внешние демографические данные с эпистемическим пространством Digida?&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: 5 лет&lt;br /&gt;
=== Интеграция внешних данных ===&lt;br /&gt;
* Генерация вики-страниц формата `Demographics/Russia/Год`&lt;br /&gt;
* Семантическая разметка: `[[Has population value::...]]`, `[[Has data source::...]]`&lt;br /&gt;
* Связывание через категории: `[[Category:External demographic data]]`, `[[Category:Russia statistics]]`&lt;br /&gt;
* Использование ссылок на смежные темы: `[[Социосемантические системы]]`, `[[Агентное моделирование]]`&lt;br /&gt;
&lt;br /&gt;
[[Файл:startumlowid.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
=== Очистка данных в OpenRefine ===&lt;br /&gt;
Отделение данных, которые относятся к России от остальных&lt;br /&gt;
[[Файл:russia_row.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(readr)&lt;br /&gt;
library(scales)&lt;br /&gt;
&lt;br /&gt;
options(encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
data_path &amp;lt;- &amp;quot;C:/R/data/owid/&amp;quot;  # ← ИЗМЕНИТЕ НА СВОЙ ПУТЬ!&lt;br /&gt;
country &amp;lt;- &amp;quot;Russia&amp;quot;&lt;br /&gt;
years &amp;lt;- 2020:2024&lt;br /&gt;
# === ФУНКЦИЯ: загрузка данных по России ===&lt;br /&gt;
load_russia &amp;lt;- function(filepath, value_col, new_name) {&lt;br /&gt;
  if (!file.exists(filepath)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    read_csv(filepath, show_col_types = FALSE) %&amp;gt;%&lt;br /&gt;
      filter(Entity == country, Year %in% years) %&amp;gt;%&lt;br /&gt;
      select(year = Year, !!new_name := all_of(value_col)) %&amp;gt;%&lt;br /&gt;
      filter(!is.na(!!sym(new_name))) %&amp;gt;%&lt;br /&gt;
      mutate(year = as.integer(year))&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    message(paste(&amp;quot;⚠ Ошибка&amp;quot;, filepath, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    NULL&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ЗАГРУЗКА ДАННЫХ ===&lt;br /&gt;
cat(&amp;quot;📊 Загрузка данных...\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 1. Население (в млн)&lt;br /&gt;
df_pop &amp;lt;- load_russia(file.path(data_path, &amp;quot;population.csv&amp;quot;), &lt;br /&gt;
                      &amp;quot;Population (historical estimates)&amp;quot;, &amp;quot;population&amp;quot;)&lt;br /&gt;
if (!is.null(df_pop)) df_pop$population &amp;lt;- df_pop$population / 1e6&lt;br /&gt;
&lt;br /&gt;
# 2. Продолжительность жизни&lt;br /&gt;
df_life &amp;lt;- load_russia(file.path(data_path, &amp;quot;life_expectancy.csv&amp;quot;), &lt;br /&gt;
                       &amp;quot;Life expectancy&amp;quot;, &amp;quot;life_expectancy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Сборка датафрейма&lt;br /&gt;
df_final &amp;lt;- data.frame(year = years)&lt;br /&gt;
if (!is.null(df_pop)) df_final &amp;lt;- left_join(df_final, df_pop, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
if (!is.null(df_life)) df_final &amp;lt;- left_join(df_final, df_life, by = &amp;quot;year&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ДЕМО-ДАННЫЕ ЕСЛИ ФАЙЛЫ НЕ НАЙДЕНЫ ===&lt;br /&gt;
if (nrow(df_final) &amp;lt; 3 || sum(!is.na(df_final$population)) &amp;lt; 3) {&lt;br /&gt;
  cat(&amp;quot;⚠ Файлы не найдены. Используем демо-данные (на основе OWID).\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  df_final &amp;lt;- data.frame(&lt;br /&gt;
    year = 2020:2024,&lt;br /&gt;
    population = c(146.7, 146.2, 145.5, 144.8, 144.0),      # млн чел&lt;br /&gt;
    life_expectancy = c(68.9, 70.1, 72.0, 72.6, 73.5)       # лет&lt;br /&gt;
  )&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Demo (based on OWID)&amp;quot;&lt;br /&gt;
} else {&lt;br /&gt;
  source_label &amp;lt;- &amp;quot;Our World in Data (локально)&amp;quot;&lt;br /&gt;
  cat(&amp;quot;✅ Данные загружены успешно.\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === РАСЧЁТ ТЕМПОВ ИЗМЕНЕНИЯ ===&lt;br /&gt;
df_final &amp;lt;- df_final %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    pop_change = c(NA, diff(population) / population[-n()] * 100),&lt;br /&gt;
    life_change = c(NA, diff(life_expectancy))&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД СВОДКИ ===&lt;br /&gt;
cat(sprintf(&amp;quot;\n📅 Период: %d - %d\n&amp;quot;, min(years), max(years)))&lt;br /&gt;
if (!all(is.na(df_final$population))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;👥 Население: %.1f → %.1f млн чел (%.2f%%)\n&amp;quot;, &lt;br /&gt;
              df_final$population[1], df_final$population[nrow(df_final)],&lt;br /&gt;
              (tail(df_final$population, 1) - df_final$population[1]) / df_final$population[1] * 100))&lt;br /&gt;
}&lt;br /&gt;
if (!all(is.na(df_final$life_expectancy))) {&lt;br /&gt;
  cat(sprintf(&amp;quot;❤️ Продолжительность жизни: %.1f → %.1f лет (+%.1f)\n&amp;quot;, &lt;br /&gt;
              df_final$life_expectancy[1], df_final$life_expectancy[nrow(df_final)],&lt;br /&gt;
              df_final$life_expectancy[nrow(df_final)] - df_final$life_expectancy[1]))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ГРАФИКИ ===&lt;br /&gt;
&lt;br /&gt;
# 1. Динамика численности населения&lt;br /&gt;
p1 &amp;lt;- ggplot(df_final, aes(x = year, y = population)) +&lt;br /&gt;
  geom_line(color = &amp;quot;#2E86AB&amp;quot;, linewidth = 1.5) +&lt;br /&gt;
  geom_point(size = 3, color = &amp;quot;#2E86AB&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = paste0(population, &amp;quot; млн&amp;quot;)), &lt;br /&gt;
            vjust = -1, size = 3.5, check_overlap = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Численность населения России&amp;quot;, &lt;br /&gt;
       subtitle = paste(&amp;quot;Источник:&amp;quot;, source_label),&lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Млн человек&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 2. Ожидаемая продолжительность жизни&lt;br /&gt;
p2 &amp;lt;- ggplot(df_final, aes(x = year, y = life_expectancy)) +&lt;br /&gt;
  geom_col(fill = &amp;quot;#28A745&amp;quot;, alpha = 0.85) +&lt;br /&gt;
  geom_text(aes(label = paste0(life_expectancy, &amp;quot; лет&amp;quot;)), &lt;br /&gt;
            vjust = -0.5, size = 3.5) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  scale_y_continuous(limits = c(60, max(df_final$life_expectancy, na.rm = TRUE) * 1.1)) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Продолжительность жизни&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;Лет&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 14))&lt;br /&gt;
&lt;br /&gt;
# 3. Темп изменения населения (дополнительный мини-график)&lt;br /&gt;
p3 &amp;lt;- ggplot(df_final, aes(x = year, y = pop_change)) +&lt;br /&gt;
  geom_col(fill = ifelse(df_final$pop_change &amp;gt;= 0, &amp;quot;#28A745&amp;quot;, &amp;quot;#DC3545&amp;quot;), &lt;br /&gt;
           alpha = 0.8, na.rm = TRUE) +&lt;br /&gt;
  geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray50&amp;quot;) +&lt;br /&gt;
  geom_text(aes(label = ifelse(is.na(pop_change), &amp;quot;&amp;quot;, &lt;br /&gt;
                               paste0(round(pop_change, 2), &amp;quot;%&amp;quot;))), &lt;br /&gt;
            vjust = ifelse(df_final$pop_change &amp;gt;= 0, -0.5, 1.5), &lt;br /&gt;
            size = 3, na.rm = TRUE) +&lt;br /&gt;
  scale_x_continuous(breaks = df_final$year) +&lt;br /&gt;
  theme_minimal() +&lt;br /&gt;
  labs(title = &amp;quot;Темп изменения населения&amp;quot;, &lt;br /&gt;
       x = &amp;quot;Год&amp;quot;, y = &amp;quot;% к предыдущему году&amp;quot;) +&lt;br /&gt;
  theme(plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 12))&lt;br /&gt;
&lt;br /&gt;
# === КОМПОНОВКА И СОХРАНЕНИЕ ===&lt;br /&gt;
final_plot &amp;lt;- (p1 / p2) + p3 +&lt;br /&gt;
  plot_layout(heights = c(1, 1, 0.6)) &amp;amp;&lt;br /&gt;
  theme(plot.margin = margin(10, 10, 10, 10), text = element_text(size = 10))&lt;br /&gt;
&lt;br /&gt;
print(final_plot)&lt;br /&gt;
&lt;br /&gt;
# Сохранение&lt;br /&gt;
output_file &amp;lt;- &amp;quot;russia_demographics_simple.png&amp;quot;&lt;br /&gt;
ggsave(output_file, final_plot, width = 14, height = 12, dpi = 300, bg = &amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
cat(sprintf(&amp;quot;\n✅ Готово! Файл сохранён: %s\n&amp;quot;, output_file))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
= Демография России: 2024 =&lt;br /&gt;
[[Has data type::Demographic report]]&lt;br /&gt;
[[Has country::Russia]]&lt;br /&gt;
[[Has year::2024]]&lt;br /&gt;
[[Has data source::Demo (based on OWID)]]&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Связь с Digida ==&lt;br /&gt;
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]&lt;br /&gt;
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Исходный код: [[Has code repository::GitHub: digida/demographics-integration]]&lt;br /&gt;
* Данные: [[Has data export::File:wiki_demographic_pages.tsv]], [[Has data export::File:demo_table_for_wiki.csv]]&lt;br /&gt;
* Шаблон страницы: [[Has template::Page:Demographic report template]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=Digida&amp;diff=46096</id>
		<title>Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=Digida&amp;diff=46096"/>
		<updated>2026-04-14T04:01:20Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: RabotaNS переименовал страницу Digida в Интеграция демографических данных&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Интеграция демографических данных]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46095</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46095"/>
		<updated>2026-04-14T04:01:20Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: RabotaNS переименовал страницу Digida в Интеграция демографических данных&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России интегрируются в платформу через стандартные механизмы: страницы, категории и внутренние ссылки.&lt;br /&gt;
&lt;br /&gt;
**Исследовательский вопрос:** Как связать внешние демографические данные с эпистемическим пространством Digida?&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: [[Has sample size::5 years demographic data]]&lt;br /&gt;
=== Интеграция внешних данных ===&lt;br /&gt;
* Генерация вики-страниц формата `Demographics/Russia/Год`&lt;br /&gt;
* Семантическая разметка: `[[Has population value::...]]`, `[[Has data source::...]]`&lt;br /&gt;
* Связывание через категории: `[[Category:External demographic data]]`, `[[Category:Russia statistics]]`&lt;br /&gt;
* Использование ссылок на смежные темы: `[[Социосемантические системы]]`, `[[Агентное моделирование]]`&lt;br /&gt;
&lt;br /&gt;
=== Инструменты ===&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
= Демография России: 2024 =&lt;br /&gt;
[[Has data type::Demographic report]]&lt;br /&gt;
[[Has country::Russia]]&lt;br /&gt;
[[Has year::2024]]&lt;br /&gt;
[[Has data source::Demo (based on OWID)]]&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Связь с Digida ==&lt;br /&gt;
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]&lt;br /&gt;
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Исходный код: [[Has code repository::GitHub: digida/demographics-integration]]&lt;br /&gt;
* Данные: [[Has data export::File:wiki_demographic_pages.tsv]], [[Has data export::File:demo_table_for_wiki.csv]]&lt;br /&gt;
* Шаблон страницы: [[Has template::Page:Demographic report template]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46094</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46094"/>
		<updated>2026-04-14T04:00:40Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России интегрируются в платформу через стандартные механизмы: страницы, категории и внутренние ссылки.&lt;br /&gt;
&lt;br /&gt;
**Исследовательский вопрос:** Как связать внешние демографические данные с эпистемическим пространством Digida?&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: [[Has sample size::5 years demographic data]]&lt;br /&gt;
=== Интеграция внешних данных ===&lt;br /&gt;
* Генерация вики-страниц формата `Demographics/Russia/Год`&lt;br /&gt;
* Семантическая разметка: `[[Has population value::...]]`, `[[Has data source::...]]`&lt;br /&gt;
* Связывание через категории: `[[Category:External demographic data]]`, `[[Category:Russia statistics]]`&lt;br /&gt;
* Использование ссылок на смежные темы: `[[Социосемантические системы]]`, `[[Агентное моделирование]]`&lt;br /&gt;
&lt;br /&gt;
=== Инструменты ===&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:Data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
= Демография России: 2024 =&lt;br /&gt;
[[Has data type::Demographic report]]&lt;br /&gt;
[[Has country::Russia]]&lt;br /&gt;
[[Has year::2024]]&lt;br /&gt;
[[Has data source::Demo (based on OWID)]]&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Связь с Digida ==&lt;br /&gt;
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]&lt;br /&gt;
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Исходный код: [[Has code repository::GitHub: digida/demographics-integration]]&lt;br /&gt;
* Данные: [[Has data export::File:wiki_demographic_pages.tsv]], [[Has data export::File:demo_table_for_wiki.csv]]&lt;br /&gt;
* Шаблон страницы: [[Has template::Page:Demographic report template]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Data_russia.png&amp;diff=46093</id>
		<title>Файл:Data russia.png</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Data_russia.png&amp;diff=46093"/>
		<updated>2026-04-14T03:58:17Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46092</id>
		<title>Демографические данные России за 5 лет</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0_5_%D0%BB%D0%B5%D1%82&amp;diff=46092"/>
		<updated>2026-04-14T03:57:03Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: Новая страница: «= Интеграция демографических данных = == Введение == Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными.  Этот проект демонстрирует, как демографические показатели России интегрируются в платформу через стандартн...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Интеграция демографических данных =&lt;br /&gt;
== Введение ==&lt;br /&gt;
Социосемантические системы, такие как Digida, могут обогащаться внешними социальными данными. &lt;br /&gt;
Этот проект демонстрирует, как демографические показатели России интегрируются в платформу через стандартные механизмы: страницы, категории и внутренние ссылки.&lt;br /&gt;
&lt;br /&gt;
**Исследовательский вопрос:** Как связать внешние демографические данные с эпистемическим пространством Digida?&lt;br /&gt;
&lt;br /&gt;
== Данные и методы ==&lt;br /&gt;
=== Источники данных ===&lt;br /&gt;
* Внешние: Our World in Data (население, продолжительность жизни России, 2020-2024)&lt;br /&gt;
* Формат: локальные CSV-файлы или демо-данные при отсутствии файлов&lt;br /&gt;
* Выборка: [[Has sample size::5 years demographic data]]&lt;br /&gt;
=== Интеграция внешних данных ===&lt;br /&gt;
* Генерация вики-страниц формата `Demographics/Russia/Год`&lt;br /&gt;
* Семантическая разметка: `[[Has population value::...]]`, `[[Has data source::...]]`&lt;br /&gt;
* Связывание через категории: `[[Category:External demographic data]]`, `[[Category:Russia statistics]]`&lt;br /&gt;
* Использование ссылок на смежные темы: `[[Социосемантические системы]]`, `[[Агентное моделирование]]`&lt;br /&gt;
&lt;br /&gt;
=== Инструменты ===&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
=== Дашборд демографических показателей ===&lt;br /&gt;
[[Файл:data_russia.png|обрамить|Динамика населения и продолжительности жизни России, 2020-2024]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пример интегрированной страницы ===&lt;br /&gt;
= Демография России: 2024 =&lt;br /&gt;
[[Has data type::Demographic report]]&lt;br /&gt;
[[Has country::Russia]]&lt;br /&gt;
[[Has year::2024]]&lt;br /&gt;
[[Has data source::Demo (based on OWID)]]&lt;br /&gt;
== Показатели ==&lt;br /&gt;
* Население: 144.0 млн чел  [[Has population value::144.0]]&lt;br /&gt;
* Продолжительность жизни: 73.5 лет  [[Has life expectancy::73.5]]&lt;br /&gt;
* Изменение населения: ↘ -0.55%  [[Has population change::-0.55]]&lt;br /&gt;
&lt;br /&gt;
== Связь с Digida ==&lt;br /&gt;
* Связанные страницы: [[Социосемантические системы]], [[Агентное моделирование]]&lt;br /&gt;
* Категории: [[Category:External demographic data]], [[Category:Russia statistics]]&lt;br /&gt;
&lt;br /&gt;
== Интерпретация ==&lt;br /&gt;
=== Что показывает интеграция? ===&lt;br /&gt;
* Демографические данные успешно структурируются через вики-страницы с семантической разметкой&lt;br /&gt;
* Категории и внутренние ссылки позволяют внешним данным становиться частью навигационной сети&lt;br /&gt;
* Шаблон страницы обеспечивает единообразие и возможность автоматической обработки&lt;br /&gt;
&lt;br /&gt;
=== Как это масштабируется? ===&lt;br /&gt;
* Механизм применим к любым социальным данным: экономика, образование, здравоохранение&lt;br /&gt;
* Ключевой элемент — семантическое связывание через категории и внутренние ссылки&lt;br /&gt;
* Генерация вики-разметки через R позволяет автоматизировать интеграцию больших наборов данных&lt;br /&gt;
&lt;br /&gt;
== Обсуждение ==&lt;br /&gt;
* Ограничения: демо-режим при отсутствии локальных файлов; эвристика трендов по пороговым значениям&lt;br /&gt;
* Как результаты соотносятся с теорией социосемантических систем: внешние данные становятся частью системы через практики интеграции и связывания&lt;br /&gt;
* Практическая ценность: гайд по интеграции демографических данных полезен для расширения предметных областей Digida&lt;br /&gt;
&lt;br /&gt;
== Рефлексия и вклад ==&lt;br /&gt;
* Как этот проект изменил наше понимание границ социосемантической системы?&lt;br /&gt;
* Как другие участники могут использовать этот подход:&lt;br /&gt;
  - Для интеграции данных по своей тематике (экономика, социология, экология)&lt;br /&gt;
  - Для создания автоматизированных пайплайнов обновления внешних данных&lt;br /&gt;
* [[Has follow-up::Suggest new demographic data sources]], [[Has tool::Demographic page template]]&lt;br /&gt;
* Статус: [[Has status::Active]] | [[Last updated::{{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
* Исходный код: [[Has code repository::GitHub: digida/demographics-integration]]&lt;br /&gt;
* Данные: [[Has data export::File:wiki_demographic_pages.tsv]], [[Has data export::File:demo_table_for_wiki.csv]]&lt;br /&gt;
* Шаблон страницы: [[Has template::Page:Demographic report template]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RabotaNS&amp;diff=21222</id>
		<title>Участник:RabotaNS</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RabotaNS&amp;diff=21222"/>
		<updated>2024-11-02T10:01:28Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Робототехника, Образование, Искусственный интеллект, Культура, Игра, Мехатроника&lt;br /&gt;
|Environment=Python, Python IDLE, Информатика, Компас 3D и др.), Excel, Scratch, Desmos, Сообщество МЭШ&lt;br /&gt;
|Position=Бакалавриат&lt;br /&gt;
|Profile=Информатика, Робототехника&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
|Working_On=Смурфики и Гаргамель&lt;br /&gt;
}}&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=CODAP&amp;diff=21137</id>
		<title>CODAP</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=CODAP&amp;diff=21137"/>
		<updated>2024-10-31T15:14:10Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DigitalTool&lt;br /&gt;
|Description=Инструмент визуализации данных проведения статистических исследований на основе данных. Данные - есть готовые наборы данных, либо можно получить данные из игр и моделей. &lt;br /&gt;
* Готовые данные встраиваются в Snap!&lt;br /&gt;
* Источником данных могут быть модели NetLogo&lt;br /&gt;
|Affordances=Пользователь может загрузить набор данных из набора данных или просто перетащить их мышкой из своей таблицы в таблицу CODAP. &lt;br /&gt;
* Средство побуждает участника самостоятельно экспериментировать с разными типами данных&lt;br /&gt;
* Есть готовые примеры по различным темам обучения&lt;br /&gt;
* Видоизменённые данные всегда можно сохранить&lt;br /&gt;
|Field_of_knowledge=Информатика, Большие данные, Картография, Статистика&lt;br /&gt;
|Область применения=представление данных&lt;br /&gt;
|Clarifying_video=https://www.youtube.com/watch?v=Dm7DFi6Iums&lt;br /&gt;
|Website=https://codap.concord.org/&lt;br /&gt;
|End users=Учащиеся, Преподаватели, Исследователи&lt;br /&gt;
|Tool is made for=аналитика&lt;br /&gt;
|Developer=Concord Consortium&lt;br /&gt;
|Community=ESTEEM&lt;br /&gt;
|License=Открытая&lt;br /&gt;
|launch year=2019&lt;br /&gt;
|distant_collab=Нет&lt;br /&gt;
|Language_Ru_Eng=English&lt;br /&gt;
|AI=Нет&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Поясняющие материалы, ссылки на публикации ==&lt;br /&gt;
* http://found-data.blogspot.com/2018/08/using-codap-online-statistics-software.html&lt;br /&gt;
* https://www.youtube.com/watch?v=aD5tLWld98w - примеры использования&lt;br /&gt;
* &#039;&#039;&#039;[[Awash in Data]]&#039;&#039;&#039; книга на базе использования [[CODAP]]&lt;br /&gt;
&lt;br /&gt;
== Готовые датасеты можно привязывать к Snap! ==&lt;br /&gt;
* https://concord-consortium.github.io/codap-data/SampleDocs/Science/PhysChem/Elements/Elements.json&lt;br /&gt;
&lt;br /&gt;
[[Файл:Concord Element.png]]&lt;br /&gt;
&lt;br /&gt;
== Пример с городами на карте ==&lt;br /&gt;
* https://codap.concord.org/releases/latest/static/dg/en/cert/index.html?url=https://concord-consortium.github.io/codap-data/SampleDocs/Social_Science/World/World_Cities/World_Cities.codap&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://codap.concord.org/releases/latest/static/dg/en/cert/index.html?url=https://concord-consortium.github.io/codap-data/SampleDocs/Social_Science/World/World_Cities/World_Cities.codap&lt;br /&gt;
|width=000&lt;br /&gt;
|height=800&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример - игры с представлением данных (зависимость роста или образования от возраста) ==&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://codap.concord.org/app/static/dg/en/cert/index.html#file=examples:Getting%20started%20with%20CODAP%202&lt;br /&gt;
|width=900&lt;br /&gt;
|height=800&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Миграция китов ==&lt;br /&gt;
* https://codap.concord.org/releases/latest/static/dg/en/cert/index.html?url=https://concord-consortium.github.io/codap-data/SampleDocs/Science/Biology/four-seals/Four_Seals.codap&lt;br /&gt;
&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://codap.concord.org/releases/latest/static/dg/en/cert/index.html?url=https://concord-consortium.github.io/codap-data/SampleDocs/Science/Biology/four-seals/Four_Seals.codap&lt;br /&gt;
|width=900&lt;br /&gt;
|height=800&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Изменение климата ==&lt;br /&gt;
* https://codap.concord.org/releases/latest/static/dg/en/cert/index.html?url=https://concord-consortium.github.io/codap-data/SampleDocs/Science/E_Sciences/Climate_Change/Climate-Change-A.codap&lt;br /&gt;
&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://codap.concord.org/releases/latest/static/dg/en/cert/index.html?url=https://concord-consortium.github.io/codap-data/SampleDocs/Science/E_Sciences/Climate_Change/Climate-Change-A.codap&lt;br /&gt;
|width=900&lt;br /&gt;
|height=800&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RabotaNS&amp;diff=21136</id>
		<title>Участник:RabotaNS</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RabotaNS&amp;diff=21136"/>
		<updated>2024-10-31T14:51:35Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Робототехника, Образование, Искусственный интеллект, Культура, Игра, Мехатроника&lt;br /&gt;
|Environment=Python, Python IDLE, Информатика, Компас 3D и др.), Excel, Scratch, Desmos, Сообщество МЭШ&lt;br /&gt;
|Position=Бакалавриат&lt;br /&gt;
|Profile=Информатика, Робототехника&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
}}&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RabotaNS&amp;diff=21135</id>
		<title>Участник:RabotaNS</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RabotaNS&amp;diff=21135"/>
		<updated>2024-10-31T14:47:16Z</updated>

		<summary type="html">&lt;p&gt;RabotaNS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Робототехника, Образование, Искусственный интеллект, Культура, Игра, Мехатроника&lt;br /&gt;
|PedDirection=Нет&lt;br /&gt;
}}&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>RabotaNS</name></author>
	</entry>
</feed>