Skip to main content

📊 pandas, matplotlib и статистическая обработка IoT данных

📋 Паспорт спринта

Параметр Значение
Предмет Интернет вещей (элективный курс)
Класс 9 класс
Спринт № 16 из 36 (открывающий модуль 3: Обработка и анализ данных)
Тип занятия Data Science практикум с IoT данными
Продолжительность 90 минут
Формат Jupyter Notebook лаборатория + командная аналитика

🎯 Цели спринта (Sprint Goals)

Основная цель:

Освоить основы анализа данных применительно к IoT системам и подготовить аналитическую базу для проекта метеостанции

Конкретные результаты спринта:

  • Освоены базовые операции с pandas DataFrame для IoT данных
  • Создаы информативные графики с matplotlib для сенсорных данных
  • Применены статистические методы для анализа показаний датчиков
  • Обнаружены закономерности и аномалии в данных метеостанции
  • НОВОЕ: Сформированы гипотезы о взаимосвязях между параметрами среды
  • Подготовлена структура данных для проекта метеостанции

🕐 Sprint Timeline (90 минут)

⚡ SPRINT START (0-5 мин): Data Detective Challenge

Задача: Мотивировать через реальную проблему анализа данных

Демонстрация проблемы:

  • Показать файл с 1000 строк данных метеостанции: “Что здесь происходит?”
  • “Как найти самый жаркий день? Когда влажность была критической?”
  • “Можно ли предсказать дождь по данным датчиков?”

Проблемная ситуация:

12025-05-20 08:00, 22.5, 65, 450, 125, 15.2
22025-05-20 08:15, 23.1, 63, 480, 130, 14.8
32025-05-20 08:30, 23.8, 61, 520, 142, 14.1
4... (еще 997 строк)

“Как превратить числа в понимание?”

Результат: Осознание необходимости инструментов анализа данных

📚 THEORY BLOCK (5-30 мин): Основы Data Science для IoT

Микро-блок 1 (8 мин): pandas - “Excel на стероидах”

Что такое pandas:

  • Библиотека для работы с табличными данными
  • DataFrame = умная таблица с индексами и типами данных
  • Быстрые операции над миллионами строк

IoT специфика:

  • Временные ряды (time series) - основной тип IoT данных
  • Пропущенные значения от неисправных датчиков
  • Агрегация данных (из секунд в минуты, из минут в часы)

Базовый синтаксис:

1import pandas as pd
2
3# Загрузка IoT данных
4df = pd.read_csv('weather_station.csv')
5df['timestamp'] = pd.to_datetime(df['timestamp'])
6df.set_index('timestamp', inplace=True)
7
8# Базовая статистика
9print(df.describe())

Микро-блок 2 (8 мин): matplotlib - визуализация IoT

Зачем графики в IoT:

  • Быстрое обнаружение аномалий
  • Понимание трендов и циклов
  • Презентация результатов

Типы графиков для IoT:

  • Line plot: изменение температуры во времени
  • Scatter plot: корреляция влажности и температуры
  • Histogram: распределение значений освещенности
  • Subplot: несколько параметров на одном экране

Пример кода:

1import matplotlib.pyplot as plt
2
3# График температуры
4plt.figure(figsize=(12, 6))
5plt.plot(df.index, df['temperature'])
6plt.title('Температура за неделю')
7plt.ylabel('°C')
8plt.xticks(rotation=45)
9plt.show()

Микро-блок 3 (9 мин): Статистика для IoT

Основные метрики:

  • Среднее (mean): “обычная” температура
  • Медиана (median): “типичная” влажность (устойчива к выбросам)
  • Стандартное отклонение (std): стабильность датчика
  • Min/Max: экстремальные значения

IoT-специфичные анализы:

1# Суточные циклы
2daily_avg = df.groupby(df.index.hour)['temperature'].mean()
3
4# Аномалии (выбросы)
5threshold = df['temperature'].mean() + 2*df['temperature'].std()
6anomalies = df[df['temperature'] > threshold]
7
8# Корреляции между датчиками
9correlation_matrix = df.corr()

🆕 Микро-блок 4 (5 мин): Качество данных IoT

Типичные проблемы IoT данных:

  • Пропуски: датчик отключился, связь прервалась
  • Выбросы: неисправность, помехи
  • Дрейф: калибровка сбилась со временем
  • Шум: случайные колебания

