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

目录

 17.2.2 添加自定义工具提示

bar_descriptions.py

17.2.3 根据数据绘图

python_repos.py

17.2.4 在图表中添加可单击的链接

python_repos.py

17.3 Hacker News API

hn_submissions.py

17.4 小结

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

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


 17.2.2 添加自定义工具提示

在Pygal中,将鼠标指向条形将显示它表示的信息,这通常称为工具提示。在这个示例中, 当前显示的是项目获得了多少个星。下面来创建一个自定义工具提示,以同时显示项目的描述。 来看一个简单的示例,它可视化前三个项目,并给每个项目对应的条形都指定自定义标签。 为此,我们向add()传递一个字典列表,而不是值列表:

bar_descriptions.py
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
my_style = LS('#333366', base_style=LCS)
chart = pygal.Bar(style=my_style, x_label_rotation=45, show_legend=False)
chart.title = 'Python Projects'
chart.x_labels = ['httpie', 'django', 'flask']
1 plot_dicts = [
2 {'value': 16101, 'label': 'Description of httpie.'},
{'value': 15028, 'label': 'Description of django.'},
{'value': 14798, 'label': 'Description of flask.'},
]
3 chart.add('', plot_dicts)
chart.render_to_file('bar_descriptions.svg')

在1处,我们定义了一个名为plot_dicts的列表,其中包含三个字典,分别针对项目HTTPie、 Django和Flask。每个字典都包含两个键:'value'和'label'。Pygal根据与键'value'相关联的数 字来确定条形的高度,并使用与'label'相关联的字符串给条形创建工具提示。例如,处的第 一个字典将创建一个条形,用于表示一个获得了16 101颗星、工具提示为Description of httpie的 项目。 方法add()接受一个字符串和一个列表。这里调用add()时,我们传入了一个由表示条形的字 典组成的列表(plot_dicts)(见3)。图17-3显示了一个工具提示:除默认工具提示(获得的星 数)外,Pygal还显示了我们传入的自定义提示。

17.2.3 根据数据绘图

为根据数据绘图,我们将自动生成plot_dicts,其中包含API调用返回的30个项目的信息。 完成这种工作的代码如下:

python_repos.py
--snip--
# 研究有关仓库的信息
repo_dicts = response_dict['items']
print("Number of items:", len(repo_dicts))
1 names, plot_dicts = [], []
for repo_dict in repo_dicts:names.append(repo_dict['name'])
2 plot_dict = {'value': repo_dict['stargazers_count'],'label': repo_dict['description'],}
3 plot_dicts.append(plot_dict)
# 可视化
my_style = LS('#333366', base_style=LCS)
--snip--
4 chart.add('', plot_dicts)
chart.render_to_file('python_repos.svg')

在1处,我们创建了两个空列表names和plot_dicts。为生成x轴上的标签,我们依然需要列 表names。

在循环内部,对于每个项目,我们都创建了字典plot_dict(见2)。在这个字典中,我们使 用键'value'存储了星数,并使用键'label'存储了项目描述。接下来,我们将字典plot_dict附加 到plot_dicts末尾(见3)。在4处,我们将列表plot_dicts传递给了add()。图17-4显示了生成的 图表。

17.2.4 在图表中添加可单击的链接

Pygal还允许你将图表中的每个条形用作网站的链接。为此,只需添加一行代码,在为每个 项目创建的字典中,添加一个键为'xlink'的键—值对:

python_repos.py
--snip--
names, plot_dicts = [], []
for repo_dict in repo_dicts:names.append(repo_dict['name'])plot_dict = {'value': repo_dict['stargazers_count'],'label': repo_dict['description'],'xlink': repo_dict['html_url'],}plot_dicts.append(plot_dict)
--snip-- 

Pygal根据与键'xlink'相关联的URL将每个条形都转换为活跃的链接。单击图表中的任何条 形时,都将在浏览器中打开一个新的标签页,并在其中显示相应项目的GitHub页面。至此,你对 API获取的数据进行了可视化,它是交互性的,包含丰富的信息!

17.3 Hacker News API

