Нашли ошибку?
Скачать чистый
мини-проект≈ 20 минупражнения: 0 из 5

Мини-проект: метеостанции

Собрать данные трёх станций в одну таблицу, заполнить пропуски показаниями соседей, посчитать недельные средние, найти «остров тепла» в центре города и сохранить отчёт в файл.

Python запустится при первом выполнении

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

Шаг 1. Одна таблица

[ ]Упражнение 1Температура трёх станций решено

Загрузите три файла data/station_center.csv, data/station_airport.csv, data/station_forest.csv и соберите в temps таблицу температур (столбец 1 каждого файла): строка — станция в этом порядке, столбец — день. В gaps сохраните число пропусков у каждой станции.

import numpy as np

temps = ...
gaps = ...

Шаг 2. Заполнить пропуски соседями

Средняя по всему месяцу — плохая замена для одного дня: погода в феврале менялась от −9 до +3. Гораздо точнее взять показания других станций в тот же день — станции стоят недалеко друг от друга, и погода у них меняется вместе.

[ ]Упражнение 2Средняя соседей решено

Сохраните в day_mean среднюю температуру каждого дня по тем станциям, которые его записали, а в filled — таблицу temps, где каждый пропуск заменён средней этого дня.

day_mean = ...
filled = ...

Первая проверка — пропусков не осталось, а средние станций стали числами:

[ ]После заполнения
print(np.isnan(filled).sum(), "пропусков")
print(np.round(temps.mean(axis=1), 2))
print(np.round(filled.mean(axis=1), 2))
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
0 пропусков
[  nan   nan -6.08]
[-3.07 -4.49 -6.08]
Вывод появится, когда решите упражнение «Средняя соседей», — иначе он подскажет ответ. Ячейку можно и выполнить.

Способ не идеален: центр обычно теплее соседей, и его единственный пропуск заполнен чуть холоднее, чем было на самом деле. Но один день из 28 почти не сдвигает средние — и это честнее, чем ноль или средняя за месяц.

Шаг 3. По неделям

28 дней — ровно четыре недели. Таблицу 3 × 28 можно превратить в трёхмерную 3 × 4 × 7 — стопку из трёх таблиц, как все исходы трёх кубиков в модуле о случайных числах. Вот тот же приём на маленьком примере: два ряда по 14 дней (две недели) становятся стопкой 2 × 2 × 7 — ряд, неделя, день недели:

[ ]Ряд → недели × дни
sample = np.arange(1, 29).reshape(2, 14)     # 2 ряда по 14 дней — две недели
sample_weeks = sample.reshape(2, 2, 7)       # ряд → неделя → день недели
print(sample_weeks.shape)
print(sample_weeks[0])       # первый ряд: 2 строки-недели по 7 дней
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
(2, 2, 7)
[[ 1  2  3  4  5  6  7]
 [ 8  9 10 11 12 13 14]]

reshape раскладывает каждую строку по неделям по порядку дней, ничего не перемешивая. Какую ось сворачивать для недельной средней, решите по смыслу осей: у таблицы станций ось 0 — станция, ось 1 — неделя, ось 2 — день.

[ ]Упражнение 3Недельные средние решено

Сохраните в weekly таблицу 3 × 4 — среднюю температуру каждой станции за каждую неделю (по filled), а в coldest_week — номер самой холодной недели (от 1 до 4) по средней трёх станций.

weekly = ...
coldest_week = ...

Шаг 4. Остров тепла

Город нагревает воздух: асфальт, дома, машины. Метеорологи называют это островом тепла.

[ ]Упражнение 4Насколько центр теплее решено

Сохраните в station_avg среднюю температуру каждой станции за месяц (по filled), в island — насколько в среднем центр теплее леса, а в thaw_days — число дней, когда хотя бы на одной станции было выше нуля.

station_avg = ...
island = ...
thaw_days = ...

Шаг 5. Отчёт в файл

[ ]Упражнение 5Сохранить отчёт решено

Соберите в report таблицу 4 × 4: строка — неделя, первый столбец — номер недели (1–4), дальше средние центра, аэропорта и леса. Сохраните её в файл data/weekly.csv через запятую, с одним знаком после точки.

report = ...

[ ]Что получилось
with open("data/weekly.csv") as f:
    print(f.read())
print("центр теплее леса на", round(island, 1), "°C")
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
1.0,-5.5,-6.7,-8.2
2.0,-4.9,-6.4,-7.6
3.0,-1.7,-3.1,-5.0
4.0,-0.2,-1.8,-3.5

центр теплее леса на 3.0 °C
Итог появится, когда решите все упражнения урока, — в нём ответы. Ячейку можно и выполнить.

Выводы

В центре города в феврале было в среднем на 3 °C теплее, чем в лесу, — остров тепла виден даже на трёх станциях. Самой холодной была первая неделя, к концу месяца на всех станциях потеплело примерно на 5 градусов. Пропуски не помешали: nan-функции посчитали итоги по тому, что есть, а для недельных таблиц мы заполнили дыры показаниями соседей — самым правдоподобным, что было под рукой.

Выводы с ответами появятся, когда решите все упражнения урока.

Подробнее в справочнике

Практика по модулю

Задачи по NumPy для самостоятельной практики появятся в разделе «Задачи → NumPy».

Нашли ошибку?