Python Crash Course 《Python编程 从入门到实践》之 “制作世界人口地图-JSON格式“

Python Crash Course 《Python编程 从入门到实践》之 “制作世界人口地图-JSON格式“

考研后开启Python学习的第十四天,今天终于打算开始记录自己Python的学习历程啦。

今日心得

学习编程,应当使用最新版本的教材,以免除代码落伍带来的麻烦。
今天我才发现,我使用的电子版教材是2016年7月份的第一版,而我买的纸质版是2020年10月份的第一版。(纸质版就没翻过两眼,要一边输代码一边扭头看解析真心太麻烦)。16版的教材已经四岁了,但是其中蕴含的知识大部分依然历久弥新,经典好用。
直到今天…
在学习“制作世界人口地图–json格式”的时候,顶行输入

from pygal.i18n import COUNTRIES

就会一直报错

No name ‘i18n’ in module ‘pygal’

这给我造成了不小的困惑,在查询后,才发现,Python的相关软件包在2018年前后更新迭代了,绘制地图的代码变成了

pygal_maps_world

所以,正确的导入COUNTRIES的代码是

from pygal_maps_world.i18n import COUNTRIES


我哥开玩笑说,这只是我“面向搜索引擎的编程”的开端。
但它在给我造成一定的麻烦的同时,也让我真正开始使用Gibhub,CSDN这样的网站,同时萌生了将自己的学习体会记录下来的想法。

下面,是做完“世界地图”这个小项目后,对应的代码:


import json
#json用于读取特定以对应格式存储的数据
import pygal
from pygal.style import RotateStyle
#RotateStyle需要十六进制的RGB颜色作为参数
from pygal.style import LightColorizedStyle
#让制作的图表方便印刷,让颜色变亮
#前两个字符代表红色分量
#中间两个字符代表绿色分量
#最后两个字符代表蓝色分量
#pagal用于绘图
#get_country_code是我们创建的,用于国家代码转换的函数
from country_code import get_country_code

#打开特定名称的文件
file_name = 'population_data.json'
with open (file_name) as f:
    #json.load()将数据转换为Python能够处理的格式,这里是一个字典列表
    pop_data  = json.load(f)  
    #将文件转换到变量之中

cc_populations = {}
#创建一个存储国家缩写及其对应人口数的字典

for pop_dic in pop_data:
    #指定年份2010的数据
    if pop_dic['Year'] == "2010":
        country_name = pop_dic['Country Name'] 
        population = int(float(pop_dic['Value']))
        code = get_country_code(country_name)
        #if code:
        #    print(code + ": " + str(population))
        #else:
        #    print("Error - " + country_name)
        if code:
            cc_populations[code] = population

        #为了能够处理人口数据,我们将它转换为整数;
        # 但元数据不一定都是整数,所以我们先把它把转换为浮点数,然后再用int()舍掉小数点后的东西
        #为了能够print,我们又将它转换为字符串;
        #print(country_name + ": " + str(population))

cc_pop_1, cc_pop_2, cc_pop_3 = {}, {}, {}
for code, cc_pop in cc_populations.items():
    if cc_pop <= 10000000:
        cc_pop_1[code] = cc_pop
    elif cc_pop <= 1000000000:
        cc_pop_2[code] = cc_pop
    else:
        cc_pop_3[code] = cc_pop

print(len(cc_pop_1), len(cc_pop_2), len(cc_pop_3))

wm_style = RotateStyle('#336699', base_style= LightColorizedStyle)
wm = pygal_maps_world.maps.World(style = wm_style)
wm.title = "World population in 2010, by Country"
#wm.add("2010", cc_populations)
wm.add('0-10m', cc_pop_1)
wm.add('10m-1bn', cc_pop_2)
wm.add('>1bn', cc_pop_3)
#2010是标签~
wm.render_to_file("World_population in 2010.svg")



我写的注释贼多,因为作为小白,第一次亦步亦趋完成代码后可能觉得自己已经懂了,但是回过头来,又要重走艰难的认知路。注释可以帮我极大地减轻这个问题。
运行这块代码,得到的结果是这样的:空白的地方是未识别出的国家或者地区

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值