[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]

Следующим шагом станет построение визуализации этих данных.

<p>Нанесение данных на диаграмму</p>

Для наглядного представления температурных данных мы сначала создадим простую диаграмму дневных максимумов температуры с использованием 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 г. в Ситке (штат Аляска)

<p>Модуль datetime</p>

Теперь нанесем даты на график, чтобы с ним было удобнее работать. Первая дата из файла погодных данных хранится во второй строке файла:

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)

<p>Представление дат на диаграмме</p>

Научившись обрабатывать данные в файлах 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 стал более понятным

Перейти на страницу:

Все книги серии Библиотека программиста

Похожие книги