Тема 01

Предмет и задачи аналитики данных

Предмет и задачи аналитики данных

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

Аналитика данных как дисциплина

Определение: извлечение проверяемых знаний из данных для обоснования решений

Аналитика данных (data analytics) — это организованная деятельность по извлечению проверяемых знаний из массивов наблюдений с целью обоснования инженерных, управленческих или научных решений. В этом определении важно каждое слово. «Проверяемых» — потому что любое утверждение аналитика должно допускать воспроизведение на тех же данных тем же методом. «Организованная» — потому что это не единичное наблюдение, а повторяемая процедура с фиксированными шагами. «Для обоснования решений» — потому что аналитика оправдана только тогда, когда её результат влияет на выбор между альтернативами: запустить или не запустить эксперимент, заменить поставщика или оставить текущего, повысить порог срабатывания алерта или снизить.

Центральная функция аналитики — снижение неопределённости. Решение, принятое без данных, опирается на интуицию и предшествующий опыт; решение, опирающееся на аналитику, дополняет интуицию измерением. Это не отменяет опыт, но делает его проверяемым.

Границы дисциплины и её место среди смежных: статистика, Data Science, BI, Machine Learning

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

Статистика — фундамент аналитики, но не тождественна ей. Статистика изучает свойства случайных величин и методы вывода при неполной информации; аналитика использует эти методы как инструмент, но ставит прикладные задачи, привязанные к конкретной предметной области. Аналитик обязательно владеет базовой статистикой, но не обязан доказывать сходимость оценок.

Data Science — шире аналитики. В неё традиционно включают не только исследовательский анализ, но и разработку ML-моделей, инженерию признаков, работу с неструктурированными данными (текст, изображения, сигналы). Граница подвижна, и в разных организациях её проводят по-разному. В рамках этого курса мы остаёмся в пределах аналитики: базовое ML-моделирование будет введено в курсе «Методы искусственного интеллекта» (МИИ), а промышленное развёртывание — в курсе «Платформы аналитики и машинного обучения» (ПАМО).

Business Intelligence (BI) — прикладной слой над аналитикой, ориентированный на регулярный мониторинг бизнес-показателей: дашборды, отчёты, витрины данных. BI отвечает на вопрос «что происходит прямо сейчас», аналитика в более широком смысле — ещё и на вопросы «почему», «что будет» и «что делать».

Machine Learning (ML) — набор методов построения моделей, которые обучаются на данных. ML — один из инструментов аналитики, но не её единственное содержание: значительная часть практической работы аналитика не требует обучаемых моделей и решается средствами описательной статистики и корректной визуализации.

Чтобы не путать названия профессий с содержанием работы, запомним правило: дисциплина определяется вопросами, которые она ставит к данным, а не набором библиотек.

Отличие аналитики данных от анализа данных

В русскоязычной литературе встречаются оба термина — «аналитика данных» и «анализ данных», — и их иногда употребляют как синонимы. В рамках курса мы придерживаемся следующего разграничения.

Анализ данных — это процедура: конкретное исследование, направленное на ответ на заданный вопрос по заданному датасету. Результат анализа — вывод или отчёт.

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

Аналитик проводит анализ как одну из регулярных операций, но не сводится к ней.

Данные, информация, знание: уровни абстракции и переходы между ними

Работу аналитика удобно представлять как последовательные переходы между уровнями абстракции. Классическая пирамида DIKW — Data, Information, Knowledge, Wisdom — даёт компактную модель этих переходов 1, хотя сама по себе и не без критики 2.

Пирамида DIKW: данные, информация, знание, мудрость
Пирамида DIKW: уровни переработки сырых наблюдений в основания для действий

Данные — сырые наблюдения: значения датчиков, записи транзакций, строки журналов. Сами по себе они ещё не несут смысла: значение «24.7» превращается во что-то осмысленное только после того, как мы узнаём, что это температура в градусах Цельсия, измеренная в конкретной точке в конкретный момент.

Информация — данные, снабжённые контекстом и приведённые к форме, пригодной для сопоставления. На этом уровне уже возможны агрегации и группировки: «средняя температура за сутки», «число записей за час».

Знание — устойчивые закономерности, выявленные в информации и проверенные на новых данных: «если температура превышает 80 °C в течение 10 минут подряд, вероятность остановки линии существенно возрастает». Знание отличается от информации тем, что допускает перенос на ранее не наблюдавшиеся ситуации.

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

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

Виды аналитики

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

Описательная аналитика: что произошло

