<?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=%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F+%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0</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=%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F+%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0"/>
	<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/%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0"/>
	<updated>2026-05-21T12:27:05Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46006</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46006"/>
		<updated>2026-04-13T11:54:10Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Исходные данные:&lt;br /&gt;
: Все события площадки до 06.04.2026 года - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_events_digid.csv&lt;br /&gt;
: Совместные действия участников  - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_team_digid.csv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== График активности 2022 - 2026 ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:DinamycDigida.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных и графиков ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Загрузка необходимых пакетов&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
&lt;br /&gt;
# Корректный URL API&lt;br /&gt;
api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Безопасное определение функции (если ещё не существует)&lt;br /&gt;
if (!exists(&amp;quot;get_mw_data&amp;quot;)) {&lt;br /&gt;
  get_mw_data &amp;lt;- function(action, params) {&lt;br /&gt;
    query_params &amp;lt;- c(action = action, format = &amp;quot;json&amp;quot;, params)&lt;br /&gt;
    response &amp;lt;- GET(api_url, query = query_params)&lt;br /&gt;
    &lt;br /&gt;
    # Дополнительная проверка типа ответа&lt;br /&gt;
    if (http_type(response) != &amp;quot;application/json&amp;quot;) {&lt;br /&gt;
      warning(&amp;quot;Ответ не в формате JSON&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    stop_for_status(response)&lt;br /&gt;
    fromJSON(content(response, &amp;quot;text&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Загрузка данных с обработкой ошибок&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
tryCatch({&lt;br /&gt;
  recent_edits &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;user|timestamp|title|comment|type&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;500&amp;quot;,&lt;br /&gt;
    rcshow = &amp;quot;!bot&amp;quot;,&lt;br /&gt;
    rcend = format(Sys.Date() - 365, &amp;quot;%Y%m%d%H%M%S&amp;quot;)&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  users_list &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;allusers&amp;quot;,&lt;br /&gt;
    aulimit = &amp;quot;500&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  print(&amp;quot;Данные успешно загружены!&amp;quot;)&lt;br /&gt;
  data_loaded &amp;lt;- TRUE&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при загрузке данных:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Если данные не загружены, прерываем выполнение&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось загрузить данные. Прекращение выполнения.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Проверка прав на запись в текущей директории&lt;br /&gt;
can_write &amp;lt;- file.access(getwd(), mode = 2) == 0&lt;br /&gt;
if (!can_write) {&lt;br /&gt;
  stop(&amp;quot;Нет прав на запись в текущую рабочую директорию. Выберите другую папку.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Очистка данных&lt;br /&gt;
clean_data &amp;lt;- recent_edits$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = ymd_hms(timestamp),&lt;br /&gt;
    date = as.Date(timestamp),&lt;br /&gt;
    day_of_week = wday(timestamp, label = TRUE, abbr = FALSE),&lt;br /&gt;
    hour_of_day = hour(timestamp),&lt;br /&gt;
    month = month(timestamp, label = TRUE),&lt;br /&gt;
    is_edit = type == &amp;quot;edit&amp;quot;&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  filter(date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(user, timestamp, date, day_of_week, hour_of_day, month, title, is_edit)&lt;br /&gt;
&lt;br /&gt;
# Проверка на пустые данные&lt;br /&gt;
if (nrow(clean_data) == 0) {&lt;br /&gt;
  stop(&amp;quot;Очищенные данные пусты. Проверьте параметры запроса к API.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(paste(&amp;quot;Обработано записей:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
&lt;br /&gt;
# Агрегация и анализ&lt;br /&gt;
user_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(user) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    edits_count = sum(is_edit),&lt;br /&gt;
    unique_pages = n_distinct(title),&lt;br /&gt;
    first_action = min(timestamp),&lt;br /&gt;
    last_action = max(timestamp)&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  arrange(desc(total_actions))&lt;br /&gt;
&lt;br /&gt;
new_users &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(new_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
weekly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(day_of_week) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
hourly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(hour_of_day) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
top_10_users &amp;lt;- user_summary %&amp;gt;% head(10)&lt;br /&gt;
monthly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n(), unique_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
# Построение графиков&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_activity, aes(x = month, y = total_actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;steelblue&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p2 &amp;lt;- ggplot(weekly_activity, aes(x = day_of_week, y = actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;darkgreen&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p3 &amp;lt;- ggplot(hourly_activity, aes(x = hour_of_day, y = actions)) +&lt;br /&gt;
  geom_line(color = &amp;quot;red&amp;quot;, size = 1) +&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;
  scale_x_continuous(breaks = 0:23) +&lt;br /&gt;
  theme_minimal()&lt;br /&gt;
&lt;br /&gt;
combined_plot &amp;lt;- (p1 | p2) / p3&lt;br /&gt;
&lt;br /&gt;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots&amp;quot;&lt;br /&gt;
if (!dir.exists(output_dir)) {&lt;br /&gt;
  dir.create(output_dir)&lt;br /&gt;
  print(paste(&amp;quot;Создана папка для графиков:&amp;quot;, output_dir))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Функция для безопасного сохранения графиков&lt;br /&gt;
safe_save_plot &amp;lt;- function(plot_obj, filename, width, height, dpi = 300) {&lt;br /&gt;
  if (!inherits(plot_obj, &amp;quot;ggplot&amp;quot;)) {&lt;br /&gt;
    print(paste(&amp;quot;Предупреждение: объект не является графиком ggplot — пропуск сохранения&amp;quot;, filename))&lt;br /&gt;
    return(FALSE)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  full_path &amp;lt;- file.path(output_dir, filename)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    ggsave(&lt;br /&gt;
      filename = full_path,&lt;br /&gt;
      plot = plot_obj,&lt;br /&gt;
      width = width,&lt;br /&gt;
      height = height,&lt;br /&gt;
      dpi = dpi,&lt;br /&gt;
      device = &amp;quot;png&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    print(paste(&amp;quot;График сохранён:&amp;quot;, normalizePath(full_path)))&lt;br /&gt;
    TRUE&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    print(paste(&amp;quot;Ошибка сохранения&amp;quot;, filename, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    FALSE&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Сохранение всех графиков&lt;br /&gt;
print(&amp;quot;Начинаем сохранение графиков...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Объединённый график&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  combined_plot,&lt;br /&gt;
  &amp;quot;activity_analysis_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 12,&lt;br /&gt;
  height = 8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по месяцам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p1,&lt;br /&gt;
  &amp;quot;monthly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по дням недели&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p2,&lt;br /&gt;
  &amp;quot;weekly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по часам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p3,&lt;br /&gt;
  &amp;quot;hourly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Финальная проверка — список сохранённых файлов&lt;br /&gt;
print(&amp;quot;\n---&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверка сохранённых файлов:&amp;quot;)&lt;br /&gt;
saved_files &amp;lt;- list.files(output_dir, pattern = &amp;quot;.png&amp;quot;, full.names = TRUE)&lt;br /&gt;
if (length(saved_files) &amp;gt; 0) {&lt;br /&gt;
  print(&amp;quot;Успешно сохранены файлы:&amp;quot;)&lt;br /&gt;
  print(saved_files)&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Анализ завершён!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результаты выполнения кода ===&lt;br /&gt;
После успешного выполнения скрипт:&lt;br /&gt;
&lt;br /&gt;
1. Загружает данные о действиях пользователей из API за последний год.&lt;br /&gt;
&lt;br /&gt;
2. Очищает и структурирует данные.&lt;br /&gt;
&lt;br /&gt;
3. Анализирует активность по месяцам, дням недели и часам суток.&lt;br /&gt;
&lt;br /&gt;
4. Определяет топ‑10 активных пользователей.&lt;br /&gt;
&lt;br /&gt;
5. Строит и сохраняет 4 графика в папке saved_plots.&lt;br /&gt;
&lt;br /&gt;
6. Выводит сводную информацию о результатах.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Действия пользователей.png|800px]]&lt;br /&gt;
[[Файл:Топ-10.png|800px]]&lt;br /&gt;
[[Файл:Активность по дням недели.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Объединённый график ===&lt;br /&gt;
[[Файл:Объединённый график.png| 800px]]&lt;br /&gt;
&lt;br /&gt;
На графике указаны динамика активности пользователей по месяцам, активность по дням недели, активность по часам суток.&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;br /&gt;
[[Категория: RRecipe]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46005</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46005"/>
		<updated>2026-04-13T11:51:58Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Результаты выполнения кода */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Исходные данные:&lt;br /&gt;
: Все события площадки до 06.04.2026 года - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_events_digid.csv&lt;br /&gt;
: Совместные действия участников  - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_team_digid.csv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== График активности 2022 - 2026 ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:DinamycDigida.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных и графиков ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Загрузка необходимых пакетов&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
&lt;br /&gt;
# Корректный URL API&lt;br /&gt;
api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Безопасное определение функции (если ещё не существует)&lt;br /&gt;
if (!exists(&amp;quot;get_mw_data&amp;quot;)) {&lt;br /&gt;
  get_mw_data &amp;lt;- function(action, params) {&lt;br /&gt;
    query_params &amp;lt;- c(action = action, format = &amp;quot;json&amp;quot;, params)&lt;br /&gt;
    response &amp;lt;- GET(api_url, query = query_params)&lt;br /&gt;
    &lt;br /&gt;
    # Дополнительная проверка типа ответа&lt;br /&gt;
    if (http_type(response) != &amp;quot;application/json&amp;quot;) {&lt;br /&gt;
      warning(&amp;quot;Ответ не в формате JSON&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    stop_for_status(response)&lt;br /&gt;
    fromJSON(content(response, &amp;quot;text&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Загрузка данных с обработкой ошибок&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
tryCatch({&lt;br /&gt;
  recent_edits &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;user|timestamp|title|comment|type&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;500&amp;quot;,&lt;br /&gt;
    rcshow = &amp;quot;!bot&amp;quot;,&lt;br /&gt;
    rcend = format(Sys.Date() - 365, &amp;quot;%Y%m%d%H%M%S&amp;quot;)&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  users_list &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;allusers&amp;quot;,&lt;br /&gt;
    aulimit = &amp;quot;500&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  print(&amp;quot;Данные успешно загружены!&amp;quot;)&lt;br /&gt;
  data_loaded &amp;lt;- TRUE&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при загрузке данных:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Если данные не загружены, прерываем выполнение&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось загрузить данные. Прекращение выполнения.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Проверка прав на запись в текущей директории&lt;br /&gt;
can_write &amp;lt;- file.access(getwd(), mode = 2) == 0&lt;br /&gt;
if (!can_write) {&lt;br /&gt;
  stop(&amp;quot;Нет прав на запись в текущую рабочую директорию. Выберите другую папку.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Очистка данных&lt;br /&gt;
clean_data &amp;lt;- recent_edits$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = ymd_hms(timestamp),&lt;br /&gt;
    date = as.Date(timestamp),&lt;br /&gt;
    day_of_week = wday(timestamp, label = TRUE, abbr = FALSE),&lt;br /&gt;
    hour_of_day = hour(timestamp),&lt;br /&gt;
    month = month(timestamp, label = TRUE),&lt;br /&gt;
    is_edit = type == &amp;quot;edit&amp;quot;&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  filter(date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(user, timestamp, date, day_of_week, hour_of_day, month, title, is_edit)&lt;br /&gt;
&lt;br /&gt;
# Проверка на пустые данные&lt;br /&gt;
if (nrow(clean_data) == 0) {&lt;br /&gt;
  stop(&amp;quot;Очищенные данные пусты. Проверьте параметры запроса к API.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(paste(&amp;quot;Обработано записей:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
&lt;br /&gt;
# Агрегация и анализ&lt;br /&gt;
user_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(user) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    edits_count = sum(is_edit),&lt;br /&gt;
    unique_pages = n_distinct(title),&lt;br /&gt;
    first_action = min(timestamp),&lt;br /&gt;
    last_action = max(timestamp)&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  arrange(desc(total_actions))&lt;br /&gt;
&lt;br /&gt;
new_users &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(new_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
weekly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(day_of_week) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
hourly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(hour_of_day) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
top_10_users &amp;lt;- user_summary %&amp;gt;% head(10)&lt;br /&gt;
monthly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n(), unique_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
# Построение графиков&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_activity, aes(x = month, y = total_actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;steelblue&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p2 &amp;lt;- ggplot(weekly_activity, aes(x = day_of_week, y = actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;darkgreen&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p3 &amp;lt;- ggplot(hourly_activity, aes(x = hour_of_day, y = actions)) +&lt;br /&gt;
  geom_line(color = &amp;quot;red&amp;quot;, size = 1) +&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;
  scale_x_continuous(breaks = 0:23) +&lt;br /&gt;
  theme_minimal()&lt;br /&gt;
&lt;br /&gt;
combined_plot &amp;lt;- (p1 | p2) / p3&lt;br /&gt;
&lt;br /&gt;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots&amp;quot;&lt;br /&gt;
if (!dir.exists(output_dir)) {&lt;br /&gt;
  dir.create(output_dir)&lt;br /&gt;
  print(paste(&amp;quot;Создана папка для графиков:&amp;quot;, output_dir))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Функция для безопасного сохранения графиков&lt;br /&gt;
safe_save_plot &amp;lt;- function(plot_obj, filename, width, height, dpi = 300) {&lt;br /&gt;
  if (!inherits(plot_obj, &amp;quot;ggplot&amp;quot;)) {&lt;br /&gt;
    print(paste(&amp;quot;Предупреждение: объект не является графиком ggplot — пропуск сохранения&amp;quot;, filename))&lt;br /&gt;
    return(FALSE)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  full_path &amp;lt;- file.path(output_dir, filename)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    ggsave(&lt;br /&gt;
      filename = full_path,&lt;br /&gt;
      plot = plot_obj,&lt;br /&gt;
      width = width,&lt;br /&gt;
      height = height,&lt;br /&gt;
      dpi = dpi,&lt;br /&gt;
      device = &amp;quot;png&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    print(paste(&amp;quot;График сохранён:&amp;quot;, normalizePath(full_path)))&lt;br /&gt;
    TRUE&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    print(paste(&amp;quot;Ошибка сохранения&amp;quot;, filename, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    FALSE&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Сохранение всех графиков&lt;br /&gt;
print(&amp;quot;Начинаем сохранение графиков...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Объединённый график&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  combined_plot,&lt;br /&gt;
  &amp;quot;activity_analysis_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 12,&lt;br /&gt;
  height = 8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по месяцам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p1,&lt;br /&gt;
  &amp;quot;monthly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по дням недели&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p2,&lt;br /&gt;
  &amp;quot;weekly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по часам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p3,&lt;br /&gt;
  &amp;quot;hourly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Финальная проверка — список сохранённых файлов&lt;br /&gt;
print(&amp;quot;\n---&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверка сохранённых файлов:&amp;quot;)&lt;br /&gt;
saved_files &amp;lt;- list.files(output_dir, pattern = &amp;quot;.png&amp;quot;, full.names = TRUE)&lt;br /&gt;
if (length(saved_files) &amp;gt; 0) {&lt;br /&gt;
  print(&amp;quot;Успешно сохранены файлы:&amp;quot;)&lt;br /&gt;
  print(saved_files)&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Анализ завершён!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результаты выполнения кода ===&lt;br /&gt;
После успешного выполнения скрипт:&lt;br /&gt;
&lt;br /&gt;
1. Загружает данные о действиях пользователей из API за последний год.&lt;br /&gt;
&lt;br /&gt;
2. Очищает и структурирует данные.&lt;br /&gt;
&lt;br /&gt;
3. Анализирует активность по месяцам, дням недели и часам суток.&lt;br /&gt;
&lt;br /&gt;
4. Определяет топ‑10 активных пользователей.&lt;br /&gt;
&lt;br /&gt;
5. Строит и сохраняет 4 графика в папке saved_plots.&lt;br /&gt;
&lt;br /&gt;
6. Выводит сводную информацию о результатах.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Действия пользователей.png|800px]]&lt;br /&gt;
[[Файл:Топ-10.png|800px]]&lt;br /&gt;
[[Файл:Активность по дням недели.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Объединённый график ===&lt;br /&gt;
[[Файл:Объединённый график.png| 800px]]&lt;br /&gt;
&lt;br /&gt;
На графике указаны динамика активности пользователей по месяцам, активность по дням недели, активность по часам суток.&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46004</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46004"/>
		<updated>2026-04-13T11:51:39Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Графики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Исходные данные:&lt;br /&gt;
: Все события площадки до 06.04.2026 года - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_events_digid.csv&lt;br /&gt;
: Совместные действия участников  - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_team_digid.csv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== График активности 2022 - 2026 ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:DinamycDigida.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных и графиков ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Загрузка необходимых пакетов&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
&lt;br /&gt;
# Корректный URL API&lt;br /&gt;
api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Безопасное определение функции (если ещё не существует)&lt;br /&gt;
if (!exists(&amp;quot;get_mw_data&amp;quot;)) {&lt;br /&gt;
  get_mw_data &amp;lt;- function(action, params) {&lt;br /&gt;
    query_params &amp;lt;- c(action = action, format = &amp;quot;json&amp;quot;, params)&lt;br /&gt;
    response &amp;lt;- GET(api_url, query = query_params)&lt;br /&gt;
    &lt;br /&gt;
    # Дополнительная проверка типа ответа&lt;br /&gt;
    if (http_type(response) != &amp;quot;application/json&amp;quot;) {&lt;br /&gt;
      warning(&amp;quot;Ответ не в формате JSON&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    stop_for_status(response)&lt;br /&gt;
    fromJSON(content(response, &amp;quot;text&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Загрузка данных с обработкой ошибок&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
tryCatch({&lt;br /&gt;
  recent_edits &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;user|timestamp|title|comment|type&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;500&amp;quot;,&lt;br /&gt;
    rcshow = &amp;quot;!bot&amp;quot;,&lt;br /&gt;
    rcend = format(Sys.Date() - 365, &amp;quot;%Y%m%d%H%M%S&amp;quot;)&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  users_list &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;allusers&amp;quot;,&lt;br /&gt;
    aulimit = &amp;quot;500&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  print(&amp;quot;Данные успешно загружены!&amp;quot;)&lt;br /&gt;
  data_loaded &amp;lt;- TRUE&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при загрузке данных:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Если данные не загружены, прерываем выполнение&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось загрузить данные. Прекращение выполнения.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Проверка прав на запись в текущей директории&lt;br /&gt;
can_write &amp;lt;- file.access(getwd(), mode = 2) == 0&lt;br /&gt;
if (!can_write) {&lt;br /&gt;
  stop(&amp;quot;Нет прав на запись в текущую рабочую директорию. Выберите другую папку.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Очистка данных&lt;br /&gt;
clean_data &amp;lt;- recent_edits$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = ymd_hms(timestamp),&lt;br /&gt;
    date = as.Date(timestamp),&lt;br /&gt;
    day_of_week = wday(timestamp, label = TRUE, abbr = FALSE),&lt;br /&gt;
    hour_of_day = hour(timestamp),&lt;br /&gt;
    month = month(timestamp, label = TRUE),&lt;br /&gt;
    is_edit = type == &amp;quot;edit&amp;quot;&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  filter(date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(user, timestamp, date, day_of_week, hour_of_day, month, title, is_edit)&lt;br /&gt;
&lt;br /&gt;
# Проверка на пустые данные&lt;br /&gt;
if (nrow(clean_data) == 0) {&lt;br /&gt;
  stop(&amp;quot;Очищенные данные пусты. Проверьте параметры запроса к API.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(paste(&amp;quot;Обработано записей:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
&lt;br /&gt;
# Агрегация и анализ&lt;br /&gt;
user_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(user) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    edits_count = sum(is_edit),&lt;br /&gt;
    unique_pages = n_distinct(title),&lt;br /&gt;
    first_action = min(timestamp),&lt;br /&gt;
    last_action = max(timestamp)&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  arrange(desc(total_actions))&lt;br /&gt;
&lt;br /&gt;
new_users &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(new_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
weekly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(day_of_week) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
hourly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(hour_of_day) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
top_10_users &amp;lt;- user_summary %&amp;gt;% head(10)&lt;br /&gt;
monthly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n(), unique_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
# Построение графиков&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_activity, aes(x = month, y = total_actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;steelblue&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p2 &amp;lt;- ggplot(weekly_activity, aes(x = day_of_week, y = actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;darkgreen&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p3 &amp;lt;- ggplot(hourly_activity, aes(x = hour_of_day, y = actions)) +&lt;br /&gt;
  geom_line(color = &amp;quot;red&amp;quot;, size = 1) +&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;
  scale_x_continuous(breaks = 0:23) +&lt;br /&gt;
  theme_minimal()&lt;br /&gt;
&lt;br /&gt;
combined_plot &amp;lt;- (p1 | p2) / p3&lt;br /&gt;
&lt;br /&gt;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots&amp;quot;&lt;br /&gt;
if (!dir.exists(output_dir)) {&lt;br /&gt;
  dir.create(output_dir)&lt;br /&gt;
  print(paste(&amp;quot;Создана папка для графиков:&amp;quot;, output_dir))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Функция для безопасного сохранения графиков&lt;br /&gt;
safe_save_plot &amp;lt;- function(plot_obj, filename, width, height, dpi = 300) {&lt;br /&gt;
  if (!inherits(plot_obj, &amp;quot;ggplot&amp;quot;)) {&lt;br /&gt;
    print(paste(&amp;quot;Предупреждение: объект не является графиком ggplot — пропуск сохранения&amp;quot;, filename))&lt;br /&gt;
    return(FALSE)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  full_path &amp;lt;- file.path(output_dir, filename)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    ggsave(&lt;br /&gt;
      filename = full_path,&lt;br /&gt;
      plot = plot_obj,&lt;br /&gt;
      width = width,&lt;br /&gt;
      height = height,&lt;br /&gt;
      dpi = dpi,&lt;br /&gt;
      device = &amp;quot;png&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    print(paste(&amp;quot;График сохранён:&amp;quot;, normalizePath(full_path)))&lt;br /&gt;
    TRUE&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    print(paste(&amp;quot;Ошибка сохранения&amp;quot;, filename, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    FALSE&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Сохранение всех графиков&lt;br /&gt;
print(&amp;quot;Начинаем сохранение графиков...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Объединённый график&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  combined_plot,&lt;br /&gt;
  &amp;quot;activity_analysis_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 12,&lt;br /&gt;
  height = 8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по месяцам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p1,&lt;br /&gt;
  &amp;quot;monthly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по дням недели&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p2,&lt;br /&gt;
  &amp;quot;weekly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по часам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p3,&lt;br /&gt;
  &amp;quot;hourly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Финальная проверка — список сохранённых файлов&lt;br /&gt;
print(&amp;quot;\n---&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверка сохранённых файлов:&amp;quot;)&lt;br /&gt;
saved_files &amp;lt;- list.files(output_dir, pattern = &amp;quot;.png&amp;quot;, full.names = TRUE)&lt;br /&gt;
if (length(saved_files) &amp;gt; 0) {&lt;br /&gt;
  print(&amp;quot;Успешно сохранены файлы:&amp;quot;)&lt;br /&gt;
  print(saved_files)&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Анализ завершён!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результаты выполнения кода ===&lt;br /&gt;
После успешного выполнения скрипт:&lt;br /&gt;
1. Загружает данные о действиях пользователей из API за последний год.&lt;br /&gt;
2. Очищает и структурирует данные.&lt;br /&gt;
3. Анализирует активность по месяцам, дням недели и часам суток.&lt;br /&gt;
4. Определяет топ‑10 активных пользователей.&lt;br /&gt;
5. Строит и сохраняет 4 графика в папке saved_plots.&lt;br /&gt;
6. Выводит сводную информацию о результатах.&lt;br /&gt;
[[Файл:Действия пользователей.png|800px]]&lt;br /&gt;
[[Файл:Топ-10.png|800px]]&lt;br /&gt;
[[Файл:Активность по дням недели.png|800px]]&lt;br /&gt;
=== Объединённый график ===&lt;br /&gt;
[[Файл:Объединённый график.png| 800px]]&lt;br /&gt;
&lt;br /&gt;
На графике указаны динамика активности пользователей по месяцам, активность по дням недели, активность по часам суток.&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46003</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46003"/>
		<updated>2026-04-13T11:51:15Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Графики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Исходные данные:&lt;br /&gt;
: Все события площадки до 06.04.2026 года - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_events_digid.csv&lt;br /&gt;
: Совместные действия участников  - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_team_digid.csv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== График активности 2022 - 2026 ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:DinamycDigida.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных и графиков ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Загрузка необходимых пакетов&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
&lt;br /&gt;
# Корректный URL API&lt;br /&gt;
api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Безопасное определение функции (если ещё не существует)&lt;br /&gt;
if (!exists(&amp;quot;get_mw_data&amp;quot;)) {&lt;br /&gt;
  get_mw_data &amp;lt;- function(action, params) {&lt;br /&gt;
    query_params &amp;lt;- c(action = action, format = &amp;quot;json&amp;quot;, params)&lt;br /&gt;
    response &amp;lt;- GET(api_url, query = query_params)&lt;br /&gt;
    &lt;br /&gt;
    # Дополнительная проверка типа ответа&lt;br /&gt;
    if (http_type(response) != &amp;quot;application/json&amp;quot;) {&lt;br /&gt;
      warning(&amp;quot;Ответ не в формате JSON&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    stop_for_status(response)&lt;br /&gt;
    fromJSON(content(response, &amp;quot;text&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Загрузка данных с обработкой ошибок&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
tryCatch({&lt;br /&gt;
  recent_edits &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;user|timestamp|title|comment|type&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;500&amp;quot;,&lt;br /&gt;
    rcshow = &amp;quot;!bot&amp;quot;,&lt;br /&gt;
    rcend = format(Sys.Date() - 365, &amp;quot;%Y%m%d%H%M%S&amp;quot;)&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  users_list &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;allusers&amp;quot;,&lt;br /&gt;
    aulimit = &amp;quot;500&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  print(&amp;quot;Данные успешно загружены!&amp;quot;)&lt;br /&gt;
  data_loaded &amp;lt;- TRUE&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при загрузке данных:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Если данные не загружены, прерываем выполнение&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось загрузить данные. Прекращение выполнения.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Проверка прав на запись в текущей директории&lt;br /&gt;
can_write &amp;lt;- file.access(getwd(), mode = 2) == 0&lt;br /&gt;
if (!can_write) {&lt;br /&gt;
  stop(&amp;quot;Нет прав на запись в текущую рабочую директорию. Выберите другую папку.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Очистка данных&lt;br /&gt;
clean_data &amp;lt;- recent_edits$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = ymd_hms(timestamp),&lt;br /&gt;
    date = as.Date(timestamp),&lt;br /&gt;
    day_of_week = wday(timestamp, label = TRUE, abbr = FALSE),&lt;br /&gt;
    hour_of_day = hour(timestamp),&lt;br /&gt;
    month = month(timestamp, label = TRUE),&lt;br /&gt;
    is_edit = type == &amp;quot;edit&amp;quot;&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  filter(date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(user, timestamp, date, day_of_week, hour_of_day, month, title, is_edit)&lt;br /&gt;
&lt;br /&gt;
# Проверка на пустые данные&lt;br /&gt;
if (nrow(clean_data) == 0) {&lt;br /&gt;
  stop(&amp;quot;Очищенные данные пусты. Проверьте параметры запроса к API.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(paste(&amp;quot;Обработано записей:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
&lt;br /&gt;
# Агрегация и анализ&lt;br /&gt;
user_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(user) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    edits_count = sum(is_edit),&lt;br /&gt;
    unique_pages = n_distinct(title),&lt;br /&gt;
    first_action = min(timestamp),&lt;br /&gt;
    last_action = max(timestamp)&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  arrange(desc(total_actions))&lt;br /&gt;
&lt;br /&gt;
new_users &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(new_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
weekly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(day_of_week) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
hourly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(hour_of_day) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
top_10_users &amp;lt;- user_summary %&amp;gt;% head(10)&lt;br /&gt;
monthly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n(), unique_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
# Построение графиков&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_activity, aes(x = month, y = total_actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;steelblue&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p2 &amp;lt;- ggplot(weekly_activity, aes(x = day_of_week, y = actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;darkgreen&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p3 &amp;lt;- ggplot(hourly_activity, aes(x = hour_of_day, y = actions)) +&lt;br /&gt;
  geom_line(color = &amp;quot;red&amp;quot;, size = 1) +&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;
  scale_x_continuous(breaks = 0:23) +&lt;br /&gt;
  theme_minimal()&lt;br /&gt;
&lt;br /&gt;
combined_plot &amp;lt;- (p1 | p2) / p3&lt;br /&gt;
&lt;br /&gt;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots&amp;quot;&lt;br /&gt;
if (!dir.exists(output_dir)) {&lt;br /&gt;
  dir.create(output_dir)&lt;br /&gt;
  print(paste(&amp;quot;Создана папка для графиков:&amp;quot;, output_dir))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Функция для безопасного сохранения графиков&lt;br /&gt;
safe_save_plot &amp;lt;- function(plot_obj, filename, width, height, dpi = 300) {&lt;br /&gt;
  if (!inherits(plot_obj, &amp;quot;ggplot&amp;quot;)) {&lt;br /&gt;
    print(paste(&amp;quot;Предупреждение: объект не является графиком ggplot — пропуск сохранения&amp;quot;, filename))&lt;br /&gt;
    return(FALSE)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  full_path &amp;lt;- file.path(output_dir, filename)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    ggsave(&lt;br /&gt;
      filename = full_path,&lt;br /&gt;
      plot = plot_obj,&lt;br /&gt;
      width = width,&lt;br /&gt;
      height = height,&lt;br /&gt;
      dpi = dpi,&lt;br /&gt;
      device = &amp;quot;png&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    print(paste(&amp;quot;График сохранён:&amp;quot;, normalizePath(full_path)))&lt;br /&gt;
    TRUE&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    print(paste(&amp;quot;Ошибка сохранения&amp;quot;, filename, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    FALSE&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Сохранение всех графиков&lt;br /&gt;
print(&amp;quot;Начинаем сохранение графиков...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Объединённый график&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  combined_plot,&lt;br /&gt;
  &amp;quot;activity_analysis_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 12,&lt;br /&gt;
  height = 8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по месяцам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p1,&lt;br /&gt;
  &amp;quot;monthly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по дням недели&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p2,&lt;br /&gt;
  &amp;quot;weekly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по часам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p3,&lt;br /&gt;
  &amp;quot;hourly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Финальная проверка — список сохранённых файлов&lt;br /&gt;
print(&amp;quot;\n---&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверка сохранённых файлов:&amp;quot;)&lt;br /&gt;
saved_files &amp;lt;- list.files(output_dir, pattern = &amp;quot;.png&amp;quot;, full.names = TRUE)&lt;br /&gt;
if (length(saved_files) &amp;gt; 0) {&lt;br /&gt;
  print(&amp;quot;Успешно сохранены файлы:&amp;quot;)&lt;br /&gt;
  print(saved_files)&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Анализ завершён!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результаты выполнения кода ===&lt;br /&gt;
После успешного выполнения скрипт:&lt;br /&gt;
1. Загружает данные о действиях пользователей из API за последний год.&lt;br /&gt;
2. Очищает и структурирует данные.&lt;br /&gt;
3. Анализирует активность по месяцам, дням недели и часам суток.&lt;br /&gt;
4. Определяет топ‑10 активных пользователей.&lt;br /&gt;
5. Строит и сохраняет 4 графика в папке saved_plots.&lt;br /&gt;
6. Выводит сводную информацию о результатах.&lt;br /&gt;
[[Файл:Действия пользователей.png|800px]]&lt;br /&gt;
[[Файл:Топ-10.png|800px]]&lt;br /&gt;
[[Файл:Активность по дням недели.png|800px]]&lt;br /&gt;
=== Графики ===&lt;br /&gt;
Объединённый график&lt;br /&gt;
[[Файл:Объединённый график.png| 800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На графике указаны динамика активности пользователей по месяцам, активность по дням недели, активность по часам суток.&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46002</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46002"/>
		<updated>2026-04-13T11:49:36Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Результаты выполнения кода */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Исходные данные:&lt;br /&gt;
: Все события площадки до 06.04.2026 года - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_events_digid.csv&lt;br /&gt;
: Совместные действия участников  - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_team_digid.csv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== График активности 2022 - 2026 ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:DinamycDigida.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных и графиков ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Загрузка необходимых пакетов&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
&lt;br /&gt;
# Корректный URL API&lt;br /&gt;
api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Безопасное определение функции (если ещё не существует)&lt;br /&gt;
if (!exists(&amp;quot;get_mw_data&amp;quot;)) {&lt;br /&gt;
  get_mw_data &amp;lt;- function(action, params) {&lt;br /&gt;
    query_params &amp;lt;- c(action = action, format = &amp;quot;json&amp;quot;, params)&lt;br /&gt;
    response &amp;lt;- GET(api_url, query = query_params)&lt;br /&gt;
    &lt;br /&gt;
    # Дополнительная проверка типа ответа&lt;br /&gt;
    if (http_type(response) != &amp;quot;application/json&amp;quot;) {&lt;br /&gt;
      warning(&amp;quot;Ответ не в формате JSON&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    stop_for_status(response)&lt;br /&gt;
    fromJSON(content(response, &amp;quot;text&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Загрузка данных с обработкой ошибок&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
tryCatch({&lt;br /&gt;
  recent_edits &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;user|timestamp|title|comment|type&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;500&amp;quot;,&lt;br /&gt;
    rcshow = &amp;quot;!bot&amp;quot;,&lt;br /&gt;
    rcend = format(Sys.Date() - 365, &amp;quot;%Y%m%d%H%M%S&amp;quot;)&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  users_list &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;allusers&amp;quot;,&lt;br /&gt;
    aulimit = &amp;quot;500&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  print(&amp;quot;Данные успешно загружены!&amp;quot;)&lt;br /&gt;
  data_loaded &amp;lt;- TRUE&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при загрузке данных:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Если данные не загружены, прерываем выполнение&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось загрузить данные. Прекращение выполнения.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Проверка прав на запись в текущей директории&lt;br /&gt;
can_write &amp;lt;- file.access(getwd(), mode = 2) == 0&lt;br /&gt;
if (!can_write) {&lt;br /&gt;
  stop(&amp;quot;Нет прав на запись в текущую рабочую директорию. Выберите другую папку.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Очистка данных&lt;br /&gt;
clean_data &amp;lt;- recent_edits$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = ymd_hms(timestamp),&lt;br /&gt;
    date = as.Date(timestamp),&lt;br /&gt;
    day_of_week = wday(timestamp, label = TRUE, abbr = FALSE),&lt;br /&gt;
    hour_of_day = hour(timestamp),&lt;br /&gt;
    month = month(timestamp, label = TRUE),&lt;br /&gt;
    is_edit = type == &amp;quot;edit&amp;quot;&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  filter(date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(user, timestamp, date, day_of_week, hour_of_day, month, title, is_edit)&lt;br /&gt;
&lt;br /&gt;
# Проверка на пустые данные&lt;br /&gt;
if (nrow(clean_data) == 0) {&lt;br /&gt;
  stop(&amp;quot;Очищенные данные пусты. Проверьте параметры запроса к API.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(paste(&amp;quot;Обработано записей:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
&lt;br /&gt;
# Агрегация и анализ&lt;br /&gt;
user_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(user) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    edits_count = sum(is_edit),&lt;br /&gt;
    unique_pages = n_distinct(title),&lt;br /&gt;
    first_action = min(timestamp),&lt;br /&gt;
    last_action = max(timestamp)&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  arrange(desc(total_actions))&lt;br /&gt;
&lt;br /&gt;
new_users &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(new_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
weekly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(day_of_week) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
hourly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(hour_of_day) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
top_10_users &amp;lt;- user_summary %&amp;gt;% head(10)&lt;br /&gt;
monthly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n(), unique_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
# Построение графиков&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_activity, aes(x = month, y = total_actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;steelblue&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p2 &amp;lt;- ggplot(weekly_activity, aes(x = day_of_week, y = actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;darkgreen&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p3 &amp;lt;- ggplot(hourly_activity, aes(x = hour_of_day, y = actions)) +&lt;br /&gt;
  geom_line(color = &amp;quot;red&amp;quot;, size = 1) +&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;
  scale_x_continuous(breaks = 0:23) +&lt;br /&gt;
  theme_minimal()&lt;br /&gt;
&lt;br /&gt;
combined_plot &amp;lt;- (p1 | p2) / p3&lt;br /&gt;
&lt;br /&gt;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots&amp;quot;&lt;br /&gt;
if (!dir.exists(output_dir)) {&lt;br /&gt;
  dir.create(output_dir)&lt;br /&gt;
  print(paste(&amp;quot;Создана папка для графиков:&amp;quot;, output_dir))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Функция для безопасного сохранения графиков&lt;br /&gt;
safe_save_plot &amp;lt;- function(plot_obj, filename, width, height, dpi = 300) {&lt;br /&gt;
  if (!inherits(plot_obj, &amp;quot;ggplot&amp;quot;)) {&lt;br /&gt;
    print(paste(&amp;quot;Предупреждение: объект не является графиком ggplot — пропуск сохранения&amp;quot;, filename))&lt;br /&gt;
    return(FALSE)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  full_path &amp;lt;- file.path(output_dir, filename)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    ggsave(&lt;br /&gt;
      filename = full_path,&lt;br /&gt;
      plot = plot_obj,&lt;br /&gt;
      width = width,&lt;br /&gt;
      height = height,&lt;br /&gt;
      dpi = dpi,&lt;br /&gt;
      device = &amp;quot;png&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    print(paste(&amp;quot;График сохранён:&amp;quot;, normalizePath(full_path)))&lt;br /&gt;
    TRUE&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    print(paste(&amp;quot;Ошибка сохранения&amp;quot;, filename, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    FALSE&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Сохранение всех графиков&lt;br /&gt;
print(&amp;quot;Начинаем сохранение графиков...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Объединённый график&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  combined_plot,&lt;br /&gt;
  &amp;quot;activity_analysis_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 12,&lt;br /&gt;
  height = 8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по месяцам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p1,&lt;br /&gt;
  &amp;quot;monthly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по дням недели&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p2,&lt;br /&gt;
  &amp;quot;weekly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по часам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p3,&lt;br /&gt;
  &amp;quot;hourly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Финальная проверка — список сохранённых файлов&lt;br /&gt;
print(&amp;quot;\n---&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверка сохранённых файлов:&amp;quot;)&lt;br /&gt;
saved_files &amp;lt;- list.files(output_dir, pattern = &amp;quot;.png&amp;quot;, full.names = TRUE)&lt;br /&gt;
if (length(saved_files) &amp;gt; 0) {&lt;br /&gt;
  print(&amp;quot;Успешно сохранены файлы:&amp;quot;)&lt;br /&gt;
  print(saved_files)&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Анализ завершён!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результаты выполнения кода ===&lt;br /&gt;
После успешного выполнения скрипт:&lt;br /&gt;
1. Загружает данные о действиях пользователей из API за последний год.&lt;br /&gt;
2. Очищает и структурирует данные.&lt;br /&gt;
3. Анализирует активность по месяцам, дням недели и часам суток.&lt;br /&gt;
4. Определяет топ‑10 активных пользователей.&lt;br /&gt;
5. Строит и сохраняет 4 графика в папке saved_plots.&lt;br /&gt;
6. Выводит сводную информацию о результатах.&lt;br /&gt;
[[Файл:Действия пользователей.png|800px]]&lt;br /&gt;
[[Файл:Топ-10.png|800px]]&lt;br /&gt;
[[Файл:Активность по дням недели.png|800px]]&lt;br /&gt;
=== Графики ===&lt;br /&gt;
Объединённый график&lt;br /&gt;
[[Файл:Объединённый график.png| 800px]]&lt;br /&gt;
На графике указаны динамика активности пользователей по месяцам, активность по дням недели, активность по часам суток.&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA.png&amp;diff=46001</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%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA.png&amp;diff=46001"/>
		<updated>2026-04-13T11:49:05Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На графике указаны динамика активности пользователей по месяцам, активность по дням недели, активность по часам суток.&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46000</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=46000"/>
		<updated>2026-04-13T11:44:33Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Исходные данные:&lt;br /&gt;
: Все события площадки до 06.04.2026 года - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_events_digid.csv&lt;br /&gt;
: Совместные действия участников  - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_team_digid.csv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== График активности 2022 - 2026 ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:DinamycDigida.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных и графиков ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Загрузка необходимых пакетов&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
&lt;br /&gt;
# Корректный URL API&lt;br /&gt;
api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Безопасное определение функции (если ещё не существует)&lt;br /&gt;
if (!exists(&amp;quot;get_mw_data&amp;quot;)) {&lt;br /&gt;
  get_mw_data &amp;lt;- function(action, params) {&lt;br /&gt;
    query_params &amp;lt;- c(action = action, format = &amp;quot;json&amp;quot;, params)&lt;br /&gt;
    response &amp;lt;- GET(api_url, query = query_params)&lt;br /&gt;
    &lt;br /&gt;
    # Дополнительная проверка типа ответа&lt;br /&gt;
    if (http_type(response) != &amp;quot;application/json&amp;quot;) {&lt;br /&gt;
      warning(&amp;quot;Ответ не в формате JSON&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    stop_for_status(response)&lt;br /&gt;
    fromJSON(content(response, &amp;quot;text&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Загрузка данных с обработкой ошибок&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
tryCatch({&lt;br /&gt;
  recent_edits &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;user|timestamp|title|comment|type&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;500&amp;quot;,&lt;br /&gt;
    rcshow = &amp;quot;!bot&amp;quot;,&lt;br /&gt;
    rcend = format(Sys.Date() - 365, &amp;quot;%Y%m%d%H%M%S&amp;quot;)&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  users_list &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;allusers&amp;quot;,&lt;br /&gt;
    aulimit = &amp;quot;500&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  print(&amp;quot;Данные успешно загружены!&amp;quot;)&lt;br /&gt;
  data_loaded &amp;lt;- TRUE&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при загрузке данных:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Если данные не загружены, прерываем выполнение&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось загрузить данные. Прекращение выполнения.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Проверка прав на запись в текущей директории&lt;br /&gt;
can_write &amp;lt;- file.access(getwd(), mode = 2) == 0&lt;br /&gt;
if (!can_write) {&lt;br /&gt;
  stop(&amp;quot;Нет прав на запись в текущую рабочую директорию. Выберите другую папку.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Очистка данных&lt;br /&gt;
clean_data &amp;lt;- recent_edits$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = ymd_hms(timestamp),&lt;br /&gt;
    date = as.Date(timestamp),&lt;br /&gt;
    day_of_week = wday(timestamp, label = TRUE, abbr = FALSE),&lt;br /&gt;
    hour_of_day = hour(timestamp),&lt;br /&gt;
    month = month(timestamp, label = TRUE),&lt;br /&gt;
    is_edit = type == &amp;quot;edit&amp;quot;&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  filter(date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(user, timestamp, date, day_of_week, hour_of_day, month, title, is_edit)&lt;br /&gt;
&lt;br /&gt;
# Проверка на пустые данные&lt;br /&gt;
if (nrow(clean_data) == 0) {&lt;br /&gt;
  stop(&amp;quot;Очищенные данные пусты. Проверьте параметры запроса к API.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(paste(&amp;quot;Обработано записей:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
&lt;br /&gt;
# Агрегация и анализ&lt;br /&gt;
user_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(user) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    edits_count = sum(is_edit),&lt;br /&gt;
    unique_pages = n_distinct(title),&lt;br /&gt;
    first_action = min(timestamp),&lt;br /&gt;
    last_action = max(timestamp)&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  arrange(desc(total_actions))&lt;br /&gt;
&lt;br /&gt;
new_users &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(new_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
weekly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(day_of_week) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
hourly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(hour_of_day) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
top_10_users &amp;lt;- user_summary %&amp;gt;% head(10)&lt;br /&gt;
monthly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n(), unique_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
# Построение графиков&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_activity, aes(x = month, y = total_actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;steelblue&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p2 &amp;lt;- ggplot(weekly_activity, aes(x = day_of_week, y = actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;darkgreen&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p3 &amp;lt;- ggplot(hourly_activity, aes(x = hour_of_day, y = actions)) +&lt;br /&gt;
  geom_line(color = &amp;quot;red&amp;quot;, size = 1) +&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;
  scale_x_continuous(breaks = 0:23) +&lt;br /&gt;
  theme_minimal()&lt;br /&gt;
&lt;br /&gt;
combined_plot &amp;lt;- (p1 | p2) / p3&lt;br /&gt;
&lt;br /&gt;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots&amp;quot;&lt;br /&gt;
if (!dir.exists(output_dir)) {&lt;br /&gt;
  dir.create(output_dir)&lt;br /&gt;
  print(paste(&amp;quot;Создана папка для графиков:&amp;quot;, output_dir))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Функция для безопасного сохранения графиков&lt;br /&gt;
safe_save_plot &amp;lt;- function(plot_obj, filename, width, height, dpi = 300) {&lt;br /&gt;
  if (!inherits(plot_obj, &amp;quot;ggplot&amp;quot;)) {&lt;br /&gt;
    print(paste(&amp;quot;Предупреждение: объект не является графиком ggplot — пропуск сохранения&amp;quot;, filename))&lt;br /&gt;
    return(FALSE)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  full_path &amp;lt;- file.path(output_dir, filename)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    ggsave(&lt;br /&gt;
      filename = full_path,&lt;br /&gt;
      plot = plot_obj,&lt;br /&gt;
      width = width,&lt;br /&gt;
      height = height,&lt;br /&gt;
      dpi = dpi,&lt;br /&gt;
      device = &amp;quot;png&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    print(paste(&amp;quot;График сохранён:&amp;quot;, normalizePath(full_path)))&lt;br /&gt;
    TRUE&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    print(paste(&amp;quot;Ошибка сохранения&amp;quot;, filename, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    FALSE&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Сохранение всех графиков&lt;br /&gt;
print(&amp;quot;Начинаем сохранение графиков...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Объединённый график&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  combined_plot,&lt;br /&gt;
  &amp;quot;activity_analysis_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 12,&lt;br /&gt;
  height = 8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по месяцам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p1,&lt;br /&gt;
  &amp;quot;monthly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по дням недели&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p2,&lt;br /&gt;
  &amp;quot;weekly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по часам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p3,&lt;br /&gt;
  &amp;quot;hourly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Финальная проверка — список сохранённых файлов&lt;br /&gt;
print(&amp;quot;\n---&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверка сохранённых файлов:&amp;quot;)&lt;br /&gt;
saved_files &amp;lt;- list.files(output_dir, pattern = &amp;quot;.png&amp;quot;, full.names = TRUE)&lt;br /&gt;
if (length(saved_files) &amp;gt; 0) {&lt;br /&gt;
  print(&amp;quot;Успешно сохранены файлы:&amp;quot;)&lt;br /&gt;
  print(saved_files)&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Анализ завершён!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результаты выполнения кода ===&lt;br /&gt;
После успешного выполнения скрипт:&lt;br /&gt;
1. Загружает данные о действиях пользователей из API за последний год.&lt;br /&gt;
2. Очищает и структурирует данные.&lt;br /&gt;
3. Анализирует активность по месяцам, дням недели и часам суток.&lt;br /&gt;
4. Определяет топ‑10 активных пользователей.&lt;br /&gt;
5. Строит и сохраняет 4 графика в папке saved_plots.&lt;br /&gt;
6. Выводит сводную информацию о результатах.&lt;br /&gt;
[[Файл:Действия пользователей.png|800px]]&lt;br /&gt;
[[Файл:Топ-10.png|800px]]&lt;br /&gt;
[[Файл:Активность по дням недели.png|800px]]&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45999</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45999"/>
		<updated>2026-04-13T11:43:46Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Исходные данные:&lt;br /&gt;
: Все события площадки до 06.04.2026 года - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_events_digid.csv&lt;br /&gt;
: Совместные действия участников  - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_team_digid.csv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== График активности 2022 - 2026 ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:DinamycDigida.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных и графиков ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Загрузка необходимых пакетов&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
&lt;br /&gt;
# Корректный URL API&lt;br /&gt;
api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Безопасное определение функции (если ещё не существует)&lt;br /&gt;
if (!exists(&amp;quot;get_mw_data&amp;quot;)) {&lt;br /&gt;
  get_mw_data &amp;lt;- function(action, params) {&lt;br /&gt;
    query_params &amp;lt;- c(action = action, format = &amp;quot;json&amp;quot;, params)&lt;br /&gt;
    response &amp;lt;- GET(api_url, query = query_params)&lt;br /&gt;
    &lt;br /&gt;
    # Дополнительная проверка типа ответа&lt;br /&gt;
    if (http_type(response) != &amp;quot;application/json&amp;quot;) {&lt;br /&gt;
      warning(&amp;quot;Ответ не в формате JSON&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    stop_for_status(response)&lt;br /&gt;
    fromJSON(content(response, &amp;quot;text&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Загрузка данных с обработкой ошибок&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
tryCatch({&lt;br /&gt;
  recent_edits &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;user|timestamp|title|comment|type&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;500&amp;quot;,&lt;br /&gt;
    rcshow = &amp;quot;!bot&amp;quot;,&lt;br /&gt;
    rcend = format(Sys.Date() - 365, &amp;quot;%Y%m%d%H%M%S&amp;quot;)&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  users_list &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;allusers&amp;quot;,&lt;br /&gt;
    aulimit = &amp;quot;500&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  print(&amp;quot;Данные успешно загружены!&amp;quot;)&lt;br /&gt;
  data_loaded &amp;lt;- TRUE&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при загрузке данных:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Если данные не загружены, прерываем выполнение&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось загрузить данные. Прекращение выполнения.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Проверка прав на запись в текущей директории&lt;br /&gt;
can_write &amp;lt;- file.access(getwd(), mode = 2) == 0&lt;br /&gt;
if (!can_write) {&lt;br /&gt;
  stop(&amp;quot;Нет прав на запись в текущую рабочую директорию. Выберите другую папку.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Очистка данных&lt;br /&gt;
clean_data &amp;lt;- recent_edits$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = ymd_hms(timestamp),&lt;br /&gt;
    date = as.Date(timestamp),&lt;br /&gt;
    day_of_week = wday(timestamp, label = TRUE, abbr = FALSE),&lt;br /&gt;
    hour_of_day = hour(timestamp),&lt;br /&gt;
    month = month(timestamp, label = TRUE),&lt;br /&gt;
    is_edit = type == &amp;quot;edit&amp;quot;&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  filter(date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(user, timestamp, date, day_of_week, hour_of_day, month, title, is_edit)&lt;br /&gt;
&lt;br /&gt;
# Проверка на пустые данные&lt;br /&gt;
if (nrow(clean_data) == 0) {&lt;br /&gt;
  stop(&amp;quot;Очищенные данные пусты. Проверьте параметры запроса к API.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(paste(&amp;quot;Обработано записей:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
&lt;br /&gt;
# Агрегация и анализ&lt;br /&gt;
user_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(user) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    edits_count = sum(is_edit),&lt;br /&gt;
    unique_pages = n_distinct(title),&lt;br /&gt;
    first_action = min(timestamp),&lt;br /&gt;
    last_action = max(timestamp)&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  arrange(desc(total_actions))&lt;br /&gt;
&lt;br /&gt;
new_users &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(new_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
weekly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(day_of_week) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
hourly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(hour_of_day) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
top_10_users &amp;lt;- user_summary %&amp;gt;% head(10)&lt;br /&gt;
monthly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n(), unique_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
# Построение графиков&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_activity, aes(x = month, y = total_actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;steelblue&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p2 &amp;lt;- ggplot(weekly_activity, aes(x = day_of_week, y = actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;darkgreen&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p3 &amp;lt;- ggplot(hourly_activity, aes(x = hour_of_day, y = actions)) +&lt;br /&gt;
  geom_line(color = &amp;quot;red&amp;quot;, size = 1) +&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;
  scale_x_continuous(breaks = 0:23) +&lt;br /&gt;
  theme_minimal()&lt;br /&gt;
&lt;br /&gt;
combined_plot &amp;lt;- (p1 | p2) / p3&lt;br /&gt;
&lt;br /&gt;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots&amp;quot;&lt;br /&gt;
if (!dir.exists(output_dir)) {&lt;br /&gt;
  dir.create(output_dir)&lt;br /&gt;
  print(paste(&amp;quot;Создана папка для графиков:&amp;quot;, output_dir))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Функция для безопасного сохранения графиков&lt;br /&gt;
safe_save_plot &amp;lt;- function(plot_obj, filename, width, height, dpi = 300) {&lt;br /&gt;
  if (!inherits(plot_obj, &amp;quot;ggplot&amp;quot;)) {&lt;br /&gt;
    print(paste(&amp;quot;Предупреждение: объект не является графиком ggplot — пропуск сохранения&amp;quot;, filename))&lt;br /&gt;
    return(FALSE)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  full_path &amp;lt;- file.path(output_dir, filename)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    ggsave(&lt;br /&gt;
      filename = full_path,&lt;br /&gt;
      plot = plot_obj,&lt;br /&gt;
      width = width,&lt;br /&gt;
      height = height,&lt;br /&gt;
      dpi = dpi,&lt;br /&gt;
      device = &amp;quot;png&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    print(paste(&amp;quot;График сохранён:&amp;quot;, normalizePath(full_path)))&lt;br /&gt;
    TRUE&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    print(paste(&amp;quot;Ошибка сохранения&amp;quot;, filename, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    FALSE&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Сохранение всех графиков&lt;br /&gt;
print(&amp;quot;Начинаем сохранение графиков...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Объединённый график&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  combined_plot,&lt;br /&gt;
  &amp;quot;activity_analysis_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 12,&lt;br /&gt;
  height = 8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по месяцам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p1,&lt;br /&gt;
  &amp;quot;monthly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по дням недели&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p2,&lt;br /&gt;
  &amp;quot;weekly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по часам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p3,&lt;br /&gt;
  &amp;quot;hourly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Финальная проверка — список сохранённых файлов&lt;br /&gt;
print(&amp;quot;\n---&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверка сохранённых файлов:&amp;quot;)&lt;br /&gt;
saved_files &amp;lt;- list.files(output_dir, pattern = &amp;quot;.png&amp;quot;, full.names = TRUE)&lt;br /&gt;
if (length(saved_files) &amp;gt; 0) {&lt;br /&gt;
  print(&amp;quot;Успешно сохранены файлы:&amp;quot;)&lt;br /&gt;
  print(saved_files)&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Анализ завершён!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результаты выполнения кода ===&lt;br /&gt;
После успешного выполнения скрипт:&lt;br /&gt;
1. Загружает данные о действиях пользователей из API за последний год.&lt;br /&gt;
2. Очищает и структурирует данные.&lt;br /&gt;
3. Анализирует активность по месяцам, дням недели и часам суток.&lt;br /&gt;
4. Определяет топ‑10 активных пользователей.&lt;br /&gt;
5. Строит и сохраняет 4 графика в папке saved_plots.&lt;br /&gt;
6. Выводит сводную информацию о результатах.&lt;br /&gt;
[[Файл:Действия пользователей.png|мини]]&lt;br /&gt;
[[Файл:Топ-10.png|мини]]&lt;br /&gt;
[[Файл:Активность по дням недели.png|мини]]&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%90%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BF%D0%BE_%D0%B4%D0%BD%D1%8F%D0%BC_%D0%BD%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8.png&amp;diff=45998</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%90%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BF%D0%BE_%D0%B4%D0%BD%D1%8F%D0%BC_%D0%BD%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8.png&amp;diff=45998"/>
		<updated>2026-04-13T11:43:40Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Таблица отражает активность пользователей в разные дни недели&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A2%D0%BE%D0%BF-10.png&amp;diff=45997</id>
		<title>Файл:Топ-10.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%A2%D0%BE%D0%BF-10.png&amp;diff=45997"/>
		<updated>2026-04-13T11:42:13Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;10 наиболее активных пользователей платформы&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9.png&amp;diff=45996</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%94%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9.png&amp;diff=45996"/>
		<updated>2026-04-13T11:40:32Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пример результата выполнения кода, демонстрирующий действия пользователей&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45995</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45995"/>
		<updated>2026-04-13T11:25:39Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Исходные данные:&lt;br /&gt;
: Все события площадки до 06.04.2026 года - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_events_digid.csv&lt;br /&gt;
: Совместные действия участников  - https://raw.githubusercontent.com/patarakin/stat-data/dc76a94554ecd09228ad4e21e95a94e9c422b1b8/datasets/csv/wiki_df_team_digid.csv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== График активности 2022 - 2026 ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:DinamycDigida.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Код для получения данных и графиков ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# Загрузка необходимых пакетов&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(ggplot2)&lt;br /&gt;
library(patchwork)&lt;br /&gt;
&lt;br /&gt;
# Корректный URL API&lt;br /&gt;
api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Безопасное определение функции (если ещё не существует)&lt;br /&gt;
if (!exists(&amp;quot;get_mw_data&amp;quot;)) {&lt;br /&gt;
  get_mw_data &amp;lt;- function(action, params) {&lt;br /&gt;
    query_params &amp;lt;- c(action = action, format = &amp;quot;json&amp;quot;, params)&lt;br /&gt;
    response &amp;lt;- GET(api_url, query = query_params)&lt;br /&gt;
    &lt;br /&gt;
    # Дополнительная проверка типа ответа&lt;br /&gt;
    if (http_type(response) != &amp;quot;application/json&amp;quot;) {&lt;br /&gt;
      warning(&amp;quot;Ответ не в формате JSON&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    stop_for_status(response)&lt;br /&gt;
    fromJSON(content(response, &amp;quot;text&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Загрузка данных с обработкой ошибок&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
tryCatch({&lt;br /&gt;
  recent_edits &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;user|timestamp|title|comment|type&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;500&amp;quot;,&lt;br /&gt;
    rcshow = &amp;quot;!bot&amp;quot;,&lt;br /&gt;
    rcend = format(Sys.Date() - 365, &amp;quot;%Y%m%d%H%M%S&amp;quot;)&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  users_list &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;allusers&amp;quot;,&lt;br /&gt;
    aulimit = &amp;quot;500&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  &lt;br /&gt;
  print(&amp;quot;Данные успешно загружены!&amp;quot;)&lt;br /&gt;
  data_loaded &amp;lt;- TRUE&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при загрузке данных:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Если данные не загружены, прерываем выполнение&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось загрузить данные. Прекращение выполнения.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Проверка прав на запись в текущей директории&lt;br /&gt;
can_write &amp;lt;- file.access(getwd(), mode = 2) == 0&lt;br /&gt;
if (!can_write) {&lt;br /&gt;
  stop(&amp;quot;Нет прав на запись в текущую рабочую директорию. Выберите другую папку.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Очистка данных&lt;br /&gt;
clean_data &amp;lt;- recent_edits$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = ymd_hms(timestamp),&lt;br /&gt;
    date = as.Date(timestamp),&lt;br /&gt;
    day_of_week = wday(timestamp, label = TRUE, abbr = FALSE),&lt;br /&gt;
    hour_of_day = hour(timestamp),&lt;br /&gt;
    month = month(timestamp, label = TRUE),&lt;br /&gt;
    is_edit = type == &amp;quot;edit&amp;quot;&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  filter(date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(user, timestamp, date, day_of_week, hour_of_day, month, title, is_edit)&lt;br /&gt;
&lt;br /&gt;
# Проверка на пустые данные&lt;br /&gt;
if (nrow(clean_data) == 0) {&lt;br /&gt;
  stop(&amp;quot;Очищенные данные пусты. Проверьте параметры запроса к API.&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(paste(&amp;quot;Обработано записей:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
&lt;br /&gt;
# Агрегация и анализ&lt;br /&gt;
user_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(user) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    edits_count = sum(is_edit),&lt;br /&gt;
    unique_pages = n_distinct(title),&lt;br /&gt;
    first_action = min(timestamp),&lt;br /&gt;
    last_action = max(timestamp)&lt;br /&gt;
  ) %&amp;gt;%&lt;br /&gt;
  arrange(desc(total_actions))&lt;br /&gt;
&lt;br /&gt;
new_users &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(new_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
weekly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(day_of_week) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
hourly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(hour_of_day) %&amp;gt;%&lt;br /&gt;
  summarise(actions = n())&lt;br /&gt;
&lt;br /&gt;
top_10_users &amp;lt;- user_summary %&amp;gt;% head(10)&lt;br /&gt;
monthly_activity &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n(), unique_users = n_distinct(user))&lt;br /&gt;
&lt;br /&gt;
# Построение графиков&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_activity, aes(x = month, y = total_actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;steelblue&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p2 &amp;lt;- ggplot(weekly_activity, aes(x = day_of_week, y = actions)) +&lt;br /&gt;
  geom_bar(stat = &amp;quot;identity&amp;quot;, fill = &amp;quot;darkgreen&amp;quot;) +&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_minimal()&lt;br /&gt;
&lt;br /&gt;
p3 &amp;lt;- ggplot(hourly_activity, aes(x = hour_of_day, y = actions)) +&lt;br /&gt;
  geom_line(color = &amp;quot;red&amp;quot;, size = 1) +&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;
  scale_x_continuous(breaks = 0:23) +&lt;br /&gt;
  theme_minimal()&lt;br /&gt;
&lt;br /&gt;
combined_plot &amp;lt;- (p1 | p2) / p3&lt;br /&gt;
&lt;br /&gt;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots&amp;quot;&lt;br /&gt;
if (!dir.exists(output_dir)) {&lt;br /&gt;
  dir.create(output_dir)&lt;br /&gt;
  print(paste(&amp;quot;Создана папка для графиков:&amp;quot;, output_dir))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Функция для безопасного сохранения графиков&lt;br /&gt;
safe_save_plot &amp;lt;- function(plot_obj, filename, width, height, dpi = 300) {&lt;br /&gt;
  if (!inherits(plot_obj, &amp;quot;ggplot&amp;quot;)) {&lt;br /&gt;
    print(paste(&amp;quot;Предупреждение: объект не является графиком ggplot — пропуск сохранения&amp;quot;, filename))&lt;br /&gt;
    return(FALSE)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  full_path &amp;lt;- file.path(output_dir, filename)&lt;br /&gt;
  &lt;br /&gt;
  tryCatch({&lt;br /&gt;
    ggsave(&lt;br /&gt;
      filename = full_path,&lt;br /&gt;
      plot = plot_obj,&lt;br /&gt;
      width = width,&lt;br /&gt;
      height = height,&lt;br /&gt;
      dpi = dpi,&lt;br /&gt;
      device = &amp;quot;png&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    print(paste(&amp;quot;График сохранён:&amp;quot;, normalizePath(full_path)))&lt;br /&gt;
    TRUE&lt;br /&gt;
  }, error = function(e) {&lt;br /&gt;
    print(paste(&amp;quot;Ошибка сохранения&amp;quot;, filename, &amp;quot;:&amp;quot;, e$message))&lt;br /&gt;
    FALSE&lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Сохранение всех графиков&lt;br /&gt;
print(&amp;quot;Начинаем сохранение графиков...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Объединённый график&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  combined_plot,&lt;br /&gt;
  &amp;quot;activity_analysis_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 12,&lt;br /&gt;
  height = 8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по месяцам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p1,&lt;br /&gt;
  &amp;quot;monthly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по дням недели&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p2,&lt;br /&gt;
  &amp;quot;weekly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# График по часам&lt;br /&gt;
safe_save_plot(&lt;br /&gt;
  p3,&lt;br /&gt;
  &amp;quot;hourly_activity_2023_2024.png&amp;quot;,&lt;br /&gt;
  width = 8,&lt;br /&gt;
  height = 6&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Финальная проверка — список сохранённых файлов&lt;br /&gt;
print(&amp;quot;\n---&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверка сохранённых файлов:&amp;quot;)&lt;br /&gt;
saved_files &amp;lt;- list.files(output_dir, pattern = &amp;quot;.png&amp;quot;, full.names = TRUE)&lt;br /&gt;
if (length(saved_files) &amp;gt; 0) {&lt;br /&gt;
  print(&amp;quot;Успешно сохранены файлы:&amp;quot;)&lt;br /&gt;
  print(saved_files)&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Анализ завершён!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После успешного выполнения скрипт:&lt;br /&gt;
1. Загружает данные о действиях пользователей из API за последний год.&lt;br /&gt;
2. Очищает и структурирует данные.&lt;br /&gt;
3. Анализирует активность по месяцам, дням недели и часам суток.&lt;br /&gt;
4. Определяет топ‑10 активных пользователей.&lt;br /&gt;
5. Строит и сохраняет 4 графика в папке saved_plots.&lt;br /&gt;
6. Выводит сводную информацию о результатах.&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45959</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45959"/>
		<updated>2026-04-12T15:28:17Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Анализ активности пользователей Digida за последний год */ новая тема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Анализ активности пользователей Digida за последний год  ==&lt;br /&gt;
&lt;br /&gt;
Напишите, что и как хотите сделать на странице  [[Анализ активности пользователей Digida за последний год]] - я попробую помочь. У меня и свежие данные для этой работы есть. --[[Участник:Patarakin|Patarakin]] ([[Обсуждение участника:Patarakin|обсуждение]]) 17:57, 12 апреля 2026 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Анализ активности пользователей Digida за последний год ==&lt;br /&gt;
&lt;br /&gt;
Спасибо!&lt;br /&gt;
Я пока что пытаюсь разобраться с платформой. Идея - сделать модель, которая будет собирать данные об активности пользователей, выдавать статистику о самых активных, в какие месяцы активность выше.&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45958</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45958"/>
		<updated>2026-04-12T15:16:06Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Анализ активности пользователей Digida за последний год */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Анализ активности пользователей Digida за последний год  ==&lt;br /&gt;
&lt;br /&gt;
Напишите, что и как хотите сделать на странице  [[Анализ активности пользователей Digida за последний год]] - я попробую помочь. У меня и свежие данные для этой работы есть. --[[Участник:Patarakin|Patarakin]] ([[Обсуждение участника:Patarakin|обсуждение]]) 17:57, 12 апреля 2026 (MSK)&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45957</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45957"/>
		<updated>2026-04-12T15:15:52Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Анализ активности пользователей Digida за последний год */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Анализ активности пользователей Digida за последний год  ==&lt;br /&gt;
&lt;br /&gt;
Напишите, что и как хотите сделать на странице  [[Анализ активности пользователей Digida за последний год]] - я попробую помочь. У меня и свежие данные для этой работы есть. --[[Участник:Patarakin|Patarakin]] ([[Обсуждение участника:Patarakin|обсуждение]]) 17:57, 12 апреля 2026 (MSK)&lt;br /&gt;
Спасибо!&lt;br /&gt;
Я пока что пытаюсь разобраться с платформой. Думаю сделать рецепт по анализу активности пользователей платформы, но пока что не очень эффективны мои размышления в этом направлении.&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45951</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45951"/>
		<updated>2026-04-12T14:57:28Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: Полностью удалено содержимое страницы&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45946</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45946"/>
		<updated>2026-04-12T14:50:54Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Код анализа */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Scripting Tutorials&lt;br /&gt;
|Description=Цель: проанализировать активность пользователей Digida за последние 12 месяцев, выявить паттерны использования платформы, определить самых активных участников и сезонные колебания активности.&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Психология, Образование&lt;br /&gt;
|Возрастная категория=13&lt;br /&gt;
}}&lt;br /&gt;
{{RRecipe&lt;br /&gt;
|title=Анализ активности пользователей Digida за последний год&lt;br /&gt;
|author=Наталья Захарова&lt;br /&gt;
|date={{#time:Y-m-d}}&lt;br /&gt;
|description=Анализ активности пользователей платформы Digida за последние 12 месяцев с использованием R&lt;br /&gt;
|tags=анализ данных, активность пользователей, Digida, R, статистика&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;
* API MediaWiki платформы Digida;&lt;br /&gt;
* период анализа: последние 12 месяцев;&lt;br /&gt;
* метрики: регистрации, правки страниц, просмотры.&lt;br /&gt;
&lt;br /&gt;
== Методология ==&lt;br /&gt;
1. Извлечение данных через API MediaWiki.&lt;br /&gt;
2. Очистка и предобработка данных в R.&lt;br /&gt;
3. Статистический анализ активности.&lt;br /&gt;
4. Визуализация результатов.&lt;br /&gt;
5. Формулировка выводов и рекомендаций.&lt;br /&gt;
&lt;br /&gt;
== Код анализа ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты анализа ==&lt;br /&gt;
&lt;br /&gt;
=== График 1: Общая динамика активности ===&lt;br /&gt;
[[Файл:activity_analysis_2023_2024.png|800px|Динамика активности пользователей]]&lt;br /&gt;
&lt;br /&gt;
=== Таблица 1: Топ‑10 активных пользователей ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! № !! Пользователь !! Всего действий !! Правки !! Уникальных страниц !! Период активности&lt;br /&gt;
|-&lt;br /&gt;
{{#for: user in top_10_users}}&lt;br /&gt;
| {{#index}} || {{user$user}} || {{user$total_actions}} || {{user$edits_count}} || {{user$unique_pages}} || {{format(user$first_action, &amp;quot;%d.%m.%Y&amp;quot;)}} – {{format(user$last_action, &amp;quot;%d.%m.%Y&amp;quot;)}}&lt;br /&gt;
|-&lt;br /&gt;
{{/for}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Таблица 2: Активность по месяцам ===&lt;br /&gt;
{| class=“wikitable”&lt;br /&gt;
|-&lt;br /&gt;
! Месяц !! Всего действий !! Уникальных пользователей&lt;br /&gt;
|-&lt;br /&gt;
{{#for: month in monthly_activity}}&lt;br /&gt;
| {{monthmonth}} || {{monthtotal_actions}} || {{month$unique_users}}&lt;br /&gt;
|-&lt;br /&gt;
{{/for}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== График 4: Топ‑10 пользователей по количеству правок ===&lt;br /&gt;
&amp;lt;chart type=“bar” width=“800” height=“400”&amp;gt;&lt;br /&gt;
title: Топ-10 пользователей по количеству правок&lt;br /&gt;
xAxisTitle: Пользователи&lt;br /&gt;
yAxisTitle: Количество правок&lt;br /&gt;
data:&lt;br /&gt;
{{#for: user in top_10_users}}&lt;br /&gt;
{{useruser}}: {{useredits_count}}&lt;br /&gt;
{{/for}}&lt;br /&gt;
&amp;lt;/chart&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45945</id>
		<title>Анализ активности пользователей Digida</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_Digida&amp;diff=45945"/>
		<updated>2026-04-12T14:50:21Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: Новая страница: «{{Scripting Tutorials |Description=Цель: проанализировать активность пользователей Digida за последние 12 месяцев, выявить паттерны использования платформы, определить самых активных участников и сезонные колебания активности. |Field_of_knowledge=Математика, Информатика, Психо...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Scripting Tutorials&lt;br /&gt;
|Description=Цель: проанализировать активность пользователей Digida за последние 12 месяцев, выявить паттерны использования платформы, определить самых активных участников и сезонные колебания активности.&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Психология, Образование&lt;br /&gt;
|Возрастная категория=13&lt;br /&gt;
}}&lt;br /&gt;
{{RRecipe&lt;br /&gt;
|title=Анализ активности пользователей Digida за последний год&lt;br /&gt;
|author=Наталья Захарова&lt;br /&gt;
|date={{#time:Y-m-d}}&lt;br /&gt;
|description=Анализ активности пользователей платформы Digida за последние 12 месяцев с использованием R&lt;br /&gt;
|tags=анализ данных, активность пользователей, Digida, R, статистика&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;
* API MediaWiki платформы Digida;&lt;br /&gt;
* период анализа: последние 12 месяцев;&lt;br /&gt;
* метрики: регистрации, правки страниц, просмотры.&lt;br /&gt;
&lt;br /&gt;
== Методология ==&lt;br /&gt;
1. Извлечение данных через API MediaWiki.&lt;br /&gt;
2. Очистка и предобработка данных в R.&lt;br /&gt;
3. Статистический анализ активности.&lt;br /&gt;
4. Визуализация результатов.&lt;br /&gt;
5. Формулировка выводов и рекомендаций.&lt;br /&gt;
&lt;br /&gt;
== Код анализа ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
# Полный код анализа (см. шаги 2–5 выше)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты анализа ==&lt;br /&gt;
&lt;br /&gt;
=== График 1: Общая динамика активности ===&lt;br /&gt;
[[Файл:activity_analysis_2023_2024.png|800px|Динамика активности пользователей]]&lt;br /&gt;
&lt;br /&gt;
=== Таблица 1: Топ‑10 активных пользователей ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! № !! Пользователь !! Всего действий !! Правки !! Уникальных страниц !! Период активности&lt;br /&gt;
|-&lt;br /&gt;
{{#for: user in top_10_users}}&lt;br /&gt;
| {{#index}} || {{user$user}} || {{user$total_actions}} || {{user$edits_count}} || {{user$unique_pages}} || {{format(user$first_action, &amp;quot;%d.%m.%Y&amp;quot;)}} – {{format(user$last_action, &amp;quot;%d.%m.%Y&amp;quot;)}}&lt;br /&gt;
|-&lt;br /&gt;
{{/for}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Таблица 2: Активность по месяцам ===&lt;br /&gt;
{| class=“wikitable”&lt;br /&gt;
|-&lt;br /&gt;
! Месяц !! Всего действий !! Уникальных пользователей&lt;br /&gt;
|-&lt;br /&gt;
{{#for: month in monthly_activity}}&lt;br /&gt;
| {{monthmonth}} || {{monthtotal_actions}} || {{month$unique_users}}&lt;br /&gt;
|-&lt;br /&gt;
{{/for}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== График 4: Топ‑10 пользователей по количеству правок ===&lt;br /&gt;
&amp;lt;chart type=“bar” width=“800” height=“400”&amp;gt;&lt;br /&gt;
title: Топ-10 пользователей по количеству правок&lt;br /&gt;
xAxisTitle: Пользователи&lt;br /&gt;
yAxisTitle: Количество правок&lt;br /&gt;
data:&lt;br /&gt;
{{#for: user in top_10_users}}&lt;br /&gt;
{{useruser}}: {{useredits_count}}&lt;br /&gt;
{{/for}}&lt;br /&gt;
&amp;lt;/chart&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B7%D0%B0_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%B5_7_%D0%B4%D0%BD%D0%B5%D0%B9&amp;diff=45937</id>
		<title>Погода за последние 7 дней</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B7%D0%B0_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%B5_7_%D0%B4%D0%BD%D0%B5%D0%B9&amp;diff=45937"/>
		<updated>2026-04-12T14:09:51Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: Новая страница: «== Описание модели == Модель получает почасовые метеорологические данные за последние 7 дней для Москвы (температура, осадки, скорость ветра) через API Open‑Meteo, далее сохраняет данные в CSV‑файл и строит три графика: температуру (линия), осадки (столбцы), скор...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Описание модели ==&lt;br /&gt;
Модель получает почасовые метеорологические данные за последние 7 дней для Москвы (температура, осадки, скорость ветра) через API Open‑Meteo, далее сохраняет данные в CSV‑файл и строит три графика: температуру (линия), осадки (столбцы), скорость ветра (линия) — с подписями и сеткой.&lt;br /&gt;
[[Файл:График изменения погоды.png|мини]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(tidyverse)&lt;br /&gt;
import requests&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
# Координаты города (например, Москва)&lt;br /&gt;
LATITUDE = 55.7558&lt;br /&gt;
LONGITUDE = 37.6173&lt;br /&gt;
CITY_NAME = &amp;quot;Москва&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Даты: последние 7 дней&lt;br /&gt;
end_date = datetime.now().date()&lt;br /&gt;
start_date = end_date - timedelta(days=7)&lt;br /&gt;
&lt;br /&gt;
# URL для запроса к Open‑Meteo&lt;br /&gt;
URL = (&lt;br /&gt;
    f&amp;quot;https://api.open-meteo.com/v1/forecast?&amp;quot;&lt;br /&gt;
    f&amp;quot;latitude={LATITUDE}&amp;amp;longitude={LONGITUDE}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;start_date={start_date}&amp;amp;end_date={end_date}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;hourly=temperature_2m,precipitation,wind_speed_10m&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;timezone=Europe/Moscow&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
response = requests.get(URL)&lt;br /&gt;
data = response.json()&lt;br /&gt;
# Извлекаем временные метки и параметры&lt;br /&gt;
timestamps = data[&#039;hourly&#039;][&#039;time&#039;]&lt;br /&gt;
temperatures = data[&#039;hourly&#039;][&#039;temperature_2m&#039;]&lt;br /&gt;
precipitations = data[&#039;hourly&#039;][&#039;precipitation&#039;]&lt;br /&gt;
wind_speeds = data[&#039;hourly&#039;][&#039;wind_speed_10m&#039;]&lt;br /&gt;
&lt;br /&gt;
# Создаём DataFrame&lt;br /&gt;
df = pd.DataFrame({&lt;br /&gt;
    &#039;Время&#039;: timestamps,&lt;br /&gt;
    &#039;Температура, °C&#039;: temperatures,&lt;br /&gt;
    &#039;Осадки, мм&#039;: precipitations,&lt;br /&gt;
    &#039;Скорость ветра, м/с&#039;: wind_speeds&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Преобразуем столбец &#039;Время&#039; в datetime&lt;br /&gt;
df[&#039;Время&#039;] = pd.to_datetime(df[&#039;Время&#039;])&lt;br /&gt;
df.to_csv(&#039;weather_data_openmeteo.csv&#039;, index=False, encoding=&#039;utf-8&#039;)&lt;br /&gt;
print(&amp;quot;Данные сохранены в weather_data_openmeteo.csv&amp;quot;)&lt;br /&gt;
# Создаём фигуру с тремя подграфиками&lt;br /&gt;
fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)&lt;br /&gt;
&lt;br /&gt;
# График температуры&lt;br /&gt;
axes[0].plot(df[&#039;Время&#039;], df[&#039;Температура, °C&#039;], color=&#039;red&#039;, linewidth=1)&lt;br /&gt;
axes[0].set_title(f&#039;Температура в {CITY_NAME} за последние 7 дней&#039;)&lt;br /&gt;
axes[0].set_ylabel(&#039;Температура, °C&#039;)&lt;br /&gt;
axes[0].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График осадков&lt;br /&gt;
axes[1].bar(df[&#039;Время&#039;], df[&#039;Осадки, мм&#039;], color=&#039;blue&#039;, alpha=0.7, width=0.04)&lt;br /&gt;
axes[1].set_title(&#039;Осадки&#039;)&lt;br /&gt;
axes[1].set_ylabel(&#039;Осадки, мм&#039;)&lt;br /&gt;
axes[1].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График скорости ветра&lt;br /&gt;
axes[2].plot(df[&#039;Время&#039;], df[&#039;Скорость ветра, м/с&#039;], color=&#039;green&#039;, linewidth=1)&lt;br /&gt;
axes[2].set_title(&#039;Скорость ветра&#039;)&lt;br /&gt;
axes[2].set_ylabel(&#039;Скорость ветра, м/с&#039;)&lt;br /&gt;
axes[2].set_xlabel(&#039;Дата и время&#039;)&lt;br /&gt;
axes[2].grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.tight_layout()&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:TidyR}}&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45932</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45932"/>
		<updated>2026-04-12T13:50:22Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Погода */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Смурфики ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|width=1000&lt;br /&gt;
|height=1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Погода ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:График изменения погоды.png|мини]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(tidyverse)&lt;br /&gt;
import requests&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
# Координаты города (например, Москва)&lt;br /&gt;
LATITUDE = 55.7558&lt;br /&gt;
LONGITUDE = 37.6173&lt;br /&gt;
CITY_NAME = &amp;quot;Москва&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Даты: последние 7 дней&lt;br /&gt;
end_date = datetime.now().date()&lt;br /&gt;
start_date = end_date - timedelta(days=7)&lt;br /&gt;
&lt;br /&gt;
# URL для запроса к Open‑Meteo&lt;br /&gt;
URL = (&lt;br /&gt;
    f&amp;quot;https://api.open-meteo.com/v1/forecast?&amp;quot;&lt;br /&gt;
    f&amp;quot;latitude={LATITUDE}&amp;amp;longitude={LONGITUDE}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;start_date={start_date}&amp;amp;end_date={end_date}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;hourly=temperature_2m,precipitation,wind_speed_10m&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;timezone=Europe/Moscow&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
response = requests.get(URL)&lt;br /&gt;
data = response.json()&lt;br /&gt;
# Извлекаем временные метки и параметры&lt;br /&gt;
timestamps = data[&#039;hourly&#039;][&#039;time&#039;]&lt;br /&gt;
temperatures = data[&#039;hourly&#039;][&#039;temperature_2m&#039;]&lt;br /&gt;
precipitations = data[&#039;hourly&#039;][&#039;precipitation&#039;]&lt;br /&gt;
wind_speeds = data[&#039;hourly&#039;][&#039;wind_speed_10m&#039;]&lt;br /&gt;
&lt;br /&gt;
# Создаём DataFrame&lt;br /&gt;
df = pd.DataFrame({&lt;br /&gt;
    &#039;Время&#039;: timestamps,&lt;br /&gt;
    &#039;Температура, °C&#039;: temperatures,&lt;br /&gt;
    &#039;Осадки, мм&#039;: precipitations,&lt;br /&gt;
    &#039;Скорость ветра, м/с&#039;: wind_speeds&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Преобразуем столбец &#039;Время&#039; в datetime&lt;br /&gt;
df[&#039;Время&#039;] = pd.to_datetime(df[&#039;Время&#039;])&lt;br /&gt;
df.to_csv(&#039;weather_data_openmeteo.csv&#039;, index=False, encoding=&#039;utf-8&#039;)&lt;br /&gt;
print(&amp;quot;Данные сохранены в weather_data_openmeteo.csv&amp;quot;)&lt;br /&gt;
# Создаём фигуру с тремя подграфиками&lt;br /&gt;
fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)&lt;br /&gt;
&lt;br /&gt;
# График температуры&lt;br /&gt;
axes[0].plot(df[&#039;Время&#039;], df[&#039;Температура, °C&#039;], color=&#039;red&#039;, linewidth=1)&lt;br /&gt;
axes[0].set_title(f&#039;Температура в {CITY_NAME} за последние 7 дней&#039;)&lt;br /&gt;
axes[0].set_ylabel(&#039;Температура, °C&#039;)&lt;br /&gt;
axes[0].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График осадков&lt;br /&gt;
axes[1].bar(df[&#039;Время&#039;], df[&#039;Осадки, мм&#039;], color=&#039;blue&#039;, alpha=0.7, width=0.04)&lt;br /&gt;
axes[1].set_title(&#039;Осадки&#039;)&lt;br /&gt;
axes[1].set_ylabel(&#039;Осадки, мм&#039;)&lt;br /&gt;
axes[1].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График скорости ветра&lt;br /&gt;
axes[2].plot(df[&#039;Время&#039;], df[&#039;Скорость ветра, м/с&#039;], color=&#039;green&#039;, linewidth=1)&lt;br /&gt;
axes[2].set_title(&#039;Скорость ветра&#039;)&lt;br /&gt;
axes[2].set_ylabel(&#039;Скорость ветра, м/с&#039;)&lt;br /&gt;
axes[2].set_xlabel(&#039;Дата и время&#039;)&lt;br /&gt;
axes[2].grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.tight_layout()&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:TidyR}}&lt;br /&gt;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45925</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45925"/>
		<updated>2026-04-12T11:54:20Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Погода */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Смурфики ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|width=1000&lt;br /&gt;
|height=1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Погода ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:График изменения погоды.png|мини]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(tidyverse)&lt;br /&gt;
import requests&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
# Координаты города (например, Москва)&lt;br /&gt;
LATITUDE = 55.7558&lt;br /&gt;
LONGITUDE = 37.6173&lt;br /&gt;
CITY_NAME = &amp;quot;Москва&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Даты: последние 7 дней&lt;br /&gt;
end_date = datetime.now().date()&lt;br /&gt;
start_date = end_date - timedelta(days=7)&lt;br /&gt;
&lt;br /&gt;
# URL для запроса к Open‑Meteo&lt;br /&gt;
URL = (&lt;br /&gt;
    f&amp;quot;https://api.open-meteo.com/v1/forecast?&amp;quot;&lt;br /&gt;
    f&amp;quot;latitude={LATITUDE}&amp;amp;longitude={LONGITUDE}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;start_date={start_date}&amp;amp;end_date={end_date}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;hourly=temperature_2m,precipitation,wind_speed_10m&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;timezone=Europe/Moscow&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
response = requests.get(URL)&lt;br /&gt;
data = response.json()&lt;br /&gt;
# Извлекаем временные метки и параметры&lt;br /&gt;
timestamps = data[&#039;hourly&#039;][&#039;time&#039;]&lt;br /&gt;
temperatures = data[&#039;hourly&#039;][&#039;temperature_2m&#039;]&lt;br /&gt;
precipitations = data[&#039;hourly&#039;][&#039;precipitation&#039;]&lt;br /&gt;
wind_speeds = data[&#039;hourly&#039;][&#039;wind_speed_10m&#039;]&lt;br /&gt;
&lt;br /&gt;
# Создаём DataFrame&lt;br /&gt;
df = pd.DataFrame({&lt;br /&gt;
    &#039;Время&#039;: timestamps,&lt;br /&gt;
    &#039;Температура, °C&#039;: temperatures,&lt;br /&gt;
    &#039;Осадки, мм&#039;: precipitations,&lt;br /&gt;
    &#039;Скорость ветра, м/с&#039;: wind_speeds&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Преобразуем столбец &#039;Время&#039; в datetime&lt;br /&gt;
df[&#039;Время&#039;] = pd.to_datetime(df[&#039;Время&#039;])&lt;br /&gt;
df.to_csv(&#039;weather_data_openmeteo.csv&#039;, index=False, encoding=&#039;utf-8&#039;)&lt;br /&gt;
print(&amp;quot;Данные сохранены в weather_data_openmeteo.csv&amp;quot;)&lt;br /&gt;
# Создаём фигуру с тремя подграфиками&lt;br /&gt;
fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)&lt;br /&gt;
&lt;br /&gt;
# График температуры&lt;br /&gt;
axes[0].plot(df[&#039;Время&#039;], df[&#039;Температура, °C&#039;], color=&#039;red&#039;, linewidth=1)&lt;br /&gt;
axes[0].set_title(f&#039;Температура в {CITY_NAME} за последние 7 дней&#039;)&lt;br /&gt;
axes[0].set_ylabel(&#039;Температура, °C&#039;)&lt;br /&gt;
axes[0].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График осадков&lt;br /&gt;
axes[1].bar(df[&#039;Время&#039;], df[&#039;Осадки, мм&#039;], color=&#039;blue&#039;, alpha=0.7, width=0.04)&lt;br /&gt;
axes[1].set_title(&#039;Осадки&#039;)&lt;br /&gt;
axes[1].set_ylabel(&#039;Осадки, мм&#039;)&lt;br /&gt;
axes[1].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График скорости ветра&lt;br /&gt;
axes[2].plot(df[&#039;Время&#039;], df[&#039;Скорость ветра, м/с&#039;], color=&#039;green&#039;, linewidth=1)&lt;br /&gt;
axes[2].set_title(&#039;Скорость ветра&#039;)&lt;br /&gt;
axes[2].set_ylabel(&#039;Скорость ветра, м/с&#039;)&lt;br /&gt;
axes[2].set_xlabel(&#039;Дата и время&#039;)&lt;br /&gt;
axes[2].grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.tight_layout()&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:TidyR}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45924</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45924"/>
		<updated>2026-04-12T11:53:42Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Погода */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Смурфики ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|width=1000&lt;br /&gt;
|height=1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Погода ===&lt;br /&gt;
{{#widget:iframe}}&lt;br /&gt;
[[Файл:График изменения погоды.png|мини]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(tidyverse)&lt;br /&gt;
import requests&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
# Координаты города (например, Москва)&lt;br /&gt;
LATITUDE = 55.7558&lt;br /&gt;
LONGITUDE = 37.6173&lt;br /&gt;
CITY_NAME = &amp;quot;Москва&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Даты: последние 7 дней&lt;br /&gt;
end_date = datetime.now().date()&lt;br /&gt;
start_date = end_date - timedelta(days=7)&lt;br /&gt;
&lt;br /&gt;
# URL для запроса к Open‑Meteo&lt;br /&gt;
URL = (&lt;br /&gt;
    f&amp;quot;https://api.open-meteo.com/v1/forecast?&amp;quot;&lt;br /&gt;
    f&amp;quot;latitude={LATITUDE}&amp;amp;longitude={LONGITUDE}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;start_date={start_date}&amp;amp;end_date={end_date}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;hourly=temperature_2m,precipitation,wind_speed_10m&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;timezone=Europe/Moscow&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
response = requests.get(URL)&lt;br /&gt;
data = response.json()&lt;br /&gt;
# Извлекаем временные метки и параметры&lt;br /&gt;
timestamps = data[&#039;hourly&#039;][&#039;time&#039;]&lt;br /&gt;
temperatures = data[&#039;hourly&#039;][&#039;temperature_2m&#039;]&lt;br /&gt;
precipitations = data[&#039;hourly&#039;][&#039;precipitation&#039;]&lt;br /&gt;
wind_speeds = data[&#039;hourly&#039;][&#039;wind_speed_10m&#039;]&lt;br /&gt;
&lt;br /&gt;
# Создаём DataFrame&lt;br /&gt;
df = pd.DataFrame({&lt;br /&gt;
    &#039;Время&#039;: timestamps,&lt;br /&gt;
    &#039;Температура, °C&#039;: temperatures,&lt;br /&gt;
    &#039;Осадки, мм&#039;: precipitations,&lt;br /&gt;
    &#039;Скорость ветра, м/с&#039;: wind_speeds&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Преобразуем столбец &#039;Время&#039; в datetime&lt;br /&gt;
df[&#039;Время&#039;] = pd.to_datetime(df[&#039;Время&#039;])&lt;br /&gt;
df.to_csv(&#039;weather_data_openmeteo.csv&#039;, index=False, encoding=&#039;utf-8&#039;)&lt;br /&gt;
print(&amp;quot;Данные сохранены в weather_data_openmeteo.csv&amp;quot;)&lt;br /&gt;
# Создаём фигуру с тремя подграфиками&lt;br /&gt;
fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)&lt;br /&gt;
&lt;br /&gt;
# График температуры&lt;br /&gt;
axes[0].plot(df[&#039;Время&#039;], df[&#039;Температура, °C&#039;], color=&#039;red&#039;, linewidth=1)&lt;br /&gt;
axes[0].set_title(f&#039;Температура в {CITY_NAME} за последние 7 дней&#039;)&lt;br /&gt;
axes[0].set_ylabel(&#039;Температура, °C&#039;)&lt;br /&gt;
axes[0].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График осадков&lt;br /&gt;
axes[1].bar(df[&#039;Время&#039;], df[&#039;Осадки, мм&#039;], color=&#039;blue&#039;, alpha=0.7, width=0.04)&lt;br /&gt;
axes[1].set_title(&#039;Осадки&#039;)&lt;br /&gt;
axes[1].set_ylabel(&#039;Осадки, мм&#039;)&lt;br /&gt;
axes[1].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График скорости ветра&lt;br /&gt;
axes[2].plot(df[&#039;Время&#039;], df[&#039;Скорость ветра, м/с&#039;], color=&#039;green&#039;, linewidth=1)&lt;br /&gt;
axes[2].set_title(&#039;Скорость ветра&#039;)&lt;br /&gt;
axes[2].set_ylabel(&#039;Скорость ветра, м/с&#039;)&lt;br /&gt;
axes[2].set_xlabel(&#039;Дата и время&#039;)&lt;br /&gt;
axes[2].grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.tight_layout()&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:TidyR}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%93%D1%80%D0%B0%D1%84%D0%B8%D0%BA_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D1%8B.png&amp;diff=45923</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%93%D1%80%D0%B0%D1%84%D0%B8%D0%BA_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D1%8B.png&amp;diff=45923"/>
		<updated>2026-04-12T11:53:26Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;График описывает изменения погоды в Москве&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45922</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45922"/>
		<updated>2026-04-12T11:51:49Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Смурфики ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|width=1000&lt;br /&gt;
|height=1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Погода ===&lt;br /&gt;
{{#widget:iframe}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
library(tidyverse)&lt;br /&gt;
import requests&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
# Координаты города (например, Москва)&lt;br /&gt;
LATITUDE = 55.7558&lt;br /&gt;
LONGITUDE = 37.6173&lt;br /&gt;
CITY_NAME = &amp;quot;Москва&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Даты: последние 7 дней&lt;br /&gt;
end_date = datetime.now().date()&lt;br /&gt;
start_date = end_date - timedelta(days=7)&lt;br /&gt;
&lt;br /&gt;
# URL для запроса к Open‑Meteo&lt;br /&gt;
URL = (&lt;br /&gt;
    f&amp;quot;https://api.open-meteo.com/v1/forecast?&amp;quot;&lt;br /&gt;
    f&amp;quot;latitude={LATITUDE}&amp;amp;longitude={LONGITUDE}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;start_date={start_date}&amp;amp;end_date={end_date}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;hourly=temperature_2m,precipitation,wind_speed_10m&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;timezone=Europe/Moscow&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
response = requests.get(URL)&lt;br /&gt;
data = response.json()&lt;br /&gt;
# Извлекаем временные метки и параметры&lt;br /&gt;
timestamps = data[&#039;hourly&#039;][&#039;time&#039;]&lt;br /&gt;
temperatures = data[&#039;hourly&#039;][&#039;temperature_2m&#039;]&lt;br /&gt;
precipitations = data[&#039;hourly&#039;][&#039;precipitation&#039;]&lt;br /&gt;
wind_speeds = data[&#039;hourly&#039;][&#039;wind_speed_10m&#039;]&lt;br /&gt;
&lt;br /&gt;
# Создаём DataFrame&lt;br /&gt;
df = pd.DataFrame({&lt;br /&gt;
    &#039;Время&#039;: timestamps,&lt;br /&gt;
    &#039;Температура, °C&#039;: temperatures,&lt;br /&gt;
    &#039;Осадки, мм&#039;: precipitations,&lt;br /&gt;
    &#039;Скорость ветра, м/с&#039;: wind_speeds&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Преобразуем столбец &#039;Время&#039; в datetime&lt;br /&gt;
df[&#039;Время&#039;] = pd.to_datetime(df[&#039;Время&#039;])&lt;br /&gt;
df.to_csv(&#039;weather_data_openmeteo.csv&#039;, index=False, encoding=&#039;utf-8&#039;)&lt;br /&gt;
print(&amp;quot;Данные сохранены в weather_data_openmeteo.csv&amp;quot;)&lt;br /&gt;
# Создаём фигуру с тремя подграфиками&lt;br /&gt;
fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)&lt;br /&gt;
&lt;br /&gt;
# График температуры&lt;br /&gt;
axes[0].plot(df[&#039;Время&#039;], df[&#039;Температура, °C&#039;], color=&#039;red&#039;, linewidth=1)&lt;br /&gt;
axes[0].set_title(f&#039;Температура в {CITY_NAME} за последние 7 дней&#039;)&lt;br /&gt;
axes[0].set_ylabel(&#039;Температура, °C&#039;)&lt;br /&gt;
axes[0].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График осадков&lt;br /&gt;
axes[1].bar(df[&#039;Время&#039;], df[&#039;Осадки, мм&#039;], color=&#039;blue&#039;, alpha=0.7, width=0.04)&lt;br /&gt;
axes[1].set_title(&#039;Осадки&#039;)&lt;br /&gt;
axes[1].set_ylabel(&#039;Осадки, мм&#039;)&lt;br /&gt;
axes[1].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График скорости ветра&lt;br /&gt;
axes[2].plot(df[&#039;Время&#039;], df[&#039;Скорость ветра, м/с&#039;], color=&#039;green&#039;, linewidth=1)&lt;br /&gt;
axes[2].set_title(&#039;Скорость ветра&#039;)&lt;br /&gt;
axes[2].set_ylabel(&#039;Скорость ветра, м/с&#039;)&lt;br /&gt;
axes[2].set_xlabel(&#039;Дата и время&#039;)&lt;br /&gt;
axes[2].grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.tight_layout()&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:TidyR}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45921</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=45921"/>
		<updated>2026-04-12T11:49:40Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Смурфики ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|width=1000&lt;br /&gt;
|height=1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Погода ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
import requests&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from datetime import datetime, timedelta&lt;br /&gt;
# Координаты города (например, Москва)&lt;br /&gt;
LATITUDE = 55.7558&lt;br /&gt;
LONGITUDE = 37.6173&lt;br /&gt;
CITY_NAME = &amp;quot;Москва&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Даты: последние 7 дней&lt;br /&gt;
end_date = datetime.now().date()&lt;br /&gt;
start_date = end_date - timedelta(days=7)&lt;br /&gt;
&lt;br /&gt;
# URL для запроса к Open‑Meteo&lt;br /&gt;
URL = (&lt;br /&gt;
    f&amp;quot;https://api.open-meteo.com/v1/forecast?&amp;quot;&lt;br /&gt;
    f&amp;quot;latitude={LATITUDE}&amp;amp;longitude={LONGITUDE}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;start_date={start_date}&amp;amp;end_date={end_date}&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;hourly=temperature_2m,precipitation,wind_speed_10m&amp;amp;&amp;quot;&lt;br /&gt;
    f&amp;quot;timezone=Europe/Moscow&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
response = requests.get(URL)&lt;br /&gt;
data = response.json()&lt;br /&gt;
# Извлекаем временные метки и параметры&lt;br /&gt;
timestamps = data[&#039;hourly&#039;][&#039;time&#039;]&lt;br /&gt;
temperatures = data[&#039;hourly&#039;][&#039;temperature_2m&#039;]&lt;br /&gt;
precipitations = data[&#039;hourly&#039;][&#039;precipitation&#039;]&lt;br /&gt;
wind_speeds = data[&#039;hourly&#039;][&#039;wind_speed_10m&#039;]&lt;br /&gt;
&lt;br /&gt;
# Создаём DataFrame&lt;br /&gt;
df = pd.DataFrame({&lt;br /&gt;
    &#039;Время&#039;: timestamps,&lt;br /&gt;
    &#039;Температура, °C&#039;: temperatures,&lt;br /&gt;
    &#039;Осадки, мм&#039;: precipitations,&lt;br /&gt;
    &#039;Скорость ветра, м/с&#039;: wind_speeds&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Преобразуем столбец &#039;Время&#039; в datetime&lt;br /&gt;
df[&#039;Время&#039;] = pd.to_datetime(df[&#039;Время&#039;])&lt;br /&gt;
df.to_csv(&#039;weather_data_openmeteo.csv&#039;, index=False, encoding=&#039;utf-8&#039;)&lt;br /&gt;
print(&amp;quot;Данные сохранены в weather_data_openmeteo.csv&amp;quot;)&lt;br /&gt;
# Создаём фигуру с тремя подграфиками&lt;br /&gt;
fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)&lt;br /&gt;
&lt;br /&gt;
# График температуры&lt;br /&gt;
axes[0].plot(df[&#039;Время&#039;], df[&#039;Температура, °C&#039;], color=&#039;red&#039;, linewidth=1)&lt;br /&gt;
axes[0].set_title(f&#039;Температура в {CITY_NAME} за последние 7 дней&#039;)&lt;br /&gt;
axes[0].set_ylabel(&#039;Температура, °C&#039;)&lt;br /&gt;
axes[0].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График осадков&lt;br /&gt;
axes[1].bar(df[&#039;Время&#039;], df[&#039;Осадки, мм&#039;], color=&#039;blue&#039;, alpha=0.7, width=0.04)&lt;br /&gt;
axes[1].set_title(&#039;Осадки&#039;)&lt;br /&gt;
axes[1].set_ylabel(&#039;Осадки, мм&#039;)&lt;br /&gt;
axes[1].grid(True)&lt;br /&gt;
&lt;br /&gt;
# График скорости ветра&lt;br /&gt;
axes[2].plot(df[&#039;Время&#039;], df[&#039;Скорость ветра, м/с&#039;], color=&#039;green&#039;, linewidth=1)&lt;br /&gt;
axes[2].set_title(&#039;Скорость ветра&#039;)&lt;br /&gt;
axes[2].set_ylabel(&#039;Скорость ветра, м/с&#039;)&lt;br /&gt;
axes[2].set_xlabel(&#039;Дата и время&#039;)&lt;br /&gt;
axes[2].grid(True)&lt;br /&gt;
&lt;br /&gt;
plt.tight_layout()&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21228</id>
		<title>Смурфики и Гаргамель</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21228"/>
		<updated>2024-11-02T10:53:26Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Model&lt;br /&gt;
|Description=Гаргамель охотится за смурфиками. При столкновении с другими смурфиками &amp;quot;заражённые&amp;quot; касанием с Гаргамелем смурфики выздоравливают. Рыцари патрулируют поле и арестовывают Гаргамеля. Коты Азазель помогают Гаргамелю ловить смурфов.&lt;br /&gt;
|Field_of_knowledge=Моделирование&lt;br /&gt;
|Website=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|Inventor=RabotaNS, Гренадер Дмитрий, Наталья Захарова&lt;br /&gt;
|Environment=StarLogo Nova&lt;br /&gt;
|Student-created=Да&lt;br /&gt;
}}&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21226</id>
		<title>Смурфики и Гаргамель</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21226"/>
		<updated>2024-11-02T10:29:28Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Model&lt;br /&gt;
|Description=Гаргамель охотится за смурфиками. При столкновении с другими смурфиками &amp;quot;заражённые&amp;quot; касанием с Гаргамелем смурфики выздоравливают. Рыцари патрулируют поле и арестовывают Гаргамеля. Коты Азазель помогают Гаргамелю ловить смурфов.&lt;br /&gt;
|Field_of_knowledge=Моделирование&lt;br /&gt;
|Website=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|Inventor=RabotaNS, Гренадер Дмитрий, Наталья Захарова&lt;br /&gt;
|Environment=StarLogo Nova&lt;br /&gt;
|Student-created=Да&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</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:%D0%93%D1%80%D0%B5%D0%BD%D0%B0%D0%B4%D0%B5%D1%80_%D0%94%D0%BC%D0%B8%D1%82%D1%80%D0%B8%D0%B9&amp;diff=21221</id>
		<title>Участник:Гренадер Дмитрий</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:%D0%93%D1%80%D0%B5%D0%BD%D0%B0%D0%B4%D0%B5%D1%80_%D0%94%D0%BC%D0%B8%D1%82%D1%80%D0%B8%D0%B9&amp;diff=21221"/>
		<updated>2024-11-02T10:01:25Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Description=Дополнительное образование начальных классов (Робототехника, программирование).&lt;br /&gt;
|Field_of_knowledge=Информатика, Робототехника, Образование&lt;br /&gt;
|similar_concepts=Робототехника, Программирование, Образование, Идиократия, Детская психология&lt;br /&gt;
|Environment=Lego Mindstorms, Кулибин, Lego WeDo, Python, Python IDLE&lt;br /&gt;
|Position=Бакалавриат&lt;br /&gt;
|Profile=Информатика, Робототехника&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
|Working_On=Смурфики и Гаргамель&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21219</id>
		<title>Смурфики и Гаргамель</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21219"/>
		<updated>2024-11-02T09:58:20Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Model&lt;br /&gt;
|Description=Гаргамель охотится за смурфиками&lt;br /&gt;
|Field_of_knowledge=Моделирование&lt;br /&gt;
|Website=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|Inventor=RabotaNS, Гренадер Дмитрий, Наталья Захарова&lt;br /&gt;
|Environment=StarLogo Nova&lt;br /&gt;
|Student-created=Да&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21218</id>
		<title>Смурфики и Гаргамель</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21218"/>
		<updated>2024-11-02T09:57:56Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Model&lt;br /&gt;
|Description=Гаргамель охотится за смурфиками&lt;br /&gt;
|Field_of_knowledge=Моделирование&lt;br /&gt;
|Website=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|Inventor=RabotaNS, Гренадер Дмитрий&lt;br /&gt;
|Environment=StarLogo Nova&lt;br /&gt;
|Student-created=Да&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21217</id>
		<title>Смурфики и Гаргамель</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D0%BC%D1%83%D1%80%D1%84%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%93%D0%B0%D1%80%D0%B3%D0%B0%D0%BC%D0%B5%D0%BB%D1%8C&amp;diff=21217"/>
		<updated>2024-11-02T09:57:04Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: Новая страница: «{{Model |Description=Гаргамель охотится за смурфиками |Field_of_knowledge=Моделирование |Website=https://www.slnova.org/NatZakh/projects/925436/ |Inventor=Гренадер Дмитрий Андреевич, Работа Никита Сергеевич |Environment=StarLogo Nova |Student-created=Да }}»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Model&lt;br /&gt;
|Description=Гаргамель охотится за смурфиками&lt;br /&gt;
|Field_of_knowledge=Моделирование&lt;br /&gt;
|Website=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|Inventor=Гренадер Дмитрий Андреевич, Работа Никита Сергеевич&lt;br /&gt;
|Environment=StarLogo Nova&lt;br /&gt;
|Student-created=Да&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</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:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=21211</id>
		<title>Участник:Наталья Захарова</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:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=21211"/>
		<updated>2024-11-02T09:53:34Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Робототехника, Педагогика, Психология, Образование, Лингвистика, Литература, Интернет вещей&lt;br /&gt;
|Profile=Информатика, Робототехника&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
|Working_On=Смурфики и Гаргамель&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</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:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=21209</id>
		<title>Участник:Наталья Захарова</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:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=21209"/>
		<updated>2024-11-02T09:52:10Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Робототехника, Педагогика, Психология, Образование, Лингвистика, Литература, Интернет вещей&lt;br /&gt;
|Profile=Информатика, Робототехника&lt;br /&gt;
|PedDirection=Да&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:RabotaNS&amp;diff=20368</id>
		<title>Обсуждение участника:RabotaNS</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:RabotaNS&amp;diff=20368"/>
		<updated>2024-10-05T09:58:03Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: Новая страница: «=== Смурфики === {{#widget:iframe |url=https://www.slnova.org/NatZakh/projects/925436/ |width=1000 |height=1000 }}»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Смурфики ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|width=1000&lt;br /&gt;
|height=1000&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%93%D1%80%D0%B5%D0%BD%D0%B0%D0%B4%D0%B5%D1%80_%D0%94%D0%BC%D0%B8%D1%82%D1%80%D0%B8%D0%B9&amp;diff=20367</id>
		<title>Обсуждение участника:Гренадер Дмитрий</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%93%D1%80%D0%B5%D0%BD%D0%B0%D0%B4%D0%B5%D1%80_%D0%94%D0%BC%D0%B8%D1%82%D1%80%D0%B8%D0%B9&amp;diff=20367"/>
		<updated>2024-10-05T09:56:49Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: Новая страница: «=== Смурфики === {{#widget:iframe |url=https://www.slnova.org/NatZakh/projects/925436/ |width=1000 |height=1000 }}»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Смурфики ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|width=1000&lt;br /&gt;
|height=1000&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=20366</id>
		<title>Обсуждение участника:Наталья Захарова</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=20366"/>
		<updated>2024-10-05T09:56:15Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: Новая страница: «=== Смурфики === {{#widget:iframe |url=https://www.slnova.org/NatZakh/projects/925436/ |width=1000 |height=1000 }}»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Смурфики ===&lt;br /&gt;
{{#widget:iframe&lt;br /&gt;
|url=https://www.slnova.org/NatZakh/projects/925436/&lt;br /&gt;
|width=1000&lt;br /&gt;
|height=1000&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</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:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=20365</id>
		<title>Участник:Наталья Захарова</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:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=20365"/>
		<updated>2024-10-05T09:52:43Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserMGPU&lt;br /&gt;
|Field_of_knowledge=Математика, Информатика, Робототехника, Педагогика, Психология, Образование, Лингвистика, Литература, Интернет вещей&lt;br /&gt;
}}&lt;br /&gt;
----&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D0%BE%D0%B3%D0%BB%D0%BE%D1%89%D0%B0%D1%82%D1%8C_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=19835</id>
		<title>Обсуждение:Поглощать агентов</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D0%BE%D0%B3%D0%BB%D0%BE%D1%89%D0%B0%D1%82%D1%8C_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=19835"/>
		<updated>2024-09-14T10:46:45Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: /* Пример с сайта Scratch */ новая тема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://scratch.mit.edu/projects/148769358/&lt;br /&gt;
Шахматные фигуры поглощают друг друга.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;scratch project=&amp;quot;148769358&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;scratch project=&amp;quot;148769358&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пример с сайта Scratch ==&lt;br /&gt;
&lt;br /&gt;
* https://scratch.mit.edu/projects/1049220990/&lt;br /&gt;
Патроны поглощают других персонажей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;scratch project=&amp;quot;1049220990&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</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:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=19195</id>
		<title>Участник:Наталья Захарова</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:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%97%D0%B0%D1%85%D0%B0%D1%80%D0%BE%D0%B2%D0%B0&amp;diff=19195"/>
		<updated>2024-09-07T10:01:21Z</updated>

		<summary type="html">&lt;p&gt;Наталья Захарова: Новая страница: «---- Категория:ИНДОР-211 Категория:UserMGPU»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
[[Категория:ИНДОР-211]]&lt;br /&gt;
[[Категория:UserMGPU]]&lt;/div&gt;</summary>
		<author><name>Наталья Захарова</name></author>
	</entry>
</feed>