16.2.2提取相关数据
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'] == '2010':
country_name = pop_dict['Country Name']
population = pop_dict['Value']
print(country_name+':'+population)
16.2.4国别码
在《Python编程:从入门到实践》书中的一个项目用到pygal.i18n获取国别码,然而,现在pygal已经没有i18n模块,要改用pygal_maps_world.i18n,解决方法如下:在终端中运行下面语句 pip install pygal_maps_world。在代码文件中添加下面语句:from pygal_maps_world.i18n import COUNTRIES
from pygal_maps_world.i18n import COUNTRIES
for country_code in sorted(COUNTRIES.keys()):
print(country_code,COUNTRIES[country_code])
from pygal_maps_world.i18n import COUNTRIES
def get_country_code(country_name):
for code,name in COUNTRIES.items():
if name == country_name:
return code
return None
#print(get_country_code('Andorra'))
import json
from country_codes import get_country_code#从py文件导入函数
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if code:
print(code+':'+str(population))
else:
print("Error"+country_name)
16.2.5
代码改动了一部分,有些不适用了
import pygal.maps.world
wm = pygal.maps.world.World()
wm.title = 'North, Central, and South America'
wm.add('North America', ['ca', 'mx', 'us'])
wm.add('Central America', ['bz', 'cr', 'gt', 'hn', 'ni', 'pa', 'sv'])
wm.add('South America', ['ar', 'bo', 'br', 'cl', 'co', 'ec', 'gf',
'gy', 'pe', 'py', 'sr', 'uy', 've'])
wm.render_to_file('americas.svg')
16.2.6
import pygal
wm = pygal.maps.world.World()
wm.title = 'Populations of Countries in North America'
wm.add('North America', {'ca': 34126000, 'us': 309349000, 'mx': 113423000})
wm.render_to_file('na_populations.svg')
16.2.7
import json
import pygal
from country_codes import get_country_code#从py文件导入函数
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)
cc_populations = {}
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if code:
cc_populations[code] = population
#print(code+':'+str(population))
wm = pygal.maps.world.World()
wm.title = 'hello'
wm.add('2010', cc_populations)
wm.render_to_file('world.svg')
16.2.8分组,学习学习。
import json
import pygal
from country_codes import get_country_code#从py文件导入函数
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)
cc_populations = {}
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if code:
cc_populations[code] = population
#print(code+':'+str(population))
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
print(len(cc_pops_1),len(cc_pops_2),len(cc_pops_3))
wm = pygal.maps.world.World()
wm.title = 'hello'
wm.add('0-10m', cc_pops_1)
wm.add('10m-1bn', cc_pops_2)
wm.add('>1bn', cc_pops_3)
wm.render_to_file('world.svg')
16.2.10
import json
import pygal
from pygal.style import LightColorizedStyle as LCS,RotateStyle as RS
from country_codes import get_country_code#从py文件导入函数
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)
cc_populations = {}
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if code:
cc_populations[code] = population
#print(code+':'+str(population))
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
print(len(cc_pops_1),len(cc_pops_2),len(cc_pops_3))
wm = pygal.maps.world.World()
wm_style = RS('#336699',base_style = LCS)
wm = pygal.maps.world.World(style = wm_style)#这一个和书上不一样,版本更新了。
wm.title = 'hello'
wm.add('0-10m', cc_pops_1)
wm.add('10m-1bn', cc_pops_2)
wm.add('>1bn', cc_pops_3)
wm.render_to_file('world.svg')