Python, Строительство | Олег Брагинский, Валерий Хлебнов
Ускорение рутинных операций высвобождает время для дополнительных интересных проектов. Основатель «Школы траблшутеров» Олег Брагинский и ученик Валерий Хлебнов расскажут о недостающем функционале современных развивающихся IT-систем в строительстве столицы.
При перевозке отходов строительства и сноса в столичном регионе строители и демонтажники вынуждены использовать Автоматическую Информационную Систему Отходов Строительства, Сноса и Грунтов (АИС ОССиГ). Комплекс выполняет аудит грузоперевозок в реальном времени.
Функционал платформы обогащается с каждым днём. Выполненные рейсы отслеживаются Генподрядчиком, Техзаказчиком, Заказчиком самостоятельно, в удобный момент времени. Настроенные права доступа позволяют видеть все действующие и завершённые объекты фирмы.
Ранее уже разбирали процессинг выгруженных данных при помощи бесплатной надстройки для MS Excel – PowerQuery. В настоящем примере разберём возможности ускорения и автоматизации обработки информации в случае открытия множества Разрешений на перемещение отходов.
При ежедневном запросе отчётности по нескольким действующим стройкам с дюжиной-другой открытых разрешений приходим к мысли об ускорении предварительной подготовки данных для последующей обработки и презентации сводных таблиц и наглядных графиков и диаграмм.
Напомним, что сейчас личный кабинет находится по адресу https://smart.mos.ru. Учётная запись связана с аккаунтом юридического лица на сайте https://mos.ru. После регистрации в личном кабинете и добавления объекта строительства получим доступ к отчётности по разрешениям.
В системе основной упор сделан на использовании кодов, а не на человекочитаемые названия: номера Разрешений и комплексов программно-технических средств (КПТС), кодов Федерального классификационного каталога отходов (ФККО). Выгружаем все пункты в единый файл MS Excel:
Неискушённых пугает роботизированный подход к заполнению таблицы. Несмотря на наличие начальных навыков MS Excel, не пытаются справиться с поиском и суммированием необходимых значений: числовые операнды имеют текстовый формат, поэтому не подлежат калькуляции…
Осознав приблизительное суммарное время, затраченное на получение готового результата через Power Query, решили рассмотреть альтернативу: Pandas Data Frame в Python. Ранее «Панды» отлично справились с конвертацией строительных смет в классические ведомости объёмов работ.
Формулируем задачу: разработать и внедрить однокнопочный алгоритм-конвертор. На выходе получить сводные таблицы общего корректного объёма с дополнительными срезами в плоскости Разрешений и Ежемесячного вывоза. Составить список некорректных рейсов с примечаниями.
Код «Переводчика» будем писать в Visual Studio Code от Microsoft с подключёнными расширениями Python и Jupyter. Среда разработки не требует запуск браузера в отличие от классического Юпитера и может использоваться как блокнот с дополнительным функционалом подобно Notepad++:
До обработки результатов необходимо составить справочник отходов с атрибутами: код, наименование, расчётная насыпная плотности для преобразования тонн в кубометры. Справочник считаем условно статическим, заполняем единожды вручную, приводим к формату словаря:
Выгрузки из АИС ОССиГ работают с кодами ФККО, что добавляет хлопот при обработке данных на лету. Формализованные наименования отходов дают однозначное представление о каких видах загрязнений идёт речь. Коэффициенты для перевода тонн в кубометры берём по справочникам.
В случае отсутствия насыпной плотности отхода заполняем нулевым значением. Справочник храним в отдельном txt-файле для возможности оперативного редактирования и обновления информации. Дробные части отделяем точками, текстовые значения обрамляем кавычками.
Обращаем внимание, что справочнику достаточно содержать только перечень отходов, принимаемый аккредитованными полигонами в Москве и Московской области. Нет смысла переносить бесконечный список из реестра ФККО, представленный в открытом доступе в интернет.
За основу рассмотрим перечень аккредитованных объектов приёма ОСС на https://stroi.mos.ru/oss. В табличной форме перечислены актуальные коды ФККО, подлежащие утилизации внутри системы. Неподходящие отходы переквалифицируем повторными лабораторными заключениями.
На первом этапе без труда конкатенируем таблицы всех разрешений в единый массив. Порядок перечисления пока не имеет значения. Важно получить плоскую читаемую таблицу без потери первоначальных данных. Команда вычитывает все листы нашей Excel-выгрузки по очереди:
Первым делом пытаемся понять количество корректно вывезенных отходов, которые система приняла безоговорочно. Применяем чистку в числовых форматах для проведения дальнейших расчётов. Выручает лямбда, освобождающая от необходимости построчного введения формул:
Использование лямбда-функции также поможет добавить столбец с наименованием отходов согласно кодам ФККО, взяв значения из ранее подготовленного справочника. Ориентировочный объём получим, умножив массу замеров на насыпную плотность, облегчая понимание таблицы.
Получаем первую сводную матрицу, помогающую отчитаться в моменте об общем количестве вывезенных отходов на данный момент. Напомним, что данные в АИС ОССиГ могут поступать с задержкой до трёх дней, поэтому наиболее точную картину получаем после нерабочих выходных.
Общий сводник позволит сравнить значения, приведённые в бумажных талонах и ведомостях, отображающие фактическое выполнение работ, и согласованные системой. При большом расхождении необходимо выявить причины и подготовить дополнительные материалы защиты.
Для уточнения информации по возможным срезам пропишем возможные фильтры и сортировки. В первой таблице выводим значения накопительного итога по отходам в каждом из разрешений, во второй уточним объёмы с ежемесячной разбивкой. Увидим динамику производства работ:
Для обработки и согласования не засчитанных рейсов придётся участвовать в заседании комиссии Межведомственной Рабочей Группы (МРГ). Каждая некорректная запись рассматривается как отдельный случай. Для подтверждения необходимо подготовить телеметрию с самосвалов.
Для определения списка машин создадим простую таблицу с указанием даты и времени рейса, государственного регистрационного знака автомобиля и дополнительной информацией о причинах незачёта. Трансформируем форматы даты и времени в удобочитаемый для неспециалистов вид:
Перечень некорректных рейсов позволит вести более предметный диалог с перевозчиком касательно оплат выполненных работ. Бюджетные структуры столицы отказываются оплачивать работы, не соответствующие принятым регламентам. Участие в комиссии МРГ однократное.
Заранее готовим доказательный пакет документов для каждого случая. Понадобятся выгрузки из телеметрии, путевые листы, фото- и видеофиксация выполненных работ. Не стоит надеяться на апелляцию. Акция проводится только в исключительных случаях форс-мажорных обстоятельств.
Полученные матрицы результатов выводим в MS Excel для упрощения последующей обработки. Экспортируем каждую таблицу на отдельный лист книги для исключения пересечений заполненных значений. Присваиваем листам «говорящие» имена для облегчения поиска информации:
Цветовое оформление проставит акценты и облегчит восприятие автоматизированных отчётов. Наименование отходов, взятых из справочника, сходу дают понимание о предмете разговора. Фильтры и сортировки позволяют достичь необходимого среза для последующей демонстрации:
При разбивке по Разрешениям вручную дозаполним пустые ячейки вниз. Пропущенное значение – следствие экспорта из Pandas Data Frame. Умные таблицы MS Excel не умеют работать с объединёнными ячейками. Добавить числовые разделители для упрощения восприятия сумм:
Помесячное разделение демонстрирует динамику отхода по каждому Разрешению. При большой разнице значений заметим неравномерность выполнения работ или проблемность использования выбранного полигона. При каждом выявленном нарушении полигон блокируется на приёмку:
При желании возможно построение графиков для отчётности начальству. Визуальное представление подсвечивает закономерности, порождает дополнительные вопросы руководства. Заметим, что диаграммы и гистограммы, кроме MS Excel, можно сделать непосредственно в Python.
Для любопытных подскажем: разберитесь с библиотеками Seaborn и Mathplotlib. Первая имеет стандартизированный набор графиков, вторая – реализует сложные дизайнерские задумки, невозможные при использовании MS Excel. Кастомизируется и настраивается каждая деталь.
Список некорректных рейсов с применёнными фильтрами по ГРЗ помогает сделать адресную рассылку перевозчикам в случае привлечения к проекту нескольких компаний. Каждый получит точное представление об информации, необходимой для подтверждения выполненных работ:
Программирование на Python упростило рутину обработки запроса. Понятный алгоритм действий делегируется машине, превращая работу в однокнопочный результат. С нетерпением ждём появления рассмотренного функционала в АИС ОССиГ для неискушённого рядового пользователя!