JSON格式人口数据制作地图

在《Pygal制作地图》的文章中,可以通过不同的方式显示数据,不过数据量偏小,如果想要显示大显的数据,我们可以通过JSON文件读取数据并显示在交互性地图上。

JSON格式人口数据制作地图_第1张图片
Paste_Image.png

代码如下:

import json
import pygal
from pygal_maps_world.i18n import COUNTRIES

# 得到Country Code
def get_country_code(country_name):
    for code, name in COUNTRIES.items():
        if name == country_name:
            return code
    return None

# 读取JSON数据
filename = 'population_data.json'
with open(filename) as f:
    pop_data = json.load(f)

# 得到字典文件显示格式是 "cn": 1331380000
poplist = {}
for pop_dict in pop_data:
    if pop_dict['Year'] == '2009':
        country_name = pop_dict['Country Name']
        population = int(float(pop_dict['Value']))
        code = get_country_code(country_name)
        if code:
            poplist[code] = population
        
# 显示数据
wm = pygal.maps.world.World()
wm.title = '2010 World Population'
wm.add('2010', poplist)
wm.render_to_file('world.svg')

所有的国家显示一种颜色没有分组,效果不是很好。如果根据人口数量的不同进行分组,则可以有更好的交互性。

JSON格式人口数据制作地图_第2张图片
Paste_Image.png

改动的代码如下:


#根据人口数量将所有的国家按人口数量分组分组
poplist1, poplist2, poplist3 = {}, {}, {}
for c, p in poplist.items():
    if p < 10000000:
        poplist1[c] = p
    elif p < 100000000:
        poplist2[c] = p
    else:
        poplist3[c] = p

       
# 显示数据
wm = pygal.maps.world.World()
wm.title = '2010 World Population'
# wm.add('2010', poplist)
wm.add('0-10m', poplist1)
wm.add('10m-1bn', poplist2)
wm.add('>1bn', poplist3)
wm.render_to_file('world.svg')

你可能感兴趣的:(JSON格式人口数据制作地图)