<?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%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</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%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"/>
	<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%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"/>
	<updated>2026-04-18T15:18:36Z</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%BD%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D0%B5%D0%B5_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B0%D0%B5%D0%BC%D1%8B%D1%85_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%BF%D0%BE%D1%80%D1%82%D0%B0%D0%BB%D0%B0&amp;diff=46013</id>
		<title>Анализ наиболее посещаемых страниц портала</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%BD%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D0%B5%D0%B5_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B0%D0%B5%D0%BC%D1%8B%D1%85_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%BF%D0%BE%D1%80%D1%82%D0%B0%D0%BB%D0%B0&amp;diff=46013"/>
		<updated>2026-04-13T16:03:33Z</updated>

		<summary type="html">&lt;p&gt;Гренадер Дмитрий: /* Результат */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
# === ДИАГНОСТИКА API ===&lt;br /&gt;
print(&amp;quot;=== ДИАГНОСТИКА API DIGIDA ===&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверяем доступность API...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Шаг 1: базовый запрос для проверки API&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
page_views &amp;lt;- NULL&lt;br /&gt;
&lt;br /&gt;
tryCatch({&lt;br /&gt;
  test_response &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    meta = &amp;quot;siteinfo&amp;quot;,&lt;br /&gt;
    siprop = &amp;quot;general&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  print(&amp;quot;✓ API доступно!&amp;quot;)&lt;br /&gt;
  print(paste(&amp;quot;Название сайта:&amp;quot;, test_response$query$general$sitename))&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  stop(paste(&amp;quot;❌ API недоступно:&amp;quot;, e$message, &amp;quot;\nПроверьте URL:&amp;quot;, api_url))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Шаг 2: пробуем получить данные через recentchanges (косвенный показатель активности)&lt;br /&gt;
tryCatch({&lt;br /&gt;
  print(&amp;quot;Пробуем получить данные о недавних изменениях...&amp;quot;)&lt;br /&gt;
  page_views &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;1000&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;title|timestamp|user|comment&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;
  if (!is.null(page_views$query$recentchanges)) {&lt;br /&gt;
    print(&amp;quot;✓ Данные получены через recentchanges&amp;quot;)&lt;br /&gt;
    data_loaded &amp;lt;- TRUE&lt;br /&gt;
  } else {&lt;br /&gt;
    warning(&amp;quot;В ответе API нет данных recentchanges&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при запросе recentchanges:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось получить данные. Проверьте доступность API и параметры запроса.&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;- page_views$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = parse_date_time(&lt;br /&gt;
      timestamp,&lt;br /&gt;
      orders = c(&amp;quot;YmdHMS&amp;quot;, &amp;quot;YmdHM&amp;quot;, &amp;quot;ymdHMS&amp;quot;, &amp;quot;ymdHM&amp;quot;, &amp;quot;U&amp;quot;),&lt;br /&gt;
      quiet = TRUE&lt;br /&gt;
    ),&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;
  ) %&amp;gt;%&lt;br /&gt;
  filter(!is.na(timestamp), date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(title, timestamp, date, day_of_week, hour_of_day, month, user)&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;
page_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(title) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    unique_users = n_distinct(user),&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;
top_pages &amp;lt;- page_summary %&amp;gt;% head(10)&lt;br /&gt;
&lt;br /&gt;
monthly_views &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n())&lt;br /&gt;
&lt;br /&gt;
weekly_views &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_views &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;
# === ПОСТРОЕНИЕ ГРАФИКОВ ===&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_views, 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_views, 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_views, 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;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots_page_views&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;
# Экспорт топ‑10 страниц в CSV&lt;br /&gt;
write.csv(top_pages,&lt;br /&gt;
          file.path(output_dir, &amp;quot;top_10_most_active_pages_2023_2024.csv&amp;quot;),&lt;br /&gt;
          row.names = FALSE)&lt;br /&gt;
print(&amp;quot;Топ‑10 самых активных страниц сохранён в CSV.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Дополнительно: сохраняем полную статистику по страницам&lt;br /&gt;
write.csv(page_summary,&lt;br /&gt;
          file.path(output_dir, &amp;quot;full_page_activity_summary_2023_2024.csv&amp;quot;),&lt;br /&gt;
          row.names = FALSE)&lt;br /&gt;
print(&amp;quot;Полная статистика активности страниц сохранена в CSV.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД РЕЗУЛЬТАТОВ В КОНСОЛЬ ===&lt;br /&gt;
print(&amp;quot;\n=== РЕЗУЛЬТАТЫ АНАЛИЗА ===&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Топ-10 самых активных страниц:&amp;quot;)&lt;br /&gt;
print(top_pages)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nОбщая статистика:&amp;quot;)&lt;br /&gt;
print(paste(&amp;quot;Всего обработано действий:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
print(paste(&amp;quot;Уникальных страниц:&amp;quot;, n_distinct(clean_data$title)))&lt;br /&gt;
print(paste(&amp;quot;Уникальных пользователей:&amp;quot;, n_distinct(clean_data$user)))&lt;br /&gt;
print(paste(&amp;quot;Период анализа:&amp;quot;, min(clean_data$date), &amp;quot;по&amp;quot;, max(clean_data$date)))&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nАктивность по месяцам:&amp;quot;)&lt;br /&gt;
print(monthly_views)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nАктивность по дням недели:&amp;quot;)&lt;br /&gt;
print(weekly_views)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nАктивность по часам суток:&amp;quot;)&lt;br /&gt;
print(hourly_views)&lt;br /&gt;
&lt;br /&gt;
# === ДОПОЛНИТЕЛЬНАЯ ДИАГНОСТИКА ===&lt;br /&gt;
print(&amp;quot;\n=== ДОПОЛНИТЕЛЬНАЯ ДИАГНОСТИКА ===&amp;quot;)&lt;br /&gt;
print(&amp;quot;Первые 10 записей исходных данных:&amp;quot;)&lt;br /&gt;
print(head(page_views$query$recentchanges, 10))&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nСтруктура очищенных данных:&amp;quot;)&lt;br /&gt;
str(clean_data)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nСтатистика пропущенных значений:&amp;quot;)&lt;br /&gt;
print(sapply(clean_data, function(x) sum(is.na(x))))&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|.csv&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;
  for (file in saved_files) {&lt;br /&gt;
    file_info &amp;lt;- file.info(file)&lt;br /&gt;
    print(paste(basename(file), &amp;quot;-&amp;quot;, file_info$size, &amp;quot;байт&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ФИНАЛЬНОЕ СООБЩЕНИЕ ===&lt;br /&gt;
print(&amp;quot;\n&amp;quot; + &amp;quot;=&amp;quot;*50)&lt;br /&gt;
print(&amp;quot;АНАЛИЗ АКТИВНОСТИ СТРАНИЦ ЗАВЕРШЁН УСПЕШНО!&amp;quot;)&lt;br /&gt;
print(&amp;quot;=&amp;quot;*50)&lt;br /&gt;
&lt;br /&gt;
# Дополнительная информация для пользователя&lt;br /&gt;
print(&amp;quot;\nИНФОРМАЦИЯ ДЛЯ ДАЛЬНЕЙШЕЙ РАБОТЫ:&amp;quot;)&lt;br /&gt;
print(&amp;quot;- Графики сохранены в папке:&amp;quot;, output_dir)&lt;br /&gt;
print(&amp;quot;- Основные результаты:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * top_10_most_active_pages_2023_2024.csv — топ-10 страниц&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * full_page_activity_summary_2023_2024.csv — полная статистика&amp;quot;)&lt;br /&gt;
print(&amp;quot;- Для повторного запуска скрипта:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * проверьте актуальность URL API&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * при необходимости измените параметры запросов (лимиты, даты)&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * убедитесь в наличии прав на запись в рабочую директорию&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ОЧИСТКА ПАМЯТИ (опционально) ===&lt;br /&gt;
# Удаляем большие объекты, если они больше не нужны&lt;br /&gt;
rm(page_views, clean_data)&lt;br /&gt;
gc()  # сборщик мусора — освобождает память&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nПамять очищена. Скрипт завершён.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результат ===&lt;br /&gt;
1)Проверяет доступность API — выполняет тестовый запрос к серверу &lt;br /&gt;
&lt;br /&gt;
2) Загружает данные о недавних изменениях на страницах из API за последний год (365 дней) — собирает сведения о действиях пользователей (редактирование страниц) с фильтрацией ботов.&lt;br /&gt;
&lt;br /&gt;
3) Очищает и структурирует данные.&lt;br /&gt;
&lt;br /&gt;
4) Анализирует активность по разным временным периодам.&lt;br /&gt;
&lt;br /&gt;
5) Выполняет агрегацию по страницам — группирует данные по названию страницы и рассчитывает.&lt;br /&gt;
&lt;br /&gt;
6) Строит и сохраняет 4 графика в папке saved_plots_page_views.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Подборка.png|800px]]&lt;br /&gt;
[[Файл:Результат.png|800px]]&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%BD%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D0%B5%D0%B5_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B0%D0%B5%D0%BC%D1%8B%D1%85_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%BF%D0%BE%D1%80%D1%82%D0%B0%D0%BB%D0%B0&amp;diff=46012</id>
		<title>Анализ наиболее посещаемых страниц портала</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%BD%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D0%B5%D0%B5_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B0%D0%B5%D0%BC%D1%8B%D1%85_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86_%D0%BF%D0%BE%D1%80%D1%82%D0%B0%D0%BB%D0%B0&amp;diff=46012"/>
		<updated>2026-04-13T16:02:51Z</updated>

		<summary type="html">&lt;p&gt;Гренадер Дмитрий: Новая страница: «=== Код === &amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;  library(httr) library(jsonlite) library(dplyr) library(lubridate) library(tidyr) library(ggplot2) library(patchwork)  # Корректный URL API api_url &amp;lt;- &amp;quot;https://digida.mgpu.ru/api.php&amp;quot;  # Безопасное определение функции (если ещё не существует) if (!exists(&amp;quot;get_mw_data&amp;quot;)) {   get_mw_data &amp;lt;- function(action, params) {     query_params &amp;lt;- c(action = action, fo...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
# === ДИАГНОСТИКА API ===&lt;br /&gt;
print(&amp;quot;=== ДИАГНОСТИКА API DIGIDA ===&amp;quot;)&lt;br /&gt;
print(&amp;quot;Проверяем доступность API...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Шаг 1: базовый запрос для проверки API&lt;br /&gt;
data_loaded &amp;lt;- FALSE&lt;br /&gt;
page_views &amp;lt;- NULL&lt;br /&gt;
&lt;br /&gt;
tryCatch({&lt;br /&gt;
  test_response &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    meta = &amp;quot;siteinfo&amp;quot;,&lt;br /&gt;
    siprop = &amp;quot;general&amp;quot;&lt;br /&gt;
  ))&lt;br /&gt;
  print(&amp;quot;✓ API доступно!&amp;quot;)&lt;br /&gt;
  print(paste(&amp;quot;Название сайта:&amp;quot;, test_response$query$general$sitename))&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  stop(paste(&amp;quot;❌ API недоступно:&amp;quot;, e$message, &amp;quot;\nПроверьте URL:&amp;quot;, api_url))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
# Шаг 2: пробуем получить данные через recentchanges (косвенный показатель активности)&lt;br /&gt;
tryCatch({&lt;br /&gt;
  print(&amp;quot;Пробуем получить данные о недавних изменениях...&amp;quot;)&lt;br /&gt;
  page_views &amp;lt;- get_mw_data(&amp;quot;query&amp;quot;, list(&lt;br /&gt;
    list = &amp;quot;recentchanges&amp;quot;,&lt;br /&gt;
    rclimit = &amp;quot;1000&amp;quot;,&lt;br /&gt;
    rcprop = &amp;quot;title|timestamp|user|comment&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;
  if (!is.null(page_views$query$recentchanges)) {&lt;br /&gt;
    print(&amp;quot;✓ Данные получены через recentchanges&amp;quot;)&lt;br /&gt;
    data_loaded &amp;lt;- TRUE&lt;br /&gt;
  } else {&lt;br /&gt;
    warning(&amp;quot;В ответе API нет данных recentchanges&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}, error = function(e) {&lt;br /&gt;
  print(paste(&amp;quot;Ошибка при запросе recentchanges:&amp;quot;, e$message))&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
if (!data_loaded) {&lt;br /&gt;
  stop(&amp;quot;Не удалось получить данные. Проверьте доступность API и параметры запроса.&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;- page_views$query$recentchanges %&amp;gt;%&lt;br /&gt;
  as_tibble() %&amp;gt;%&lt;br /&gt;
  mutate(&lt;br /&gt;
    timestamp = parse_date_time(&lt;br /&gt;
      timestamp,&lt;br /&gt;
      orders = c(&amp;quot;YmdHMS&amp;quot;, &amp;quot;YmdHM&amp;quot;, &amp;quot;ymdHMS&amp;quot;, &amp;quot;ymdHM&amp;quot;, &amp;quot;U&amp;quot;),&lt;br /&gt;
      quiet = TRUE&lt;br /&gt;
    ),&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;
  ) %&amp;gt;%&lt;br /&gt;
  filter(!is.na(timestamp), date &amp;gt;= Sys.Date() - 365) %&amp;gt;%&lt;br /&gt;
  select(title, timestamp, date, day_of_week, hour_of_day, month, user)&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;
page_summary &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(title) %&amp;gt;%&lt;br /&gt;
  summarise(&lt;br /&gt;
    total_actions = n(),&lt;br /&gt;
    unique_users = n_distinct(user),&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;
top_pages &amp;lt;- page_summary %&amp;gt;% head(10)&lt;br /&gt;
&lt;br /&gt;
monthly_views &amp;lt;- clean_data %&amp;gt;%&lt;br /&gt;
  group_by(month) %&amp;gt;%&lt;br /&gt;
  summarise(total_actions = n())&lt;br /&gt;
&lt;br /&gt;
weekly_views &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_views &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;
# === ПОСТРОЕНИЕ ГРАФИКОВ ===&lt;br /&gt;
p1 &amp;lt;- ggplot(monthly_views, 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_views, 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_views, 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;
# Создаём папку для сохранения графиков&lt;br /&gt;
output_dir &amp;lt;- &amp;quot;saved_plots_page_views&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;
# Экспорт топ‑10 страниц в CSV&lt;br /&gt;
write.csv(top_pages,&lt;br /&gt;
          file.path(output_dir, &amp;quot;top_10_most_active_pages_2023_2024.csv&amp;quot;),&lt;br /&gt;
          row.names = FALSE)&lt;br /&gt;
print(&amp;quot;Топ‑10 самых активных страниц сохранён в CSV.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Дополнительно: сохраняем полную статистику по страницам&lt;br /&gt;
write.csv(page_summary,&lt;br /&gt;
          file.path(output_dir, &amp;quot;full_page_activity_summary_2023_2024.csv&amp;quot;),&lt;br /&gt;
          row.names = FALSE)&lt;br /&gt;
print(&amp;quot;Полная статистика активности страниц сохранена в CSV.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ВЫВОД РЕЗУЛЬТАТОВ В КОНСОЛЬ ===&lt;br /&gt;
print(&amp;quot;\n=== РЕЗУЛЬТАТЫ АНАЛИЗА ===&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Топ-10 самых активных страниц:&amp;quot;)&lt;br /&gt;
print(top_pages)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nОбщая статистика:&amp;quot;)&lt;br /&gt;
print(paste(&amp;quot;Всего обработано действий:&amp;quot;, nrow(clean_data)))&lt;br /&gt;
print(paste(&amp;quot;Уникальных страниц:&amp;quot;, n_distinct(clean_data$title)))&lt;br /&gt;
print(paste(&amp;quot;Уникальных пользователей:&amp;quot;, n_distinct(clean_data$user)))&lt;br /&gt;
print(paste(&amp;quot;Период анализа:&amp;quot;, min(clean_data$date), &amp;quot;по&amp;quot;, max(clean_data$date)))&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nАктивность по месяцам:&amp;quot;)&lt;br /&gt;
print(monthly_views)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nАктивность по дням недели:&amp;quot;)&lt;br /&gt;
print(weekly_views)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nАктивность по часам суток:&amp;quot;)&lt;br /&gt;
print(hourly_views)&lt;br /&gt;
&lt;br /&gt;
# === ДОПОЛНИТЕЛЬНАЯ ДИАГНОСТИКА ===&lt;br /&gt;
print(&amp;quot;\n=== ДОПОЛНИТЕЛЬНАЯ ДИАГНОСТИКА ===&amp;quot;)&lt;br /&gt;
print(&amp;quot;Первые 10 записей исходных данных:&amp;quot;)&lt;br /&gt;
print(head(page_views$query$recentchanges, 10))&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nСтруктура очищенных данных:&amp;quot;)&lt;br /&gt;
str(clean_data)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nСтатистика пропущенных значений:&amp;quot;)&lt;br /&gt;
print(sapply(clean_data, function(x) sum(is.na(x))))&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|.csv&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;
  for (file in saved_files) {&lt;br /&gt;
    file_info &amp;lt;- file.info(file)&lt;br /&gt;
    print(paste(basename(file), &amp;quot;-&amp;quot;, file_info$size, &amp;quot;байт&amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
} else {&lt;br /&gt;
  print(&amp;quot;Файлы не найдены в папке&amp;quot;, output_dir)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# === ФИНАЛЬНОЕ СООБЩЕНИЕ ===&lt;br /&gt;
print(&amp;quot;\n&amp;quot; + &amp;quot;=&amp;quot;*50)&lt;br /&gt;
print(&amp;quot;АНАЛИЗ АКТИВНОСТИ СТРАНИЦ ЗАВЕРШЁН УСПЕШНО!&amp;quot;)&lt;br /&gt;
print(&amp;quot;=&amp;quot;*50)&lt;br /&gt;
&lt;br /&gt;
# Дополнительная информация для пользователя&lt;br /&gt;
print(&amp;quot;\nИНФОРМАЦИЯ ДЛЯ ДАЛЬНЕЙШЕЙ РАБОТЫ:&amp;quot;)&lt;br /&gt;
print(&amp;quot;- Графики сохранены в папке:&amp;quot;, output_dir)&lt;br /&gt;
print(&amp;quot;- Основные результаты:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * top_10_most_active_pages_2023_2024.csv — топ-10 страниц&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * full_page_activity_summary_2023_2024.csv — полная статистика&amp;quot;)&lt;br /&gt;
print(&amp;quot;- Для повторного запуска скрипта:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * проверьте актуальность URL API&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * при необходимости измените параметры запросов (лимиты, даты)&amp;quot;)&lt;br /&gt;
print(&amp;quot;  * убедитесь в наличии прав на запись в рабочую директорию&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# === ОЧИСТКА ПАМЯТИ (опционально) ===&lt;br /&gt;
# Удаляем большие объекты, если они больше не нужны&lt;br /&gt;
rm(page_views, clean_data)&lt;br /&gt;
gc()  # сборщик мусора — освобождает память&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\nПамять очищена. Скрипт завершён.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Результат ===&lt;br /&gt;
1)Проверяет доступность API — выполняет тестовый запрос к серверу &lt;br /&gt;
&lt;br /&gt;
2) Загружает данные о недавних изменениях на страницах из API за последний год (365 дней) — собирает сведения о действиях пользователей (редактирование страниц) с фильтрацией ботов.&lt;br /&gt;
&lt;br /&gt;
3) Очищает и структурирует данные.&lt;br /&gt;
&lt;br /&gt;
4) Анализирует активность по разным временным периодам.&lt;br /&gt;
&lt;br /&gt;
5) Выполняет агрегацию по страницам — группирует данные по названию страницы и рассчитывает.&lt;br /&gt;
&lt;br /&gt;
6) Строит и сохраняет 4 графика в папке saved_plots_page_views.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Подборка.png|мини]]&lt;br /&gt;
[[Файл:Результат.png|мини]]&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%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82.png&amp;diff=46011</id>
		<title>Файл:Результат.png</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82.png&amp;diff=46011"/>
		<updated>2026-04-13T16:00:17Z</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%9F%D0%BE%D0%B4%D0%B1%D0%BE%D1%80%D0%BA%D0%B0.png&amp;diff=46010</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%9F%D0%BE%D0%B4%D0%B1%D0%BE%D1%80%D0%BA%D0%B0.png&amp;diff=46010"/>
		<updated>2026-04-13T15:58:37Z</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%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=45936</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=45936"/>
		<updated>2026-04-12T14:02: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;/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=45935</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=45935"/>
		<updated>2026-04-12T14:02:14Z</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;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%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=45933</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=45933"/>
		<updated>2026-04-12T13:51:47Z</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;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;
----&lt;br /&gt;
[[Категория:BigDataWorks]]&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;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%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=45927</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=45927"/>
		<updated>2026-04-12T13:39:51Z</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;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:%D0%9F%D1%80%D0%B5%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D1%8C_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%B0&amp;diff=19837</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%D1%80%D0%B5%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D1%8C_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%B0&amp;diff=19837"/>
		<updated>2024-09-14T10:54:58Z</updated>

		<summary type="html">&lt;p&gt;Гренадер Дмитрий: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Пример со Scratch ==&lt;br /&gt;
&lt;br /&gt;
=== Для [[Scratch]] === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;scratchblocks&amp;gt;&lt;br /&gt;
повернуться к [b3 v]&lt;br /&gt;
идти (выдать случайное от (1) до (2)) шагов&lt;br /&gt;
&amp;lt;/scratchblocks&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;scratch project=&amp;quot;211029567&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Оранжевые квадраты преследуют фиолетовый кружок :( &lt;br /&gt;
&amp;lt;scratch project=&amp;quot;345574873&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Для Scrtatch ==&lt;br /&gt;
&lt;br /&gt;
=== Для [[Snap!]] ===&lt;br /&gt;
&lt;br /&gt;
* Бабочка в красном костюме летает и думает о своих костюмах&lt;br /&gt;
* Другая бабочка копирует свой костюм (cut на себе) - встает на место бабочки в красном костюме, занимает ее позицию, размер и направление и копирует свой костюм на неё.&lt;br /&gt;
* И так, как дура, продолжает летать и думать о своем красном костюме, не замечая, что на ней надет совсем другой костюм.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:Pattern 7 snap.png|400px]] | [[Файл:Pattern 7 snap2.png|400px]]&lt;br /&gt;
|}&lt;br /&gt;
* [[Таблица]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;snap project=&amp;quot;pattern_7_imitation&amp;quot; user=&amp;quot;patarakin&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;scratch project=&amp;quot;813837561&amp;quot; /&amp;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:%D0%9F%D1%80%D0%B5%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D1%82%D1%8C%D1%81%D1%8F_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%B0&amp;diff=19834</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%D1%80%D0%B5%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D1%82%D1%8C%D1%81%D1%8F_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%B0&amp;diff=19834"/>
		<updated>2024-09-14T10:46:14Z</updated>

		<summary type="html">&lt;p&gt;Гренадер Дмитрий: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://scratch.mit.edu/projects/148769358/&lt;br /&gt;
&amp;lt;scratch project=&amp;quot;148769358&amp;quot; /&amp;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:%D0%9F%D1%80%D0%B5%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D1%82%D1%8C%D1%81%D1%8F_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%B0&amp;diff=19831</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%D1%80%D0%B5%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D1%82%D1%8C%D1%81%D1%8F_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%B0&amp;diff=19831"/>
		<updated>2024-09-14T10:43:48Z</updated>

		<summary type="html">&lt;p&gt;Гренадер Дмитрий: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://scratch.mit.edu/projects/148769358/&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:%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=19829</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=19829"/>
		<updated>2024-09-14T10:43:15Z</updated>

		<summary type="html">&lt;p&gt;Гренадер Дмитрий: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://scratch.mit.edu/projects/148769358/&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:%D0%9F%D1%80%D0%B5%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D1%82%D1%8C%D1%81%D1%8F_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%B0&amp;diff=19826</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%D1%80%D0%B5%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D1%82%D1%8C%D1%81%D1%8F_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%B0&amp;diff=19826"/>
		<updated>2024-09-14T10:40:49Z</updated>

		<summary type="html">&lt;p&gt;Гренадер Дмитрий: Новая страница: «https://scratch.mit.edu/projects/148769358/»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://scratch.mit.edu/projects/148769358/&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=19825</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=19825"/>
		<updated>2024-09-14T10:40:34Z</updated>

		<summary type="html">&lt;p&gt;Гренадер Дмитрий: Новая страница: «https://scratch.mit.edu/projects/148769358/»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://scratch.mit.edu/projects/148769358/&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=19204</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=19204"/>
		<updated>2024-09-07T10:08:22Z</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;
}}&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%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=19201</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=19201"/>
		<updated>2024-09-07T10:05:27Z</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&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%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=19200</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=19200"/>
		<updated>2024-09-07T10:04:57Z</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&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%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=19199</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=19199"/>
		<updated>2024-09-07T10:03:51Z</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&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%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=19194</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=19194"/>
		<updated>2024-09-07T10:01:12Z</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;
|Environment=Lego Mindstorms, Кулибин, Lego WeDo&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%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=19193</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=19193"/>
		<updated>2024-09-07T09:59:06Z</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>
</feed>