2 заметки с тегом

#data

Погодный монитор или Google SpreadSheets Dashboard

Меня всегда интересовали и интересуют цифры, различного рода и происхождения. Вольты, омы, фарады, люксы, килограммы, километры, скорости, штуки, деньги, рентгены ... — далеко не полный список, но особое место среди них отдано метеоцифрам — температуре, влажности, давлению и др.

На многие наборы мы можем влиять: мы управляем напряжением, умеем менять яркостью осветительных приборов, преодолевать расстояния, двигаться с разной скорость, зарабатывать разное кол-во денег, покупать разное кол-во товаров, но за метеоцифрами мы можем только наблюдать, либо наше влияние локально (климат в помещении), либо управление —
чрезвычайно сложный процесс (одной кнопки будет не достаточно😁).

Вот за такими цифрами я и люблю наблюдать. В далеком 2015 году все началось с температуры, влажности и давления, когда был собран первый макет метеостанции, с тех пор метеостанция переместилась за окно, подкачалась:

  • датчик освещенности
  • радиационный фон
  • скорость ветра
  • был и успел исчезнуть датчик пыли

Также станция обзавелась комнатным модулем (который связан по радиоканалу с уличным модулем и по последовательному интерфейсу с компьютером, где и происходит вся магия 🧙‍♂️) и в конце 2019 года появился дисплейный модуль

Цветовой индикатор отображает среднюю скорость роста давления за последние 3 часа (3 часа разбиваются на интервалы по 30 минут и считается среднее), имеет следующие цвета:

  • красный

    Рост свыше 1.8 мм/час — Quickly rising High Pressure System, not stable
  • желтый

    Рост выше 0.37 мм/час менее 1.8 мм/час — Slowly rising High Pressure System, stable good weather
  • зеленый

    Рост выше -0.37 мм/час и менее 0.37 мм/час — Stable weather condition
  • синий

    Рост более -0.37 мм/час — Slowly falling Low Pressure System, stable rainy weather
  • фиолетовый

    Рост более -1.8 мм/час — Quickly falling Low Pressure, Thunderstorm, not stable

За основу взят алгоритм компании NXP https://www.nxp.com/docs/en/application-note/AN3914.pdf.

После появления метеостанции естественным образом захотелось собирать данных и что еще более естественно их анализировать — это и стало мотиватором к изучению программирования. Были опробованы многие языки (processing (аля С++), php, bash, R). Но когда я открыл для себя python — почувствовал, вот оно!

Был написан скрипт, который запрашивает данные с комнатного модуля, принимает, проверяет и записывает в файл, таким образом начальная база файловая, она и осталась до сих пор. Иерархия такова Папка YYYYMM -> Файл YYYYMMDD.txt. Как говорится, цыплят по осени считают и пока учился в Яндекс.Практикуме, решил что надо весь погодный архив положить в базу данных и продолжить её наполнять и все это в облаке (модно/популярно/хайпово). Все прошло быстро, настройка виртуальной машины Ubuntu 18, установка PostgreSQL 10, создание схем/таблиц/пользователей/прав. В процессе решил не отказываться от хранения файлового архива, а параллельно записывать и в файл и в бд.

Все настроено — данные копятся (на данный момент, в погодной таблице 6.5 млн строк).

Я очень люблю всякие визуализации и с момента появления первых данных с метеостанции всегда хотел иметь приятную глазу картинку. Были разные варианты, но я не силен во фронтэнде, чтобы делать хоть какую-нибудь красоту🤷‍♂️. Не так давно попалась мне статья про дашборды с помощью google таблиц и тут я решил совместить приятное с полезным: SQL + python + Google Sheets.

Потратив какое-то время на эксперименты (выгрузка из бд, предобработка, дизайн дашборда (громкое слово, конечно)), получил требуемый результат.
Итого:

  • SQL запрос, который формирует поминутные данные скользящих средних (окно около 3 минут) температуры, влажности, давления, скорости ветра и порывов ветра (максимальная скорость за 15 минут) и радиационный фон
  • python скрипт, который подключается к бд, выполняет запрос, осуществляет необходимую предобработку данных для google таблиц и апдейтит данные в нужном листе goolge таблиц
  • cron запускает python скрипт раз в 5 минут

