Python编程从零基础到入门实践中制作世界人口地图问题

1.当导入from pygal.il8n import COUNTRIES,发现会报错,上网查找了一下,该模块已经被弃用。新的map包为:

pygal.maps.world

  在Windows中,要先安装,该模块:Win+R打开控制窗口,先找到python安装路径,输入pip install pygal_maps_world,如下图(我之前已经安装好)。

import pygal.maps.world


for country_code,country_name in pygal.maps.world.COUNTRIES.items():
    print(country_code,country_name)

输入以上代码,可以正常运行,表示安装成功。

2.具体完整代码如下:

   country_codes.py中代码:

import pygal.maps.world

def get_counrty_code(country_name):   
    for code,name in pygal.maps.world.COUNTRIES.items():
        if name==country_name:#将匹配的国家名称返回对应的编码
            print(name)
            return code
    return None
    
print(get_counrty_code('Afghanistan'))#用该打印结果验证该函数是否可以正常运行,输出:af,验证结束后删除该语句

   world_population.py中代码如下:

import json
import pygal.maps.world
from country_codes import get_counrty_code

fileName=r'D:\\Python练习\\Ch16\\population_data.json'#打开数据的路径名,这里使用绝对路径

with open(fileName) as f:   #导入文件,with语句可以自动关闭文件
    pop_data=json.load(f)

cc_population={}
#打印每个国家2010年的人口数量
for pop_dict in pop_data:
    if pop_dict['Year']=='2010':     #找出2010年数据
        country_name=pop_dict['Country Name'] #国家名称
        population=int(float(pop_dict['Value'])) #对应人口数
        code=get_counrty_code(country_name) #返回该国家名称对应的国别码
        if code:
            cc_population[code]=population  #如该编码存在,以国别码为键,人口数为值,存入字典

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=pygal.maps.world.World()   #创建地图实例
wm.title='World Population in 2010, by Country' #图名
wm.add('1-10m',cc_pops_1)   # 添加0——1千万的国家和人口
wm.add('10m-1bn',cc_pops_2) # 添加1千万——10亿的国家和人口
wm.add('>1bn',cc_pops_3)    # 添加10亿以上的国家和人口
wm.render_to_file('world_population.svg') 

3.最后结果如下,在浏览器中查看结果如下:

 

posted @ 2019-11-03 16:37  阿贝尔  阅读(445)  评论(0)    收藏  举报