[{"data":1,"prerenderedAt":2558},["ShallowReactive",2],{"topic:aidt-iot-vvad:topic-01":3},{"content":4,"pz":632,"lr":620,"additional":620,"courseMeta":2479},{"id":5,"title":6,"body":7,"course_slug":619,"description":17,"env_label":620,"env_url":620,"extension":621,"group":620,"is_course_project":622,"is_index":622,"level":620,"meta":623,"navigation":624,"path":625,"section":626,"seo":627,"stem":628,"topic_number":629,"topic_slug":630,"__hash__":631},"courses\u002Fcourses\u002Faidt-iot-vvad\u002Ftopic-01-content.md","Предмет и задачи аналитики данных",{"type":8,"value":9,"toc":583},"minimark",[10,14,18,23,28,31,34,38,41,48,54,60,66,73,77,80,88,95,98,102,133,146,152,158,164,170,181,185,188,192,199,202,205,209,216,227,230,234,241,244,247,250,254,261,264,267,271,274,296,299,303,307,310,317,324,341,350,353,357,360,366,372,378,381,385,395,409,412,416,419,423,426,430,433,437,440,444,447,450,453,457,461,468,481,485,497,500,503,507,530,533,536,540,543,546,550],[11,12,6],"h1",{"id":13},"предмет-и-задачи-аналитики-данных",[15,16,17],"p",{},"Курс открывается темой, которая отвечает на простой, но важный вопрос: чем именно занимается аналитика данных и зачем она нужна инженеру, исследователю и специалисту, работающему с цифровыми продуктами. От ответа на этот вопрос зависит всё дальнейшее — какие методы мы будем изучать, какие инструменты осваивать, как оценивать качество собственной работы. Рассмотрим дисциплину последовательно: от её предмета и границ — к типологии задач, встраиванию в цикл принятия решений и к ограничениям, за которыми аналитика перестаёт быть добросовестной.",[19,20,22],"h2",{"id":21},"аналитика-данных-как-дисциплина","Аналитика данных как дисциплина",[24,25,27],"h3",{"id":26},"определение-извлечение-проверяемых-знаний-из-данных-для-обоснования-решений","Определение: извлечение проверяемых знаний из данных для обоснования решений",[15,29,30],{},"Аналитика данных (data analytics) — это организованная деятельность по извлечению проверяемых знаний из массивов наблюдений с целью обоснования инженерных, управленческих или научных решений. В этом определении важно каждое слово. «Проверяемых» — потому что любое утверждение аналитика должно допускать воспроизведение на тех же данных тем же методом. «Организованная» — потому что это не единичное наблюдение, а повторяемая процедура с фиксированными шагами. «Для обоснования решений» — потому что аналитика оправдана только тогда, когда её результат влияет на выбор между альтернативами: запустить или не запустить эксперимент, заменить поставщика или оставить текущего, повысить порог срабатывания алерта или снизить.",[15,32,33],{},"Центральная функция аналитики — снижение неопределённости. Решение, принятое без данных, опирается на интуицию и предшествующий опыт; решение, опирающееся на аналитику, дополняет интуицию измерением. Это не отменяет опыт, но делает его проверяемым.",[24,35,37],{"id":36},"границы-дисциплины-и-её-место-среди-смежных-статистика-data-science-bi-machine-learning","Границы дисциплины и её место среди смежных: статистика, Data Science, BI, Machine Learning",[15,39,40],{},"Аналитика данных стоит рядом с несколькими близкими областями, и путаница между ними — типичная проблема студента, впервые столкнувшегося с предметом. Стоит развести их явно.",[15,42,43,47],{},[44,45,46],"strong",{},"Статистика"," — фундамент аналитики, но не тождественна ей. Статистика изучает свойства случайных величин и методы вывода при неполной информации; аналитика использует эти методы как инструмент, но ставит прикладные задачи, привязанные к конкретной предметной области. Аналитик обязательно владеет базовой статистикой, но не обязан доказывать сходимость оценок.",[15,49,50,53],{},[44,51,52],{},"Data Science"," — шире аналитики. В неё традиционно включают не только исследовательский анализ, но и разработку ML-моделей, инженерию признаков, работу с неструктурированными данными (текст, изображения, сигналы). Граница подвижна, и в разных организациях её проводят по-разному. В рамках этого курса мы остаёмся в пределах аналитики: базовое ML-моделирование будет введено в курсе «Методы искусственного интеллекта» (МИИ), а промышленное развёртывание — в курсе «Платформы аналитики и машинного обучения» (ПАМО).",[15,55,56,59],{},[44,57,58],{},"Business Intelligence (BI)"," — прикладной слой над аналитикой, ориентированный на регулярный мониторинг бизнес-показателей: дашборды, отчёты, витрины данных. BI отвечает на вопрос «что происходит прямо сейчас», аналитика в более широком смысле — ещё и на вопросы «почему», «что будет» и «что делать».",[15,61,62,65],{},[44,63,64],{},"Machine Learning (ML)"," — набор методов построения моделей, которые обучаются на данных. ML — один из инструментов аналитики, но не её единственное содержание: значительная часть практической работы аналитика не требует обучаемых моделей и решается средствами описательной статистики и корректной визуализации.",[15,67,68,69,72],{},"Чтобы не путать названия профессий с содержанием работы, запомним правило: ",[44,70,71],{},"дисциплина определяется вопросами, которые она ставит к данным",", а не набором библиотек.",[24,74,76],{"id":75},"отличие-аналитики-данных-от-анализа-данных","Отличие аналитики данных от анализа данных",[15,78,79],{},"В русскоязычной литературе встречаются оба термина — «аналитика данных» и «анализ данных», — и их иногда употребляют как синонимы. В рамках курса мы придерживаемся следующего разграничения.",[15,81,82,83,87],{},"Анализ данных — это ",[84,85,86],"em",{},"процедура",": конкретное исследование, направленное на ответ на заданный вопрос по заданному датасету. Результат анализа — вывод или отчёт.",[15,89,90,91,94],{},"Аналитика данных — это ",[84,92,93],{},"практика",": повторяемая, институционализированная работа с данными, включающая сбор, подготовку, исследование, моделирование и внедрение результатов в процесс принятия решений. Аналитика предполагает воспроизводимость, документирование, мониторинг эффекта и ответственность за качество вывода.",[15,96,97],{},"Аналитик проводит анализ как одну из регулярных операций, но не сводится к ней.",[24,99,101],{"id":100},"данные-информация-знание-уровни-абстракции-и-переходы-между-ними","Данные, информация, знание: уровни абстракции и переходы между ними",[15,103,104,105,108,109,122,123,132],{},"Работу аналитика удобно представлять как последовательные переходы между уровнями абстракции. Классическая пирамида DIKW — ",[84,106,107],{},"Data, Information, Knowledge, Wisdom"," — даёт компактную модель этих переходов ",[110,111,114],"sup",{"className":112},[113],"cite",[115,116,118],"a",{"href":117},"#ref-1",[119,120,121],"span",{},"1",", хотя сама по себе и не без критики ",[110,124,126],{"className":125},[113],[115,127,129],{"href":128},"#ref-2",[119,130,131],{},"2",".",[134,135,136,137,136,142],"figure",{},"\n  ",[138,139],"img",{"src":140,"alt":141},"\u002Fimg\u002Faidt-iot-vvad\u002Ftopic-01\u002Fdikw_pyramid.svg","Пирамида DIKW: данные, информация, знание, мудрость",[143,144,145],"figcaption",{},"Пирамида DIKW: уровни переработки сырых наблюдений в основания для действий",[15,147,148,151],{},[84,149,150],{},"Данные"," — сырые наблюдения: значения датчиков, записи транзакций, строки журналов. Сами по себе они ещё не несут смысла: значение «24.7» превращается во что-то осмысленное только после того, как мы узнаём, что это температура в градусах Цельсия, измеренная в конкретной точке в конкретный момент.",[15,153,154,157],{},[84,155,156],{},"Информация"," — данные, снабжённые контекстом и приведённые к форме, пригодной для сопоставления. На этом уровне уже возможны агрегации и группировки: «средняя температура за сутки», «число записей за час».",[15,159,160,163],{},[84,161,162],{},"Знание"," — устойчивые закономерности, выявленные в информации и проверенные на новых данных: «если температура превышает 80 °C в течение 10 минут подряд, вероятность остановки линии существенно возрастает». Знание отличается от информации тем, что допускает перенос на ранее не наблюдавшиеся ситуации.",[15,165,166,169],{},[84,167,168],{},"Мудрость"," в модели DIKW — способность принимать правильные решения в условиях неопределённости, опираясь на знание и ценности. Эту вершину пирамиды многие авторы справедливо критикуют как плохо операционализируемую; в рамках курса мы ограничимся тремя нижними уровнями и условимся называть «мудростью» корректное встраивание знания в процесс принятия решений — с пониманием ограничений анализа.",[15,171,172,173,176,177,180],{},"Практическое следствие этой лестницы: каждый переход вверх ",[84,174,175],{},"уменьшает"," объём, но ",[84,178,179],{},"увеличивает"," плотность смысла. Мегабайты логов сворачиваются в несколько таблиц метрик, те — в десяток устойчивых закономерностей, и уже эти закономерности кладутся в основу решений. Если по итогам анализа не произошло ни одного из этих переходов, аналитическая работа, по существу, не состоялась.",[19,182,184],{"id":183},"виды-аналитики","Виды аналитики",[15,186,187],{},"Типология аналитики — рабочий инструмент планирования: она помогает заранее понять, какого уровня ответа требует задача, и не тратить усилия на более сложный уровень, когда достаточно более простого. Принято выделять четыре вида, образующих иерархию: описательная, диагностическая, предсказательная и предписывающая. Переход на более высокий уровень оправдан только тогда, когда достигнута достаточная определённость на текущем.",[24,189,191],{"id":190},"описательная-аналитика-что-произошло","Описательная аналитика: что произошло",[15,193,194,195,198],{},"Описательная аналитика (descriptive analytics) отвечает на вопрос ",[84,196,197],{},"«что произошло?»"," Она упорядочивает факты о состоянии системы: динамики показателей, распределения значений, структуры потоков, профили использования ресурсов. Типичный результат — согласованный набор метрик с однозначными определениями и репрезентативные визуализации.",[15,200,201],{},"Казалось бы, это простейший уровень; но именно на нём закладывается большинство ошибок всего последующего анализа. Неверно выбранная шкала, неаккуратно суммированные значения «на конец периода», неучтённая сезонность — и любые следующие выводы окажутся недостоверными. Поэтому даже при решении сложных задач предсказательной или предписывающей аналитики значительная доля работы всегда уходит на чистое описание: проверку полноты, сопоставимость периодов, корректную агрегацию.",[15,203,204],{},"Описательная аналитика принципиально не порождает причинных утверждений. Она фиксирует, что две величины менялись одновременно, но не объясняет, почему.",[24,206,208],{"id":207},"диагностическая-аналитика-почему-это-произошло","Диагностическая аналитика: почему это произошло",[15,210,211,212,215],{},"Диагностическая аналитика (diagnostic analytics) отвечает на вопрос ",[84,213,214],{},"«почему это произошло?»"," Она выявляет факторы и сегменты, связанные с наблюдаемыми изменениями: падение конверсии — в каком сегменте пользователей; всплеск ошибок — после какого релиза; рост времени ответа — на каких запросах. Результат — ранжированный перечень факторов с оценками эффектов и сформулированные гипотезы для дальнейшей проверки.",[15,217,218,219,222,223,226],{},"На этом уровне впервые появляется необходимость различать ",[84,220,221],{},"ассоциацию"," и ",[84,224,225],{},"причинность",". Тот факт, что показатель A и показатель B менялись одновременно, не означает, что A вызвал B: они могут зависеть от третьего фактора C или совпасть случайно. Корректная диагностика требует учёта вмешательств (релизов, кампаний, сезонных событий), контроля множественных сравнений и ясного понимания, какие гипотезы требуют подтверждения на независимых данных.",[15,228,229],{},"Частая ошибка — смешение диагностики с причинным выводом: «мы нашли, что пользователи iOS имеют более низкую конверсию, значит, надо улучшать приложение под iOS». Правильная интерпретация скромнее: «обнаружен сегмент с отклонением; прежде чем действовать, проверим, не объясняется ли оно различиями трафика или источника установки».",[24,231,233],{"id":232},"предсказательная-аналитика-что-произойдёт","Предсказательная аналитика: что произойдёт",[15,235,236,237,240],{},"Предсказательная аналитика (predictive analytics) отвечает на вопрос ",[84,238,239],{},"«что произойдёт?»"," На основе исторических данных она строит прогнозы будущих значений показателей или вероятности событий: нагрузка на кластер в следующие сутки, вероятность оттока клиента в ближайший месяц, оценка остаточного ресурса оборудования.",[15,242,243],{},"Корректная предсказательная аналитика требует строгой дисциплины проверки. Прогноз оценивают на периоде, который не использовался при его построении: в данных, упорядоченных во времени, будущее не должно «подсматриваться». Кроме того, учитывают устойчивость прогноза к изменению условий и стоимость ошибок разного рода. Прогноз теплопотребления, в среднем точный, но ошибающийся именно в сильные морозы, бесполезен для службы эксплуатации. Как устроена такая проверка для моделей машинного обучения, рассматривается в курсе «Методы искусственного интеллекта».",[15,245,246],{},"Практическое правило: предсказательная модель оправдана только тогда, когда её прогноз оценивается по сравнению с наивной альтернативой (предсказать значение вчерашнего дня, среднее за неделю). Если модель не превосходит наивный прогноз, её внедрение не имеет смысла.",[15,248,249],{},"Важное ограничение, к которому мы будем возвращаться: предсказательная полезность не равна причинности. Модель может хорошо прогнозировать отток, опираясь на корреляции, но не даст рецепта, как этот отток снизить.",[24,251,253],{"id":252},"предписывающая-аналитика-что-следует-сделать","Предписывающая аналитика: что следует сделать",[15,255,256,257,260],{},"Предписывающая аналитика (prescriptive analytics) отвечает на вопрос ",[84,258,259],{},"«что следует сделать?»"," Она предлагает действие, максимизирующее целевую метрику при заданных ограничениях (бюджет, риски, ресурсы, время): как распределить рекламный бюджет между каналами; какой порог срабатывания выбрать для системы мониторинга; в каком порядке обслуживать очередь заявок.",[15,262,263],{},"Это самый высокий уровень аналитики и самый требовательный. Честная предписывающая аналитика опирается на экспериментальную или квази-экспериментальную оценку эффектов: прежде чем рекомендовать действие, мы должны показать, что оно действительно приводит к желаемому результату, а не просто коррелирует с ним на исторических данных. Без такой проверки рекомендации превращаются в гадание с цифровым антуражем.",[15,265,266],{},"В инженерной практике предписывающие модели часто встраиваются в контуры автоматизированного управления: алгоритм не просто предлагает действие, а сам его совершает (перекладывает нагрузку между узлами, меняет параметры регулятора). Ответственность в таких контурах распределена иначе, и к их проектированию применяются отдельные требования надёжности, к которым мы ещё вернёмся в более поздних темах.",[24,268,270],{"id":269},"сложность-стоимость-и-ценность-на-каждом-уровне","Сложность, стоимость и ценность на каждом уровне",[15,272,273],{},"Иерархия четырёх видов аналитики не декоративна. С каждым шагом вверх растут три величины:",[275,276,277,284,290],"ul",{},[278,279,280,283],"li",{},[84,281,282],{},"сложность"," — в терминах требуемой математики, объёма данных и экспертизы;",[278,285,286,289],{},[84,287,288],{},"стоимость"," — в терминах инфраструктуры, труда и времени;",[278,291,292,295],{},[84,293,294],{},"ценность"," — в терминах влияния на принимаемые решения.",[15,297,298],{},"Разумная стратегия — подниматься по этой лестнице постепенно. Попытка сразу строить предписывающую модель поверх неотлаженной описательной аналитики — классическая ошибка молодых проектов: красивая «модель принятия решений» опирается на данные, про которые никто не может сказать, как они были собраны и что именно означают.",[19,300,302],{"id":301},"аналитика-в-цикле-принятия-решений","Аналитика в цикле принятия решений",[24,304,306],{"id":305},"бизнес-вопрос-данные-выводы-действие-обратная-связь","Бизнес-вопрос → данные → выводы → действие → обратная связь",[15,308,309],{},"Практическая работа аналитика укладывается в повторяющийся цикл: исходный вопрос формулируется в измеримых терминах; необходимые данные собираются и очищаются; применяется метод, адекватный постановке задачи и качеству измерений; вывод фиксируется и превращается в действие; эффект действия подтверждается повторным измерением.",[15,311,312,313,316],{},"Рассмотрим этот цикл на простом примере. В производственной системе зафиксировано увеличение времени цикла сборки. Аналитик формализует вопрос: ",[84,314,315],{},"на каких операциях возник сдвиг и каков его вклад в общий рост",". Собирает телеметрию со станков, устраняет ошибки измерения, описывает динамику (описательный уровень), диагностирует факторы — смена поставщика узла, перенастройка оборудования после планового обслуживания (диагностический уровень). Проверяет гипотезы на независимых периодах и предлагает действие: вернуть прежнего поставщика либо скорректировать регламент настройки. После внедрения оценивает эффект на тех же метриках.",[15,318,319,320,323],{},"Ключевой элемент цикла — ",[84,321,322],{},"обратная связь",". Без неё аналитика превращается в одноразовое упражнение: отчёт написан, рекомендация отдана, но никто не возвращается к данным проверить, что из этого вышло. Зрелая практика требует замыкания контура: каждое нетривиальное решение, принятое на основе аналитики, фиксируется как контрольная точка, к которой мы вернёмся через заданный срок.",[15,325,326,327,330,331,340],{},"Распространённое воплощение этого цикла — модель ",[84,328,329],{},"Cross-Industry Standard Process for Data Mining"," (CRISP-DM) ",[110,332,334],{"className":333},[113],[115,335,337],{"href":336},"#ref-3",[119,338,339],{},"3",". Она делит аналитическую работу на шесть фаз: понимание бизнеса, понимание данных, подготовка данных, моделирование, оценка и внедрение. Порядок фаз не жёсткий: что делать дальше, решают по итогам текущей фазы, и вернуться можно к любой из предыдущих. Стрелки на схеме показывают лишь самые частые зависимости: понимание бизнеса и понимание данных уточняют друг друга, подготовка данных и моделирование — тоже, а оценка может вернуть к постановке задачи. Внешний круг означает, что внедрением работа не заканчивается: его опыт порождает новые, более узкие вопросы.",[134,342,136,343,136,347],{},[138,344],{"src":345,"alt":346},"\u002Fimg\u002Faidt-iot-vvad\u002Ftopic-01\u002Fcrisp_dm.svg","Цикл CRISP-DM: шесть фаз вокруг центральной сущности «Данные»",[143,348,349],{},"CRISP-DM: шесть фаз аналитической работы, замыкающиеся в цикл",[15,351,352],{},"В рамках курса мы не будем строго следовать терминологии CRISP-DM, но его логика — от вопроса через данные к действию и обратно — лежит в основе всех последующих тем.",[24,354,356],{"id":355},"операционные-тактические-и-стратегические-решения-на-данных","Операционные, тактические и стратегические решения на данных",[15,358,359],{},"Решения, которые аналитика поддерживает, удобно классифицировать по горизонту и обратимости.",[15,361,362,365],{},[84,363,364],{},"Операционные"," решения — короткий горизонт (часы, дни), высокая частота, низкая стоимость ошибки по отдельности. Алерты, автоматические переключения, правила маршрутизации запросов. Здесь ценится скорость отклика и устойчивость: лучше простой алгоритм, стабильно работающий, чем сложная модель с редкими, но критичными сбоями.",[15,367,368,371],{},[84,369,370],{},"Тактические"," решения — средний горизонт (недели, месяцы), умеренная частота. Планирование ресурсов, настройка кампаний, пересмотр пороговых значений. Здесь важна точность оценок и возможность A\u002FB-сравнений.",[15,373,374,377],{},[84,375,376],{},"Стратегические"," решения — длинный горизонт (кварталы, годы), низкая частота, высокая стоимость ошибки. Выбор технологической платформы, изменение бизнес-модели, инвестиционные решения. Здесь аналитика редко даёт окончательный ответ — её роль состоит в проверке допущений и очерчивании диапазонов возможных исходов.",[15,379,380],{},"Ошибка уровня — распространённая болезнь. Попытка принимать стратегическое решение по короткому операционному ряду даёт ложную уверенность, а попытка управлять оперативным процессом с помощью тяжёлой стратегической модели — паралич.",[24,382,384],{"id":383},"критерии-успешности-аналитической-работы","Критерии успешности аналитической работы",[15,386,387,388,222,391,394],{},"Успех аналитической работы измеряется не точностью модели самой по себе, а тем, ",[84,389,390],{},"повлияла ли она на решение",[84,392,393],{},"улучшило ли это решение показатели предметной области",". Критически важно различать две группы метрик:",[275,396,397,403],{},[278,398,399,402],{},[84,400,401],{},"метрики инструмента"," — средняя ошибка прогноза, доля аварий, замеченных заранее, и т. п.;",[278,404,405,408],{},[84,406,407],{},"метрики результата"," — уровень сервиса, надёжность, затраты, выручка, доля дефектов.",[15,410,411],{},"Аналитика с превосходными метриками инструмента, не сдвинувшая метрики результата, — неудача. Аналитика с посредственными метриками инструмента, но приведшая к измеримому улучшению результата, — успех. Это смещение акцента с «качества модели» на «качество решения» отличает зрелую аналитическую практику от её имитации.",[19,413,415],{"id":414},"области-применения","Области применения",[15,417,418],{},"Аналитика данных применима практически везде, где есть повторяемые наблюдаемые процессы. Рассматривать подряд все отрасли — упражнение бесполезное; кратко обозначим несколько направлений, существенных для контекста курса.",[24,420,422],{"id":421},"аналитика-в-промышленности-и-iot","Аналитика в промышленности и IoT",[15,424,425],{},"Промышленность и IoT — одна из наиболее технически насыщенных областей применения. Типичные задачи: мониторинг состояния оборудования, предсказательное техническое обслуживание, оптимизация режимов работы, контроль качества продукции по показаниям датчиков. Особенности этой области — высокая частота измерений, высокая доля шума и пропусков, сильная временная структура данных. Многие методы, которые в «чистых» бизнес-датасетах работают без нареканий, в промышленных задачах требуют серьёзной адаптации именно из-за шума и нерегулярности поступления данных.",[24,427,429],{"id":428},"аналитика-в-бизнесе-финансах-маркетинге","Аналитика в бизнесе, финансах, маркетинге",[15,431,432],{},"Здесь аналитика наиболее массовая и наиболее разработанная. Воронки продаж, сегментация клиентов, оценка эффективности рекламных кампаний, кредитный скоринг, анализ оттока, A\u002FB-тестирование продуктовых гипотез. Большинство открытых датасетов, на которых удобно тренироваться, пришли именно из этой области.",[24,434,436],{"id":435},"аналитика-в-науке-медицине-государственном-управлении","Аналитика в науке, медицине, государственном управлении",[15,438,439],{},"Научная аналитика традиционно строга в вопросах методологии: здесь выше требования к воспроизводимости, к учёту ошибок измерения, к корректной статистической обработке. Медицинская аналитика добавляет к этому жёсткий этический контур и строгие регуляторные требования. Государственная аналитика — работа с переписями, статистикой отраслей, данными мониторинга городской среды — особенно чувствительна к репрезентативности выборок и к корректному представлению результатов для не-специалистов.",[24,441,443],{"id":442},"типовые-кейсы-и-сквозной-кейс-курса","Типовые кейсы и сквозной кейс курса",[15,445,446],{},"Отраслевые примеры полезны, пока за ними стоят конкретные данные. Поэтому все практические занятия курса построены на одном наборе — данных эксплуатации городской инженерной инфраструктуры, описанных во введении: объекты, приборы учёта и их почасовые показания, погода, инциденты и обращения жителей. Разберём на нём типичный вопрос службы эксплуатации: в районе выросло число обращений жителей по отоплению.",[15,448,449],{},"На описательном уровне аналитик устанавливает, как менялись теплопотребление и температура теплоносителя на тепловых пунктах района. На диагностическом — совпадают ли провалы с похолоданиями, с инцидентами вроде завоздушивания или утечки теплоносителя, с пропусками связи приборов и не отражает ли рост обращений активность жителей, а не состояние сети. На предсказательном — какое потребление ожидать завтра при прогнозной температуре; эту задачу решает курс «Методы искусственного интеллекта» по таблице признаков, построенной в теме 8. Предписывающий уровень — в каком порядке обслуживать тепловые пункты — остаётся за рамками курса.",[15,451,452],{},"Цепочка тем повторяет цикл принятия решений: сбор данных (тема 2), их описание и план очистки (тема 3), очистка (тема 4), визуализация (тема 5), гипотезы на данных октября–января (тема 6) и их проверка на данных февраля–марта (тема 7), признаки (тема 8) и отчёт для службы эксплуатации (тема 9). Тот же набор затем используется в курсах «Методы искусственного интеллекта», «Современные хранилища данных» и «Платформы аналитики и машинного обучения».",[19,454,456],{"id":455},"ограничения-и-ответственность-аналитика","Ограничения и ответственность аналитика",[24,458,460],{"id":459},"качество-данных-как-верхняя-граница-качества-выводов","Качество данных как верхняя граница качества выводов",[15,462,463,464,467],{},"Первое правило аналитика звучит неромантично: ",[84,465,466],{},"качество данных задаёт верхнюю границу качества выводов",". Никакой, сколь угодно изощрённый, метод не извлечёт достоверного знания из данных, собранных с ошибками. Если датчик измеряет температуру со смещением 3 °C, все построенные на его показаниях модели будут воспроизводить это смещение. Если опросный лист включает наводящие вопросы, все последующие корреляции окажутся артефактом формулировок.",[15,469,470,471,480],{},"Отсюда — непропорциональная доля времени, которую аналитик тратит на проверку и очистку данных. По оценкам из интервью с аналитиками, приведённым в статье С. Лора, на сбор и подготовку данных уходит от 50 до 80 % рабочего времени ",[110,472,474],{"className":473},[113],[115,475,477],{"href":476},"#ref-4",[119,478,479],{},"4","; это экспертные оценки, а не измерение. В учебных примерах эта доля искусственно занижена, потому что данные уже подготовлены автором.",[24,482,484],{"id":483},"предвзятость-данных-и-методов-корректность-интерпретации","Предвзятость данных и методов, корректность интерпретации",[15,486,487,488,132],{},"Данные несут в себе предвзятость (bias) — систематические отклонения, возникающие из-за способа сбора, состава выборки, действий тех, кто данные производил. Простейший пример: модель, обученная на данных только активных пользователей сервиса, не умеет работать с пассивными — но именно поведение пассивных чаще всего представляет интерес. Выявление и документирование предвзятости — обязательная часть работы, а не дополнительная опция ",[110,489,491],{"className":490},[113],[115,492,494],{"href":493},"#ref-5",[119,495,496],{},"5",[15,498,499],{},"Предвзятость методов — ещё одна ловушка. Закономерность, найденная и подтверждённая на одних и тех же данных, выглядит надёжнее, чем есть на самом деле. Это не вопрос добросовестности, а следствие статистики, и защищаются от этого эффекта процедурой: в курсе гипотезы формулируются на данных октября–января (тема 6), а проверяются на данных февраля–марта с поправкой на множественные сравнения (тема 7). Утечку информации из будущего в признаки разберём в теме 8, а схемы проверки моделей — предмет курса «Методы искусственного интеллекта».",[15,501,502],{},"Корректная интерпретация результатов требует сдержанности формулировок. «На данных октября–января теплопотребление пунктов района выше в холодные дни» — корректное утверждение при указании данных и способа сравнения. «Похолодание вызывает перерасход тепла» — некорректное утверждение, пока связь не проверена (темы 6 и 7).",[24,504,506],{"id":505},"этические-и-правовые-рамки-работы-с-данными","Этические и правовые рамки работы с данными",[15,508,509,510,519,520,529],{},"Работа с данными регулируется как законом, так и профессиональной этикой. Правовые ограничения — от защиты персональных данных (в России — 152-ФЗ ",[110,511,513],{"className":512},[113],[115,514,516],{"href":515},"#ref-6",[119,517,518],{},"6",", в ЕС — GDPR ",[110,521,523],{"className":522},[113],[115,524,526],{"href":525},"#ref-7",[119,527,528],{},"7",") до отраслевых регламентов (медицина, финансы) — определяют, какие данные можно собирать, хранить и обрабатывать, на каких основаниях и с какими предосторожностями. Нарушение этих норм — не абстрактный риск, а прямая ответственность организации и, в ряде случаев, конкретного специалиста.",[15,531,532],{},"Этические рамки шире правовых. Даже формально допустимый анализ может быть недопустим по существу: например, сегментация клиентов, приводящая к систематическому ухудшению условий для уязвимых групп. Добросовестный аналитик задаёт вопросы о последствиях своих выводов, а не только об их технической корректности.",[15,534,535],{},"В рамках курса мы возвращаемся к теме этики на каждом этапе — при обсуждении сбора данных, предобработки, отчётности и представления результатов. Этика не отдельная дисциплина, приставленная к аналитике сбоку, а её сквозное измерение.",[19,537,539],{"id":538},"итоги-темы","Итоги темы",[15,541,542],{},"В этой теме мы зафиксировали предмет и границы аналитики данных, отделив её от смежных дисциплин — статистики, Data Science, BI и ML. Рассмотрели классическую типологию из четырёх видов (описательная, диагностическая, предсказательная, предписывающая) и показали, что переход на более высокий уровень требует зрелости на нижнем. Описали цикл принятия решений на данных, в который аналитика встраивается, — от формулировки вопроса до замыкания обратной связи. Наконец, обозначили рамки: качество данных как верхняя граница качества выводов, предвзятость данных и методов, правовые и этические ограничения.",[15,544,545],{},"В следующей теме мы перейдём от постановки задачи к её первому практическому этапу — сбору данных: рассмотрим типологию источников, форматы, способы получения данных и первые инструменты контроля их качества.",[19,547,549],{"id":548},"литература","Литература",[551,552,555,559,563,567,571,575,579],"ol",{"className":553},[554],"references",[278,556,558],{"id":557},"ref-1","Ackoff R. L. From Data to Wisdom. — Journal of Applied Systems Analysis, 1989, С. 3–9.",[278,560,562],{"id":561},"ref-2","Rowley J. The Wisdom Hierarchy: Representations of the DIKW Hierarchy. — Journal of Information Science, 2007, С. 163–180.",[278,564,566],{"id":565},"ref-3","Shearer C. The CRISP-DM Model: The New Blueprint for Data Mining. — Journal of Data Warehousing, 2000, С. 13–22.",[278,568,570],{"id":569},"ref-4","Lohr S. For Big-Data Scientists, “Janitor Work” Is Key Hurdle to Insights. — The New York Times, 2014, https:\u002F\u002Fwww.nytimes.com\u002F2014\u002F08\u002F18\u002Ftechnology\u002Ffor-big-data-scientists-hurdle-to-insights-is-janitor-work.html.",[278,572,574],{"id":573},"ref-5","Barocas S., Selbst A. D. Big Data's Disparate Impact. — California Law Review, 2016, С. 671–732.",[278,576,578],{"id":577},"ref-6","Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных». — 2006.",[278,580,582],{"id":581},"ref-7","Regulation (EU) 2016\u002F679 of the European Parliament and of the Council (GDPR). — 2016, https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj.",{"title":584,"searchDepth":585,"depth":585,"links":586},"",2,[587,594,601,606,612,617,618],{"id":21,"depth":585,"text":22,"children":588},[589,591,592,593],{"id":26,"depth":590,"text":27},3,{"id":36,"depth":590,"text":37},{"id":75,"depth":590,"text":76},{"id":100,"depth":590,"text":101},{"id":183,"depth":585,"text":184,"children":595},[596,597,598,599,600],{"id":190,"depth":590,"text":191},{"id":207,"depth":590,"text":208},{"id":232,"depth":590,"text":233},{"id":252,"depth":590,"text":253},{"id":269,"depth":590,"text":270},{"id":301,"depth":585,"text":302,"children":602},[603,604,605],{"id":305,"depth":590,"text":306},{"id":355,"depth":590,"text":356},{"id":383,"depth":590,"text":384},{"id":414,"depth":585,"text":415,"children":607},[608,609,610,611],{"id":421,"depth":590,"text":422},{"id":428,"depth":590,"text":429},{"id":435,"depth":590,"text":436},{"id":442,"depth":590,"text":443},{"id":455,"depth":585,"text":456,"children":613},[614,615,616],{"id":459,"depth":590,"text":460},{"id":483,"depth":590,"text":484},{"id":505,"depth":590,"text":506},{"id":538,"depth":585,"text":539},{"id":548,"depth":585,"text":549},"aidt-iot-vvad",null,"md",false,{},true,"\u002Fcourses\u002Faidt-iot-vvad\u002Ftopic-01-content","content",{"title":6,"description":17},"courses\u002Faidt-iot-vvad\u002Ftopic-01-content",1,"topic-01","zLs-Drnpf0JYEq0VnNmO1ufRJSUP2S3eyL6Uq2vd2fc",{"id":633,"title":634,"body":635,"course_slug":619,"description":584,"env_label":2472,"env_url":938,"extension":621,"group":620,"is_course_project":622,"is_index":622,"level":620,"meta":2473,"navigation":624,"path":2474,"section":2475,"seo":2476,"stem":2477,"topic_number":629,"topic_slug":630,"__hash__":2478},"courses\u002Fcourses\u002Faidt-iot-vvad\u002Ftopic-01-pz.md","Практическое занятие 1. Рабочая среда и первые наблюдения по прибору учёта",{"type":8,"value":636,"toc":2441},[637,640,654,658,661,664,668,671,674,691,695,698,717,730,744,861,875,903,917,921,953,966,970,976,980,984,1152,1156,1174,1178,1181,1268,1271,1298,1302,1305,1329,1332,1335,1339,1342,1354,1357,1364,1368,1371,1382,1385,1388,1392,1399,1422,1432,1436,1469,1473,1476,2030,2034,2037,2047,2057,2164,2209,2306,2309,2314,2374,2380,2386,2412,2428,2437],[11,638,634],{"id":639},"практическое-занятие-1-рабочая-среда-и-первые-наблюдения-по-прибору-учёта",[275,641,642,648],{},[278,643,644,647],{},[44,645,646],{},"Объём:"," 4 академических часа",[278,649,650,653],{},[44,651,652],{},"Раздел курса:"," тема 1 «Предмет и задачи аналитики данных»",[19,655,657],{"id":656},"введение","Введение",[15,659,660],{},"Занятие открывает цепочку практических работ курса. Все они выполняются в одном окружении и на одном учебном наборе — данных эксплуатации городской инженерной инфраструктуры, описанных во введении к курсу. Окружение, созданное на этом занятии, не меняется до последней работы, а набор, с которым здесь предстоит познакомиться на примере одного прибора учёта, на втором занятии будет собран целиком из нескольких источников.",[15,662,663],{},"По содержанию работа относится к описательному уровню аналитики, рассмотренному в теме 1: требуется установить, что происходило с показаниями прибора за полгода, не пытаясь объяснить причины. Уже на этом шаге проявляется тезис темы о качестве данных как верхней границе качества выводов: в показаниях есть пропуски, повторные записи и значения, которым нельзя доверять, даже если система сбора не пометила их как ошибочные.",[19,665,667],{"id":666},"цель-работы","Цель работы",[15,669,670],{},"Подготовить рабочую среду курса и описать показания одного прибора учёта из учебного набора.",[15,672,673],{},"После выполнения работы студент сможет:",[275,675,676,679,682,685,688],{},[278,677,678],{},"создать виртуальное окружение Python 3.12 из файла зависимостей курса и подтвердить в ноутбуке версии установленных библиотек;",[278,680,681],{},"загрузить таблицы набора с разбором отметок времени и объяснить типы их столбцов;",[278,683,684],{},"определить для заданного прибора период наблюдений, число записей, число часов без записей и распределение записей по статусам;",[278,686,687],{},"построить линейный график показаний с подписанными осями и единицей измерения;",[278,689,690],{},"сформулировать наблюдения описательного уровня и указать вопрос, на который по этим данным ответить нельзя.",[19,692,694],{"id":693},"теоретический-минимум","Теоретический минимум",[15,696,697],{},"Место описательной аналитики и роль качества данных — см. учебное пособие, тема 1, разделы «Описательная аналитика: что произошло» и «Качество данных как верхняя граница качества выводов». Устройство учебного набора — во введении к курсу. Ниже приведены сведения об инструментах, которые в теме не рассматривались.",[15,699,700,703,704,708,709,712,713,716],{},[44,701,702],{},"Виртуальное окружение."," Модуль ",[705,706,707],"code",{},"venv"," создаёт каталог с отдельным интерпретатором Python и собственным набором пакетов. Файл ",[705,710,711],{},"requirements.txt"," перечисляет пакеты с точными версиями, команда ",[705,714,715],{},"python -m pip install -r requirements.txt"," устанавливает их в активированное окружение. Одинаковые версии у всех участников курса нужны для того, чтобы один и тот же код давал один и тот же результат.",[15,718,719,722,723,726,727,132],{},[44,720,721],{},"Jupyter."," Ноутбук ",[705,724,725],{},".ipynb"," состоит из ячеек кода и текстовых ячеек в разметке Markdown. Ячейки выполняются в общем процессе — ядре, поэтому результат зависит от порядка их запуска. Перед сдачей ноутбук выполняется целиком командой ",[84,728,729],{},"Kernel → Restart Kernel and Run All Cells",[15,731,732,735,736,739,740,743],{},[44,733,734],{},"pandas."," Таблица ",[705,737,738],{},"DataFrame"," состоит из столбцов ",[705,741,742],{},"Series"," с общим индексом строк. На занятии используются следующие операции.",[745,746,747,760],"table",{},[748,749,750],"thead",{},[751,752,753,757],"tr",{},[754,755,756],"th",{},"Операция",[754,758,759],{},"Запись",[761,762,763,774,788,798,808,818,828,838,851],"tbody",{},[751,764,765,769],{},[766,767,768],"td",{},"чтение CSV с разбором отметок времени",[766,770,771],{},[705,772,773],{},"pd.read_csv(path, parse_dates=[\"ts\", \"received_at\"])",[751,775,776,779],{},[766,777,778],{},"размер таблицы и типы столбцов",[766,780,781,784,785],{},[705,782,783],{},"df.shape",", ",[705,786,787],{},"df.dtypes",[751,789,790,793],{},[766,791,792],{},"первые строки",[766,794,795],{},[705,796,797],{},"df.head()",[751,799,800,803],{},[766,801,802],{},"отбор строк по условию",[766,804,805],{},[705,806,807],{},"df.loc[df[\"meter_id\"] == 3]",[751,809,810,813],{},[766,811,812],{},"сортировка",[766,814,815],{},[705,816,817],{},"df.sort_values(\"ts\")",[751,819,820,823],{},[766,821,822],{},"число записей по значениям столбца",[766,824,825],{},[705,826,827],{},"df[\"status\"].value_counts()",[751,829,830,833],{},[766,831,832],{},"число различных значений",[766,834,835],{},[705,836,837],{},"df[\"ts\"].nunique()",[751,839,840,843],{},[766,841,842],{},"минимум и максимум",[766,844,845,784,848],{},[705,846,847],{},"df[\"value\"].min()",[705,849,850],{},"df[\"value\"].max()",[751,852,853,856],{},[766,854,855],{},"длительность в часах",[766,857,858],{},[705,859,860],{},"(t_end - t_start) \u002F pd.Timedelta(hours=1)",[15,862,863,864,867,868,871,872,132],{},"В pandas 3 текстовые столбцы имеют тип ",[705,865,866],{},"str",", а отметки времени после разбора — тип ",[705,869,870],{},"datetime64[us]",". Результат отбора строк является самостоятельной таблицей: изменения в ней не затрагивают исходную, а присваивание значений выполняется через ",[705,873,874],{},"df.loc[…]",[15,876,877,880,881,884,885,888,889,784,892,222,895,898,899,902],{},[44,878,879],{},"Matplotlib."," Функция ",[705,882,883],{},"plt.subplots(nrows, ncols, sharex=True)"," создаёт фигуру с несколькими областями построения — осями — и общей горизонтальной осью; ",[705,886,887],{},"ax.plot(x, y)"," рисует линию, ",[705,890,891],{},"ax.set_title",[705,893,894],{},"ax.set_xlabel",[705,896,897],{},"ax.set_ylabel"," задают заголовок и подписи осей, ",[705,900,901],{},"fig.savefig(path)"," сохраняет фигуру в файл. Правила оформления графиков рассматриваются в теме 5.",[15,904,905,908,909,912,913,916],{},[44,906,907],{},"Накопительный и мгновенный приборы."," Накопительный прибор (",[705,910,911],{},"kind = counter",") передаёт нарастающий итог с момента установки, поэтому его показание само по себе не характеризует нагрузку: расход за период равен разности показаний на концах периода. Мгновенный прибор (",[705,914,915],{},"kind = sensor",") передаёт текущее значение величины — температуру теплоносителя или напряжение.",[19,918,920],{"id":919},"перечень-оснащения","Перечень оснащения",[275,922,923,926,933,947,950],{},[278,924,925],{},"Компьютер под управлением Windows 10 или 11, macOS 12 или новее либо Linux; около 1 ГБ свободного места на диске.",[278,927,928,929,932],{},"Python 3.12 или новее (для Windows при установке с python.org отметить пункт ",[84,930,931],{},"Add python.exe to PATH",").",[278,934,935,936,940,941,943,944,132],{},"Архив окружения занятия — ",[115,937,939],{"href":938},"\u002Ffiles\u002Faidt-iot-vvad\u002Ftopic-01\u002Fpz-env.zip","pz-env",": файл зависимостей ",[705,942,711],{}," и учебный набор в каталоге ",[705,945,946],{},"data\u002F",[278,948,949],{},"Проект курса в GitLab, созданный по регламенту сдачи работ, и его локальная копия.",[278,951,952],{},"Веб-браузер для JupyterLab.",[15,954,955,956,958,959,961,962,965],{},"Если установить Python на компьютер невозможно, работа временно выполняется в Google Colab: файлы ",[705,957,711],{}," и каталог ",[705,960,946],{}," загружаются в сессию, первой ячейкой выполняется ",[705,963,964],{},"%pip install -r requirements.txt",". Файлы сессии Colab не сохраняются между запусками, поэтому для последующих занятий окружение необходимо установить локально.",[19,967,969],{"id":968},"порядок-выполнения-работы","Порядок выполнения работы",[15,971,972,973,132],{},"Работа выполняется для прибора учёта своего варианта (раздел «Варианты заданий»). В заданиях его номер обозначен ",[705,974,975],{},"METER_ID",[19,977,979],{"id":978},"часть-1-рабочая-среда","Часть 1. Рабочая среда",[24,981,983],{"id":982},"задание","Задание",[551,985,986,995,1011,1077,1086],{},[278,987,988,989,991,992,994],{},"Распаковать архив окружения. Каталог ",[705,990,946],{}," и файл ",[705,993,711],{}," скопировать в корень локальной копии проекта.",[278,996,997,998,1001,1002,784,1005,222,1007,1010],{},"Добавить в файл ",[705,999,1000],{},".gitignore"," проекта строки ",[705,1003,1004],{},".venv\u002F",[705,1006,946],{},[705,1008,1009],{},".ipynb_checkpoints\u002F",": окружение и учебный набор в репозиторий не отправляются.",[278,1012,1013,1014,1017,1018,1052,1054,1055],{},"В корне проекта создать и активировать виртуальное окружение.",[1015,1016],"br",{},"macOS и Linux:",[1019,1020,1024],"pre",{"className":1021,"code":1022,"language":1023,"meta":584,"style":584},"language-bash shiki shiki-themes github-light github-dark","python3.12 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\n","bash",[705,1025,1026,1044],{"__ignoreMap":584},[119,1027,1029,1033,1037,1041],{"class":1028,"line":629},"line",[119,1030,1032],{"class":1031},"sScJk","python3.12",[119,1034,1036],{"class":1035},"sj4cs"," -m",[119,1038,1040],{"class":1039},"sZZnC"," venv",[119,1042,1043],{"class":1039}," .venv\n",[119,1045,1046,1049],{"class":1028,"line":585},[119,1047,1048],{"class":1035},"source",[119,1050,1051],{"class":1039}," .venv\u002Fbin\u002Factivate\n",[1015,1053],{},"Windows (PowerShell):",[1019,1056,1060],{"className":1057,"code":1058,"language":1059,"meta":584,"style":584},"language-powershell shiki shiki-themes github-light github-dark","py -3.12 -m venv .venv\nSet-ExecutionPolicy -Scope Process RemoteSigned\n.venv\\Scripts\\Activate.ps1\n","powershell",[705,1061,1062,1067,1072],{"__ignoreMap":584},[119,1063,1064],{"class":1028,"line":629},[119,1065,1066],{},"py -3.12 -m venv .venv\n",[119,1068,1069],{"class":1028,"line":585},[119,1070,1071],{},"Set-ExecutionPolicy -Scope Process RemoteSigned\n",[119,1073,1074],{"class":1028,"line":590},[119,1075,1076],{},".venv\\Scripts\\Activate.ps1\n",[278,1078,1079,1080,1083,1084,132],{},"Убедиться, что команда ",[705,1081,1082],{},"python --version"," выводит версию 3.12 или новее, и установить пакеты командой ",[705,1085,715],{},[278,1087,1088,1089,1092,1093,1096,1097,1100,1101],{},"Запустить JupyterLab командой ",[705,1090,1091],{},"jupyter lab",", создать каталог ",[705,1094,1095],{},"pz-01"," и в нём ноутбук ",[705,1098,1099],{},"pz01.ipynb",". Первой ячейкой вывести версии Python и библиотек:",[1019,1102,1106],{"className":1103,"code":1104,"language":1105,"meta":584,"style":584},"language-python shiki shiki-themes github-light github-dark","import sys\n\nimport matplotlib\nimport numpy as np\nimport pandas as pd\n\nprint(f\"Python {sys.version.split()[0]}, pandas {pd.__version__}, \"\n      f\"NumPy {np.__version__}, Matplotlib {matplotlib.__version__}\")\n","python",[705,1107,1108,1113,1118,1123,1129,1135,1140,1146],{"__ignoreMap":584},[119,1109,1110],{"class":1028,"line":629},[119,1111,1112],{},"import sys\n",[119,1114,1115],{"class":1028,"line":585},[119,1116,1117],{"emptyLinePlaceholder":624},"\n",[119,1119,1120],{"class":1028,"line":590},[119,1121,1122],{},"import matplotlib\n",[119,1124,1126],{"class":1028,"line":1125},4,[119,1127,1128],{},"import numpy as np\n",[119,1130,1132],{"class":1028,"line":1131},5,[119,1133,1134],{},"import pandas as pd\n",[119,1136,1138],{"class":1028,"line":1137},6,[119,1139,1117],{"emptyLinePlaceholder":624},[119,1141,1143],{"class":1028,"line":1142},7,[119,1144,1145],{},"print(f\"Python {sys.version.split()[0]}, pandas {pd.__version__}, \"\n",[119,1147,1149],{"class":1028,"line":1148},8,[119,1150,1151],{},"      f\"NumPy {np.__version__}, Matplotlib {matplotlib.__version__}\")\n",[24,1153,1155],{"id":1154},"результат","Результат",[15,1157,1158,1159,1162,1163,1165,1166,1169,1170,222,1172,132],{},"Ноутбук ",[705,1160,1161],{},"pz-01\u002Fpz01.ipynb",", первая ячейка которого выводит версии библиотек, совпадающие с ",[705,1164,711],{},"; команда ",[705,1167,1168],{},"git status"," не показывает каталогов ",[705,1171,1004],{},[705,1173,946],{},[19,1175,1177],{"id":1176},"часть-2-учебный-набор","Часть 2. Учебный набор",[24,1179,983],{"id":1180},"задание-1",[551,1182,1183,1239,1260],{},[278,1184,1185,1186,1189,1190],{},"Определить путь к данным функцией, которая ищет каталог ",[705,1187,1188],{},"data\u002Fraw"," в текущем каталоге и выше по дереву каталогов:",[1019,1191,1193],{"className":1103,"code":1192,"language":1105,"meta":584,"style":584},"from pathlib import Path\n\ndef find_raw(start: Path = Path.cwd()) -> Path:\n    for folder in (start, *start.parents):\n        if (folder \u002F \"data\" \u002F \"raw\").is_dir():\n            return folder \u002F \"data\" \u002F \"raw\"\n    raise FileNotFoundError(\"Каталог data\u002Fraw не найден\")\n\nraw = find_raw()\n",[705,1194,1195,1200,1204,1209,1214,1219,1224,1229,1233],{"__ignoreMap":584},[119,1196,1197],{"class":1028,"line":629},[119,1198,1199],{},"from pathlib import Path\n",[119,1201,1202],{"class":1028,"line":585},[119,1203,1117],{"emptyLinePlaceholder":624},[119,1205,1206],{"class":1028,"line":590},[119,1207,1208],{},"def find_raw(start: Path = Path.cwd()) -> Path:\n",[119,1210,1211],{"class":1028,"line":1125},[119,1212,1213],{},"    for folder in (start, *start.parents):\n",[119,1215,1216],{"class":1028,"line":1131},[119,1217,1218],{},"        if (folder \u002F \"data\" \u002F \"raw\").is_dir():\n",[119,1220,1221],{"class":1028,"line":1137},[119,1222,1223],{},"            return folder \u002F \"data\" \u002F \"raw\"\n",[119,1225,1226],{"class":1028,"line":1142},[119,1227,1228],{},"    raise FileNotFoundError(\"Каталог data\u002Fraw не найден\")\n",[119,1230,1231],{"class":1028,"line":1148},[119,1232,1117],{"emptyLinePlaceholder":624},[119,1234,1236],{"class":1028,"line":1235},9,[119,1237,1238],{},"raw = find_raw()\n",[278,1240,1241,1242,1245,1246,222,1249,1252,1253,222,1256,1259],{},"Прочитать ",[705,1243,1244],{},"readings.csv"," с разбором столбцов ",[705,1247,1248],{},"ts",[705,1250,1251],{},"received_at",", а также ",[705,1254,1255],{},"meters.csv",[705,1257,1258],{},"objects.csv",". Вывести размер и типы столбцов каждой таблицы.",[278,1261,1262,1263,1265,1266,132],{},"Найти строку своего прибора в ",[705,1264,1255],{}," и строку объекта, на котором он установлен, в ",[705,1267,1258],{},[24,1269,1155],{"id":1270},"результат-1",[15,1272,1273,1274,1276,1277,1279,1280,1282,1283,1286,1287,1289,1290,1293,1294,1297],{},"Размеры трёх таблиц; типы столбцов ",[705,1275,1244],{}," с пояснением, почему столбец ",[705,1278,1248],{}," имеет тип ",[705,1281,870],{},", а ",[705,1284,1285],{},"status"," — тип ",[705,1288,866],{},"; описание прибора: ресурс, вид (",[705,1291,1292],{},"counter"," или ",[705,1295,1296],{},"sensor","), единица измерения, тип объекта и его адрес.",[19,1299,1301],{"id":1300},"часть-3-показания-прибора","Часть 3. Показания прибора",[24,1303,983],{"id":1304},"задание-2",[551,1306,1307,1312,1315,1318,1323],{},[278,1308,1309,1310,132],{},"Отобрать записи своего прибора и упорядочить их по времени измерения ",[705,1311,1248],{},[278,1313,1314],{},"Определить первую и последнюю отметку времени и число часов между ними включительно.",[278,1316,1317],{},"Сравнить с этим числом количество записей и количество различных отметок времени; вычислить число часов без записей и число повторных записей.",[278,1319,1320,1321,132],{},"Подсчитать записи по значениям столбца ",[705,1322,1285],{},[278,1324,1325,1326,132],{},"Найти минимум и максимум показаний по всем записям и отдельно по записям со статусом ",[705,1327,1328],{},"ok",[24,1330,1155],{"id":1331},"результат-2",[15,1333,1334],{},"Сводная таблица полученных величин и 2–3 предложения о том, какие из них указывают на неполноту или недостоверность данных.",[19,1336,1338],{"id":1337},"часть-4-первый-график","Часть 4. Первый график",[24,1340,983],{"id":1341},"задание-3",[15,1343,1344,1345,1347,1348,1350,1351,132],{},"Построить фигуру из двух областей с общей осью времени: в верхней — показания по всем записям прибора, в нижней — только по записям со статусом ",[705,1346,1328],{},". Подписать области, ось времени и ось значений с единицей измерения из ",[705,1349,1255],{},". Сохранить фигуру в файл ",[705,1352,1353],{},"pz-01\u002Fmeter.png",[24,1355,1155],{"id":1356},"результат-3",[15,1358,1359,1360,1363],{},"Файл ",[705,1361,1362],{},"meter.png"," и описание различий между двумя графиками.",[19,1365,1367],{"id":1366},"часть-5-наблюдения-и-границы-вывода","Часть 5. Наблюдения и границы вывода",[24,1369,983],{"id":1370},"задание-4",[551,1372,1373,1376,1379],{},[278,1374,1375],{},"Сформулировать 3–5 наблюдений описательного уровня: для накопительного прибора — как рос нарастающий итог и равномерно ли; для мгновенного — в каком диапазоне и как колебались значения; для любого прибора — какие участки выделяются и насколько полны данные.",[278,1377,1378],{},"Сформулировать один вопрос «почему», на который по данным одного прибора ответить нельзя, и перечислить таблицы набора, которые понадобились бы для ответа.",[278,1380,1381],{},"Перечислить замеченные странности данных, не исправляя их: их обработка — предмет практических занятий 3 и 4.",[24,1383,1155],{"id":1384},"результат-4",[15,1386,1387],{},"Текстовый раздел ноутбука с наблюдениями, вопросом и перечнем странностей.",[19,1389,1391],{"id":1390},"форма-отчёта","Форма отчёта",[15,1393,1394,1395,1398],{},"Отчёт ",[705,1396,1397],{},"pz-01\u002Freport.md"," оформляется по регламенту сдачи работ. Для этого занятия в него входят:",[275,1400,1401,1404,1407,1410,1416,1419],{},[278,1402,1403],{},"номер варианта и описание прибора (часть 2);",[278,1405,1406],{},"версии Python и библиотек (часть 1);",[278,1408,1409],{},"сводная таблица части 3;",[278,1411,1412,1413,1415],{},"график ",[705,1414,1362],{}," (часть 4);",[278,1417,1418],{},"наблюдения, вопрос и перечень странностей (часть 5);",[278,1420,1421],{},"ответы на контрольные вопросы.",[15,1423,1158,1424,1426,1427,222,1429,1431],{},[705,1425,1161],{}," сдаётся с сохранёнными результатами ячеек и должен выполняться целиком после перезапуска ядра без ошибок. Каталоги ",[705,1428,1004],{},[705,1430,946],{}," в репозиторий не добавляются.",[19,1433,1435],{"id":1434},"контрольные-вопросы","Контрольные вопросы",[551,1437,1438,1441,1451,1454,1460,1463,1466],{},[278,1439,1440],{},"Зачем всем участникам курса одно окружение с зафиксированными версиями библиотек, а не последние версии пакетов?",[278,1442,1443,1444,1446,1447,1450],{},"Что изменится в типах столбцов и в доступных операциях, если прочитать ",[705,1445,1244],{}," без параметра ",[705,1448,1449],{},"parse_dates","?",[278,1452,1453],{},"Почему максимум показаний накопительного прибора ничего не говорит о нагрузке на объект?",[278,1455,1456,1457,1459],{},"Почему график по всем записям прибора почти ничего не сообщает о динамике показаний и почему статус ",[705,1458,1328],{}," ещё не гарантирует достоверности значения?",[278,1461,1462],{},"Почему число записей прибора не совпадает с числом часов в периоде наблюдений? Какие дефекты данных в этом участвуют?",[278,1464,1465],{},"Какие данные нужны, чтобы от наблюдения «зимой расход тепла выше» перейти к диагностическому уровню?",[278,1467,1468],{},"Почему по показаниям одного прибора нельзя судить о состоянии объекта, на котором он установлен?",[19,1470,1472],{"id":1471},"варианты-заданий","Варианты заданий",[15,1474,1475],{},"Номер варианта назначает преподаватель.",[745,1477,1478,1505],{},[748,1479,1480],{},[751,1481,1482,1486,1493,1496,1499,1502],{},[754,1483,1485],{"align":1484},"right","Вариант",[754,1487,1488,1489,1492],{"align":1484},"Прибор (",[705,1490,1491],{},"meter_id",")",[754,1494,1495],{},"Ресурс",[754,1497,1498],{},"Вид",[754,1500,1501],{},"Единица",[754,1503,1504],{},"Тип объекта",[761,1506,1507,1524,1540,1558,1576,1591,1608,1623,1639,1656,1671,1686,1702,1718,1734,1750,1766,1781,1796,1812,1828,1843,1858,1874,1890,1905,1920,1935,1951,1967,1982,1997,2014],{},[751,1508,1509,1511,1513,1516,1518,1521],{},[766,1510,121],{"align":1484},[766,1512,121],{"align":1484},[766,1514,1515],{},"электроэнергия",[766,1517,1292],{},[766,1519,1520],{},"кВт·ч",[766,1522,1523],{},"Трансформаторная подстанция",[751,1525,1526,1528,1530,1533,1535,1538],{},[766,1527,131],{"align":1484},[766,1529,131],{"align":1484},[766,1531,1532],{},"напряжение",[766,1534,1296],{},[766,1536,1537],{},"В",[766,1539,1523],{},[751,1541,1542,1544,1547,1550,1552,1555],{},[766,1543,339],{"align":1484},[766,1545,1546],{"align":1484},"10",[766,1548,1549],{},"тепло",[766,1551,1292],{},[766,1553,1554],{},"Гкал",[766,1556,1557],{},"Тепловой пункт",[751,1559,1560,1562,1565,1568,1570,1573],{},[766,1561,479],{"align":1484},[766,1563,1564],{"align":1484},"11",[766,1566,1567],{},"вода",[766,1569,1292],{},[766,1571,1572],{},"м³",[766,1574,1575],{},"Водомерный узел",[751,1577,1578,1580,1583,1585,1587,1589],{},[766,1579,496],{"align":1484},[766,1581,1582],{"align":1484},"17",[766,1584,1549],{},[766,1586,1292],{},[766,1588,1554],{},[766,1590,1557],{},[751,1592,1593,1595,1598,1601,1603,1606],{},[766,1594,518],{"align":1484},[766,1596,1597],{"align":1484},"18",[766,1599,1600],{},"температура",[766,1602,1296],{},[766,1604,1605],{},"°C",[766,1607,1557],{},[751,1609,1610,1612,1615,1617,1619,1621],{},[766,1611,528],{"align":1484},[766,1613,1614],{"align":1484},"21",[766,1616,1515],{},[766,1618,1292],{},[766,1620,1520],{},[766,1622,1523],{},[751,1624,1625,1628,1631,1633,1635,1637],{},[766,1626,1627],{"align":1484},"8",[766,1629,1630],{"align":1484},"22",[766,1632,1532],{},[766,1634,1296],{},[766,1636,1537],{},[766,1638,1523],{},[751,1640,1641,1644,1647,1649,1651,1653],{},[766,1642,1643],{"align":1484},"9",[766,1645,1646],{"align":1484},"25",[766,1648,1515],{},[766,1650,1292],{},[766,1652,1520],{},[766,1654,1655],{},"Узел уличного освещения",[751,1657,1658,1660,1663,1665,1667,1669],{},[766,1659,1546],{"align":1484},[766,1661,1662],{"align":1484},"26",[766,1664,1549],{},[766,1666,1292],{},[766,1668,1554],{},[766,1670,1557],{},[751,1672,1673,1675,1678,1680,1682,1684],{},[766,1674,1564],{"align":1484},[766,1676,1677],{"align":1484},"27",[766,1679,1600],{},[766,1681,1296],{},[766,1683,1605],{},[766,1685,1557],{},[751,1687,1688,1691,1694,1696,1698,1700],{},[766,1689,1690],{"align":1484},"12",[766,1692,1693],{"align":1484},"30",[766,1695,1515],{},[766,1697,1292],{},[766,1699,1520],{},[766,1701,1523],{},[751,1703,1704,1707,1710,1712,1714,1716],{},[766,1705,1706],{"align":1484},"13",[766,1708,1709],{"align":1484},"31",[766,1711,1549],{},[766,1713,1292],{},[766,1715,1554],{},[766,1717,1557],{},[751,1719,1720,1723,1726,1728,1730,1732],{},[766,1721,1722],{"align":1484},"14",[766,1724,1725],{"align":1484},"39",[766,1727,1549],{},[766,1729,1292],{},[766,1731,1554],{},[766,1733,1557],{},[751,1735,1736,1739,1742,1744,1746,1748],{},[766,1737,1738],{"align":1484},"15",[766,1740,1741],{"align":1484},"40",[766,1743,1600],{},[766,1745,1296],{},[766,1747,1605],{},[766,1749,1557],{},[751,1751,1752,1755,1758,1760,1762,1764],{},[766,1753,1754],{"align":1484},"16",[766,1756,1757],{"align":1484},"41",[766,1759,1515],{},[766,1761,1292],{},[766,1763,1520],{},[766,1765,1655],{},[751,1767,1768,1770,1773,1775,1777,1779],{},[766,1769,1582],{"align":1484},[766,1771,1772],{"align":1484},"42",[766,1774,1600],{},[766,1776,1296],{},[766,1778,1605],{},[766,1780,1557],{},[751,1782,1783,1785,1788,1790,1792,1794],{},[766,1784,1597],{"align":1484},[766,1786,1787],{"align":1484},"44",[766,1789,1549],{},[766,1791,1292],{},[766,1793,1554],{},[766,1795,1557],{},[751,1797,1798,1801,1804,1806,1808,1810],{},[766,1799,1800],{"align":1484},"19",[766,1802,1803],{"align":1484},"45",[766,1805,1600],{},[766,1807,1296],{},[766,1809,1605],{},[766,1811,1557],{},[751,1813,1814,1817,1820,1822,1824,1826],{},[766,1815,1816],{"align":1484},"20",[766,1818,1819],{"align":1484},"46",[766,1821,1515],{},[766,1823,1292],{},[766,1825,1520],{},[766,1827,1523],{},[751,1829,1830,1832,1835,1837,1839,1841],{},[766,1831,1614],{"align":1484},[766,1833,1834],{"align":1484},"48",[766,1836,1515],{},[766,1838,1292],{},[766,1840,1520],{},[766,1842,1523],{},[751,1844,1845,1847,1850,1852,1854,1856],{},[766,1846,1630],{"align":1484},[766,1848,1849],{"align":1484},"49",[766,1851,1532],{},[766,1853,1296],{},[766,1855,1537],{},[766,1857,1523],{},[751,1859,1860,1863,1866,1868,1870,1872],{},[766,1861,1862],{"align":1484},"23",[766,1864,1865],{"align":1484},"51",[766,1867,1567],{},[766,1869,1292],{},[766,1871,1572],{},[766,1873,1575],{},[751,1875,1876,1879,1882,1884,1886,1888],{},[766,1877,1878],{"align":1484},"24",[766,1880,1881],{"align":1484},"52",[766,1883,1549],{},[766,1885,1292],{},[766,1887,1554],{},[766,1889,1557],{},[751,1891,1892,1894,1897,1899,1901,1903],{},[766,1893,1646],{"align":1484},[766,1895,1896],{"align":1484},"57",[766,1898,1549],{},[766,1900,1292],{},[766,1902,1554],{},[766,1904,1557],{},[751,1906,1907,1909,1912,1914,1916,1918],{},[766,1908,1662],{"align":1484},[766,1910,1911],{"align":1484},"58",[766,1913,1600],{},[766,1915,1296],{},[766,1917,1605],{},[766,1919,1557],{},[751,1921,1922,1924,1927,1929,1931,1933],{},[766,1923,1677],{"align":1484},[766,1925,1926],{"align":1484},"59",[766,1928,1532],{},[766,1930,1296],{},[766,1932,1537],{},[766,1934,1523],{},[751,1936,1937,1940,1943,1945,1947,1949],{},[766,1938,1939],{"align":1484},"28",[766,1941,1942],{"align":1484},"60",[766,1944,1549],{},[766,1946,1292],{},[766,1948,1554],{},[766,1950,1557],{},[751,1952,1953,1956,1959,1961,1963,1965],{},[766,1954,1955],{"align":1484},"29",[766,1957,1958],{"align":1484},"64",[766,1960,1515],{},[766,1962,1292],{},[766,1964,1520],{},[766,1966,1523],{},[751,1968,1969,1971,1974,1976,1978,1980],{},[766,1970,1693],{"align":1484},[766,1972,1973],{"align":1484},"68",[766,1975,1515],{},[766,1977,1292],{},[766,1979,1520],{},[766,1981,1655],{},[751,1983,1984,1986,1989,1991,1993,1995],{},[766,1985,1709],{"align":1484},[766,1987,1988],{"align":1484},"71",[766,1990,1549],{},[766,1992,1292],{},[766,1994,1554],{},[766,1996,1557],{},[751,1998,1999,2002,2005,2007,2009,2011],{},[766,2000,2001],{"align":1484},"32",[766,2003,2004],{"align":1484},"76",[766,2006,1515],{},[766,2008,1292],{},[766,2010,1520],{},[766,2012,2013],{},"Насосная станция",[751,2015,2016,2019,2022,2024,2026,2028],{},[766,2017,2018],{"align":1484},"33",[766,2020,2021],{"align":1484},"79",[766,2023,1515],{},[766,2025,1292],{},[766,2027,1520],{},[766,2029,2013],{},[19,2031,2033],{"id":2032},"эталон-решения","Эталон решения",[15,2035,2036],{},"Эталон разобран на приборе 3, который в варианты не входит: накопительный прибор тепловой энергии ТЭМ-104 (единица — Гкал) на тепловом пункте ЦТП-004 по адресу ул. Ленинградская, 50.",[15,2038,2039,2042,2043,2046],{},[44,2040,2041],{},"Часть 1."," Первая ячейка ноутбука выводит ",[705,2044,2045],{},"Python 3.12.14, pandas 3.0.5, NumPy 2.5.3, Matplotlib 3.11.1",". Номер исправления Python у разных студентов может отличаться, версии библиотек — нет.",[15,2048,2049,2052,2053,2056],{},[44,2050,2051],{},"Части 2 и 3."," Код после определения ",[705,2054,2055],{},"raw",":",[1019,2058,2060],{"className":1103,"code":2059,"language":1105,"meta":584,"style":584},"readings = pd.read_csv(raw \u002F \"readings.csv\", parse_dates=[\"ts\", \"received_at\"])\nmeters = pd.read_csv(raw \u002F \"meters.csv\")\nobjects = pd.read_csv(raw \u002F \"objects.csv\")\nprint(readings.shape, meters.shape, objects.shape)\n\nMETER_ID = 3\nmeter = meters.loc[meters[\"meter_id\"] == METER_ID]\nobj = objects.loc[objects[\"object_id\"] == meter[\"object_id\"].iloc[0]]\n\nseries = readings.loc[readings[\"meter_id\"] == METER_ID].sort_values(\"ts\")\nfirst, last = series[\"ts\"].min(), series[\"ts\"].max()\nhours = int((last - first) \u002F pd.Timedelta(hours=1)) + 1\nn_ts = series[\"ts\"].nunique()\nprint(first, last, hours, len(series), n_ts, hours - n_ts, len(series) - n_ts)\nprint(series[\"status\"].value_counts())\n\nok = series.loc[series[\"status\"] == \"ok\"]\nprint(series[\"value\"].min(), series[\"value\"].max())\nprint(ok[\"value\"].min(), ok[\"value\"].max())\n",[705,2061,2062,2067,2072,2077,2082,2086,2091,2096,2101,2105,2111,2117,2123,2129,2135,2141,2146,2152,2158],{"__ignoreMap":584},[119,2063,2064],{"class":1028,"line":629},[119,2065,2066],{},"readings = pd.read_csv(raw \u002F \"readings.csv\", parse_dates=[\"ts\", \"received_at\"])\n",[119,2068,2069],{"class":1028,"line":585},[119,2070,2071],{},"meters = pd.read_csv(raw \u002F \"meters.csv\")\n",[119,2073,2074],{"class":1028,"line":590},[119,2075,2076],{},"objects = pd.read_csv(raw \u002F \"objects.csv\")\n",[119,2078,2079],{"class":1028,"line":1125},[119,2080,2081],{},"print(readings.shape, meters.shape, objects.shape)\n",[119,2083,2084],{"class":1028,"line":1131},[119,2085,1117],{"emptyLinePlaceholder":624},[119,2087,2088],{"class":1028,"line":1137},[119,2089,2090],{},"METER_ID = 3\n",[119,2092,2093],{"class":1028,"line":1142},[119,2094,2095],{},"meter = meters.loc[meters[\"meter_id\"] == METER_ID]\n",[119,2097,2098],{"class":1028,"line":1148},[119,2099,2100],{},"obj = objects.loc[objects[\"object_id\"] == meter[\"object_id\"].iloc[0]]\n",[119,2102,2103],{"class":1028,"line":1235},[119,2104,1117],{"emptyLinePlaceholder":624},[119,2106,2108],{"class":1028,"line":2107},10,[119,2109,2110],{},"series = readings.loc[readings[\"meter_id\"] == METER_ID].sort_values(\"ts\")\n",[119,2112,2114],{"class":1028,"line":2113},11,[119,2115,2116],{},"first, last = series[\"ts\"].min(), series[\"ts\"].max()\n",[119,2118,2120],{"class":1028,"line":2119},12,[119,2121,2122],{},"hours = int((last - first) \u002F pd.Timedelta(hours=1)) + 1\n",[119,2124,2126],{"class":1028,"line":2125},13,[119,2127,2128],{},"n_ts = series[\"ts\"].nunique()\n",[119,2130,2132],{"class":1028,"line":2131},14,[119,2133,2134],{},"print(first, last, hours, len(series), n_ts, hours - n_ts, len(series) - n_ts)\n",[119,2136,2138],{"class":1028,"line":2137},15,[119,2139,2140],{},"print(series[\"status\"].value_counts())\n",[119,2142,2144],{"class":1028,"line":2143},16,[119,2145,1117],{"emptyLinePlaceholder":624},[119,2147,2149],{"class":1028,"line":2148},17,[119,2150,2151],{},"ok = series.loc[series[\"status\"] == \"ok\"]\n",[119,2153,2155],{"class":1028,"line":2154},18,[119,2156,2157],{},"print(series[\"value\"].min(), series[\"value\"].max())\n",[119,2159,2161],{"class":1028,"line":2160},19,[119,2162,2163],{},"print(ok[\"value\"].min(), ok[\"value\"].max())\n",[15,2165,2166,2167,2169,2170,2172,2173,2175,2176,2178,2179,222,2181,2183,2184,2186,2187,2189,2190,2192,2193,1279,2196,784,2199,2201,2202,784,2205,2201,2207,132],{},"Размеры таблиц: ",[705,2168,1244],{}," — 147 026 строк и 5 столбцов, ",[705,2171,1255],{}," — 34 и 9, ",[705,2174,1258],{}," — 140 и 10. В ",[705,2177,1244],{}," столбцы ",[705,2180,1248],{},[705,2182,1251],{}," имеют тип ",[705,2185,870],{},", потому что указаны в ",[705,2188,1449],{},"; без этого параметра они были бы прочитаны как текст типа ",[705,2191,866],{},". Столбец ",[705,2194,2195],{},"value",[705,2197,2198],{},"float64",[705,2200,1491],{}," — ",[705,2203,2204],{},"int64",[705,2206,1285],{},[705,2208,866],{},[745,2210,2211,2221],{},[748,2212,2213],{},[751,2214,2215,2218],{},[754,2216,2217],{},"Величина",[754,2219,2220],{},"Значение",[761,2222,2223,2231,2239,2247,2255,2263,2270,2288,2296],{},[751,2224,2225,2228],{},[766,2226,2227],{},"Первая и последняя отметка",[766,2229,2230],{},"2024-10-01 00:00 — 2025-03-31 23:00",[751,2232,2233,2236],{},[766,2234,2235],{},"Часов в периоде",[766,2237,2238],{},"4368",[751,2240,2241,2244],{},[766,2242,2243],{},"Записей",[766,2245,2246],{},"4316",[751,2248,2249,2252],{},[766,2250,2251],{},"Различных отметок времени",[766,2253,2254],{},"4307",[751,2256,2257,2260],{},[766,2258,2259],{},"Часов без записей",[766,2261,2262],{},"61",[751,2264,2265,2268],{},[766,2266,2267],{},"Повторных записей",[766,2269,1643],{},[751,2271,2272,2275],{},[766,2273,2274],{},"Записи по статусам",[766,2276,2277,2279,2280,2283,2284,2287],{},[705,2278,1328],{}," — 4247, ",[705,2281,2282],{},"estimated"," — 59, ",[705,2285,2286],{},"error"," — 10",[751,2289,2290,2293],{},[766,2291,2292],{},"Минимум и максимум, все записи",[766,2294,2295],{},"−466 766,5 и 5 600 341,2 Гкал",[751,2297,2298,2303],{},[766,2299,2300,2301],{},"Минимум и максимум, записи ",[705,2302,1328],{},[766,2304,2305],{},"466 550,7 и 467 221,1 Гкал",[15,2307,2308],{},"Неполноту данных показывают 61 час без записей; недостоверность — отрицательный минимум и максимум, превышающий обычный уровень показаний в двенадцать раз. Повторные записи означают, что одно измерение передано дважды.",[15,2310,2311],{},[44,2312,2313],{},"Часть 4.",[1019,2315,2317],{"className":1103,"code":2316,"language":1105,"meta":584,"style":584},"unit = meter[\"unit\"].iloc[0]\nfig, (ax_all, ax_ok) = plt.subplots(2, 1, figsize=(10, 6), sharex=True)\nax_all.plot(series[\"ts\"], series[\"value\"], linewidth=0.8)\nax_all.set_title(f\"Прибор {METER_ID}: все записи\")\nax_ok.plot(ok[\"ts\"], ok[\"value\"], linewidth=0.8)\nax_ok.set_title(\"Записи со статусом ok\")\nfor ax in (ax_all, ax_ok):\n    ax.set_ylabel(f\"Показание, {unit}\")\nax_ok.set_xlabel(\"Время измерения\")\nfig.tight_layout()\nfig.savefig(\"meter.png\", dpi=120)\n",[705,2318,2319,2324,2329,2334,2339,2344,2349,2354,2359,2364,2369],{"__ignoreMap":584},[119,2320,2321],{"class":1028,"line":629},[119,2322,2323],{},"unit = meter[\"unit\"].iloc[0]\n",[119,2325,2326],{"class":1028,"line":585},[119,2327,2328],{},"fig, (ax_all, ax_ok) = plt.subplots(2, 1, figsize=(10, 6), sharex=True)\n",[119,2330,2331],{"class":1028,"line":590},[119,2332,2333],{},"ax_all.plot(series[\"ts\"], series[\"value\"], linewidth=0.8)\n",[119,2335,2336],{"class":1028,"line":1125},[119,2337,2338],{},"ax_all.set_title(f\"Прибор {METER_ID}: все записи\")\n",[119,2340,2341],{"class":1028,"line":1131},[119,2342,2343],{},"ax_ok.plot(ok[\"ts\"], ok[\"value\"], linewidth=0.8)\n",[119,2345,2346],{"class":1028,"line":1137},[119,2347,2348],{},"ax_ok.set_title(\"Записи со статусом ok\")\n",[119,2350,2351],{"class":1028,"line":1142},[119,2352,2353],{},"for ax in (ax_all, ax_ok):\n",[119,2355,2356],{"class":1028,"line":1148},[119,2357,2358],{},"    ax.set_ylabel(f\"Показание, {unit}\")\n",[119,2360,2361],{"class":1028,"line":1235},[119,2362,2363],{},"ax_ok.set_xlabel(\"Время измерения\")\n",[119,2365,2366],{"class":1028,"line":2107},[119,2367,2368],{},"fig.tight_layout()\n",[119,2370,2371],{"class":1028,"line":2113},[119,2372,2373],{},"fig.savefig(\"meter.png\", dpi=120)\n",[15,2375,2376,2377,2379],{},"Верхний график — почти горизонтальная линия на уровне около 0,47 млн Гкал с узкими выбросами вверх до 2,3 и 5,6 млн Гкал и вниз до −0,47 млн Гкал. Масштаб оси задают десять записей со статусом ",[705,2378,2286],{},", и на их фоне рост показаний не виден. Нижний график показывает плавно растущую кривую от 466 551 до 466 835 Гкал с двумя узкими всплесками вверх, 19 декабря и 6 февраля.",[15,2381,2382,2385],{},[44,2383,2384],{},"Часть 5."," Образец наблюдений:",[275,2387,2388,2391,2394,2397,2403],{},[278,2389,2390],{},"За полгода нарастающий итог вырос с 466 550,7 до 466 835,2 Гкал: через тепловой пункт прошло около 285 Гкал тепловой энергии.",[278,2392,2393],{},"Рост неравномерный: кривая круче всего в январе и заметно положе в октябре и марте.",[278,2395,2396],{},"Данных нет за 61 час из 4368 (1,4 %); разрывы короткие, самый длинный — 11 часов.",[278,2398,2399,2400,2402],{},"Десять записей со статусом ",[705,2401,2286],{}," содержат значения, в 5 или 12 раз превышающие обычный уровень, либо отрицательные.",[278,2404,2405,2406,2408,2409,2411],{},"Две записи со статусом ",[705,2407,1328],{}," превышают соседние примерно на 470 Гкал — 19 декабря в 13:00 и 6 февраля в 21:00. Для обеих отметок в данных есть и более ранняя запись с обычным значением, то есть статус ",[705,2410,1328],{}," не защищает от ошибочной повторной отправки.",[15,2413,2414,2415,2418,2419,784,2421,2423,2424,2427],{},"Вопрос, на который по одному прибору ответить нельзя: почему в январе расход тепла выше, чем в октябре? Для ответа нужны суточная погода (",[705,2416,2417],{},"weather_daily.csv","), показания других приборов этого и соседних тепловых пунктов (",[705,2420,1255],{},[705,2422,1258],{},") и журнал инцидентов (",[705,2425,2426],{},"incidents.csv","), чтобы отделить влияние температуры наружного воздуха от режима работы пункта и аварий.",[15,2429,2430,2431,2433,2434,2436],{},"Странности данных: часы без записей; повторные записи — как с одинаковым, так и с изменённым значением; записи со статусом ",[705,2432,2286],{},"; 59 записей со статусом ",[705,2435,2282],{},", восстановленных системой сбора; 150 записей, поступивших в систему более чем через час после измерения.",[2438,2439,2440],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":584,"searchDepth":585,"depth":585,"links":2442},[2443,2444,2445,2446,2447,2448,2452,2456,2460,2464,2468,2469,2470,2471],{"id":656,"depth":585,"text":657},{"id":666,"depth":585,"text":667},{"id":693,"depth":585,"text":694},{"id":919,"depth":585,"text":920},{"id":968,"depth":585,"text":969},{"id":978,"depth":585,"text":979,"children":2449},[2450,2451],{"id":982,"depth":590,"text":983},{"id":1154,"depth":590,"text":1155},{"id":1176,"depth":585,"text":1177,"children":2453},[2454,2455],{"id":1180,"depth":590,"text":983},{"id":1270,"depth":590,"text":1155},{"id":1300,"depth":585,"text":1301,"children":2457},[2458,2459],{"id":1304,"depth":590,"text":983},{"id":1331,"depth":590,"text":1155},{"id":1337,"depth":585,"text":1338,"children":2461},[2462,2463],{"id":1341,"depth":590,"text":983},{"id":1356,"depth":590,"text":1155},{"id":1366,"depth":585,"text":1367,"children":2465},[2466,2467],{"id":1370,"depth":590,"text":983},{"id":1384,"depth":590,"text":1155},{"id":1390,"depth":585,"text":1391},{"id":1434,"depth":585,"text":1435},{"id":1471,"depth":585,"text":1472},{"id":2032,"depth":585,"text":2033},"Окружение практического занятия",{},"\u002Fcourses\u002Faidt-iot-vvad\u002Ftopic-01-pz","pz",{"title":634,"description":584},"courses\u002Faidt-iot-vvad\u002Ftopic-01-pz","f97mhiclDEL3CVLR-h-1NhD6mxlclA0O4qkvMZvGx78",{"id":2480,"title":2481,"body":2482,"course_slug":619,"description":584,"env_label":620,"env_url":620,"extension":621,"group":2528,"is_course_project":622,"is_index":624,"level":2529,"meta":2530,"navigation":624,"path":2554,"section":620,"seo":2555,"stem":2556,"topic_number":620,"topic_slug":620,"__hash__":2557},"courses\u002Fcourses\u002Faidt-iot-vvad\u002Findex.md","Введение в аналитику данных",{"type":8,"value":2483,"toc":2525},[2484,2488],[19,2485,2487],{"id":2486},"документы","Документы",[275,2489,2490,2497,2504,2511,2518],{},[278,2491,2492,2493,132],{},"Требования к содержанию и оформлению — ",[115,2494,2496],{"href":2495},".\u002Fshared\u002FSTYLEGUIDE","shared\u002FSTYLEGUIDE.md",[278,2498,2499,2500,132],{},"Содержание курса — ",[115,2501,2503],{"href":2502},".\u002Ftopics","topics.md",[278,2505,2506,2507,132],{},"Концепция траектории Data & AI — ",[115,2508,2510],{"href":2509},".\u002Fiot-ai-concept","iot-ai-concept.md",[278,2512,2513,2514,132],{},"Учебный набор данных — ",[115,2515,2517],{"href":2516},".\u002Fdata\u002FREADME","data\u002FREADME.md",[278,2519,2520,2521,132],{},"Издательские метаданные учебного пособия — ",[115,2522,2524],{"href":2523},".\u002Fpublishing\u002Ftextbook.yaml","publishing\u002Ftextbook.yaml",{"title":584,"searchDepth":585,"depth":585,"links":2526},[2527],{"id":2486,"depth":585,"text":2487},"iot","бакалавриат",{"topics_count":1235,"has_lr":622,"has_pz":624,"has_course_project":622,"final_assessment":584,"tech_focus":2531,"kind":2532,"authors":2533,"publication":2547},"Python, pandas, NumPy, SciPy, Matplotlib, Seaborn, Jupyter","Учебное пособие",[2534,2540,2544],{"last_name":2535,"first_name":2536,"patronymic":2537,"role":2538,"affiliation":2539},"Рындин","Никита","Александрович","автор","ВГТУ",{"last_name":2541,"first_name":2542,"patronymic":2543,"role":2538},"Корчагин","Сергей","Геннадьевич",{"last_name":2545,"first_name":2546,"role":2538},"Пуговкина","Наталья",{"city":2548,"year":584,"founder":2549,"publisher":2550,"udk":584,"bbk":584,"shelf_mark":584,"isbn":584,"approval_body":2553},"Воронеж","Министерство науки и высшего образования Российской Федерации",{"short":2539,"full":2551,"address":2552},"Федеральное государственное бюджетное образовательное учреждение высшего образования «Воронежский государственный технический университет»\n","394026, Воронеж, Московский проспект, 14","Издается по решению редакционно-издательского совета\nВоронежского государственного технического университета\n","\u002Fcourses\u002Faidt-iot-vvad",{"title":2481,"description":584},"courses\u002Faidt-iot-vvad\u002Findex","Al8IRco-wPstgi13cZRlSXRxhy1YoFgBBv09f5I5Jbg",1789142470071]