python处理JSON格式数据并利用pygal绘制世界地图

1、提取相关数据

#world_population.py
#  coding=gbk
import json
import pygal
from country_codes import get_country_code
filename="population_data.json"

#将数据加载到列表中
with open(filename) as f:
    pop_data=json.load(f)

#创建一个包含人口数量的字典
cc_populations={}
for pop_dict in pop_data:
    if pop_dict['Year']=='2010':
        country=pop_dict['Country Name']
        population=int(float(pop_dict['Value']))
        code=get_country_code(country)
        if code:
            cc_populations[code]=population

#创建Worldmap实例
wm=pygal.Worldmap()
wm.title="World population in 2010,by Country"
wm.add('2010',cc_populations)

wm.render_to_file("world_population.svg")


#country_codes.py
#  coding=gbk
from pygal.i18n import COUNTRIES

def get_country_code(country_name):
    """根据指定的国家,返回pygal使用的两个字母的国别码"""
    for code,name in COUNTRIES.items():
        if name==country_name:
            return code
        #如果没有找到指定国家,就返回None
    return None

python处理JSON格式数据并利用pygal绘制世界地图_第1张图片

2、根据人口数量将国家分组

#根据人口数量将所有国家分成三组
cc_pop_1,cc_pop_2,cc_pop_3={},{},{}
for cc,pop in cc_populations.items():
    if pop<10000000:
        cc_pop_1[cc]=pop
    elif pop<1000000000:
        cc_pop_2[cc]=pop
    else:
        cc_pop_3[cc]=pop

#看看每个分组分别包含多少国家
print(len(cc_pop_1),len(cc_pop_2),len(cc_pop_3))

#让pygal使用一种基色,样式RotateStyle的一个实参为十六进制的RGB颜色,为一个以#打头的字符串,后面跟着六个字符,每两个分别为红绿蓝分量
wm_style=RS('#336699',base_style=LCS)

#创建Worldmap实例
wm=pygal.Worldmap(style=wm_style)
wm.title="World population in 2010,by Country"
wm.add('0-10m',cc_pop_1)
wm.add('10m-1bn',cc_pop_2)
wm.add('>1bn',cc_pop_3)

wm.render_to_file("world_population.svg")

python处理JSON格式数据并利用pygal绘制世界地图_第2张图片

你可能感兴趣的:(python)