《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文件,即可看到文章开头展示的图片内容。

Pygal之世界地图绘制from pygal.i18n import COUNTRIES 报错的解决办法的更多相关文章

  1. PyChram中同目录下import引包报错的解决办法?

    相信很多同学和我一样在PyChram工具中新建python项目的同目录下import引包会报错提示找不到,这是因为该项目找不到python的环境导致的: 如果文件开始的时候包引包的错误可以,都可以用用 ...

  2. appium---【已解决】【Mac】from appium import webdriver报错提示“Unresolved import webdriver”

    报错提示: from appium import webdriver提示Unresolved import webdriver 报错原因:没有安装Appium_Python_Client 解决办法: ...

  3. pycharm 中 import requests 报错

    一 , 使用Pycharm来抓取网页的时候,要导入requests模块,但是在pycharm中 import requests 报错. 原因: python中还没有安装requests库 解决办法: ...

  4. import tensorflow 报错: tf.estimator package not installed.

    import tensorflow 报错: tf.estimator package not installed. 解决方案1: 安装 pip install tensorflow-estimator ...

  5. pycharm import scrapy 报错,No module named 'scrapy'

    本地通过下载 pip install scrapy安装成功后,在pychram里面 import scrapy报错 后来在找了各种解决方法,重装wheel,twisted,都不行,最后发现是需要改Pr ...

  6. Python3.x:import urllib2报错解决方案

    Python:import urllib2报错解决方案 python2和3有些不一样: python2:输出为print 'hello world' python3:输出为print('hello w ...

  7. import cx_Oracle报错,提示importError: DLL load failed: 不是有效的Win32程序。

    问题说明1:WIN32,python是2.7版本,本地oracle client是32位的.import cx_Oracle报错,提示importError: DLL load failed: 该模块 ...

  8. from appium import webdriver 报错

    from appium import webdriver 报错 看看你的文件是不是就叫appium

  9. php Yaf_Loader::import引入文件报错的解决方法

    php Yaf_Loader::import引入文件报错的解决方法 改下配置文件就行<pre>yaf.use_spl_autoload=1</pre> 也可以PHP动态修改 毕 ...

随机推荐

  1. python+opencv读取视频,调用摄像头

    引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...

  2. Shell命令-系统信息及显示之dmesg、uptime

    文件及内容处理 - dmesg.uptime 1. dmesg:显示开机信息 dmesg命令的功能说明 dmesg 命令用于显示开机信息.kernel 会将开机信息存储在 ring buffer 中. ...

  3. 通过CONN_MAX_AGE优化Django的数据库连接

    上周对我们用Django+Django-rest-framework提供的一套接口进行了压力测试.压测的过程中,收到DBA通知——数据库连接数过多,希望我们优化下程序.具体症状就是,如果设置mysql ...

  4. poj 1015 Jury Compromise(背包变形dp)

    In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of ...

  5. 初识 go 语言

    目录 go简介 安装 hello world 函数 变量 常量 可见性规则 结束 前言: 最近组内要试水区块链,初步方案定为使用fabirc来弄,而fabric的智能合约就是用go写的,借此机会正好学 ...

  6. CF226D The table

    题目链接 题意 给出一个\(n\times m\)的矩阵,可以把某些行和某些列上面的数字变为相反数.问修改那些行和哪些列可以使得所有行和所有列之和都为非负数. 思路 每次将负数的行或者列变为相反数.因 ...

  7. SP687 REPEATS - Repeats

    给定字符串,求重复次数最多的连续重复子串. 题目很简单,被细节坑惨了... 前置的一个推论:请看这里. #include <bits/stdc++.h> using namespace s ...

  8. C++回顾day02---<继承相关问题>

    一:继承和组合混搭时,构造和析构调用原则 (一)先构造父类,再构造成员变量,最后构造自己 (二)先析构自己,再析构成员变量,最后父类析构(方向与构造相反) class A { public: int ...

  9. LFYZ-OJ ID: 1008 求A/B高精度值

    思路 小数点前的部分可以通过m/n直接计算得出 小数点后的20位可通过循环进行快速计算,计算方法如下: m%=n m*=10 小数点后第i位为m/n,回到第1步 第3步后,如果m%n为0,说明已经除净 ...

  10. docker下安装mysql

    docker run -d -p 3306:3306 -v /root/docker/mysql/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf -v /root ...