338 Глава 16 • Загрузка данных
ПРИМЕЧАНИЕ
Форматирование заголовков не всегда последовательно; иногда встречаются лишние пробелы,
единицы измерения находятся в неожиданных местах . В необработанных файлах данных это быва-
ет достаточно часто, но не создает проблем .
Печать заголовков и их позиций
Чтобы читателю было проще понять структуру данных в файле, выведем каждый
заголовок и его позицию в списке:
highs_lows.py
...
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
for index, column_header in enumerate(header_row):
print(index, column_header)
Мы применяем к списку функцию
enumerate()
для получения индекса каждого
элемента и его значения. (Обратите внимание: строка
print(header_row)
удалена
ради этой более подробной версии.)
Результат с индексами всех заголовков выглядит так:
0 AKDT
1 Max TemperatureF
2 Mean TemperatureF
3 Min TemperatureF
...
20 CloudCover
21 Events
22 WindDirDegrees
Из этих данных видно, что даты и максимальные температуры за эти дни находятся
в столбцах 0 и 1. Чтобы проанализировать температурные данные, мы обработа-
ем каждую запись данных в файле
sitka_weather_07-2014 .csv
и извлечем элементы
с индексами 0 и 1.
Извлечение и чтение данных
Итак, нужные столбцы данных известны; попробуем прочитать часть этих данных.
Начнем с чтения максимальной температуры за каждый день:
highs_lows.py
import csv
# Чтение максимальных температур из файла.
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
Формат CSV 339
highs = []
for row in reader:
highs.append(row[1])
print(highs)
Программа создает пустой список с именем
highs
и перебирает остальные стро-
ки в файле . Объект
reader
продолжает с того места, на котором он остановился
в ходе чтения файла CSV, и автоматически возвращает каждую строку после
текущей позиции. Так как заголовок уже прочитан, цикл продолжается со второй
строки, в которой начинаются фактические данные. При каждом проходе цикла
значение с индексом 1 (второй столбец) присоединяется к списку
highs
.
В результате будет получен список
highs
со следующим содержимым:
['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']
Мы извлекли максимальную температуру для каждого дня и аккуратно сохранили
полученные данные в строковом формате в списке.
Затем преобразуем строки в числа при помощи функции
int()
, чтобы данные
можно было передать
matplotlib
:
highs_lows.py
...
highs = []
for row in reader:
high = int(row[1])
highs.append(high)
print(highs)
Строки преобразуются в целые числа в точке перед добавлением температур
в список. Результат представляет собой список максимальных температур в чис-
ловом формате:
[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
340 Глава 16 • Загрузка данных
# Чтение максимальных температур из файла.
...
# Нанесение данных на диаграмму.
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(highs, c='red')
# Форматирование диаграммы.
plt.title("Daily high temperatures, July 2014", fontsize=24)
plt.xlabel('', fontsize=16)
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
plt.show()
Мы передаем при вызове
plot()
список
highs
и аргумент
c='red'
для отобра-
жения точек красным цветом. (Максимумы будут выводиться красным цветом,
а минимумы синим.) Затем указываются другие аспекты форматирования (напри-
мер, размер шрифта и метки) , уже знакомые вам по главе 15. Так как даты еще
не добавлены, метки для оси x не задаются, но вызов
plt.xlabel()
изменяет раз-
мер шрифта, чтобы метки по умолчанию лучше читались . На рис. 16.1 показана
полученная диаграмма: это простой график температурных максимумов за июль
2014 г. в Ситке (штат Аляска).
Достарыңызбен бөлісу: |