关于“Python”的核心知识点整理大全48

简介: 关于“Python”的核心知识点整理大全48

e343d5083aa86b5a43ac1f4892187bc3_262101a8ce504ae9a9ea0378fc04e07f.png

from pygal.i18n import COUNTRIES
1 def get_country_code(country_name):
 """根据指定的国家,返回Pygal使用的两个字母的国别码"""
3 for code, name in COUNTRIES.items():
 if name == country_name:
 return code
 # 如果没有找到指定的国家,就返回None
4 return None 
print(get_country_code('Andorra'))
print(get_country_code('United Arab Emirates'))
print(get_country_code('Afghanistan'))

get_country_code()接受国家名,并将其存储在形参country_name中(见1)。接下来,我们 遍历COUNTRIES中的国家名—国别码对(见2);如果找到指定的国家名,就返回相应的国别码(见 3)。在循环后面,我们在没有找到指定的国家名时返回None(见4)。最后,我们使用了三个国 家名来调用这个函数,以核实它能否正确地工作。与预期的一样,这个程序输出了三个由两个字 母组成的国别码:


ad
ae
af

使用这个函数前,先将country_codes.py中的print语句删除。 接下来,在world_population.py中导入get_country_code:


world_population.py

import json
from country_codes import get_country_code
--snip--
# 打印每个国家2010年的人口数量
for pop_dict in pop_data:
 if pop_dict['Year'] == '2010':
 country_name = pop_dict['Country Name']
 population = int(float(pop_dict['Value']))
1 code = get_country_code(country_name)
 if code:
2 print(code + ": "+ str(population))
3 else:
 print('ERROR - ' + country_name)

提取国家名和人口数量后,我们将国别码存储在code中,如果没有国别码,就在其中存储None (见1)。如果返回了国别码,就打印国别码和相应国家的人口数量(见2)。如果没有找到国别 码,就显示一条错误消息,其中包含无法找到国别码的国家的名称(见3)。如果你运行这个程 序,将看到一些国别码和相应国家的人口数量,还有一些错误消息:


ERROR - Arab World
ERROR - Caribbean small states
ERROR - East Asia & Pacific (all income levels)
--snip--
af: 34385000
al: 3205000
dz: 35468000
--snip
ERROR - Yemen, Rep.
zm: 12927000
zw: 12571000

导致显示错误消息的原因有两个。首先,并非所有人口数量对应的都是国家,有些人口数量 对应的是地区(阿拉伯世界)和经济类群(所有收入水平)。其次,有些统计数据使用了不同的 完整国家名(如Yemen, Rep.,而不是Yemen)。当前,我们将忽略导致错误的数据,看看根据成 功恢复了的数据制作出的地图是什么样的。


16.2.5 制作世界地图

有了国别码后,制作世界地图易如反掌。Pygal提供了图表类型Worldmap,可帮助你制作呈现 各国数据的世界地图。为演示如何使用Worldmap,我们来创建一个突出北美、中美和南美的简单 地图:


americas.py

import pygal
1 wm = pygal.Worldmap()
wm.title = 'North, Central, and South America'
2 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'])
3 wm.render_to_file('americas.svg')

在1处,我们创建了一个Worldmap实例,并设置了该地图的的title属性。在2处,我们使用 了方法add(),它接受一个标签和一个列表,其中后者包含我们要突出的国家的国别码。每次调 用add()都将为指定的国家选择一种新颜色,并在图表左边显示该颜色和指定的标签。我们要以 同一种颜色显示整个北美地区,因此第一次调用add()时,在传递给它的列表中包含'ca'、'mx' 和'us',以同时突出加拿大、墨西哥和美国。接下来,对中美和南美国家做同样的处理。 3处的方法render_to_file()创建一个包含该图表的.svg文件,你可以在浏览器中打开它。输 出是一幅以不同颜色突出北美、中美和南美的地图,如图16-7所示。




知道如何创建包含彩色区域、颜色标示和标签的地图后,我们在地图中添加数据,以显示有 关国家的信息。


16.2.6 在世界地图上呈现数字数据

为练习在地图上呈现数字数据,我们来创建一幅地图,显示三个北美国家的人口数量:


na_populations.py

import pygal
wm = pygal.Worldmap()
wm.title = 'Populations of Countries in North America'
1 wm.add('North America', {'ca': 34126000, 'us': 309349000, 'mx': 113423000})
wm.render_to_file('na_populations.svg')

首先,创建了一个Worldmap实例并设置了标题。接下来,使用了方法add(),但这次通过第 二个实参传递了一个字典而不是列表(见1)。这个字典将两个字母的Pygal国别码作为键,将人 口数量作为值。Pygal根据这些数字自动给不同国家着以深浅不一的颜色(人口最少的国家颜色 最浅,人口最多的国家颜色最深),如图16-8所示。




这幅地图具有交互性:如果你将鼠标指向某个国家,将看到其人口数量。下面在这个地图中 添加更多的数据。


16.2.7 绘制完整的世界人口地图

要呈现其他国家的人口数量,需要将前面处理的数据转换为Pygal要求的字典格式:键为两 个字母的国别码,值为人口数量。为此,在world_population.py中添加如下代码:


world_population.py

import json
import pygal
from country_codes import get_country_code
# 将数据加载到列表中
--snip--
# 创建一个包含人口数量的字典
1 cc_populations = {}
for pop_dict in pop_data:
 if pop_dict['Year'] == '2010':
 country = pop_dict['Country Name']
 population = int(float(pop_dict['Value']))
 code = get_country_code(country)
 if code:
2 cc_populations[code] = population
3 wm = pygal.Worldmap()
wm.title = 'World Population in 2010, by Country'
4 wm.add('2010', cc_populations)
wm.render_to_file('world_population.svg')


我们首先导入了pygal。在1处,我们创建了一个空字典,用于以Pygal要求的格式存储国别 码和人口数量。在2处,如果返回了国别码,就将国别码和人口数量分别作为键和值填充字典 cc_populations。我们还删除了所有的print语句。


在3处,我们创建了一个Worldmap实例,并设置其title属性。在4处,我们调用了add(), 并向它传递由国别码和人口数量组成的字典。图16-9显示了生成的地图。




有几个国家没有相关的数据,我们将其显示为黑色,但对于大多数国家,都根据其人口数量 进行了着色。本章后面将处理数据缺失的问题,这里先来修改着色,以更准确地反映各国的人口 数量。在当前的地图中,很多国家都是浅色的,只有两个国家是深色的。对大多数国家而言,颜 色深浅的差别不足以反映其人口数量的差别。为修复这种问题,我们将根据人口数量将国家分组, 再分别给每个组着色。


16.2.8 根据人口数量将国家分组

印度和中国的人口比其他国家多得多,但在当前的地图中,它们的颜色与其他国家差别较小。 中国和印度的人口都超过了10亿,接下来人口最多的国家是美国,但只有大约3亿。下面不将所 有国家都作为一个编组,而是根据人口数量分成三组——少于1000万的、介于1000万和10亿之间 的以及超过10亿的:


world_population.py

--snip--
# 创建一个包含人口数据的字典
cc_populations = {}
for pop_dict in pop_data:
 if pop_dict['Year'] == '2010':
 --snip--
 if code:
 cc_populations[code] = population
# 根据人口数量将所有的国家分成三组
1 cc_pops_1, cc_pops_2, cc_pops_3 = {}, {}, {}
2 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
# 看看每组分别包含多少个国家
3 print(len(cc_pops_1), len(cc_pops_2), len(cc_pops_3))
wm = pygal.Worldmap()
wm.title = 'World Population in 2010, by Country'
4 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_population.svg')


为将国家分组,我们创建了三个空字典(见1)。接下来,遍历cc_populations,检查每个国 家的人口数量(见2)。if-elif-else代码块将每个国别码人口数量对加入到合适的字典 (cc_pops_1、cc_pops_2或cc_pops_3)中。


在3处,我们打印这些字典的长度,以获悉每个分组的规模。绘制地图时,我们将全部三个 分组都添加到Worldmap中(见4)。如果你现在运行这个程序,首先看到的将是每个分组的规模:


85 69 2

上述输出表明,人口少于1000万的国家有85个,人口介于1000万和10亿之间的国家有69个,还有两个国家比较特殊,其人口都超过了10亿。这样的分组看起来足够了,让地图包含丰富的信 息。图16-10显示了生成的地图。




现在使用了三种不同的颜色,让我们能够看出人口数量上的差别。在每组中,各个国家都按 人口从少到多着以从浅到深的颜色。


16.2.9 使用 Pygal 设置世界地图的样式

在这个地图中,根据人口将国家分组虽然很有效,但默认的颜色设置很难看。例如,在这里, Pygal选择了鲜艳的粉色和绿色基色。下面使用Pygal样式设置指令来调整颜色。 我们也让Pygal使用一种基色,但将指定该基色,并让三个分组的颜色差别更大:


world_population.py

import json
import pygal
1 from pygal.style import RotateStyle
--snip--
# 根据人口数量将所有的国家分成三组
cc_pops_1, cc_pops_2, cc_pops_3 = {}, {}, {}
for cc, pop in cc_populations.items():
 if pop < 10000000:
 --snip-- 
2 wm_style = RotateStyle('#336699')
3 wm = pygal.Worldmap(style=wm_style)
wm.title = 'World Population in 2010, by Country'
--snip--
目录
相关文章
|
4月前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
|
6月前
|
Python
python知识点
【8月更文挑战第27天】python知识点
3416 2
WK
|
6月前
|
存储 机器学习/深度学习 JSON
Python入门知识点
Python入门覆盖历史、设计理念、变量、数据类型、控制结构等。了解Python的发展,掌握动态类型的灵活性,熟悉整数、浮点数、字符串等数据类型。学会if/else、for/while循环构建逻辑流程,使用def定义函数,lambda快速创建匿名函数。通过类实现面向对象编程,利用模块和包组织代码。掌握try-except处理异常,open()进行文件操作。利用标准库和第三方库增强功能,理解集合、字典、列表推导式的应用,深入魔法方法、递归、装饰器等高级特性,以及上下文管理器和字符串、列表、元组的操作技巧。
WK
51 0
|
3月前
|
缓存 Java 索引
[Python]知识点
本文主要介绍了Python的一些高级知识点和使用细节,包括pip的使用、内置函数、列表、元组、字典、集合、变量、Lambda表达式、面向对象编程、异常处理、模块及标准库等。文章适合有一定Python基础的读者,重点在于深入理解和掌握Python的高级特性。文中还提供了大量示例代码,帮助读者更好地理解和应用这些知识点。
62 1
[Python]知识点
|
4月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
140 3
python知识点100篇系列(15)-加密python源代码为pyd文件
|
4月前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
4月前
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
|
4月前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
4月前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
python知识点100篇系列(23)- 使用stylecloud生成词云
|
4月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。

热门文章

最新文章