Последние несколько стран не могут показать свое население на карте мира Пигал. - PullRequest
1 голос
/ 01 апреля 2019

Я прохожу сквозной курс по питону и черчу население на карте мира.Некоторые коды стран должны быть получены специально, потому что их название страны не является стандартным.Я начал пытаться получить эти нестандартные коды стран с Боливией и Конго, но оба они остаются пустыми на карте Пегала.Прилагается оба соответствующих модуля, любая помощь будет оценена.

код для получения кодов стран:

from pygal.maps.world import COUNTRIES

def get_country_code(country_name):
    """return the pygal 2-digit country code for
    given country"""
    for code, name in COUNTRIES.items():
        if name == country_name:
            return code
    if country_name == 'Bolivia, Plurinational State of':
        return 'bo'
    elif country_name == 'Congo, the Democratic Republic of the':
        return 'cd'

        #if the country wasnt found, return none
    return None

, а затем программа, которая экспортирует его в карту pygal

import json

from pygal.maps.world import World

from pygal.style import RotateStyle

from country_codes import get_country_code

#load the data into a list
filename = 'population_data.json'
with open(filename) as f:
    pop_data = json.load(f)

#build a dictionary of population data
cc_population = {}


#print the 2010 population for each country
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:
            cc_population[code] = population

#Group the countries into 3 population levels
cc_pops_1, cc_pops_2, cc_pops_3 = {}, {}, {}
for cc, pop in cc_population.items():
    if pop < 10000000:
        cc_pops_1[cc] = pop
    elif pop < 1000000000:
        cc_pops_2[cc] = pop
    else:
        cc_pops_3[cc] = pop

wm_style = RotateStyle('#994033')
wm = World(style=wm_style)
wm.title = 'World population in 2010, by country'
wm.add('0-10 mil', cc_pops_1)
wm.add('10m-1bn', cc_pops_2)
wm.add('>1bn', cc_pops_3)

wm.render_to_file('world_population.svg')

1 Ответ

1 голос
/ 01 апреля 2019

Похоже, вы проверяете имена стран, как они определены в модуле карт мира Pygal, но должны проверять имена, которые используются в файле данных json.

Например, предполагая, что файл json использует имя «Боливия», вам нужно изменить это конкретное сравнение на

if country_name == 'Bolivia':
    return 'bo'

Вы можете определить любые другие страны, которые должны обрабатываться таким образом, добавив оператор print перед последним return функции. При запуске программы все пропущенные страны будут перечислены на консоли с указанием конкретного текста, который необходимо проверить.

#if the country wasnt found, return none
print(country_name)
return None
...