Pygal之世界地圖繪制from pygal.i18n import COUNTRIES 報錯的解決辦法


《Python編程:從入門到實踐》書中的一個項目用到pygal.i18n獲取國別碼,

問題描述:
在學習《python編程:從入門到精通》的pygal繪制世界地圖時,遇到了這樣一個問題:
運行程序報錯,提示模型不存在,出錯代碼如下:

from pygal.i18n import COUNTRIES
1
查閱pygal文檔可知,這個模塊已被遺棄,使用新的map包,地圖繪制命令變為:

wm = pygal.maps.world.World()
1
解決辦法:
在Anaconda的Anaconda prompt中輸入命令:pip install pygal_maps_world 安裝包,

然后,導入文件修改相應代碼即可。此包導入命令如下:

import pygal.maps.world
1
最后,貼出完整代碼(python采用縮進格式,一定合理縮進代碼):
文件country_codes.py代碼:

import pygal.maps.world # 導入世界地圖包pygal_maps_world

# 定義函數,返回適用於pygal的兩位國別碼
def get_country_code(country_name):
# pygal兩位國別碼列表表示法:pygal.maps.world.COUNTRIES.items()
for code,name in pygal.maps.world.COUNTRIES.items():
if name == country_name:
return code
return None


文件 country_codes.py代碼如下:

import json
import pygal.maps.world # 導入世界地圖繪制包,用於繪制地圖
from country_codes import get_country_code # 導入國別碼識別包

# 讀取數據文件population_data.json(不知哪兒可以加載數據文件,需要的可以留言)
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f) # 將json格式轉換為python識別格式

cc_populations = {} # 用於存儲人口數據
for pop_dict in pop_data:
if pop_dict['Year'] == '2010': # 提取2010年的數據
country_name = pop_dict['Country Name']
# 將格式不統一的人口數據轉換為浮點型,再轉換為int型統一格式,供pygal繪圖使用
population =int(float( pop_dict['Value']))
code = get_country_code(country_name)
# 按國別碼提取正確的國家和對應人口數據
if code:
cc_populations[code]=population

#根據人口數量將國家分成三組,0-1千萬,1千萬-10億,10億以上
cc_pops_1,cc_pops_2,cc_pops_3 = {},{},{}
for cc,pop in cc_populations.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('>bn',cc_pops_3) # 添加10億以上的國家和人口
wm.render_to_file('world_population.svg') # 渲染視圖到文件,通過瀏覽器可查看
將兩個文件保存到同一目錄,運行文件country_codes.py,以瀏覽器的方式打開world_population.svg文件,即可看到文章開頭展示的圖片內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM