数据可视化之绘制世界人口地图

绘制世界人口地图

准备工作

1.下载数据(http://data.okfn.org/)

  • 文件population_data.json保存到程序所在的文件夹中,这个文件包含全球大部分 国家1960~2016年的人口数据

2.新建一个世界人口地图项目(包含以下文件)

  • world_population.py # 主要程序

3.开始写代码

# world_population.py
import pygal.maps.world as pwm
import json
# 将数据加载到一个列表中
filename = 'population_data.json'
with open(filename) as f:
	pop_data = json.load(f)
cc_population = {}
for pop_dict in pop_data:
if pop_dict['Year'] == 2015:
    country_name = pop_dict['Country Name']
    population = int(pop_dict['Value'])
    code = get_country_code(country_name)
    if code:
        cc_population[code] = population

# 根据人口数量将所有的国家分成三组
cc_pop_1, cc_pop_2, cc_pop_3 = {}, {}, {}
for cc, pop in cc_population.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))
# print(len(cc_pop_2))
# print(len(cc_pop_3))

# LightColorizedStyle 加 亮了地图的颜色
# 指定基色,让三个分组的颜色差别更大
wm_style = RotateStyle('#336699', 			base_style=LightColorizedStyle)
wm = pwm.World(style=wm_style)
wm.title = '2016年世界各国人口数量'
wm.add('1000万以下', cc_pop_1)
wm.add('1000万~10亿', cc_pop_2)
wm.add('10亿以上', cc_pop_3)

wm.render_to_file('world_population.svg')

# countries.py
from pygal_maps_world.i18n import COUNTRIES
'''
Pygal使用的国别码存储在模块i18n (	internationalization的缩写)中。
字典COUNTRIES 包含的键和值分别为两个字母	的国别码和国家名
如: cn  China
'''
for country_code in sorted(COUNTRIES.keys()):
 	print(country_code, COUNTRIES[country_code])

# country_codes.py
# 为获取国别码,我们将编写一个函数,它在COUNTRIES 中查找并返回国别码。
from pygal_maps_world.i18n import COUNTRIES

def get_country_code(country_name):
'''根据指定的国家,返回pygal使用的两个字母的国别码'''
	 for code, name in COUNTRIES.items():
   		 if name == country_name:
        	return code
	return None

猜你喜欢

转载自blog.csdn.net/qq_42899028/article/details/84075339