資料視覺化之繪製世界人口地圖
阿新 • • 發佈:2018-12-01
繪製世界人口地圖
準備工作
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