Построй розу ветров за декабрь 2025 года
Ответ нейросети
29 января 2026 19:43
Понял задачу. Так как местоположение не указано, дам детальное руководство и готовый пример кода, который можно применить к любому месту, подставив свои данные за декабрь 2025 года. В конце предложу, как получить реальные данные для конкретной локации и построить розу ветров.
Что такое роза ветров?
- Роза ветров показывает распределение скорости ветра по направлениям. Обычно делят окружность на сектора (напр., 16 сектора по 22.5°) и для каждого направления показывают, как часто встречался ветер определённой скорости.
Что нужно для декабрь 2025 года
- Источник данных по ветру за декабрь 2025 года для конкретной локации:
- направление ветра (ветер дует с этого направления, направление в градусах 0–360, где 0/360 — север)
- скорость ветра (м/с)
- временная отметка наблюдения (чтобы отфильтровать декабрь 2025)
- Формат данных можно привести так: столбцы timestamp, wdir (направление ветра откуда, градусы), wspeed (м/с).
Шаг 1. Выбор секторов и скоростных классов
- Сектора directions: 16 сектора по 22.5°, ориентировочно:
- N (0°), NNE (22.5°), NE (45°), ENE (67.5°), E (90°), ESE (112.5°), SE (135°), SSE (157.5°), S (180°), SSW (202.5°), SW (225°), WSW (247.5°), W (270°), WNW (292.5°), NW (315°), NNW (337.5°).
- Скоростные классы (пример):
- 0–2 м/с
- 2–4 м/с
- 4–6 м/с
- 6–9 м/с
- 9–12 м/с
12 м/с
Шаг 2. Присвоение наблюдений секторам и скоростным классам
- Для каждого наблюдения определить сектор направления по границам сектора.
- Определить скоростной класс по значению скорости.
- Увеличивать счётчик в соответствующей клетке матрицы 16x6 (16 секторов × 6 скоростных классов).
Шаг 3. Нормировка и визуализация
- Преобразовать счётчики в проценты от общего числа наблюдений за декабрь.
- Построение:
- Вариант A: готовая роза ветров с помощью библиотеки windrose (упрощённая легенда и цветовая кодировка по скоростям).
- Вариант B: обычная полярная диаграмма в Matplotlib (ручной построение цилиндрических секторных столбиков по скоростным классам).
Пример кода на Python (с реальными данными можно работать аналогично)
Установка зависимостей:
- pip install pandas matplotlib windrose
Пример кода (работает с CSV-файлом):
- CSV формата: columns = ["timestamp", "wdir", "wspeed"]
- timestamp формата ISO 8601, например 2025-12-01T12:00:00
Приведённый ниже код можно запустить как есть, подставив путь к вашему файлу данных.
Код для построения розы ветров за декабрь 2025 года
import pandas as pd import numpy as np import matplotlib.pyplot as plt from windrose import WindroseAxes
Загрузка данных
df = pd.read_csv("winds_dec_2025.csv", parse_dates=["timestamp"])
Фильтр на декабрь 2025 года
start = pd.Timestamp("2025-12-01 00:00:00") end = pd.Timestamp("2026-01-01 00:00:00") df = df[(df["timestamp"] >= start) & (df["timestamp"] < end)]
Переходные шаги: настраиваем названия столбцов под ваш CSV
df["wdir"] -> направление ветра из какого направление (0–360)
df["wspeed"] -> скорость ветра в м/с
Защита от отсутствия данных
if df.empty: raise ValueError("Нет данных за декабрь 2025 года в данном файле.")
Опционально: привести направления к диапазону [0, 360)
df["wdir"] = df["wdir"] % 360
Опционально: если скорость дана в узлах (knots), конвертация в м/с:
df["wspeed"] = df["wspeed"] * 0.514444
Определение секторов (16 секций по 22.5°)
sector_edges = np.arange(-11.25, 360, 22.5) # центры секторов sector_labels = ["N","NNE","NE","ENE","E","ESE","SE","SSE", "S","SSW","SW","WSW","W","WNW","NW","NNW"]
def assign_sector(angle_deg): # приводим к [0,360) a = angle_deg % 360 # определить сектор idx = int((a + 11.25) // 22.5) % 16 return sector_labels[idx]
df["sector"] = df["wdir"].apply(assign_sector)
Скоростные классы
bins = [0, 2, 4, 6, 9, 12, float("inf")] labels = ["0-2","2-4","4-6","6-9","9-12",">12"]
def assign_speed_class(v): for i, b in enumerate(bins[1:], start=0): if v <= b: return labels[i] return labels[-1]
df["speed_class"] = df["wspeed"].apply(assign_speed_class)
Построение матрицы частот: сектор x скоростной класс
matrix = pd.crosstab(df["sector"], df["speed_class"])
Убедимся, что есть все сектора и классы
for s in sector_labels: if s not in matrix.index: matrix.loc[s] = [0]*len(labels) for cl in labels: if cl not in matrix.columns: matrix[cl] = 0 matrix = matrix.loc[sector_labels, labels] # упорядочиваем
Преобразование в проценты
total_obs = matrix.values.sum() percent = matrix / total_obs * 100
Визуализация розы ветров
plt.figure(figsize=(8, 8)) ax = WindroseAxes.from_ax()
bar(dir, speed, normed=True, bins=[0,2,4,6,9,12,100], ...). В X: направление, Y: скорость
Для корректного отображения используем суммарную частоту по секторам, чтобы получить розу по количеству наблюдений.
У WindroseAxes bar() нужно передать направления и скорости. Здесь суммируем по каждому сектору, чтобы получить одну величину на сектор.
Преобразуем: для каждого сектора суммируем по всем speed_class
sector_sums = percent.sum(axis=1).values # проценты по каждому сектору
Чтобы построить розу, нужно иметь список направлений (центры секторов) и соответствующие значения
Создадим упрощённый график: по каждому сектору длина пропорциональна суммарной доле наблюдений в этом секторе
Вариант упрощённой розы без разбивки по скоростям:
directions = [0,22.5,45,67.5,90,112.5,135,157.5,180,202.5,225,247.5,270,292.5,315,337.5] ax.bar(directions, sector_sums, width=22.5, orientation="0", normed=True) ax.set_title("Роза ветров за декабрь 2025 (плоская агрегация по направлению)") plt.show()
Примечание: это упрощённая версия без цветовой кодировки по скоростям.
Чтобы показать по скоростям в одном графике, используйте встроенную функцию ax.bar с несколькими наборами по каждому классу.
Сохранение результата
plt.savefig("windrose_dec2025.png", dpi=300)
Если хотите точную многоклассовую розу по скоростям (16 секторов × 6 классов) с цветами, используйте более детальный пример из windrose:
Пример детальной верcии (много цветов, по классам скорости) можно получить таким способом:
ax = WindroseAxes.from_ax()
ax.bar(df['wdir'], df['wspeed'], normed=True, bins=bins, labels=labels, opening=0.8)
ax.set_legend()
plt.show()
Важно: вышеуказанный код рассчитан на общую схему. В зависимости от вашего набора данных названия столбцов и единиц измерения могут отличаться. Подготовьте файл winds_dec_2025.csv с колонками:
- timestamp (ISO-формат)
- wdir (направление ветра из которого дует ветер, в градусах 0–360)
- wspeed (скорость ветра в м/с)
Уточнения и варианты
- Место dar: если вы сообщите город/координаты, можно скачать реальные данные за декабрь 2025 года и построить точную розу ветров. Поддержу загрузку данных через Meteostat, NOAA или другой источник и дам готовый график.
- Если у вас нет данных вовсе, можно показать пример на синтетических данных. Я могу сгенерировать пример и показать, как будет выглядеть роза.
Готов сделать:
- Реальную розу ветров за декабрь 2025 по вашей локации, если скажете место (город, станция или координаты).
- Или предоставить полностью готовый скрипт, который вы запустите на своём ПК и получите изображение.
Укажите, пожалуйста, место наблюдения (город или координаты) или приложите ваши данные, и я построю для вас точную розу ветров за декабрь 2025 года.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