Описательная аналитика (descriptive analytics) отвечает на вопрос «что произошло?» Она упорядочивает факты о состоянии системы: динамики показателей, распределения значений, структуры потоков, профили использования ресурсов. Типичный результат — согласованный набор метрик с однозначными определениями и репрезентативные визуализации.

Казалось бы, это простейший уровень; но именно на нём закладывается большинство ошибок всего последующего анализа. Неверно выбранная шкала, неаккуратно суммированные значения «на конец периода», неучтённая сезонность — и любые следующие выводы окажутся недостоверными. Поэтому даже при решении сложных задач предсказательной или предписывающей аналитики значительная доля работы всегда уходит на чистое описание: проверку полноты, сопоставимость периодов, корректную агрегацию.

Описательная аналитика принципиально не порождает причинных утверждений. Она фиксирует, что две величины менялись одновременно, но не объясняет, почему.

Диагностическая аналитика: почему это произошло

Диагностическая аналитика (diagnostic analytics) отвечает на вопрос «почему это произошло?» Она выявляет факторы и сегменты, связанные с наблюдаемыми изменениями: падение конверсии — в каком сегменте пользователей; всплеск ошибок — после какого релиза; рост времени ответа — на каких запросах. Результат — ранжированный перечень факторов с оценками эффектов и сформулированные гипотезы для дальнейшей проверки.

На этом уровне впервые появляется необходимость различать ассоциацию и причинность. Тот факт, что показатель A и показатель B менялись одновременно, не означает, что A вызвал B: они могут зависеть от третьего фактора C или совпасть случайно. Корректная диагностика требует учёта вмешательств (релизов, кампаний, сезонных событий), контроля множественных сравнений и ясного понимания, какие гипотезы требуют подтверждения на независимых данных.

Частая ошибка — смешение диагностики с причинным выводом: «мы нашли, что пользователи iOS имеют более низкую конверсию, значит, надо улучшать приложение под iOS». Правильная интерпретация скромнее: «обнаружен сегмент с отклонением; прежде чем действовать, проверим, не объясняется ли оно различиями трафика или источника установки».

Предсказательная аналитика: что произойдёт

Предсказательная аналитика (predictive analytics) отвечает на вопрос «что произойдёт?» На основе исторических данных она строит прогнозы будущих значений показателей или вероятности событий: нагрузка на кластер в следующие сутки, вероятность оттока клиента в ближайший месяц, оценка остаточного ресурса оборудования.

Корректная предсказательная аналитика требует строгой дисциплины проверки. Прогноз оценивают на периоде, который не использовался при его построении: в данных, упорядоченных во времени, будущее не должно «подсматриваться». Кроме того, учитывают устойчивость прогноза к изменению условий и стоимость ошибок разного рода. Прогноз теплопотребления, в среднем точный, но ошибающийся именно в сильные морозы, бесполезен для службы эксплуатации. Как устроена такая проверка для моделей машинного обучения, рассматривается в курсе «Методы искусственного интеллекта».

Практическое правило: предсказательная модель оправдана только тогда, когда её прогноз оценивается по сравнению с наивной альтернативой (предсказать значение вчерашнего дня, среднее за неделю). Если модель не превосходит наивный прогноз, её внедрение не имеет смысла.

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

Предписывающая аналитика: что следует сделать

Предписывающая аналитика (prescriptive analytics) отвечает на вопрос «что следует сделать?» Она предлагает действие, максимизирующее целевую метрику при заданных ограничениях (бюджет, риски, ресурсы, время): как распределить рекламный бюджет между каналами; какой порог срабатывания выбрать для системы мониторинга; в каком порядке обслуживать очередь заявок.

Это самый высокий уровень аналитики и самый требовательный. Честная предписывающая аналитика опирается на экспериментальную или квази-экспериментальную оценку эффектов: прежде чем рекомендовать действие, мы должны показать, что оно действительно приводит к желаемому результату, а не просто коррелирует с ним на исторических данных. Без такой проверки рекомендации превращаются в гадание с цифровым антуражем.

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

Сложность, стоимость и ценность на каждом уровне

Иерархия четырёх видов аналитики не декоративна. С каждым шагом вверх растут три величины:

  • сложность — в терминах требуемой математики, объёма данных и экспертизы;
  • стоимость — в терминах инфраструктуры, труда и времени;
  • ценность — в терминах влияния на принимаемые решения.

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

Аналитика в цикле принятия решений

Бизнес-вопрос → данные → выводы → действие → обратная связь

