Python学习for数据可视化项目(三)使用API
图片后续添加
文章目录
1 使用Web API
Web API是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互。这种请求称为API调用。请求的数据将以易于处理的格式(如JSON或CSV)返回。依赖于外部数据源的大多数应用程序都依赖于API调用,如集成社交媒体网站的应用程序。
1.1 Git和Github
本章的可视化将基于来自GitHub的信息,这是一个让程序员能够协作开发项目的网站。
这里将使用GitHub的API来请求有关该网站中Python项目的信息,然后使用Pygal生成交互式可视化,以呈现这些项目的受欢迎程度。
GitHub(https://github.com/ )的名字源自Git,Git是一个分布式版本控制系统,让程序员团队能够协作开发项目。Git帮助大家管理为项目所做的工作,避免一个人所做的修改影响其他人所做的修改。如一个成员在项目中实现新功能时,Git将跟踪你对每个文件所做的修改。确定代码可行后,其提交所做的修改,而Git将记录项目最新的状态。如果想撤销所做的修改,可轻松地返回以前的任何可行状态 。
GitHub上的项目都存储在仓库中, 后者包含与项目相关联的一切: 代码、 项目参与者的信息、 问题或bug报告等。
本章中, 将编写一个程序, 它自动下载GitHub上星级最高(反映受欢迎程度)的Python项目的信息, 并对这些信息进行可视化。
1.2 使用API调用请求数据
Github的API可以让使用者通过API调用来请求各种信息。如以下调用可以返回Github当前托管了多少个Python项目,还有有关最受欢迎的Python仓库的信息。
https://api.github.com/search/repositories?q=language:python&sort=stars
第一部分https://api.github.com/
将请求发送到GitHub网站中响应API调用的部分;
接下来的一部分``search/repositories `让API搜索GitHub上的所有仓库。repositories 后面的问号指出我们要传递一个实参。 q 表示查询, 而等号让我们能够开始指定查询(q= ) 。 通过使用language:python , 我们指出只想获取主要语言为Python的仓库的信息。
最后一部分&sort=stars
指定将项目按其获得的星级进行排序。
显示结果的前几行为:
{
"total_count": 3652311,
"incomplete_results": false,
"items": [
{
"id": 21289110,
"node_id": "MDEwOlJlcG9zaXRvcnkyMTI4OTExMA==",
"name": "awesome-python",
"full_name": "vinta/awesome-python",
"private": false,
"owner": {
"login": "vinta",
"id": 652070,
"node_id": "MDQ6VXNlcjY1MjA3MA==",
"avatar_url": "https://avatars2.githubusercontent.com/u/652070?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/vinta",
--sinp--
可见这是一个嵌套字典,键‘items’对应的是所有仓库,而每个仓库又是一个嵌套字典,描述了仓库自身的信息。
可看出此时GitHub总共有3652311个Python项目。 “incomplete_results” 的值为false , 据此我们知道请求是成功的(它并非不完整的) 。 倘若GitHub无法全面处理该API, 它返回的这个值将为true 。 接下来的列表中显示了返回的"items" , 其中包含GitHub上最受欢迎的Python项目的详细信息。
1.3 安装ruquests
由于我使用pycharm来调试,所以直接在pycharm中为编译器安装ruquests即可。
1.4 处理API响应
编写Python处理API响应。
#导入requests模块
import requests
url='https://api.github.com/search/repositories?q=language:python&sort=stars'
#用get()方法将API调用的url传递,用r存储响应对象
r=requests.get(url)
#属性status_code值为200时表明请求成功,
print('Staus code:',r.status_code)
#由于这个API返回JSON格式的信息,因此使用json()将信息转换成字典
response_dic=r.json()
print(response_dic.keys())
此时输出:
Staus code: 200
dict_keys(['total_count', 'incomplete_results', 'items'])
1.5 处理响应字典
上小节已经将API调用返回的信息存储到字典中了,现在开始处理字典中的数据。
先生成一些概述这些信息的输出。如Python项目总数,仓库总数,研究某个仓库。
import requests
url=https://api.github.com/search/repositories?q=language:python&sort=stars
r=requests.get(url)
print('Status code:',r.status_code)
#整个json对象的字典
response_dic=r.json()
#项目总数
print('Total repositories:',response_dic['total_count'])
#以各个仓库为元素的字典
repo_dicts=response_dic['items']
#仓库总数
print('Repositories returned:',len(repo_dicts))
#第一个仓库的字典
repo_dict=repo_dicts=[