Внешний вид дашборда (показатели и график температуры)

Там еще давление и скорость ветра с порывами есть, заходите

Weather Dashboard

В результате создал простой дашборд, который оправдывает мои ожидания, приобрел бесценный опыт работы с Google таблицами и узнал о расчете скользящего среднего с помощью SQL.

 948   6 мес   #dashboard   #data   #google   #python   #weather

Data-view 2.0

...начало

Лето 2018. Анализ данных в R. Часть 1, Анализ данных в R. Часть 2
Осень 2018. Основы статистики. Часть 1, 2 и ... ну 3 не было, пока!

Кому-то эти курсы на stepik.org будут знакомы, кто-то проходит их сейчас, кто-то прошел давно, почти классика. В общем много было прочитано, просмотрено и изучено.
В апреле-мае 2019 курс «Введение в машинное обучение» окончательно дал понять, что тема da/ds/ml мне очень интересна. Процесс глобального поиска ресурсов по интересующим темам привел в Яндекс.Практикум https://praktikum.yandex.ru.

Тогда все только начиналось, оставим размышления на тему выбора, за/против и прочее, добавлю только одно — было круто. Знаете такой студенческий дух, в общем вспомнились интересные годы учебы в вузе)

...модуль

За время учебы приходилось выполнять много проектов и первичный анализ данных, которые увидел только что, никто не отменял. И каждый раз все начиналось сызнова:

  • размерность
  • кол-во пропусков
  • дубликаты
  • описательные статистики
  • ...

В какой-то момент мне надоело писать это в ручную и была предпринята попытка написать парочку функций, чтобы автоматизировать этот процесс. Сие увлекательное занятие привело к написанию великолепной функции view. Из-за особенностей jupyter, в котором мы работали, ставить свои пакеты было не выгодно, они могли самоизолироваться при перезагрузке сервера, поэтому в проектах приходилось работать сочетанием клавиш Ctrl-C/Ctrl-V.
А для себя решил написать модуль и оформить его в виде пакета, чтобы можно было устанавливать на любой машине.

О, дивный новый мир git/github/pypi — освоили, запушили. И вот пакет data-view готов к употреблению!
Текущая версия 0.2.0 умеет:

  • совместный вывод head() + tail()
  • вывод метода info()
  • вывод метода describe()
  • кол-во дубликатов
  • кол-во пропусков в данных (кол-во пропущенных значений и процент от общего кол-ва), выделенных цветовым градиентом
  • гистограмма для каждого числового признака
  • топ-5 значений для категориальных признаков
  • матрица корреляций
  • топ-5 пар с наибольшей корреляцией

Сейчас модуль написан в функциональном стиле, но каждый раз его запуская, появляется потребность некоторые выделенные сущности иметь под рукой, собственно модуль напрашивается, быть переписанным в ООП стиле, и до этого доберусь!

Вся красота устанавливается привычным образом

pip3 install data-view

Красивый пример найдете здесь https://github.com/urevoleg/data-view

А я расскажу вам о естественных курьезах.

Если у вас многоколоночные данные и все данные числовые (например более 15 столбцов), то вот такую красоту вы увидите на гистограммах👇

Чертовски приятно, что работает, но сплошной винегрет)))

Порой можно получить разъезжающееся info()

ps: если кто-то знает как решить, буду благодарен)

Если уникальных элементов более 5, то группировки вы не увидите

...планы

Можно заметить, что никакой новой функциональности нет, и также существует много разных пакетов, которые решают подобные задачи:

  • pandas_profiling
  • autoEDA
  • holoviews
  • bamboolib (вообще шикарная штука😃)

Но какие-то показались мне громоздкими, где-то есть много лишнего, bamboolib, например очень интересная и прикольно-интерактивная, но вот рука как-то не тянется к ее использованию. Для себя хотелось чего-то простого, без наворотов, самого простого, реализовал и пользуюсь, большего пока и не надо...

Хотя, как не надо, переписать все классами и пользоваться всеми их преимуществами! Ну это в следующей серии!

 815   7 мес   #analytics   #data   #github   #python