Практическая работа аналитика укладывается в повторяющийся цикл: исходный вопрос формулируется в измеримых терминах; необходимые данные собираются и очищаются; применяется метод, адекватный постановке задачи и качеству измерений; вывод фиксируется и превращается в действие; эффект действия подтверждается повторным измерением.

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

Ключевой элемент цикла — обратная связь. Без неё аналитика превращается в одноразовое упражнение: отчёт написан, рекомендация отдана, но никто не возвращается к данным проверить, что из этого вышло. Зрелая практика требует замыкания контура: каждое нетривиальное решение, принятое на основе аналитики, фиксируется как контрольная точка, к которой мы вернёмся через заданный срок.

Распространённое воплощение этого цикла — модель Cross-Industry Standard Process for Data Mining (CRISP-DM) 3. Она делит аналитическую работу на шесть фаз: понимание бизнеса, понимание данных, подготовка данных, моделирование, оценка и внедрение. Порядок фаз не жёсткий: что делать дальше, решают по итогам текущей фазы, и вернуться можно к любой из предыдущих. Стрелки на схеме показывают лишь самые частые зависимости: понимание бизнеса и понимание данных уточняют друг друга, подготовка данных и моделирование — тоже, а оценка может вернуть к постановке задачи. Внешний круг означает, что внедрением работа не заканчивается: его опыт порождает новые, более узкие вопросы.

Цикл CRISP-DM: шесть фаз вокруг центральной сущности «Данные»
CRISP-DM: шесть фаз аналитической работы, замыкающиеся в цикл

В рамках курса мы не будем строго следовать терминологии CRISP-DM, но его логика — от вопроса через данные к действию и обратно — лежит в основе всех последующих тем.

Операционные, тактические и стратегические решения на данных

Решения, которые аналитика поддерживает, удобно классифицировать по горизонту и обратимости.

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

Тактические решения — средний горизонт (недели, месяцы), умеренная частота. Планирование ресурсов, настройка кампаний, пересмотр пороговых значений. Здесь важна точность оценок и возможность A/B-сравнений.

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

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

Критерии успешности аналитической работы

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

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

Аналитика с превосходными метриками инструмента, не сдвинувшая метрики результата, — неудача. Аналитика с посредственными метриками инструмента, но приведшая к измеримому улучшению результата, — успех. Это смещение акцента с «качества модели» на «качество решения» отличает зрелую аналитическую практику от её имитации.

Области применения

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

Аналитика в промышленности и IoT

Промышленность и IoT — одна из наиболее технически насыщенных областей применения. Типичные задачи: мониторинг состояния оборудования, предсказательное техническое обслуживание, оптимизация режимов работы, контроль качества продукции по показаниям датчиков. Особенности этой области — высокая частота измерений, высокая доля шума и пропусков, сильная временная структура данных. Многие методы, которые в «чистых» бизнес-датасетах работают без нареканий, в промышленных задачах требуют серьёзной адаптации именно из-за шума и нерегулярности поступления данных.

Аналитика в бизнесе, финансах, маркетинге

Здесь аналитика наиболее массовая и наиболее разработанная. Воронки продаж, сегментация клиентов, оценка эффективности рекламных кампаний, кредитный скоринг, анализ оттока, A/B-тестирование продуктовых гипотез. Большинство открытых датасетов, на которых удобно тренироваться, пришли именно из этой области.

Аналитика в науке, медицине, государственном управлении

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

Типовые кейсы и сквозной кейс курса

Отраслевые примеры полезны, пока за ними стоят конкретные данные. Поэтому все практические занятия курса построены на одном наборе — данных эксплуатации городской инженерной инфраструктуры, описанных во введении: объекты, приборы учёта и их почасовые показания, погода, инциденты и обращения жителей. Разберём на нём типичный вопрос службы эксплуатации: в районе выросло число обращений жителей по отоплению.

На описательном уровне аналитик устанавливает, как менялись теплопотребление и температура теплоносителя на тепловых пунктах района. На диагностическом — совпадают ли провалы с похолоданиями, с инцидентами вроде завоздушивания или утечки теплоносителя, с пропусками связи приборов и не отражает ли рост обращений активность жителей, а не состояние сети. На предсказательном — какое потребление ожидать завтра при прогнозной температуре; эту задачу решает курс «Методы искусственного интеллекта» по таблице признаков, построенной в теме 8. Предписывающий уровень — в каком порядке обслуживать тепловые пункты — остаётся за рамками курса.

