Книга «Изучаем Python»


Рис. 16.5. Область между двумя наборами данных закрашена 346



Pdf көрінісі
бет208/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   204   205   206   207   208   209   210   211   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

Рис. 16.5.
Область между двумя наборами данных закрашена


346
Глава 16 • Загрузка данных
В точке 

fill_between()
передается список 
dates
для значений 
x
и две серии 
значений 
y
highs
и 
lows
. Аргумент 
facecolor
определяет цвет закрашиваемой об-
ласти; мы назначаем ему низкое значение 
alpha=0.1
, чтобы заполненная область 
соединяла две серии данных, не отвлекая зрителя от передаваемой информации. 
На рис. 16.5 показана диаграмма с закрашенной областью между 
highs
и 
lows
.
Закрашенная область подчеркивает величину расхождения между двумя наборами 
данных.
Проверка ошибок
Программа 
highs_lows .py
должна нормально работать для погодных данных любого 
места. Однако на некоторых метеорологических станциях происходят сбои, и стан-
циям не удается собрать данные (полностью или частично). Отсутствие данных 
может привести к исключениям; если исключения не будут обработаны, то про-
грамма аварийно завершится.
Для примера попробуем построить график температур для Долины Смерти (штат 
Калифорния). Скопируйте файл 
death_valley_2014 .csv
в каталог с программами этой 
главы, после чего внесите изменения в 
highs_lows .py
для работы с другим набором 
данных:
highs_lows.py
...
# Чтение дат, температурных максимумов и минимумов из файла.
filename = 'death_valley_2014.csv'
with open(filename) as f:
...
При запуске программы происходит ошибка, как видно из последней строки сле-
дующего вывода:
Traceback (most recent call last): 
File "highs_lows.py", line 17, in  
high = int(row[1]) 
ValueError: invalid literal for int() with base 10: '' 
Трассировка показывает, что Python не может обработать максимальную температу-
ру для одной из дат, потому что не может преобразовать пустую строку 
('')
в целое 
число. Чтобы понять причину, достаточно заглянуть в файл 
death_valley_2014 .csv
:
2014-2-16,,,,,,,,,,,,,,,,,,,0.00,,,-1
Похоже, 16 февраля 2014 года данные не сохранялись; строка максимальной тем-
пературы пуста. Чтобы решить проблему, мы будем выполнять проверку ошибок 
при чтении данных из файла для обработки исключений, которые могут возникнуть 
при разборе наборов данных. Вот как это делается:
highs_lows.py
...
# Чтение дат, температурных максимумов и минимумов из файла.
filename = 'death_valley_2014.csv'


Формат CSV
347
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
dates, highs, lows = [], [], []
for row in reader:
 
try:
current_date = datetime.strptime(row[0], "%Y-%m-%d")
high = int(row[1])
low = int(row[3])
except ValueError:
 
print(current_date, 'missing data')
else:
 
dates.append(current_date)
highs.append(high)
lows.append(low)
# Plot data.
...
# Форматирование диаграммы
 
title = "Daily high and low temperatures - 2014\nDeath Valley, CA"
plt.title(title, fontsize=20)
...
При анализе каждой строки данных мы пытаемся извлечь дату, максимальную 
и минимальную температуру 

. Если каких-либо данных не хватает, Python вы-
дает ошибку 
ValueError
, а мы обрабатываем ее — выводим сообщение с датой, для 
которой отсутствуют данные 

. После вывода ошибки цикл продолжает обработку 
следующей порции данных. Если все данные, относящиеся к некоторой дате, про-
читаны без ошибок, выполняется блок 
else
, а данные присоединяются к соответ-
ствующим спискам 

. Так как на диаграмме отображается информация для нового 
места, заголовок изменяется, и в него включается название места 

.


Достарыңызбен бөлісу:
1   ...   204   205   206   207   208   209   210   211   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет