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

目录

world_population.py

16.2.5 制作世界地图

americas.py

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

na_populations.py

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

world_population.py

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

world_population.py

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

world_population.py

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


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] = popelif pop < 1000000000:cc_pops_2[cc] = popelse: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-- 

关于“Python”的核心知识点整理大全37-CSDN博客

关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2660961.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云轻量服务器和云服务器区别对比(超详细)

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

elasticsearch系列四:集群常规运维

概述 在使用es中如果遇到了集群不可写入或者部分索引状态unassigned&#xff0c;明明写入了很多数据但是查不到等等系列问题该怎么办呢&#xff1f;咱们今天一起看下常用运维命令。 案例 起初我们es性能还跟得上&#xff0c;随着业务发展壮大&#xff0c;发现查询性能越来越不…

YOLOv5改进 | 2023Neck篇 | CCFM轻量级跨尺度特征融合模块(RT-DETR结构改进v5)

一、本文介绍 本文给大家带来的改进机制是轻量级跨尺度特征融合模块CCFM&#xff08;Cross-Scale Feature Fusion Module&#xff09;其主要原理是&#xff1a;将不同尺度的特征通过融合操作整合起来&#xff0c;以增强模型对于尺度变化的适应性和对小尺度对象的检测能力。我将…

Python - 深夜数据结构与算法之 Binary Search

目录 一.引言 二.二分查找的简介 1.查找条件 2.代码模版 3.查找示例 三.经典算法实战 1.Search-Rotated-List [33] 2.Sqrt-X [69] 3.Search-2D-Matrix [74] 4.Find-Rotated-Min [153] 5.Valid-Perfect-Square [367] 四.总结 一.引言 前面介绍了二叉树和堆&#xf…

【Vue2+3入门到实战】(12)自定义指令的基本语法(全局、局部注册)、 指令的值、v-loading的指令封装 详细示例

目录 一、学习目标1.自定义指令 二、自定义指令1.指令介绍2.自定义指令3.自定义指令语法4.指令中的配置项介绍5.代码示例6.总结 三、自定义指令-指令的值1.需求2.语法3.代码示例 四、自定义指令-v-loading指令的封装1.场景2.需求3.分析4.实现5.准备代码 六、自定义指令总结 一、…

修改jenkins的目录(JENKINS_HOME)

默认JENKINS_HOME是/var/lib/jenkins/ 现要修改为/home/jenkins_data/jenkins 最开始 sudo cp -a /var/lib/jenkins/ /home/jenkins_data/ 然后如下操作&#xff1a; 1、首先 /etc/sysconfig/jenkins&#xff1a;jenkins配置文件&#xff0c;“端口”&#xff0c;“JENKIN…

【占用网络】OccNet: Scene as Occupancy 适用于检测、分割和规划任务 ICCV2023

前言 本文分享“占用网络”方案中&#xff0c;具有代表性的方法&#xff1a;OccNet。 它以多视角相机为核心&#xff0c;首先生成BEV特征&#xff0c;然后通过级联结构和时间体素解码器重建生成3D占用特征。 构建一个通用的“3D占用编码特征”&#xff0c;用以表示3D物理世界…

2023-12-29 服务器开发-centos-安装php8

摘要: 2023-12-29 服务器开发-centos-安装php8 centos-安装php8 必备条件 Minimal CentOS 8 / RHEL 8User with sudo rightsInternet Connection (1) 更新系统 更新系统 $ sudo dnf update $ sudo dnf upgrade 重启系统 $ sudo reboot (2) 启用 EPEL & Remi 软件库…

Starling-LM-7B与GPT-4:开源AI的新纪录

引言 在人工智能的前沿领域&#xff0c;Starling-LM-7B的出现标志着开源大型语言模型&#xff08;LLM&#xff09;的一大突破。与GPT-4的近距离竞争不仅展示了Starling-LM-7B的技术实力&#xff0c;也突显了开源社区在推动AI发展方面的重要作用。 模型特点 Starling-LM-7B&a…

HTML使用JavaScript的三种方式

