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



Pdf көрінісі
бет190/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   186   187   188   189   190   191   192   193   ...   238
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    Глава 16  •  Загрузка данных

ad Andorra 

ae United Arab Emirates 

af Afghanistan 

...

zw Zimbabwe 



Напишем функцию, которая перебирает 

COUNTRIES

 и возвращает коды стран. 

Функция будет размещаться в отдельном модуле с именем 

country_codes

, чтобы 


ее можно было позднее импортировать в программу визуализации:



Достарыңызбен бөлісу:
1   ...   186   187   188   189   190   191   192   193   ...   238




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

    Басты бет