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


相关文章
|
14天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
19天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
15天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
15天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
35 7
|
16天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
34 5
|
15天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
42 3
|
16天前
|
数据可视化 Python
使用Python进行数据可视化的初学者指南
在数据的海洋里,我们如何能够不迷失方向?通过数据可视化的力量,我们可以将复杂的数据集转化为易于理解的图形和图表。本文旨在为初学者提供一份简明的入门手册,介绍如何使用Python中的Matplotlib库来揭示数据背后的故事。我们将从基础的图表开始,逐步深入到更高级的可视化技术,确保每个步骤都清晰易懂,让初学者也能轻松上手。让我们开始绘制属于你自己的数据图谱吧!
|
19天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
7月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
103 1
|
2月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
76 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda