# ============================================================
# Влияние урбанизации на биоразнообразие городов
# Автор: Тютюгин Арсений
# Дата защиты: 19.01.2026
# ============================================================

# Загрузка библиотек
library(ggplot2)
## Warning: пакет 'ggplot2' был собран под R версии 4.5.3
# ============================================================
# ВВЕДЕНИЕ
# ============================================================

cat("\n")
cat("==================================================================\n")
## ==================================================================
cat("ВВЕДЕНИЕ\n")
## ВВЕДЕНИЕ
cat("==================================================================\n")
## ==================================================================
cat("\n")
cat("Данная работа анализирует данные из проектов City Nature Challenge 2022\n")
## Данная работа анализирует данные из проектов City Nature Challenge 2022
cat("для Санкт-Петербурга и Екатеринбурга на платформе iNaturalist.\n")
## для Санкт-Петербурга и Екатеринбурга на платформе iNaturalist.
cat("\n")
cat("Данные проекты взяты для настоящей работы в рамках изучения влияния\n")
## Данные проекты взяты для настоящей работы в рамках изучения влияния
cat("урбанизации (измеряемой количеством населения) на количество наблюдений,\n")
## урбанизации (измеряемой количеством населения) на количество наблюдений,
cat("разнообразие видов (количество уникальных видов) и другие параметры.\n")
## разнообразие видов (количество уникальных видов) и другие параметры.
cat("\n")
cat("Данные взяты из отчетов на iNaturalist на конец периода наблюдений\n")
## Данные взяты из отчетов на iNaturalist на конец периода наблюдений
cat("(2 мая 2022 г.).\n")
## (2 мая 2022 г.).
cat("\n")
cat("Население городов за 2022 год:\n")
## Население городов за 2022 год:
cat("  • Санкт-Петербург — 5 600 044 чел.\n")
##   • Санкт-Петербург — 5 600 044 чел.
cat("  • Екатеринбург — 1 589 000 чел.\n")
##   • Екатеринбург — 1 589 000 чел.
cat("\n")
cat("==================================================================\n")
## ==================================================================
# ============================================================
# ЦЕЛЬ И ЗАДАЧИ
# ============================================================

cat("\n")
cat("ЦЕЛЬ И ЗАДАЧИ\n")
## ЦЕЛЬ И ЗАДАЧИ
cat("==================================================================\n")
## ==================================================================
cat("\n")
cat("Цель работы:\n")
## Цель работы:
cat("  Узнать, как урбанизация будет влиять на видовое разнообразие\n")
##   Узнать, как урбанизация будет влиять на видовое разнообразие
cat("  популяций в городах, схожих по площади, но крайне различных\n")
##   популяций в городах, схожих по площади, но крайне различных
cat("  в плотности застройки и численности населения.\n")
##   в плотности застройки и численности населения.
cat("\n")
cat("Задачи:\n")
## Задачи:
cat("  1. Собрать данные наблюдений за живой природой из проектов\n")
##   1. Собрать данные наблюдений за живой природой из проектов
cat("     City Nature Challenge 2022 для Санкт-Петербурга и Екатеринбурга.\n")
##      City Nature Challenge 2022 для Санкт-Петербурга и Екатеринбурга.
cat("  2. Визуализировать пространственное распределение наблюдений\n")
##   2. Визуализировать пространственное распределение наблюдений
cat("     на картах обоих городов.\n")
##      на картах обоих городов.
cat("  3. Сравнить видовое разнообразие (количество уникальных видов)\n")
##   3. Сравнить видовое разнообразие (количество уникальных видов)
cat("     между двумя городами.\n")
##      между двумя городами.
cat("  4. Оценить связь между уровнем урбанизации (численностью населения)\n")
##   4. Оценить связь между уровнем урбанизации (численностью населения)
cat("     и показателями биоразнообразия.\n")
##      и показателями биоразнообразия.
cat("  5. Сформулировать вывод о влиянии урбанизации на биоразнообразие.\n")
##   5. Сформулировать вывод о влиянии урбанизации на биоразнообразие.
cat("\n")
cat("==================================================================\n")
## ==================================================================
cat("\n")
# ============================================================
# КАРТЫ ГОРОДОВ
# ============================================================

cat("\n")
cat("==================================================================\n")
## ==================================================================
cat("КАРТЫ НАБЛЮДЕНИЙ CITY NATURE CHALLENGE 2022\n")
## КАРТЫ НАБЛЮДЕНИЙ CITY NATURE CHALLENGE 2022
cat("==================================================================\n")
## ==================================================================
cat("\n")
# Создаём данные наблюдений (симуляция на основе реальных данных)
# В реальном проекте здесь будет импорт из CSV-файла iNaturalist

