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 来编写独立的程序,自动采集所需要的数据并进行可视化显示。


相关文章
|
4天前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
2天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
1天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
1天前
|
设计模式 缓存 开发框架
Python中的装饰器:从入门到实践####
本文深入探讨了Python中装饰器的工作原理与应用,通过具体案例展示了如何利用装饰器增强函数功能、提高代码复用性和可读性。读者将学习到装饰器的基本概念、实现方法及其在实际项目开发中的实用技巧。 ####
11 3
|
1天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
3天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
3天前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
3天前
|
人工智能 数据挖掘 程序员
Python编程入门:从零到英雄
【10月更文挑战第37天】本文将引导你走进Python编程的世界,无论你是初学者还是有一定基础的开发者,都能从中受益。我们将从最基础的语法开始讲解,逐步深入到更复杂的主题,如数据结构、面向对象编程和网络编程等。通过本文的学习,你将能够编写出自己的Python程序,实现各种功能。让我们一起踏上Python编程之旅吧!
|
6月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
|
1月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
63 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda