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



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


Глава 16 • Загрузка данных
pop_data
. Каждый элемент представляет собой словарь с четырьмя парами «ключ—
значение», который сохраняется в переменной 
pop_dict
.
В точке 

ключ 
'Year'
каждого словаря проверяется на значение 2010. (Так как все 
значения 
population_data .json
заключены в кавычки, выполняется сравнение строк.) 
Если словарь относится к 2010 году, то значение, связанное с ключом 
'Country
Name'
, сохраняется в переменной 
country_name
, а значение, связанное с ключом 
'Value'
, сохраняется в переменной 
population

. Затем программа выводит на-
звание каждой страны и ее население.
Программа выводит последовательность названий стран и численности их на-
селения:
Arab World: 357868000 
Caribbean small states: 6880000 
East Asia & Pacific (all income levels): 2201536674
...
Zimbabwe: 12571000 
Не все данные включают точные названия стран, но это неплохое начало для даль-
нейшей работы. Теперь данные необходимо преобразовать в формат, с которым 
может работать Pygal.
Преобразование строк в числовые значения
Все ключи и значения в 
population_data .json
хранятся в строковом формате. Чтобы 
работать с данными численности населения, необходимо преобразовать строковые 
значения в числа. Для этого в программе используется функция 
int()
:
world_population.py
...
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
 
population = int(pop_dict['Value'])
 
print(country_name + ": " + str(population))
После преобразования 

все данные численности населения хранятся в число-
вом формате. При выводе численность населения должна быть преобразована 
в строку 

. Впрочем, для некоторых значений это изменение приводит к ошибке:
Arab World: 357868000 
Caribbean small states: 6880000 
East Asia & Pacific (all income levels): 2201536674 
...
Traceback (most recent call last): 
File "print_populations.py", line 12, in  
population = int(pop_dict['Value']) 
 
ValueError: invalid literal for int() with base 10:
'1127437398.85751' 
Необработанные данные часто форматируются непоследовательно, поэтому 
ошибки в них встречаются достаточно часто. В данном случае ошибка происхо-


Формат JSON
351
дит из-за того, что Python не может преобразовать строку с дробным значением 
'1127437398.85751'
в целое число 

. (Вероятно, дробное значение было получено 
в результате интерполяции в те годы, в которые перепись населения не производи-
лась.) Чтобы решить эту проблему, мы сначала преобразуем строку в вещественное 
число, а затем преобразуем вещественное число в целое:
world_population.py
...
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
print(country + ": " + str(population))
Функция 
float()
преобразует строку в целое число, а функция 
int()
отсекает 
дробную часть и возвращает целое число. Теперь можно вывести полный набор 
данных численности населения за 2010 год без ошибок:
Arab World: 357868000 
Caribbean small states: 6880000 
East Asia & Pacific (all income levels): 2201536674
...
Zimbabwe: 12571000
Каждая строка успешно преобразуется сначала в вещественное, а затем в целое 
число. Обратите внимание: данные хранятся в числовом формате, чтобы их можно 
было использовать для построения карты распределения населения.
Получение кодов стран
Прежде чем переходить к построению карты, необходимо разобраться еще с одним 
аспектом данных. Инструментарий Pygal для работы с географическими картами 
ожидает получить данные в четко определенном формате: страны должны задавать-
ся кодами стран, а численность населения — значениями. Существует несколько 
стандартных наборов кодов стран, часто применяемых при работе с геополитиче-
скими данными; коды, включенные в 
population_data .json
, состоят из трех букв, но 
Pygal использует систему с двухбуквенными кодами. Нужно найти способ полу-
чения двухбуквенных кодов стран по их названиям.
Коды стран Pygal хранятся в модуле 
i18n
(сокращение от «internationalization»). 
В словаре 
COUNTRIES
двухбуквенные коды стран являются ключами, а названия 
стран — значениями. Чтобы просмотреть коды, импортируйте словарь из модуля 
i18n
и выведите его ключи и значения:
countries.py
from pygal.i18n import COUNTRIES
 
for country_code in sorted(COUNTRIES.keys()):
print(country_code, COUNTRIES[country_code])
В цикле 
for
ключи сортируются в алфавитном порядке 

. Затем программа выво-
дит каждый код страны и страну, с которой этот код связан:


352

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




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

    Басты бет