Методы очистки:

 1# Поиск пропусков
 2print(df.isnull().sum())
 3
 4# Удаление выбросов
 5Q1 = df['temperature'].quantile(0.25)
 6Q3 = df['temperature'].quantile(0.75)
 7IQR = Q3 - Q1
 8df_clean = df[~((df['temperature'] < (Q1 - 1.5 * IQR)) | 
 9                (df['temperature'] > (Q3 + 1.5 * IQR)))]
10
11# Сглаживание данных
12df['temp_smooth'] = df['temperature'].rolling(window=5).mean()

☕ BREAK (30-35 мин): Техническая пауза

🛠️ ПРАКТИЧЕСКИЙ БЛОК (35-75 мин): Data Science Lab

Этап 1: Настройка среды (35-40 мин)

Jupyter Notebook setup:

  • Запуск Jupyter на Raspberry Pi или компьютерах
  • Установка библиотек: pandas, matplotlib, numpy
  • Загрузка учебного датасета “Smart Weather Station”

🆕 Подготовленный датасет содержит:

1timestamp,temperature,humidity,light,air_quality,distance,soil_moisture
22025-05-20 00:00:00,18.2,78,45,235,145.6,65
32025-05-20 00:15:00,17.9,79,42,240,146.1,64
4... (7 дней данных, измерения каждые 15 минут = 672 строки)

Этап 2: Pandas Explorer (40-55 мин)

🆕 ЛАБОРАТОРНАЯ РАБОТА “IoT DATA EXPLORER”:

Задание 1: Первое знакомство с данными (5 мин)

 1# Ваш код здесь
 2df = pd.read_csv('weather_data.csv')
 3
 4# TODO: Ответьте на вопросы
 5print("Размер датасета:", df.shape)
 6print("Столбцы:", df.columns.tolist())
 7print("Первые 5 строк:")
 8print(df.head())
 9
10# Вопрос: Сколько дней данных? Какие датчики присутствуют?

Задание 2: Временные ряды (5 мин)

 1# TODO: Преобразовать timestamp в datetime и сделать индексом
 2df['timestamp'] = pd.to_datetime(df['timestamp'])
 3df.set_index('timestamp', inplace=True)
 4
 5# TODO: Найти самую высокую и низкую температуру
 6max_temp = df['temperature'].max()
 7min_temp = df['temperature'].min()
 8print(f"Температурный диапазон: {min_temp}°C - {max_temp}°C")
 9
10# Вопрос: В какое время суток обычно самая низкая температура?

Задание 3: Группировка и агрегация (5 мин)

 1# TODO: Средние значения по часам суток
 2hourly_stats = df.groupby(df.index.hour).agg({
 3    'temperature': 'mean',
 4    'humidity': 'mean',
 5    'light': 'mean'
 6})
 7
 8print("Суточные циклы:")
 9print(hourly_stats)
10
11# Вопрос: Во сколько утра самая высокая влажность?

Этап 3: Matplotlib Visualizer (55-70 мин)

🆕 ЛАБОРАТОРНАЯ РАБОТА “IoT VISUALIZER”:

Задание 4: Временные графики (8 мин)

 1# TODO: График изменения температуры за неделю
 2plt.figure(figsize=(15, 10))
 3
 4# Subplot 1: Температура
 5plt.subplot(3, 1, 1)
 6plt.plot(df.index, df['temperature'], color='red', linewidth=1)
 7plt.title('Температура за неделю')
 8plt.ylabel('°C')
 9plt.grid(True, alpha=0.3)
10
11# TODO: Добавить графики влажности и освещенности
12# Subplot 2: Влажность
13plt.subplot(3, 1, 2)
14# ваш код
15
16# Subplot 3: Освещенность
17plt.subplot(3, 1, 3)
18# ваш код
19
20plt.tight_layout()
21plt.show()

Задание 5: Анализ корреляций (7 мин)

 1# TODO: Scatter plot температуры vs влажности
 2plt.figure(figsize=(12, 5))
 3
 4plt.subplot(1, 2, 1)
 5plt.scatter(df['temperature'], df['humidity'], alpha=0.6)
 6plt.xlabel('Температура (°C)')
 7plt.ylabel('Влажность (%)')
 8plt.title('Связь температуры и влажности')
 9