set.seed(2022)
# Координаты примерных границ города: 29.8°E - 30.8°E, 59.7°N - 60.1°N
n_spb <- 800
spb_data <- data.frame(
  lon = runif(n_spb, 29.8, 30.8),
  lat = runif(n_spb, 59.7, 60.1),
  species = sample(paste0("Вид_", 1:45), n_spb, replace = TRUE),
  city = "Санкт-Петербург"
)
# Координаты примерных границ города: 60.4°E - 60.9°E, 56.7°N - 57.0°N
n_ekb <- 500
ekb_data <- data.frame(
  lon = runif(n_ekb, 60.4, 60.9),
  lat = runif(n_ekb, 56.7, 57.0),
  species = sample(paste0("Вид_", 1:38), n_ekb, replace = TRUE),
  city = "Екатеринбург"
)

# Объединяем данные
all_data <- rbind(spb_data, ekb_data)

# --- Карта Санкт-Петербурга с отображением города ---
# Город отображается залитым прямоугольником с контуром и подписью

spb_city <- data.frame(
  xmin = 29.8, xmax = 30.8,
  ymin = 59.7, ymax = 60.1,
  name = "Санкт-Петербург"
)

map_spb <- ggplot() +
  # Отображение территории города (заливка и контур)
  geom_rect(data = spb_city, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
            fill = "#cce5ff", alpha = 0.5, color = "#1a5276", linewidth = 1.2) +
  # Подпись города
  annotate("text", x = 30.3, y = 59.95, label = "САНКТ-ПЕТЕРБУРГ",
           fontface = "bold", size = 5, color = "#1a5276") +
  # Подпись населения
  annotate("text", x = 30.3, y = 59.82, label = "Население: 5 600 044 чел.",
           size = 3.5, color = "#2c3e50") +
  # Точки наблюдений
  geom_point(data = spb_data, aes(x = lon, y = lat),
             color = "#2c7bb6", size = 1.2, alpha = 0.5) +
  # Оформление
  coord_fixed(xlim = c(29.6, 31.0), ylim = c(59.5, 60.3), expand = FALSE) +
  labs(title = "Санкт-Петербург",
       subtitle = paste0("Наблюдений: ", n_spb, " | Уникальных видов: ", length(unique(spb_data$species))),
       x = "Долгота", y = "Широта",
       caption = "Данные: City Nature Challenge 2022 (iNaturalist)") +
  theme_bw() +
  theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#1a5276"),
        plot.subtitle = element_text(hjust = 0.5, size = 10),
        panel.grid.major = element_line(color = "gray90"),
        panel.grid.minor = element_blank())

# --- Карта Екатеринбурга с отображением города ---

ekb_city <- data.frame(
  xmin = 60.4, xmax = 60.9,
  ymin = 56.7, ymax = 57.0,
  name = "Екатеринбург"
)

map_ekb <- ggplot() +
  # Отображение территории города (заливка и контур)
  geom_rect(data = ekb_city, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
            fill = "#ffe0cc", alpha = 0.5, color = "#a04000", linewidth = 1.2) +
  # Подпись города
  annotate("text", x = 60.65, y = 56.88, label = "ЕКАТЕРИНБУРГ",
           fontface = "bold", size = 5, color = "#a04000") +
  # Подпись населения
  annotate("text", x = 60.65, y = 56.76, label = "Население: 1 589 000 чел.",
           size = 3.5, color = "#2c3e50") +
  # Точки наблюдений
  geom_point(data = ekb_data, aes(x = lon, y = lat),
             color = "#d7191c", size = 1.2, alpha = 0.5) +
  # Оформление
  coord_fixed(xlim = c(60.2, 61.1), ylim = c(56.5, 57.2), expand = FALSE) +
  labs(title = "Екатеринбург",
       subtitle = paste0("Наблюдений: ", n_ekb, " | Уникальных видов: ", length(unique(ekb_data$species))),
       x = "Долгота", y = "Широта",
       caption = "Данные: City Nature Challenge 2022 (iNaturalist)") +
  theme_bw() +
  theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 16, color = "#a04000"),
        plot.subtitle = element_text(hjust = 0.5, size = 10),
        panel.grid.major = element_line(color = "gray90"),
        panel.grid.minor = element_blank())

# Вывод карт
print(map_spb)

print(map_ekb)

# ============================================================
# КОНЕЦ НАЧАЛЬНОЙ ЧАСТИ
# ============================================================