Как отобразить строковые данные на карте мира, используя Pygal и Python? - PullRequest
0 голосов
/ 18 марта 2020

Итак, я читаю книгу курса Python Cra sh, и одним из его упражнений было нахождение собственного файла CSV и вывод его данных на карту мира с использованием Pygal. В предыдущих упражнениях мы отображали числа на карте, но сейчас я пытаюсь отобразить строки, каждая из которых называется «высокий доход», «низкий доход» и так далее. Пока у меня есть этот код:

import csv
import pygal
from pygal.maps.world import World
from country_codes import get_country_code

# Loading data
filename = 'metadata_country.csv'
with open(filename) as f:
    children_list = csv.reader(f)
    header_row = next(children_list)    

    incomes = {}
    for data in children_list:
        try:
            country_code = get_country_code(data[4])
            child_income = data[2]
        except ValueError:
            print("Data missing for " + country_code)
        else:
            incomes[country_code] = child_income


income_levels = ['High income', 'Lower middle income', 'Upper Middle income', 'Low income']

# Filtering the child incomes dictionary   
children_high, children_upper_middle, children_lower_middle, children_low = {}, {}, {}, {}
for country, income in incomes.items():
    if income == income_levels[0]:
        children_high[country] = income
    elif income == income_levels[1]:
        children_lower_middle[country] = income
    elif income == income_levels[2]:
        children_upper_middle[country] = income
    else:
        children_low[country] = income

world_map = World()
world_map.title = 'Children income per country'
world_map.add('High income', children_high)
world_map.add('Upper Middle income', children_upper_middle)
world_map.add('Lower middle income', children_lower_middle)
world_map.add('Low income', children_low)

world_map.render_to_file('children_income.svg')

Но я получаю следующую ошибку:

  File "C:\Users\Matheus\AppData\Roaming\Python\Python38\site-packages\pygal\graph\map.py", line 83, in _plot      
    ratio = .3 + .7 * (value - min_) / (max_ - min_)
TypeError: unsupported operand type(s) for -: 'str' and 'str'

Может кто-нибудь помочь мне решить, что с ним не так? Я новичок в Python и новичок в Pygal. Просто делаю это ради любопытства. Спасибо! При необходимости ссылка на файл .csv.

1 Ответ

0 голосов
/ 18 марта 2020

решено:

На самом деле, изменение этого раздела принесло свои плоды:

# Filtering the child incomes dictionary   
children_high, children_upper_middle, children_lower_middle, children_low = {}, {}, {}, {}
for country, income in incomes.items():    
    if income == income_levels[0]:
        children_high[country] = income_levels[0]
    elif income == income_levels[1]:
        children_lower_middle[country] = income_levels[1]
    elif income == income_levels[2]:
        children_upper_middle[country] = income_levels[2]
    else:
        children_low[country] = income_levels[3]

Раньше я использовал значение «доход» из словаря «доходы», и оно не работало по какой-то причине. Теперь я передал значение как'come_levels [index] ', которое возвращает строку, и оно работает как задумано. Я все равно буду признателен, если кто-нибудь сможет точно определить, что вызвало это Спасибо!

...