10# TODO: Добавить линию тренда
11# Подсказка: используйте numpy.polyfit()
12
13plt.subplot(1, 2, 2)
14# TODO: Создайте свой график корреляции
15# Например: освещенность vs качество воздуха
16
17plt.tight_layout()
18plt.show()
19
20# Вопрос: Есть ли связь между температурой и влажностью?

Этап 4: Статистический анализ (70-75 мин)

🆕 ЛАБОРАТОРНАЯ РАБОТА “IoT STATISTICS”:

Задание 6: Описательная статистика (3 мин)

 1# TODO: Полная статистика по всем датчикам
 2print("=== ОПИСАТЕЛЬНАЯ СТАТИСТИКА ===")
 3print(df.describe())
 4
 5# TODO: Найти аномальные значения (выбросы)
 6for column in ['temperature', 'humidity', 'light']:
 7    mean_val = df[column].mean()
 8    std_val = df[column].std()
 9    
10    # Правило 3 сигм: значения вне mean ± 3*std считаются аномалиями
11    anomalies = df[(df[column] < mean_val - 3*std_val) | 
12                   (df[column] > mean_val + 3*std_val)]
13    
14    print(f"{column}: найдено {len(anomalies)} аномалий")

Задание 7: Поиск закономерностей (2 мин)

 1# TODO: Есть ли суточные циклы?
 2daily_pattern = df.groupby(df.index.hour)['temperature'].mean()
 3print("Суточный цикл температуры:")
 4print(daily_pattern)
 5
 6# TODO: Анализ выходных vs будни (если есть такие данные)
 7df['day_of_week'] = df.index.dayofweek
 8weekend_vs_weekday = df.groupby(df['day_of_week'] >= 5).mean()
 9print("Выходные vs будни:")
10print(weekend_vs_weekday)

🎯 TEAM ANALYSIS (75-85 мин): Командная аналитика

Этап 1: Формирование аналитических команд (75-77 мин)

Команды метеостанции работают с одним датасетом:

  • Команда “Агро-метеостанция” - фокус на данных для растений
  • Команда “Эко-монитор” - фокус на качестве среды
  • Команда “Умная станция” - фокус на прогнозировании

Этап 2: Специализированный анализ (77-83 мин)

🆕 КОМАНДНЫЕ ЗАДАНИЯ:

Для команды “Агро-метеостанция”:

 1# Агро-фокус: анализ условий для растений
 2optimal_temp_range = (18, 25)  # °C
 3optimal_humidity_range = (60, 80)  # %
 4
 5# TODO: Найти процент времени с оптимальными условиями
 6good_conditions = df[
 7    (df['temperature'].between(*optimal_temp_range)) &
 8    (df['humidity'].between(*optimal_humidity_range))
 9]
10
11# TODO: Построить "карту комфорта" для растений
12# TODO: Найти лучшее время для полива (по влажности почвы)

Для команды “Эко-монитор”:

1# Эко-фокус: качество среды
2air_quality_threshold = 300  # условный порог
3
4# TODO: Анализ загрязнения воздуха
5bad_air_times = df[df['air_quality'] > air_quality_threshold]
6
7# TODO: Корреляция качества воздуха с другими параметрами
8# TODO: Найти самые "чистые" и "грязные" часы суток

Для команды “Умная станция”:

1# Прогноз-фокус: поиск предикторов
2# TODO: Может ли падение освещенности предсказать дождь?
3# TODO: Связь между изменением давления и погодой
4# TODO: Создать простую модель прогноза на час вперед

Этап 3: Презентация инсайтов (83-85 мин)

Формат: 30 секунд на команду - главный инсайт + один график

🔄 SPRINT RETRO (85-90 мин): Рефлексия

Техника “Data Science Reflection”:

  • Что удивило? Какой неожиданный паттерн обнаружили?
  • Что было сложно? Где застряли в коде?
  • Что применим? Как поможет в проекте метеостанции?

🆕 Анонс спринта #17: “Машинное обучение для прогнозов”


📝 Sprint Backlog (Домашнее задание)

User Story:

Как аналитик IoT данных, я хочу углубить навыки работы с pandas и matplotlib, чтобы эффективно анализировать данные собственной метеостанции.

🆕 РОЛЕВЫЕ домашние задания по командам:

Общее задание для всех (базовый уровень):

Задание 1: Собственный анализ (обязательное)