Цепочка тем повторяет цикл принятия решений: сбор данных (тема 2), их описание и план очистки (тема 3), очистка (тема 4), визуализация (тема 5), гипотезы на данных октября–января (тема 6) и их проверка на данных февраля–марта (тема 7), признаки (тема 8) и отчёт для службы эксплуатации (тема 9). Тот же набор затем используется в курсах «Методы искусственного интеллекта», «Современные хранилища данных» и «Платформы аналитики и машинного обучения».

Ограничения и ответственность аналитика

Качество данных как верхняя граница качества выводов

Первое правило аналитика звучит неромантично: качество данных задаёт верхнюю границу качества выводов. Никакой, сколь угодно изощрённый, метод не извлечёт достоверного знания из данных, собранных с ошибками. Если датчик измеряет температуру со смещением 3 °C, все построенные на его показаниях модели будут воспроизводить это смещение. Если опросный лист включает наводящие вопросы, все последующие корреляции окажутся артефактом формулировок.

Отсюда — непропорциональная доля времени, которую аналитик тратит на проверку и очистку данных. По оценкам из интервью с аналитиками, приведённым в статье С. Лора, на сбор и подготовку данных уходит от 50 до 80 % рабочего времени 4; это экспертные оценки, а не измерение. В учебных примерах эта доля искусственно занижена, потому что данные уже подготовлены автором.

Предвзятость данных и методов, корректность интерпретации

Данные несут в себе предвзятость (bias) — систематические отклонения, возникающие из-за способа сбора, состава выборки, действий тех, кто данные производил. Простейший пример: модель, обученная на данных только активных пользователей сервиса, не умеет работать с пассивными — но именно поведение пассивных чаще всего представляет интерес. Выявление и документирование предвзятости — обязательная часть работы, а не дополнительная опция 5.

Предвзятость методов — ещё одна ловушка. Закономерность, найденная и подтверждённая на одних и тех же данных, выглядит надёжнее, чем есть на самом деле. Это не вопрос добросовестности, а следствие статистики, и защищаются от этого эффекта процедурой: в курсе гипотезы формулируются на данных октября–января (тема 6), а проверяются на данных февраля–марта с поправкой на множественные сравнения (тема 7). Утечку информации из будущего в признаки разберём в теме 8, а схемы проверки моделей — предмет курса «Методы искусственного интеллекта».

Корректная интерпретация результатов требует сдержанности формулировок. «На данных октября–января теплопотребление пунктов района выше в холодные дни» — корректное утверждение при указании данных и способа сравнения. «Похолодание вызывает перерасход тепла» — некорректное утверждение, пока связь не проверена (темы 6 и 7).

Этические и правовые рамки работы с данными

Работа с данными регулируется как законом, так и профессиональной этикой. Правовые ограничения — от защиты персональных данных (в России — 152-ФЗ 6, в ЕС — GDPR 7) до отраслевых регламентов (медицина, финансы) — определяют, какие данные можно собирать, хранить и обрабатывать, на каких основаниях и с какими предосторожностями. Нарушение этих норм — не абстрактный риск, а прямая ответственность организации и, в ряде случаев, конкретного специалиста.

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

В рамках курса мы возвращаемся к теме этики на каждом этапе — при обсуждении сбора данных, предобработки, отчётности и представления результатов. Этика не отдельная дисциплина, приставленная к аналитике сбоку, а её сквозное измерение.

Итоги темы

В этой теме мы зафиксировали предмет и границы аналитики данных, отделив её от смежных дисциплин — статистики, Data Science, BI и ML. Рассмотрели классическую типологию из четырёх видов (описательная, диагностическая, предсказательная, предписывающая) и показали, что переход на более высокий уровень требует зрелости на нижнем. Описали цикл принятия решений на данных, в который аналитика встраивается, — от формулировки вопроса до замыкания обратной связи. Наконец, обозначили рамки: качество данных как верхняя граница качества выводов, предвзятость данных и методов, правовые и этические ограничения.

В следующей теме мы перейдём от постановки задачи к её первому практическому этапу — сбору данных: рассмотрим типологию источников, форматы, способы получения данных и первые инструменты контроля их качества.

