📊 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:
- ✅ Переход к Data Science - от железа к аналитике
- ✅ Профессиональные инструменты - pandas как стандарт индустрии
- ✅ Исследовательский подход - от инструкций к самостоятельному поиску
- ✅ Командная аналитика - навыки работы с данными в группе
- ✅ IoT специфика - анализ именно сенсорных временных рядов
- ✅ Критическое мышление - поиск закономерностей и аномалий
- ✅ Подготовка к AI - фундамент для машинного обучения
Этот спринт открывает совершенно новое измерение курса - превращение IoT устройств из “собирателей данных” в “генераторы инсайтов”! 📊🔍💡