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



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


Глава 16 • Загрузка данных
ad Andorra 
ae United Arab Emirates 
af Afghanistan 
...
zw Zimbabwe 
Напишем функцию, которая перебирает 
COUNTRIES
и возвращает коды стран. 
Функция будет размещаться в отдельном модуле с именем 
country_codes
, чтобы 
ее можно было позднее импортировать в программу визуализации:
country_codes.py
from pygal.i18n import COUNTRIES
 
def get_country_code(country_name):
"""Возвращает для заданной страны ее код Pygal, состоящий из 2 букв."""
 
for code, name in COUNTRIES.items():
 
if name == country_name:
return code
# Если страна не найдена, вернуть None.
 
return None
print(get_country_code('Andorra'))
print(get_country_code('United Arab Emirates'))
print(get_country_code('Afghanistan'))
Название страны передается функции 
get_country_code()
и сохраняется в па-
раметре 
country_name

. Затем программа перебирает пары «код—название» 
в 
COUNTRIES

. Если название страны будет найдено, функция возвращает код 
страны 

, а если нет — после цикла добавляется строка, возвращающая 
None


Наконец, программа передает названия трех стран для проверки функции. Как 
и ожидалось, программа выводит три двухбуквенных кода:
ad
ae
af
Прежде чем переходить к использованию функции, удалите три команды 
print
из 
country_codes .py
.
Затем функция 
get_country_code()
импортируется в 
world_population .py
:
world_population.py
import json
from country_codes import get_country_code
...
# Вывод населения каждой страны за 2010 год.
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
 
code = get_country_code(country_name)
if code:
 
print(code + ": "+ str(population))


Формат JSON
353
 
else:
print('ERROR - ' + country_name)
После извлечения названия и населения в 
code
сохраняется код страны — или 
None

если код недоступен 

. Если код получен, то код и население страны выводятся ко-
мандой print 

. Если код недоступен, выводится сообщение об ошибке с названием 
страны, для которого не удалось найти код 

. Запустите программу, и вы увидите 
коды стран с населением и несколько сообщений об ошибках:
ERROR - Arab World
ERROR - Caribbean small states
ERROR - East Asia & Pacific (all income levels)
...
af: 34385000
al: 3205000
dz: 35468000
...
ERROR - Yemen, Rep.
zm: 12927000
zw: 12571000
Ошибки происходят по двум причинам. Во-первых, классификация в наборе дан-
ных не всегда осуществляется по странам; часть статистики относится к регионам 
или экономическим группам. Во-вторых, в части статистики используется другая 
запись полных названий стран (
Yemen,
Rep.
вместо 
Yemen
). Пока опустим данные 
стран, вызывающие ошибки, и посмотрим, как будет выглядеть карта с успешно 
прочитанными данными.
Построение карты мира
С имеющимися кодами стран карта мира строится легко и просто. В Pygal под-
держивается тип диаграммы 
Worldmap
, упрощающий работу с географическими 
наборами данных. В качестве примера использования 
Worldmap
мы создадим про-
стую карту с данными по Северной, Центральной и Южной Америке:
americas.py
import pygal
 
wm = pygal.Worldmap()
wm.title = 'North, Central, and South America'
 
wm.add('North America', ['ca', 'mx', 'us'])
wm.add('Central America', ['bz', 'cr', 'gt', 'hn', 'ni', 'pa', 'sv'])
wm.add('South America', ['ar', 'bo', 'br', 'cl', 'co', 'ec', 'gf',
'gy', 'pe', 'py', 'sr', 'uy', 've'])
 
wm.render_to_file('americas.svg')
В точке 

мы создаем экземпляр класса 
Worldmap
и задаем атрибут 
title
объекта 
карты. В точке 

используется метод 
add()
, который получает метку и список 
кодов стран, на которых вы хотите сосредоточиться. Каждый вызов 
add()
создает 
новый цвет для набора стран и добавляет этот цвет в список условных обозначений 


354

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




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

    Басты бет