August 20, 2024

Парсинг данных в эксель и построение розы ветров в полуавтоматическом режиме, часть 1.

В прошлом семестре мне необходимо было сделать интересную, но в то же время довольно рутинную задачу — начертить розу ветров. Так как вручную фильтровать и выписывать данные, а после объединять это все для построения месячных и годового графиков мне совсем не хотелось, я избрал другой путь и решил эту задачу через прекрасный и всемогущий Microsoft Excel. Ниже будет представлено пошаговое решение, от парсинга данных в эксель до построения розы ветров, приятного чтения!

Что такое роза ветров и как ее простроить? По каким исходным данным работать?

Роза ветров — это векторная диаграмма с помощью которой можно определить направления и скорость ветров в точке наблюдений. Для решения поставленной задачи имеются данные с сайта гисметео, из этих данных необходимо получить:

  • Определить количество ветреных дней по каждому из направлений (С, СВ, В и тд.) за месяц и за год, вычислить среднюю скорость для каждого из направлений.
  • Розы ветров для каждого месяца (рис.1).
  • Годовую розу ветров (рис.2).
Рисунок 1 — Роза ветров за март 2023 года
Рисунок 2 - Годовая роза ветров

С основной задачей определились, но что делать теперь, с чего начать? Для облегчения поиска решений я разбил основную задачу на несколько подзадач:

  1. Парсинг данных в эксель с сайта гисметео, дневник погоды
  2. Подсчет количества ветреных дней и дней со штилем за месяц, и расчет средней скорости ветра для каждого из направлений
  3. Выбор наиболее подходящего графика и построение месячной розы ветров
  4. Создание сводной таблицы по количеству ветреных дней, дней со штилем и скорости этих ветров за год
  5. Построение годовой розы ветров

1. Парсинг данных в эксель

Для загрузки данных с сайта в эксель необходимо воспользоваться командой «получить данные из интернета». Вкладка «Данные» -> «получить данные из интернета»

Далее появится окно ввода URL-адреса, в которое необходимо вбить адрес сайта с которого необходимо получить выгрузку данных

Далее появится такое окно с готовой таблицей, сортируем данные, удаляя все лишнее. Остаются колонки: число, ветер дневной (вечерний ветер можно не учитывать)

Теперь разделяем столбец с направлением ветра на само направление и скорость ветра, для дальнейшего анализа. Используем команду «Текст по столбцам». Вкладка «Данные» -> «текст по столбцам». В первом шаге указываем пробел как разделитель, вторым шагом разделяем столбец со скоростями ветра, используем символ-разделитель другой: м

Конечныы результатом разделения является 3 столбец

С парсингом данных и их подготовкой закончили, теперь можно переходить к подсчетам.

2. Подсчет количества ветреных дней и дней со штилем за месяц, и расчет средней скорости ветра для каждого из направлений

Для начала формируем таблицу из трех столбцов:

  • Направление ветра, указываем здесь все направления от северного до северо-западного и штиль
  • Количество ветреных дней
  • Средняя скорость

Количество ветреных дней из столбца "Колво" подсчитывается по следующей формуле:

=СЧЁТЕСЛИ($C$5:$C$35;G6)

Команда =СЧЁТЕСЛИ() подсчитывает количество ячеек в диапазоне удовлетворяющих условию. В данном примере диапазоном является $C$5:$C$35, а условием ячейка G6. То есть в диапазоне направлений ветров ищется совпадение по северному направлению найденное количество совпадений выводится. После эта формула растягивается на все нижележащие ячейки от H6 до H14.

Следующим шагом считается средняя скорость:

=(СУММЕСЛИ($C$5:$C$35;G6;$D$5:$D$35))/ЕСЛИ(H6>0;H6;1)

Команда =СУММЕСЛИ($C$5:$C$35;G6;$D$5:$D$35) ведет поиски в столбце «Ветер» ячейки: C5:C35, по ячейке G6 (поочередно сравнивая значение в ячейке G6 с ячейками из диапазона C5:C35), если значения из ячеек C5:C35 совпадают со значением ячейки G6 то значения в столбце «Ск-ть» D5:D35 , находящиеся напротив ячеек удовлетворяющих условию суммируются. В рассматриваемом примере в ячейке G6 находится значение «С» (северное направление ветра), если сравнить это значение со значением первой ячейки диапазона C5 «ЮВ», то формула выдаст «ложь» и не будет суммировать эту ячейку, если далее продолжить сравнение то все ячейки до C12 будут выдавать «ложь», ячейка C12 равна G12, следовательно находящаяся правее ячейка D12 будет внесена в сумму, все дальнейшие ячейки не будут удовлетворять заданному условию и не будут внесены в сумму.

ЕСЛИ(H6>0;H6;1) вторая часть формулы выбирает ненулевые значения количества ветреных дней, а нулевые значения заменяет единицей, чтобы не вызвать ошибок и произвести корректный расчет. То есть если значение исследуемой ячейки больше нуля ЕСЛИ(H6>0), то в числителе остается исследуемое число ЕСЛИ(H6>0;H6),иначе оно заменяется единицей ЕСЛИ(H6>0;H6;1)

Ниже приведена схема подсчета средней скорости для северного и западного направлений.

*Так же можно посчитать среднюю скорость не через среднее арифметическое, а используя медиану, такой метод подсчета позволит отсечь аномально высокие/низкие значения и получить более точный результат.

Очень полезная статья: http://mathprofi.ru/moda_mediana_generalnaya_i_vyborochnaya_srednyaya.html#mo

Формула по которой можно посчитать среднюю скорость через

медиану:=ЕСЛИОШИБКА(МЕДИАНА(ЕСЛИ($C$5:$C$35=G6;$D$5:$D$35));0)

3. Выбор наиболее подходящего графика и построение месячной розы ветров

Наиболее подходящей из-за простоты оформления мне показалась лепестковая диаграмма. Диаграммы находятся во вкладке «Вставка» -> «Рекомендуемые диаграммы» -> «Все диаграммы» -> «Лепестковая»

Далее нужно нажать левой кнопкой мыши на появившуюся пустую диаграмму и кликнуть «Выбрать данные»

В появившемся окне «Выбор источника данных» нажать на «Добавить» под надписью «Элементы легенды»(ряды), написать любое имя ряда и в колонке «значения» выбрать столбец количества ветреных дней, все значения кроме количества дней со штилем (Рис.3.2.) Далее нажать ОК и в правом столбце «Подписи горизонтальной оси»(категории) изменить на значения названий направлений(Рис.3.3)

Рис.3.1
Рис.3.2
Рис.3.3

Диаграмма заполнена и визуализирует все данные осталось только настроить внешний вид на свой вкус и повторить вышеприведенные операции для всех оставшихся месяцев