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


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



Pdf көрінісі
бет187/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   183   184   185   186   187   188   189   190   ...   238
Рис. 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   ...   183   184   185   186   187   188   189   190   ...   238




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

    Басты бет