要使用 JavaScript&#xff0c;你可以在 HTML 文件中的 <script> 标签中编写代码&#xff0c;或者将代码保存到一个单独的 .js 文件中并在 HTML 文件中引入。以下是一些常用的 JavaScript 使用方式&#xff1a; 内联 JavaScript&#xff1a;在 HTML 文件的 <script&g…

【电子通识】开关的种类

开关在我们日常生活与工作中使用较多。开关有无数种形式&#xff0c;种类繁多。从微小的按钮到巨大的控制器&#xff0c;功能多种多样。这种多样性受到机械或电气操作、手动或电子控制等因素的影响&#xff0c;并且与个人在设计美学和用户界面方面的偏好也有关。 电子开关采用 …

mysql查询出json格式字段中的值

一、使用场景 由于一些特殊数据使用json格式保存到表数据种中了&#xff0c;在查询的时候需要查询出这条数据中json格式中的某个字段 比如&#xff1a;需要将下列字符串中的“nationality”字段单独查询出来 json格式是一个对象 结果&#xff1a; json格式是一个集合 查询结…

第三章 Zookeeper服务注册与发现

Zookeeper服务注册与发现 gitee&#xff1a;springcloud_study: springcloud&#xff1a;服务集群、注册中心、配置中心&#xff08;热更新&#xff09;、服务网关&#xff08;校验、路由、负载均衡&#xff09;、分布式缓存、分布式搜索、消息队列&#xff08;异步通信&#…

泛目录是干什么用的蚂蚁seo泛程序

泛目录是干什么用的蚂蚁seo泛程序目录 泛目录是一种常见的网站优化方法&#xff0c;属于黑帽技术的一种。它的核心原理是利用高权重的网站继承目录&#xff0c;然后快速获得收录与排名。这种方法可以帮助网站在搜索引擎中获得更好的排名&#xff0c;从而吸引更多的流量。 泛目…

C++面试宝典第11题:两数之和

题目 给定一个整数数组和一个目标值,请在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,要求时间复杂度为O(n)。可以假设每种输入只会对应一个答案,注意:不能重复利用这个数组中同样的元素。 解析 这道题主要考察应聘者对算法时间复杂度和空间复杂度的理解,时…

“踩坑”经验分享:Swift语言落地实践

作者 | 路涛、艳红 导读 Swift 是一种适用于iOS/macOS应用开发、服务器端的编程语言。自2014年苹果发布 Swift 语言以来&#xff0c;Swift5 实现了 ABI 稳定性、Module 稳定性和Library Evolution&#xff0c;与Objective-C&#xff08;下文简称“OC”&#xff09;相比&#xf…

边缘智能网关在智慧大棚上的应用突破物联网大关

边缘智能网关在智慧大棚上的应用&#xff0c;是现代农业技术的一大突破。通过与农作物生长模型的结合&#xff0c;边缘智能网关可以根据实时的环境数据和历史数据&#xff0c;预测农作物的生长趋势和产量&#xff0c;提供决策支持和优化方案。这对于农民来说&#xff0c;不仅可…

算法学习系列(十五):最小堆、堆排序

目录 引言一、最小堆概念二、堆排序模板&#xff08;最小堆&#xff09;三、模拟堆 引言 这个堆排序的话&#xff0c;考的还挺多的&#xff0c;主要是构建最小堆&#xff0c;并且在很多情况下某些东西还用得着它来优化&#xff0c;比如说迪杰斯特拉算法可以用最小堆优化&#…

软件测试/测试开发丨学习笔记之Python运算符

运算符的作用 Python基础语法的内容通常表示不同数据或变量之间的关系 算数运算符 运算符描述加-减*乘/除%取模**幂//取整除 取模与取余区别 概念上&#xff1a;取模是计算机术语&#xff0c;取余属于数学概念&#xff1b; 结果上&#xff1a;当同号的两个数相除&#xff…

【北亚服务器数据恢复】ZFS文件系统服务器ZPOOL下线的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器中有32块硬盘&#xff0c;组建了3组RAIDZ&#xff0c;部分磁盘作为热备盘。zfs文件系统。 服务器故障&#xff1a; 服务器运行中突然崩溃&#xff0c;排除断电、进水、异常操作等外部因素。工作人员将服务器重启后发现无法进入操作系统。…