一、处理Json数据
Python提供了json模块来处理Json数据。Json是一种数据格式,使用很广泛。
现在有一个json文件population_data.json,信息如下:
[
{
"Country Name": "Arab World",
"Country Code": "ARB",
"Year": "1960",
"Value": "96388069"
},
{
"Country Name": "Arab World",
"Country Code": "ARB",
"Year": "1961",
"Value": "98882541.4"
}
]
这是一个列表,列表元素是两个字典,每个字典包含四个键值对。类似于这种的数据格式就称为Json格式。
接下来我们来使用Python提供的jsonk模块来读取这个Json文件:
import json
filename='population_data.json'
with open(filename) as f:
pop_data=json.load(f)
for pop_dict in pop_data:
if pop_dict['Year']=='1960':
country_name=pop_dict['Country Name']
value=pop_dict['Value']
print(country_name+':'+value)
首先我们需要导入json模块,接着使用json模块中的load函数将文件对象作为其实参,返回Json文件中的列表。接下来的操作就简单了,只需要来操作列表即可。值得注意的是,人口数量可能会带有小数,而且通过字典索引出来的值默认为字符串形式,例如字符串'36515226.2649',如果想要将带有小数的字符串转换为整数,则需要进行二次转换,即先将字符串转换为浮点型数据,再将浮点型数据转换为整型,例如int(float('36515226.2649')),因为Python无法实现直接从带有小数的字符串转换为整型。
二、绘制世界地图
Python提供的Pygal可以用来绘制地图,但是它要求数据为特定的格式:用两位的国别码来表示国家,用数字表示人口数量。Pygal使用的国别码存在模块pygal_maps_worl.i18n中的COUNTRIES字典中,键值分别为两位的国别码和国家名。先将键值打印出来:
from pygal_maps_world.i18n import COUNTRIES
for code in sorted(COUNTRIES.keys()):
print(code,COUNTRIES[code])
在使用pygal_maps_worl.i18n之前,需要先在CMD中运行pip install pygal_maps_world来安装。
在获得了国别码后,就可以来使用pygal提供的World图表类型来绘制世界地图了。接下来我们让中国凸显在世界地图上:
import pygal.maps.world
wm = pygal.maps.world.World()
wm.title='China'
wm.add('China',['cn','tw'])
wm.render_to_file('China.svg')
之所以将tw表示台湾也单独列出,是因为cn不包含台湾,但是在COUNTRIES字典中tw键对应的值是台湾并注明了是中国的一个省,看到这里我才安心了。
接着,我们可以给不同的国家显示他们的人口数量,pygal会根据数量的大小自动进行颜色映射,数量少的国家颜色浅,反之颜色深。例如:
import pygal.maps.world
wm = pygal.maps.world.World()
wm.title='Populations'
wm.add('China',{'cn':130000000,'tw':20000000})
wm.add('America',{'us':100000000})
wm.render_to_file('Populations.svg')
以上代码通过将字典作为实参来指定国家的人口数量。