为探索如何使用其他网站的API调用,我们来看看Hacker News(http://news.ycombinator. com/)。在Hacker News网站,用户分享编程和技术方面的文章,并就这些文章展开积极的讨论。Hacker News的API让你能够访问有关该网站所有文章和评论的信息,且不要求你通过注册获得密钥。 下面的调用返回本书编写时最热门的文章的信息:

https://hacker-news.firebaseio.com/v0/item/9884165.json

响应是一个字典,包含ID为9884165的文章的信息:

{
1 'url': 'http://www.bbc.co.uk/news/science-environment-33524589',
'type': 'story',
2 'title': 'New Horizons: Nasa spacecraft speeds past Pluto',
3 'descendants': 141,
'score': 230,
'time': 1436875181,
'text': '',
'by': 'nns',
'id': 9884165,
4 'kids': [9884723, 9885099, 9884789, 9885604, 9885844]
} 

这个字典包含很多键,如'url'(见1)和'title'(见2)。与键'descendants'相关联的值是 文章被评论的次数(见3)。与键'kids'相关联的值包含对文章所做的所有评论的ID(见4)。每 个评论自己也可能有kid,因此文章的后代(descendant)数量可能比其kid数量多。 下面来执行一个API调用,返回Hacker News上当前热门文章的ID,再查看每篇排名靠前的文章:

hn_submissions.py
import requests
from operator import itemgetter
# 执行API调用并存储响应
1 url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print("Status code:", r.status_code)
# 处理有关每篇文章的信息
2 submission_ids = r.json()
3 submission_dicts = []
for submission_id in submission_ids[:30]:# 对于每篇文章,都执行一个API调用
4 url = ('https://hacker-news.firebaseio.com/v0/item/' +str(submission_id) + '.json')submission_r = requests.get(url)print(submission_r.status_code)response_dict = submission_r.json()5 submission_dict = {'title': response_dict['title'],'link': 'http://news.ycombinator.com/item?id=' + str(submission_id),
'comments': response_dict.get('descendants', 0)}submission_dicts.append(submission_dict)7 submission_dicts = sorted(submission_dicts, key=itemgetter('comments'),reverse=True)
8 for submission_dict in submission_dicts:print("\nTitle:", submission_dict['title'])print("Discussion link:", submission_dict['link'])print("Comments:", submission_dict['comments']) 

首先,我们执行了一个API调用,并打印了响应的状态(见1)。这个API调用返回一个列表, 其中包含Hacker News上当前最热门的500篇文章的ID。接下来,我们将响应文本转换为一个 Python列表(见2),并将其存储在submission_ids中。我们将使用这些ID来创建一系列字典,其 中每个字典都存储了一篇文章的信息。

在3处,我们创建了一个名为submission_dicts的空列表,用于存储前面所说的字典。接下 来,我们遍历前30篇文章的ID。对于每篇文章,我们都执行一个API调用,其中的URL包含 submission_id的当前值(见4)。我们打印每次请求的状态,以便知道请求是否成功了。

在3处,我们为当前处理的文章创建一个字典,并在其中存储文章的标题以及到其讨论页面 的链接。在4处,我们在这个字典中存储了评论数。如果文章还没有评论,响应字典中将没有键 'descendants'。不确定某个键是否包含在字典中时,可使用方法dict.get(),它在指定的键存在 时返回与之相关联的值,并在指定的键不存在时返回你指定的值(这里是0)。最后,我们将 submission_dict附加到submission_dicts末尾。

Hacker News上的文章是根据总体得分排名的,而总体得分取决于很多因素,其中包含被推 荐的次数、评论数以及发表的时间。我们要根据评论数对字典列表submission_dicts进行排序, 为此,使用了模块operator中的函数itemgetter()(见7)。我们向这个函数传递了键'comments', 因此它将从这个列表的每个字典中提取与键'comments'相关联的值。这样,函数sorted()将根据 这种值对列表进行排序。我们将列表按降序排列,即评论最多的文章位于最前面。

对列表排序后,我们遍历这个列表(见8),对于每篇热门文章,都打印其三项信息:标题、 到讨论页面的链接以及文章现有的评论数:

Status code: 200
200
200
200
--snip--
Title: Firefox deactivates Flash by default
Discussion link: http://news.ycombinator.com/item?id=9883246
Comments: 231
Title: New Horizons: Nasa spacecraft speeds past Pluto
Discussion link: http://news.ycombinator.com/item?id=9884165
Comments: 142
Title: Iran Nuclear Deal Is Reached With World Powers
Discussion link: http://news.ycombinator.com/item?id=9884005
Comments: 141
Title: Match Group Buys PlentyOfFish for $575M
Discussion link: http://news.ycombinator.com/item?id=9884417
Comments: 75
Title: Our Nexus 4 devices are about to explode
Discussion link: http://news.ycombinator.com/item?id=9885625
Comments: 14
--snip--

使用任何API来访问和分析信息时,流程都与此类似。有了这些数据后,你就可以进行可视 化,指出最近哪些文章引发了最激烈的讨论。

17.4 小结

在本章中,你学习了:如何使用API来编写独立的程序,它们自动采集所需的数据并对其进 行可视化;使用GitHub API来探索GitHub上星级最高的Python项目,还大致地了解了Hacker News API;如何使用requests包来自动执行GitHub API调用,以及如何处理调用的结果。我们还简要地 介绍了一些Pygal设置,使用它们可进一步定制生成的图表的外观。 在本书的最后一个项目中,我们将使用Django来创建一个Web应用程序。


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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 配置DLL

我们在用Visual Studio进行开发时,如果没有正确配置DLL,就会出现类似“丢失***.dll”的错误。DLL配置有哪些方法? 1、手动复制 将dll文件拷贝到生成的.exe所在的文件夹里 2、配置环境 在右键属性->配置属性->调试->环境&#xf…

鸿蒙(HarmonyOS 3.1) DevEco Studio 3.1开发环境汉化

鸿蒙(HarmonyOS 3.1) DevEco Studio 3.1开发环境汉化 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、设置过程 打开IDE,在第一个菜单File 中找到Settings...菜单 在Setting...中找到Plugins…

使用Jenkins和单个模板部署多个Kubernetes组件

前言 在持续集成和部署中,我们通常需要部署多个实例或组件到Kubernetes集群中。通过Jenkins的管道脚本,我们可以自动化这个过程。在本文中,我将演示如何使用Jenkins Pipeline及单个YAML模板文件(.tpl)来部署多个类似的…

Livox-Mid-360 固态激光雷达ROS格式数据分析

前言: Livox-Mid-360 官方采用livox_ros_driver2ROS功能包发布ROS格式的数据,livox_ros_driver2可以把Livox原始雷达数据转化成ROS格式并以话题的形式发布出去。 下面列举一些雷达的基本概念: 点云帧:雷达驱动每次向外发送的一…

使用 pytest 相关特性重构 appium_helloworld

一、前置说明 在 pytest 基础讲解 章节,介绍了 pytest 的特性和基本用法,现在我们可以使用 pytest 的一些机制,来重构 appium_helloworld 。 appium_helloworld 链接: 编写第一个APP自动化脚本 appium_helloworld ,将脚本跑起来 代码目录结构: pytest.ini 设置: [pyt…

扭蛋机小程序搭建:打造互联网“流量池”

随着互联网科技的发展,扭蛋机小程序成为了市场发展的重要力量。 扭蛋机市从日本发展流行起来的,玩法就是根据设置的概率,让玩家体验扭蛋机的乐趣。扭蛋机中有隐藏款和稀有款,为了获得稀有款商品,玩家便会进行扭蛋&…

【Azure 架构师学习笔记】- Azure Databricks (4) - 使用Azure Key Vault 管理ADB Secret

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (3) - 再次认识DataBricks 前言 Azure Databricks有access token,是具有ADB内部最高权限的token。在云环境中这些高级别权限的sec…

Evidential Deep Learning to Quantify Classification Uncertainty

本片文章发表于NeurIPS 2018。 文章链接:https://arxiv.org/abs/1806.01768 一、概述 近年来,神经网络在不同领域取得了革命性的进步,尤其是在dropout、normalization以及skip connection等方法被提出之后,撼动了整个机器学习领…

[Angular] 笔记 19:路由参数

油管视频 Route Parameters 路由参数是跟在 url 后面的数字,字符串,或者 数字字符串,例如如下 url 中的 123,此类参数会传给后端: www.facebook.com/profile/123 首先将 pokemon-template-form 组件移到 pokeman-ba…

回归预测 | MATLAB实ZOA-LSTM基于斑马优化算法优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实ZOA-LSTM基于斑马优化算法优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图) 目录 回归预测 | MATLAB实ZOA-LSTM基于斑马优化算法优化长短期记忆神经网络的多输入单输出数据回归预测模型 (…

20231229在Firefly的AIO-3399J开发板的Android11使用挖掘机的DTS配置单前后摄像头ov13850

20231229在Firefly的AIO-3399J开发板的Android11使用挖掘机的DTS配置单前后摄像头ov13850 2023/12/29 11:10 开发板:Firefly的AIO-3399J【RK3399】 SDK:rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.…

Android Context在四大组件及Application中的表现

文章目录 Android Context在四大组件及Application中的表现Context是什么Context源码Activity流程分析Service流程分析BroadcastReceiver流程分析ContentProvider流程分析Application流程分析 Android Context在四大组件及Application中的表现 Context是什么 Context可以理解…

鸿蒙APP的代码规范

鸿蒙APP的代码规范是为了确保代码质量、可读性和可维护性而定义的一系列规则和标准。以下是一些建议的鸿蒙APP代码规范,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 代码风格: 采用…

PM大逃亡

欢迎来到程序小院 PM大逃亡 玩法&#xff1a;点击白色的小鬼&#xff0c;滑动鼠标移动&#xff0c;不要碰到黑色的怪物&#xff0c; 怪物会越来越多&#xff0c;看看你能坚持多久&#xff0c;快去大逃亡吧^^。开始游戏https://www.ormcc.com/play/gameStart/233 html <div…

ViT的极简pytorch实现及其即插即用

先放一张ViT的网络图 可以看到是把图像分割成小块&#xff0c;像NLP的句子那样按顺序进入transformer&#xff0c;经过MLP后&#xff0c;输出类别。每个小块是16x16&#xff0c;进入Linear Projection of Flattened Patches, 在每个的开头加上cls token和位置信息&#xff0c;…

自检服务器,无需服务器、不用编程。

自检服务器&#xff0c;无需服务器、不用编程。 大家好&#xff0c;我是JavaPub. 这几年自媒体原来热&#xff0c;很多人都知道了个人 IP 的重要性。连一个搞中医的朋友都要要做一个自己的网站&#xff0c;而且不想学编程、还不想花 RMB 租云服务。 老读者都知道&#xff0c…

索引的使用

一、索引是什么 索引是一种排序的表&#xff0c;它记录着索引字段的值以及对应行记录的数据所在的物理位置&#xff1b; ●索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录…

天擎终端安全管理系统clientinfobymid存在SQL注入漏洞

产品简介 奇安信天擎终端安全管理系统是面向政企单位推出的一体化终端安全产品解决方案。该产品集防病毒、终端安全管控、终端准入、终端审计、外设管控、EDR等功能于一体&#xff0c;兼容不同操作系统和计算平台&#xff0c;帮助客户实现平台一体化、功能一体化、数据一体化的…

SAP缓存 表缓存( Table Buffering)

本文主要介绍SAP中的表缓存在查询数据&#xff0c;更新数据时的工作情况以及对应概念。 SAP表缓存的工作 查询数据 更新数据 删除数据 表缓存的概念 表缓存技术设置属性 不允许缓冲&#xff1a; 允许缓冲&#xff0c;但已关闭&#xff1a; 缓冲已激活&#xff1a; 已…

Flask笔记

一&#xff1a;模板渲染 一般的话都序列化成字符串 二&#xff1a;项目拆分 2.1 项目拆分 app.py init.py views.py models.py 模型数据 2.2 蓝图 三&#xff1a;路由参数 3.1 String 重点 3.2 int 3.3 path 3.4 UUID 3.5 any 四&#xff1a;请求方式 五&#xff1a;Requ…