Python 入门项目——《数据可视化》(四)

简介: Python 入门项目——《数据可视化》(四)

文章目录

Python 入门项目——《数据可视化》(四)

使用 Web API

Git 和 GitHub

使用 API 调用请求数据

安装 requests

处理 API 响应

处理响应字典

提取每个项目的关键信息

监视 API 的速率限制

使用 Pygal 可视化仓库

添加可以点击的网络链接

小结


Python 入门项目——《数据可视化》(四)

使用 Web API

Web API 是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互。这种请求成为 API 调用。请求的数据将以易于处理的格式(如 json 或者 CSV)返回。。依赖外部数据源的大多数应用程序都依赖于 API 调用,如集成社交媒体网站的应用程序。


Git 和 GitHub

对于在 GitHub 上的项目,用户如果喜欢一个项目,可以给它加星(star)以表示支持,用户还可以跟踪他可能想使用的项目。在本章中,我们将编写一个程序,它能够自动下载 GitHub 上星级最高的 Python 项目信息,并将这些信息进行可视化。


使用 API 调用请求数据

GitHub 的 API 能够让你通过调用它们来请求各种信息。要知道 API 的调用是什么样,主需要访问以下链接即可:

GitHub API 链接

这个链接的调用将返回 GitHub 当前托管了多少个 Python 项目,还有有关最受欢迎的 Python 仓库的信息。下面来研究一下这个调用。第一部分 (https://api.github.com/) 将请求发送到 GitHub 网站上响应 API 调用的部分;接下来的 (search/repositories)让 API 搜索 GitHub 上的所有仓库。


repositories 后面的问号指出我们要传递一个实参。 q 表示查询,而等号让我们能够开始制定查询 q= 。通过使用 language:python ,我们制定只想获取主要语言为 Python 的仓库的信息。最后一部分 &sort=stars 制定将项目按照获得星级进行排序。

如下显示网站的响应结果:

2020082822174763.png

安装 requests

requests 包可以使得 Python 程序能够轻松地向网站请求信息并检查返回的响应。使用以下命令来安装 request :


$ pip install --user requests


处理 API 响应

下面来编写一个程序,执行 API 调用并处理结果,找出 GitHub 上星级最高的 Python 项目:


import requests
# 执行 API 调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code: ", r.status_code)
# 将 API 响应存储在一个变量中
resquests_dict = r.json()
#处理结果
print(resquests_dict.keys())

20201117220729560.png

状态码为200,所以请求是成功的。而响应字典只包含三个键: items 、 total_count 、 incomplete_results。


处理响应字典

将 API 调用返回的信息存储到字典中后,就可以处理这个字典中的数据了。下面来生成一些概述这些信息的输出,通过确认收到的信息进而针对感兴趣的信息进行研究。代码如下:


import requests
# 执行 API 调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code: ", r.status_code)
# 将 API 响应存储在一个变量中
resquests_dict = r.json()
print("Total repositories:", resquests_dict['total_count'])
#探究有关仓库的信息
repo_dicts = resquests_dict['items']
print("Repositories returned:", len(repo_dicts))
#输出第一个仓库
repo_dict = repo_dicts[0]
print("\nKeys:", len(repo_dict))
for key in sorted(repo_dict.keys()):
    print(key)
#处理结果
#print(resquests_dict.keys())

20201117221554963.png

从这里能够看到获得大量的信息,repo_dict 包含 74 个 key 。通过仔细观察这些键的信息,可以大致知道可提取有关项目的哪些信息(要准确地获悉 API 返回的哪些信息,除了阅读相关文档就是研究这些请求反馈的包)。


下面来提取其中的一些键的对应的信息来观察一下。


import requests
# 执行 API 调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code: ", r.status_code)
# 将 API 响应存储在一个变量中
resquests_dict = r.json()
print("Total repositories:", resquests_dict['total_count'])
#探究有关仓库的信息
repo_dicts = resquests_dict['items']
print("Repositories returned:", len(repo_dicts))
#输出第一个仓库
repo_dict = repo_dicts[0]
# print("\nKeys:", len(repo_dict))
# for key in sorted(repo_dict.keys()):
    # print(key)
print("\nSelected information about first repository:")
print("Name:", repo_dict['name'])
print("Ower:", repo_dict['owner'])
print("Starts:", repo_dict['stargazers_count'])
print("Repository:", repo_dict['html_url'])
print("Created:", repo_dict['created_at'])
print("Updated:", repo_dict['updated_at'])
print("Description:", repo_dict['description'])

20201117222456167.png

从上面的输出中能够看出,GitHub上星级最高的项目名称是 system-design-primer, 有 112638 个用户为这个项目加星,并且能看到这个项目是 2017-02-26T16:15:28Z 时候创建的。


提取每个项目的关键信息

为了后面方便对这些数据进行可视化,这里先通过循环处理来输出每个仓库的特定信息,以便能够在可视化中包含这些信息。


import requests
# 执行 API 调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code: ", r.status_code)
# 将 API 响应存储在一个变量中
resquests_dict = r.json()
#print("Total repositories:", resquests_dict['total_count'])
#探究有关仓库的信息
repo_dicts = resquests_dict['items']
print("Repositories returned:", len(repo_dicts))
print("\nSelected information about first repository:")
for repo_dict in repo_dicts:
    print("\nName:", repo_dict['name'])
    print("Ower:", repo_dict['owner']['login'])
    print("Starts:", repo_dict['stargazers_count'])
    print("Repository:", repo_dict['html_url'])
    print("Created:", repo_dict['created_at'])
    print("Updated:", repo_dict['updated_at'])
    print("Description:", repo_dict['description'])

20201117223236184.png

通过打印输出能够使得你在正式编写程序代码前了解到请求返回的响应包中的各个字段的信息内容,方便进行处理。


监视 API 的速率限制

大多数 API 都存在速率限制,即在特定时间内可执行的请求数存在限制。如果要想知道你是否接近了 GitHub 的限制,可以在浏览器中输入 https://api.github.com/rate_limit ,这样能看到如下的响应:

20201117223605160.png

这里能搞看到 search 字段中的速率限制 limit 为 10 ,说明1分钟能够进行10次请求,而 reset 字段指的是配额重置的 Unix 时间。


使用 Pygal 可视化仓库

在得到需要的数据后,就可以进行可视化显示了,从而更形象地显示 GitHub 上 Python 项目的受欢迎程度。接下来将创建一个交互式条形图:条形的高度表示项目获得了多少颗星。单击条形将进入该项目在 GitHub 上的主页。代码如下:


import requests
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
# 执行 API 调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code: ", r.status_code)
# 将 API 响应存储在一个变量中
resquests_dict = r.json()
#print("Total repositories:", resquests_dict['total_count'])
#探究有关仓库的信息
repo_dicts = resquests_dict['items']
names, starts = [], []
for repo_dict in repo_dicts:
    names.append(repo_dict['name'])
    starts.append(repo_dict['stargazers_count'])
# 可视化
my_style = LS('#333366', base_style=LCS)
chart = pygal.Bar(style = my_style, x_label_rotation=45, show_legend=False)
chart.title = "Most-Start Python Projects on GitHub"
chart.x_labels = names
chart.add('', starts)
chart.render_to_file('python_repos.svg')

2020111722481936.png

修改部分显示参数:


import requests
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
# 执行 API 调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code: ", r.status_code)
# 将 API 响应存储在一个变量中
resquests_dict = r.json()
#print("Total repositories:", resquests_dict['total_count'])
#探究有关仓库的信息
repo_dicts = resquests_dict['items']
names, starts = [], []
for repo_dict in repo_dicts:
    names.append(repo_dict['name'])
    starts.append(repo_dict['stargazers_count'])
# 可视化
my_style = LS('#333366', base_style=LCS)
my_config = pygal.Config()
my_config.x_label_rotation = 45
my_config.show_legend = False
my_config.title_font_size = 24
my_config.label_font_size = 14
my_config.major_label_font_size = 18
my_config.truncate_label = 15
my_config.show_y_guides = False
my_config.width = 1000
chart = pygal.Bar(my_config, style=my_style)
#chart = pygal.Bar(style = my_style, x_label_rotation=45, show_legend=False)
chart.title = "Most-Start Python Projects on GitHub"
chart.x_labels = names
chart.add('', starts)
chart.render_to_file('new-python_repos.svg')

20201117225516533.png

添加可以点击的网络链接

pygal 根据与键 xlink 相关联的 URL 将每个条形都转换成活跃的链接。单击图表中的任何一条形图后都将在浏览器打开一个新的标签页,并显示单击的这个项目的主页。到此,就完成了一个数据的可视化并且是交互性的图形:


可视化代码修改如下:


import requests
import pygal
from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
# 执行 API 调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code: ", r.status_code)
# 将 API 响应存储在一个变量中
resquests_dict = r.json()
#print("Total repositories:", resquests_dict['total_count'])
#探究有关仓库的信息
repo_dicts = resquests_dict['items']
names, plot_dicts = [], []
for repo_dict in repo_dicts:
    print("Name:", repo_dict['name'])
    names.append(repo_dict['name'])
    plot_dict = {
        'value' : repo_dict['stargazers_count'],
        'xlink' : repo_dict['html_url'],
    }
    plot_dicts.append(plot_dict)
# 可视化
my_style = LS('#333366', base_style=LCS)
my_config = pygal.Config()
my_config.x_label_rotation = 45
my_config.show_legend = False
my_config.title_font_size = 24
my_config.label_font_size = 14
my_config.major_label_font_size = 18
my_config.truncate_label = 15
my_config.show_y_guides = False
my_config.width = 1000
chart = pygal.Bar(my_config, style=my_style)
#chart = pygal.Bar(style = my_style, x_label_rotation=45, show_legend=False)
chart.title = "Most-Start Python Projects on GitHub"
chart.x_labels = names
chart.add('', plot_dicts)
chart.render_to_file('plot-python_repos.svg')

20201117231620645.png

小结

通过本章能够了解到通过使用网站 API 来编写独立的程序,自动采集所需要的数据并进行可视化显示。


相关文章
|
1天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
1天前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
1天前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
1天前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
1天前
|
知识图谱 Python
Python入门:4.Python中的运算符
Python是一间强大而且便捷的编程语言,支持多种类型的运算符。在Python中,运算符被分为算术运算符、赋值运算符、复合赋值运算符、比较运算符和逻辑运算符等。本文将从基础到进阶进行分析,并通过一个综合案例展示其实际应用。
|
9月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
115 1
|
4月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
156 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
|
4月前
|
IDE 开发工具 iOS开发
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
本篇将详细介绍如何在Mac系统上安装Python,并配置Python开发环境。内容涵盖Python的安装、pip包管理工具的配置与国内镜像源替换、安装与配置PyCharm开发工具,以及通过PyCharm编写并运行第一个Python程序。通过本篇的学习,用户将完成Python开发环境的搭建,为后续的Python编程工作打下基础。
415 2
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置

热门文章

最新文章

推荐镜像

更多