Литература

  1. Ackoff R. L. From Data to Wisdom. — Journal of Applied Systems Analysis, 1989, С. 3–9.
  2. Rowley J. The Wisdom Hierarchy: Representations of the DIKW Hierarchy. — Journal of Information Science, 2007, С. 163–180.
  3. Shearer C. The CRISP-DM Model: The New Blueprint for Data Mining. — Journal of Data Warehousing, 2000, С. 13–22.
  4. Lohr S. For Big-Data Scientists, “Janitor Work” Is Key Hurdle to Insights. — The New York Times, 2014, https://www.nytimes.com/2014/08/18/technology/for-big-data-scientists-hurdle-to-insights-is-janitor-work.html.
  5. Barocas S., Selbst A. D. Big Data's Disparate Impact. — California Law Review, 2016, С. 671–732.
  6. Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных». — 2006.
  7. Regulation (EU) 2016/679 of the European Parliament and of the Council (GDPR). — 2016, https://eur-lex.europa.eu/eli/reg/2016/679/oj.
Окружение практического занятияzip

Практическое занятие 1. Рабочая среда и первые наблюдения по прибору учёта

  • Объём: 4 академических часа
  • Раздел курса: тема 1 «Предмет и задачи аналитики данных»

Введение

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

По содержанию работа относится к описательному уровню аналитики, рассмотренному в теме 1: требуется установить, что происходило с показаниями прибора за полгода, не пытаясь объяснить причины. Уже на этом шаге проявляется тезис темы о качестве данных как верхней границе качества выводов: в показаниях есть пропуски, повторные записи и значения, которым нельзя доверять, даже если система сбора не пометила их как ошибочные.

Цель работы

Подготовить рабочую среду курса и описать показания одного прибора учёта из учебного набора.

После выполнения работы студент сможет:

  • создать виртуальное окружение Python 3.12 из файла зависимостей курса и подтвердить в ноутбуке версии установленных библиотек;
  • загрузить таблицы набора с разбором отметок времени и объяснить типы их столбцов;
  • определить для заданного прибора период наблюдений, число записей, число часов без записей и распределение записей по статусам;
  • построить линейный график показаний с подписанными осями и единицей измерения;
  • сформулировать наблюдения описательного уровня и указать вопрос, на который по этим данным ответить нельзя.

Теоретический минимум

Место описательной аналитики и роль качества данных — см. учебное пособие, тема 1, разделы «Описательная аналитика: что произошло» и «Качество данных как верхняя граница качества выводов». Устройство учебного набора — во введении к курсу. Ниже приведены сведения об инструментах, которые в теме не рассматривались.

Виртуальное окружение. Модуль venv создаёт каталог с отдельным интерпретатором Python и собственным набором пакетов. Файл requirements.txt перечисляет пакеты с точными версиями, команда python -m pip install -r requirements.txt устанавливает их в активированное окружение. Одинаковые версии у всех участников курса нужны для того, чтобы один и тот же код давал один и тот же результат.

Jupyter. Ноутбук .ipynb состоит из ячеек кода и текстовых ячеек в разметке Markdown. Ячейки выполняются в общем процессе — ядре, поэтому результат зависит от порядка их запуска. Перед сдачей ноутбук выполняется целиком командой Kernel → Restart Kernel and Run All Cells.

pandas. Таблица DataFrame состоит из столбцов Series с общим индексом строк. На занятии используются следующие операции.

ОперацияЗапись
чтение CSV с разбором отметок времениpd.read_csv(path, parse_dates=["ts", "received_at"])
размер таблицы и типы столбцовdf.shape, df.dtypes
первые строкиdf.head()
отбор строк по условиюdf.loc[df["meter_id"] == 3]
сортировкаdf.sort_values("ts")
число записей по значениям столбцаdf["status"].value_counts()
число различных значенийdf["ts"].nunique()
минимум и максимумdf["value"].min(), df["value"].max()
длительность в часах(t_end - t_start) / pd.Timedelta(hours=1)

В pandas 3 текстовые столбцы имеют тип str, а отметки времени после разбора — тип datetime64[us]. Результат отбора строк является самостоятельной таблицей: изменения в ней не затрагивают исходную, а присваивание значений выполняется через df.loc[…].

Matplotlib. Функция plt.subplots(nrows, ncols, sharex=True) создаёт фигуру с несколькими областями построения — осями — и общей горизонтальной осью; ax.plot(x, y) рисует линию, ax.set_title, ax.set_xlabel и ax.set_ylabel задают заголовок и подписи осей, fig.savefig(path) сохраняет фигуру в файл. Правила оформления графиков рассматриваются в теме 5.

Накопительный и мгновенный приборы. Накопительный прибор (kind = counter) передаёт нарастающий итог с момента установки, поэтому его показание само по себе не характеризует нагрузку: расход за период равен разности показаний на концах периода. Мгновенный прибор (kind = sensor) передаёт текущее значение величины — температуру теплоносителя или напряжение.