1# Загрузите расширенный датасет (14 дней вместо 7)
2# Выполните свой анализ:
3
41. Найдите 3 самых интересных корреляции между датчиками
52. Определите, в какие дни недели воздух чище всего
63. Постройте "тепловую карту" комфорта по часам и дням
74. Найдите аномалии в данных и объясните их возможные причины
8
9# Результат: Jupyter notebook с вашим анализом

Для команды “Агро-метеостанция”:

1# Дополнительное задание: Агро-аналитика
2
31. Исследуйте связь влажности почвы с погодными условиями
42. Определите оптимальное время суток для разных сельхоз операций
53. Создайте "календарь полива" на основе данных
64. Постройте модель потребности растений в воде
7
8# Изучите: как работают современные системы "умного" земледелия

Для команды “Эко-монитор”:

1# Дополнительное задание: Эко-аналитика
2
31. Проанализируйте связь качества воздуха с временем суток
42. Найдите корреляции между шумом и другими факторами
53. Создайте "экологический рейтинг" для разных времен
64. Исследуйте влияние погоды на экологические параметры
7
8# Изучите: стандарты качества воздуха WHO, системы экомониторинга

Для команды “Умная станция”:

1# Дополнительное задание: Предиктивная аналитика
2
31. Найдите "ранние индикаторы" изменения погоды
42. Создайте простую систему алертов на основе трендов
53. Проанализируйте циклические паттерны в данных
64. Подготовьте данные для машинного обучения (спринт 17)
7
8# Изучите: основы time series analysis, предобработка данных для ML

Definition of Done:

  • Выполнен общий анализ расширенного датасета
  • Реализованы специализированные задания команды
  • Jupyter notebook с результатами и выводами
  • (Опционально) Изучены дополнительные материалы по специализации

📊 Sprint Metrics (Оценивание)

🆕 Компетентностное оценивание Data Science:

Критерий Отлично (5) Хорошо (4) Удовлетворительно (3)
Pandas Skills Свободное использование группировок, индексов, временных рядов Базовые операции + некоторые продвинутые Загрузка данных, простая фильтрация
Matplotlib Mastery Информативные графики с настройками, subplots Базовые графики с подписями Простые line/scatter plots
Statistical Thinking Понимание корреляций, трендов, аномалий Базовая описательная статистика Вычисление mean/std
IoT Data Understanding Связывает паттерны с физическими процессами Понимает специфику IoT данных Работает с данными как с числами
🆕 Analytical Insights Формулирует гипотезы, находит неожиданные паттерны Делает корректные выводы Описывает наблюдения

🆕 Практические навыки (hands-on assessment):

  • Code Quality: Читаемость, комментарии, структура
  • Problem Solving: Способность отладить ошибки, найти решения
  • Data Storytelling: Умение объяснить результаты анализа
  • Team Collaboration: Эффективность работы в команде над данными

🆕 Sprint Badges для Data Scientists:

  • 📊 Data Explorer - за исследовательский подход к данным
  • 📈 Visualization Wizard - за качественные и информативные графики
  • 🔍 Pattern Hunter - за обнаружение интересных закономерностей
  • 🎯 Insight Generator - за практически значимые выводы
  • 💻 Code Craftsman - за чистый и эффективный код

🎒 Sprint Resources

Программная среда:

  • Jupyter Notebook (установлен на Pi или компьютерах)
  • Python 3 + библиотеки: pandas, matplotlib, numpy, seaborn
  • 🆕 Подготовленные датасеты: weather_station_7days.csv, weather_station_14days.csv
  • Шаблоны Jupyter notebook для быстрого старта

🆕 Учебные материалы:

  • Чит-шиты по pandas (основные операции)
  • Галерея matplotlib примеров для IoT
  • Карточки со статистическими терминами
  • Примеры “хороших” и “плохих” графиков

Технические средства:

  • Проектор для демонстрации кода
  • Компьютеры/Pi с достаточной производительностью для Jupyter
  • Резервные USB с предустановленной средой
  • 🆕 Печатные backup материалы (если проблемы с техникой)

🆕 Датасеты и данные:

1weather_station_7days.csv - базовый датасет для занятия
2weather_station_14days.csv - расширенный для домашнего задания
3real_sensor_data.csv - реальные данные от школьной метеостанции (если есть)
4synthetic_anomalies.csv - данные с внесенными аномалиями для обучения

Резервный план:

