[64, 71, 64, 59, 69, 62, 61, 55, 57, 61, 57, 59, 57, 61, 64, 61, 59, 63, 60, 57,
69, 63, 62, 59, 57, 57, 61, 59, 61, 61, 66]
Следующим шагом станет построение визуализации этих данных.
Для наглядного представления температурных данных мы сначала создадим простую диаграмму дневных максимумов температуры с использованием matplotlib:
highs_lows.py
import csv
from matplotlib import pyplot as plt
# Чтение максимальных температур из файла.
...
# Нанесение данных на диаграмму.
fig = plt.figure(dpi=128, figsize=(10, 6))
(1) plt.plot(highs, c='red')
# Форматирование диаграммы.
(2)plt.title("Daily high temperatures, July 2014", fontsize=24)
(3)plt.xlabel('', fontsize=16)
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
plt.show()
Мы передаем при вызове plot() список highs (1) и аргумент c='red' для отображения точек красным цветом. (Максимумы будут выводиться красным цветом, а минимумы синим.) Затем указываются другие аспекты форматирования (например, размер шрифта и метки) (2), уже знакомые вам по главе 15. Так как даты еще не добавлены, метки для оси x не задаются, но вызов plt.xlabel() изменяет размер шрифта, чтобы метки по умолчанию лучше читались (3). На рис. 16.1 показана полученная диаграмма: это простой график температурных максимумов за июль 2014 г. в Ситке (штат Аляска).
Рис. 16.1. График ежедневных температурных максимумов в июле 2014 г. в Ситке (штат Аляска)
Теперь нанесем даты на график, чтобы с ним было удобнее работать. Первая дата из файла погодных данных хранится во второй строке файла:
2014-7-1,64,56,50,53,51,48,96,83,58,30,19,...
Данные будут читаться в строковом формате, поэтому нам понадобится способ преобразовать строку '2014-7-1' в объект, представляющий эту дату. Чтобы построить объект, соответствующий 1 июля 2014 года, мы воспользуемся методом strptime() из модуля datetime. Посмотрим, как работает strptime() в терминальном окне:
>>> from datetime import datetime
>>> first_date = datetime.strptime('2014-7-1', '%Y-%m-%d')
>>> print(first_date)
2014-07-01 00:00:00
Сначала необходимо импортировать класс datetime из модуля datetime. Затем вызывается метод strptime(), первый аргумент которого содержит строку с датой. Второй аргумент сообщает Python, как отформатирована дата. В данном примере значение '%Y-' сообщает Python, что часть строки, предшествующая первому дефису, должна интерпретироваться как год из четырех цифр; '%m-' приказывает Python интерпретировать часть строки перед вторым дефисом как число, представляющее месяц; наконец, '%d' приказывает Python интерпретировать последнюю часть строки как день месяца от 1 до 31.
Метод strptime() может получать различные аргументы, которые описывают, как должна интерпретироваться запись даты. В табл. 16.1 перечислены некоторые из таких аргументов.
Таблица 16.1. Аргументы форматирования даты и времени из модуля datetime
Аргумент | Описание |
%A | Название дня недели — например, Monday |
%B | Название месяца — например, January |
%m | Порядковый номер месяца (от 01 до 12) |
%d | День месяца (от 01 до 31) |
%Y | Год из четырех цифр (например, 2015) |
%y | Две последние цифры года (например, 15) |
%H | Часы в 24-часовом формате (от 00 до 23) |
%I | Часы в 12-часовом формате (от 01 до 12) |
%p | AM или PM |
%M | Минуты (от 00 до 59) |
%S | Секунды (от 00 до 59) |
Научившись обрабатывать данные в файлах CSV, вы сможете улучшить диаграмму температурных данных. Для этого мы извлечем из файла даты ежедневных максимумов и передадим даты и максимумы функции plot():
highs_lows.py
import csv
from datetime import datetime
from matplotlib import pyplot as plt
# Чтение дат и температурных максимумов из файла.
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
. .
(1) . .dates, highs = [], []
for row in reader:
(2) . . . .current_date = datetime.strptime(row[0], "%Y-%m-%d")
. . . .dates.append(current_date)
. . . .
high = int(row[1])
highs.append(high)
# Нанесение данных на диаграмму.
fig = plt.figure(dpi=128, figsize=(10, 6))
(3)plt.plot(dates, highs, c='red')
# Форматирование диаграммы.
plt.title("Daily high temperatures, July 2014", fontsize=24)
plt.xlabel('', fontsize=16)
(4)fig.autofmt_xdate()
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
plt.show()
Рис. 16.2. График с датами на оси x стал более понятным