Перечень оснащения

  • Компьютер под управлением Windows 10 или 11, macOS 12 или новее либо Linux; около 1 ГБ свободного места на диске.
  • Python 3.12 или новее (для Windows при установке с python.org отметить пункт Add python.exe to PATH).
  • Архив окружения занятия — pz-env: файл зависимостей requirements.txt и учебный набор в каталоге data/.
  • Проект курса в GitLab, созданный по регламенту сдачи работ, и его локальная копия.
  • Веб-браузер для JupyterLab.

Если установить Python на компьютер невозможно, работа временно выполняется в Google Colab: файлы requirements.txt и каталог data/ загружаются в сессию, первой ячейкой выполняется %pip install -r requirements.txt. Файлы сессии Colab не сохраняются между запусками, поэтому для последующих занятий окружение необходимо установить локально.

Порядок выполнения работы

Работа выполняется для прибора учёта своего варианта (раздел «Варианты заданий»). В заданиях его номер обозначен METER_ID.

Часть 1. Рабочая среда

Задание

  1. Распаковать архив окружения. Каталог data/ и файл requirements.txt скопировать в корень локальной копии проекта.
  2. Добавить в файл .gitignore проекта строки .venv/, data/ и .ipynb_checkpoints/: окружение и учебный набор в репозиторий не отправляются.
  3. В корне проекта создать и активировать виртуальное окружение.
    macOS и Linux:
    python3.12 -m venv .venv
    source .venv/bin/activate
    

    Windows (PowerShell):
    py -3.12 -m venv .venv
    Set-ExecutionPolicy -Scope Process RemoteSigned
    .venv\Scripts\Activate.ps1
    
  4. Убедиться, что команда python --version выводит версию 3.12 или новее, и установить пакеты командой python -m pip install -r requirements.txt.
  5. Запустить JupyterLab командой jupyter lab, создать каталог pz-01 и в нём ноутбук pz01.ipynb. Первой ячейкой вывести версии Python и библиотек:
    import sys
    
    import matplotlib
    import numpy as np
    import pandas as pd
    
    print(f"Python {sys.version.split()[0]}, pandas {pd.__version__}, "
          f"NumPy {np.__version__}, Matplotlib {matplotlib.__version__}")
    

Результат

Ноутбук pz-01/pz01.ipynb, первая ячейка которого выводит версии библиотек, совпадающие с requirements.txt; команда git status не показывает каталогов .venv/ и data/.

Часть 2. Учебный набор

Задание

  1. Определить путь к данным функцией, которая ищет каталог data/raw в текущем каталоге и выше по дереву каталогов:
    from pathlib import Path
    
    def find_raw(start: Path = Path.cwd()) -> Path:
        for folder in (start, *start.parents):
            if (folder / "data" / "raw").is_dir():
                return folder / "data" / "raw"
        raise FileNotFoundError("Каталог data/raw не найден")
    
    raw = find_raw()
    
  2. Прочитать readings.csv с разбором столбцов ts и received_at, а также meters.csv и objects.csv. Вывести размер и типы столбцов каждой таблицы.
  3. Найти строку своего прибора в meters.csv и строку объекта, на котором он установлен, в objects.csv.

Результат

Размеры трёх таблиц; типы столбцов readings.csv с пояснением, почему столбец ts имеет тип datetime64[us], а status — тип str; описание прибора: ресурс, вид (counter или sensor), единица измерения, тип объекта и его адрес.

Часть 3. Показания прибора

Задание

  1. Отобрать записи своего прибора и упорядочить их по времени измерения ts.
  2. Определить первую и последнюю отметку времени и число часов между ними включительно.
  3. Сравнить с этим числом количество записей и количество различных отметок времени; вычислить число часов без записей и число повторных записей.
  4. Подсчитать записи по значениям столбца status.
  5. Найти минимум и максимум показаний по всем записям и отдельно по записям со статусом ok.

Результат

Сводная таблица полученных величин и 2–3 предложения о том, какие из них указывают на неполноту или недостоверность данных.

Часть 4. Первый график

Задание

Построить фигуру из двух областей с общей осью времени: в верхней — показания по всем записям прибора, в нижней — только по записям со статусом ok. Подписать области, ось времени и ось значений с единицей измерения из meters.csv. Сохранить фигуру в файл pz-01/meter.png.

Результат

Файл meter.png и описание различий между двумя графиками.

