Анализ погоды за последнюю неделю

Материал из Поле цифровой дидактики

Описание проекта

Анализ погоды за последнюю неделю.

library(httr)
library(jsonlite)
library(ggplot2)
library(dplyr)
library(patchwork)

options(encoding = "UTF-8")

start_date <- as.character(Sys.Date() - 8)  # Начало периода (7 дней назад)
end_date   <- as.character(Sys.Date() - 1)  # Конец периода (вчера)

url <- paste0(
  "https://archive-api.open-meteo.com/v1/archive?",
  "latitude=55.7558&longitude=37.6173",
  "&start_date=", start_date,
  "&end_date=", end_date,
  "&hourly=temperature_2m,precipitation,cloudcover,windspeed_10m",
  "&timezone=Europe/Moscow"
)

res <- GET(url)  # Отправка запроса

stop_for_status(res)  # Остановка, если ошибка

text <- content(res, "text", encoding = "UTF-8") # Извлекаем текст ответа
json <- fromJSON(text)



df <- data.frame(
  datetime = json$hourly$time,
  temp     = json$hourly$temperature_2m,
  precip   = json$hourly$precipitation,
  cloud    = json$hourly$cloudcover,
  wind     = json$hourly$windspeed_10m
)



df$datetime <- as.POSIXct(df$datetime, format = "%Y-%m-%dT%H:%M", tz = "Europe/Moscow")

df$date <- as.Date(df$datetime)  # Выделяем дату
df$hour <- format(df$datetime, "%H:%M")  # Выделяем час

df_table <- df %>%
  select(date, hour, temp, precip, cloud, wind) %>%  # Выбираем нужные колонки
  arrange(date, hour)  # Сортировка по времени

print(head(df_table, 20))  # Вывод первых строк
View(df_table)  # открытие таблицы


# Графики
plot_temp <- ggplot(df, aes(datetime, temp)) +
  geom_line(color = "red") +
  theme_minimal() +
  labs(title = "Температура (7 дней)", x = "", y = "°C")

plot_precip <- ggplot(df, aes(datetime, precip)) +
  geom_col(fill = "blue") +
  theme_minimal() +
  labs(title = "Осадки (7 дней)", x = "", y = "mm")

plot_cloud <- ggplot(df, aes(datetime, cloud)) +
  geom_line(color = "gray40") +
  theme_minimal() +
  labs(title = "Облачность (7 дней)", x = "", y = "%")

plot_wind <- ggplot(df, aes(datetime, wind)) +
  geom_line(color = "darkgreen") +
  theme_minimal() +
  labs(title = "Ветер (7 дней)", x = "", y = "m/s")

final_plot <- (plot_temp | plot_precip) /  # Объединение графиков
              (plot_cloud | plot_wind)

print(final_plot)

ggsave("moscow_weather_7days.png",  # Сохранение картинки
       final_plot,
       width = 14,
       height = 10)


Результаты