Если проблемы с Jupyter:

  • Работа в обычном Python IDLE с готовыми скриптами
  • Демонстрация анализа учителем + обсуждение результатов
  • 🆕 Использование Google Colab (если есть интернет)

Если недостаточно времени:

  • Фокус на pandas (matplotlib в следующий раз)
  • Готовые графики для анализа вместо создания своих
  • Упрощенные статистические задачи

🔧 Sprint Facilitation Tips

🆕 Управление Jupyter workflow:

  • Синхронизация: Все начинают с одной ячейки одновременно
  • Checkpoint система: Промежуточные остановки для синхронизации группы
  • Error handling: Быстрая помощь при ошибках в коде
  • Screen sharing: Показ результатов учениками через проектор

🆕 Работа с кодом в классе:

  • Live coding: Учитель пишет код вместе с учениками
  • Pair programming: Более сильные помогают слабым
  • Code review: Обсуждение разных подходов к решению
  • Debugging together: Коллективное решение технических проблем

Типичные проблемы и решения:

Проблема: “ImportError: No module named pandas” Решение: Подготовленные виртуальные среды, pip install инструкции

Проблема: “Графики не отображаются” Решение: %matplotlib inline в начале notebook, проверка backend

Проблема: “Слишком сложно для 9 класса” Решение: Готовые шаблоны кода, фокус на интерпретации результатов

🆕 Проблема: Разный темп выполнения заданий 🆕 Решение: Дополнительные задачи для быстрых, упрощенные для медленных

🆕 Мотивация и engagement:

  • Real data stories: “Этот пик температуры - когда включили отопление”
  • Gamification: “Кто найдет самую интересную корреляцию?”
  • Career connections: “Так работают аналитики в Tesla/Google/Яндексе”
  • Immediate feedback: Мгновенные результаты анализа

🔗 Связь с модулем и курсом

🆕 Интеграция с предыдущими спринтами:

  • Спринт 13-15: Данные датчиков → анализ этих данных
  • Технические навыки: Подключение сенсоров → понимание их показаний
  • Проектная работа: Сбор данных → извлечение инсайтов

🆕 Подготовка к следующим спринтам:

  • Спринт 17: Статистический анализ → машинное обучение
  • Спринт 18: Аналитические навыки → проект метеостанции
  • Модуль 3: Данные → веб-интерфейсы и дашборды

🆕 Навыки для карьеры:

1Data Literacy: Понимание данных → Профессиональная грамотность XXI века
2Programming Skills: Python pandas → Инструмент для любой технической карьеры  
3Analytical Thinking: Поиск паттернов → Критическое мышление
4Visualization: matplotlib → Коммуникация результатов

📈 Sprint Success Metrics

Спринт считается успешным, если:

  • ✅ 85%+ учащихся могут загрузить данные в pandas и построить базовый график
  • ✅ Все команды нашли минимум 2 интересных паттерна в данных
  • ✅ Понимание разницы между “сырыми данными” и “инсайтами”
  • ✅ Готовность применить навыки к собственным IoT проектам
  • 🆕 Сформировано понимание роли аналитики в IoT системах
  • 🆕 Подготовлена база для машинного обучения в спринте 17

🆕 Количественные метрики:

  • Процент успешно выполненных заданий в Jupyter
  • Количество самостоятельно найденных паттернов
  • Качество интерпретации результатов анализа
  • 🆕 Скорость освоения pandas/matplotlib операций

🆕 Качественные индикаторы:

  • Энтузиазм по поводу работы с данными
  • Вопросы про применение в других областях
  • Желание анализировать собственные данные
  • 🆕 Понимание ценности data-driven подхода в IoT

🚀 ТРАНСФОРМАЦИОННЫЕ АСПЕКТЫ СПРИНТА 16:

  1. Переход к Data Science - от железа к аналитике
  2. Профессиональные инструменты - pandas как стандарт индустрии
  3. Исследовательский подход - от инструкций к самостоятельному поиску
  4. Командная аналитика - навыки работы с данными в группе
  5. IoT специфика - анализ именно сенсорных временных рядов
  6. Критическое мышление - поиск закономерностей и аномалий
  7. Подготовка к AI - фундамент для машинного обучения

Этот спринт открывает совершенно новое измерение курса - превращение IoT устройств из “собирателей данных” в “генераторы инсайтов”! 📊🔍💡