Часть 5. Наблюдения и границы вывода

Задание

  1. Сформулировать 3–5 наблюдений описательного уровня: для накопительного прибора — как рос нарастающий итог и равномерно ли; для мгновенного — в каком диапазоне и как колебались значения; для любого прибора — какие участки выделяются и насколько полны данные.
  2. Сформулировать один вопрос «почему», на который по данным одного прибора ответить нельзя, и перечислить таблицы набора, которые понадобились бы для ответа.
  3. Перечислить замеченные странности данных, не исправляя их: их обработка — предмет практических занятий 3 и 4.

Результат

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

Форма отчёта

Отчёт pz-01/report.md оформляется по регламенту сдачи работ. Для этого занятия в него входят:

  • номер варианта и описание прибора (часть 2);
  • версии Python и библиотек (часть 1);
  • сводная таблица части 3;
  • график meter.png (часть 4);
  • наблюдения, вопрос и перечень странностей (часть 5);
  • ответы на контрольные вопросы.

Ноутбук pz-01/pz01.ipynb сдаётся с сохранёнными результатами ячеек и должен выполняться целиком после перезапуска ядра без ошибок. Каталоги .venv/ и data/ в репозиторий не добавляются.

Контрольные вопросы

  1. Зачем всем участникам курса одно окружение с зафиксированными версиями библиотек, а не последние версии пакетов?
  2. Что изменится в типах столбцов и в доступных операциях, если прочитать readings.csv без параметра parse_dates?
  3. Почему максимум показаний накопительного прибора ничего не говорит о нагрузке на объект?
  4. Почему график по всем записям прибора почти ничего не сообщает о динамике показаний и почему статус ok ещё не гарантирует достоверности значения?
  5. Почему число записей прибора не совпадает с числом часов в периоде наблюдений? Какие дефекты данных в этом участвуют?
  6. Какие данные нужны, чтобы от наблюдения «зимой расход тепла выше» перейти к диагностическому уровню?
  7. Почему по показаниям одного прибора нельзя судить о состоянии объекта, на котором он установлен?

Варианты заданий

Номер варианта назначает преподаватель.

ВариантПрибор (meter_id)РесурсВидЕдиницаТип объекта
11электроэнергияcounterкВт·чТрансформаторная подстанция
22напряжениеsensorВТрансформаторная подстанция
310теплоcounterГкалТепловой пункт
411водаcounterм³Водомерный узел
517теплоcounterГкалТепловой пункт
618температураsensor°CТепловой пункт
721электроэнергияcounterкВт·чТрансформаторная подстанция
822напряжениеsensorВТрансформаторная подстанция
925электроэнергияcounterкВт·чУзел уличного освещения
1026теплоcounterГкалТепловой пункт
1127температураsensor°CТепловой пункт
1230электроэнергияcounterкВт·чТрансформаторная подстанция
1331теплоcounterГкалТепловой пункт
1439теплоcounterГкалТепловой пункт
1540температураsensor°CТепловой пункт
1641электроэнергияcounterкВт·чУзел уличного освещения
1742температураsensor°CТепловой пункт
1844теплоcounterГкалТепловой пункт
1945температураsensor°CТепловой пункт
2046электроэнергияcounterкВт·чТрансформаторная подстанция
2148электроэнергияcounterкВт·чТрансформаторная подстанция
2249напряжениеsensorВТрансформаторная подстанция
2351водаcounterм³Водомерный узел
2452теплоcounterГкалТепловой пункт
2557теплоcounterГкалТепловой пункт
2658температураsensor°CТепловой пункт
2759напряжениеsensorВТрансформаторная подстанция
2860теплоcounterГкалТепловой пункт
2964электроэнергияcounterкВт·чТрансформаторная подстанция
3068электроэнергияcounterкВт·чУзел уличного освещения
3171теплоcounterГкалТепловой пункт
3276электроэнергияcounterкВт·чНасосная станция
3379электроэнергияcounterкВт·чНасосная станция

Эталон решения

Эталон разобран на приборе 3, который в варианты не входит: накопительный прибор тепловой энергии ТЭМ-104 (единица — Гкал) на тепловом пункте ЦТП-004 по адресу ул. Ленинградская, 50.

Часть 1. Первая ячейка ноутбука выводит Python 3.12.14, pandas 3.0.5, NumPy 2.5.3, Matplotlib 3.11.1. Номер исправления Python у разных студентов может отличаться, версии библиотек — нет.

Части 2 и 3. Код после определения raw:

