1. 程式人生 > >資料視覺化之繪製世界人口地圖

資料視覺化之繪製世界人口地圖

繪製世界人口地圖

準備工作

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