readings = pd.read_csv(raw / "readings.csv", parse_dates=["ts", "received_at"])
meters = pd.read_csv(raw / "meters.csv")
objects = pd.read_csv(raw / "objects.csv")
print(readings.shape, meters.shape, objects.shape)

METER_ID = 3
meter = meters.loc[meters["meter_id"] == METER_ID]
obj = objects.loc[objects["object_id"] == meter["object_id"].iloc[0]]

series = readings.loc[readings["meter_id"] == METER_ID].sort_values("ts")
first, last = series["ts"].min(), series["ts"].max()
hours = int((last - first) / pd.Timedelta(hours=1)) + 1
n_ts = series["ts"].nunique()
print(first, last, hours, len(series), n_ts, hours - n_ts, len(series) - n_ts)
print(series["status"].value_counts())

ok = series.loc[series["status"] == "ok"]
print(series["value"].min(), series["value"].max())
print(ok["value"].min(), ok["value"].max())

Размеры таблиц: readings.csv — 147 026 строк и 5 столбцов, meters.csv — 34 и 9, objects.csv — 140 и 10. В readings.csv столбцы ts и received_at имеют тип datetime64[us], потому что указаны в parse_dates; без этого параметра они были бы прочитаны как текст типа str. Столбец value имеет тип float64, meter_idint64, statusstr.

ВеличинаЗначение
Первая и последняя отметка2024-10-01 00:00 — 2025-03-31 23:00
Часов в периоде4368
Записей4316
Различных отметок времени4307
Часов без записей61
Повторных записей9
Записи по статусамok — 4247, estimated — 59, error — 10
Минимум и максимум, все записи−466 766,5 и 5 600 341,2 Гкал
Минимум и максимум, записи ok466 550,7 и 467 221,1 Гкал

Неполноту данных показывают 61 час без записей; недостоверность — отрицательный минимум и максимум, превышающий обычный уровень показаний в двенадцать раз. Повторные записи означают, что одно измерение передано дважды.

Часть 4.

unit = meter["unit"].iloc[0]
fig, (ax_all, ax_ok) = plt.subplots(2, 1, figsize=(10, 6), sharex=True)
ax_all.plot(series["ts"], series["value"], linewidth=0.8)
ax_all.set_title(f"Прибор {METER_ID}: все записи")
ax_ok.plot(ok["ts"], ok["value"], linewidth=0.8)
ax_ok.set_title("Записи со статусом ok")
for ax in (ax_all, ax_ok):
    ax.set_ylabel(f"Показание, {unit}")
ax_ok.set_xlabel("Время измерения")
fig.tight_layout()
fig.savefig("meter.png", dpi=120)

Верхний график — почти горизонтальная линия на уровне около 0,47 млн Гкал с узкими выбросами вверх до 2,3 и 5,6 млн Гкал и вниз до −0,47 млн Гкал. Масштаб оси задают десять записей со статусом error, и на их фоне рост показаний не виден. Нижний график показывает плавно растущую кривую от 466 551 до 466 835 Гкал с двумя узкими всплесками вверх, 19 декабря и 6 февраля.

Часть 5. Образец наблюдений:

  • За полгода нарастающий итог вырос с 466 550,7 до 466 835,2 Гкал: через тепловой пункт прошло около 285 Гкал тепловой энергии.
  • Рост неравномерный: кривая круче всего в январе и заметно положе в октябре и марте.
  • Данных нет за 61 час из 4368 (1,4 %); разрывы короткие, самый длинный — 11 часов.
  • Десять записей со статусом error содержат значения, в 5 или 12 раз превышающие обычный уровень, либо отрицательные.
  • Две записи со статусом ok превышают соседние примерно на 470 Гкал — 19 декабря в 13:00 и 6 февраля в 21:00. Для обеих отметок в данных есть и более ранняя запись с обычным значением, то есть статус ok не защищает от ошибочной повторной отправки.

Вопрос, на который по одному прибору ответить нельзя: почему в январе расход тепла выше, чем в октябре? Для ответа нужны суточная погода (weather_daily.csv), показания других приборов этого и соседних тепловых пунктов (meters.csv, objects.csv) и журнал инцидентов (incidents.csv), чтобы отделить влияние температуры наружного воздуха от режима работы пункта и аварий.

Странности данных: часы без записей; повторные записи — как с одинаковым, так и с изменённым значением; записи со статусом error; 59 записей со статусом estimated, восстановленных системой сбора; 150 записей, поступивших в систему более чем через час после измерения.