欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据可视化:使用API

程序员文章站 2022-07-14 16:35:19
...

来源:《Python编程:从入门到实践》

1 使用Web API

  • Web API是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互——这种请求称为API调用
  • 请求的数据将以易于处理的格式(JSON/CSV)返回
  • 依赖于外部数据源的大多数应用程序都依赖于API调用

1.1 Git 和 GitHub

  • 这里将使用GitHub的API来请求有关该网站中Python项目的信息,然后使用Pygal生成交互式可视化,以呈现这些项目的受欢迎程度
  • GitHub(https://github.com)的名字源自Git,Git是一个分布式版本控制系统,让程序员团队能够协作开发项目
  • 对于喜欢的项目,GitHub用户可给它加星(star)以表示支持,用户还可跟踪他可能想使用的项目
  • 本章将编写一个程序,它自动下载GitHub上星际最高的Python项目的信息,并对这些信息进行可视化

1.2 使用API调用请求数据

  • GitHub的API让你能够通过API调用来请求各种信息
  • 要知道API调用是什么样的,可访问https://api.github.com/search/repositories?q=language:python&sort=stars
  • 这个调用返回GitHub当前托管了多少个Python项目,还有有关最受欢迎的Python仓库的信息
  • 下面来仔细研究这个调用:
    • 第一部分(https://api.github.com/)将请求发送到GitHub网站中响应API调用的部分
    • 接下来(search/repositories)让API搜索GitHub上的所有仓库
    • repositories后面的问号指出我们要传递一个实参
    • q表示查询,q= 让我们能够开始指定查询
    • language:python指出只想获取主要语言为Python的仓库的信息
    • sort=stars指定将项目按其获得的星级进行排序
  • 下面是响应的前几行。从响应可知,该URL并不适合人工输入
{
  "total_count": 4149745,
  "incomplete_results": false,
  "items": [
    {
      "id": 21289110,
      "node_id": "MDEwOlJlcG9zaXRvcnkyMTI4OTExMA==",
      "name": "awesome-python",
      "full_name": "vinta/awesome-python",
      --snip--

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 从第二行输出可知,当前GitHub总共有4149745个Python项目
  • “incomplete_results”: false,据此可知请求是成功的(如果无法全面处理该API,将返回true
  • "items"其中包含GitHub上最受欢迎的Python项目的详细信息

1.3 安装requests

  • requests包让Python程序能够轻松地向网站请求信息以及检查返回的响应
  • 安装requests,执行下面的命令
$ pip install --user requests

   
  • 1

1.4 处理API响应

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

python_repos.py

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响应存储在一个变量中
response_dict = r.json()

# 处理结果
print(response_dict.keys())

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 导入模块requests
  • url存储API调用的URL,然后使用requests执行调用
  • 调用get()并将URL传递给它,再将响应对象存储在变量r中
  • 响应对象包含一个名为status_code的属性,它告诉我们请求是否成功了(状态码200表示请求成功
  • 这个API返回JSON格式的信息,因此使用方法json()将这些信息转换为一个Python字典
  • 将得到的字典存储在response_dict中
    数据可视化:使用API
  • 看输出,知道了请求成功了,且响应字典包含三个键:‘total_count’, ‘incomplete_results’, ‘items’

1.5 处理响应字典

  • 下面来生成一些概述这些信息的输出

python_repos.py

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响应存储在一个变量中
response_dict = r.json()
print(“Total repositories:”, response_dict[‘total_count’])

# 探索有关仓库的信息
repo_dicts = response_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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 首先打印了与total_count关联的值,它指出当前GitHub总共包含多少个Python仓库
  • 与’items’相关联的值是一个列表,其中包含很多字典,每个字典包含有关一个Python仓库的信息
    数据可视化:使用API
  • 通过仔细查看这些键,可大致知道可提取有关项目的哪些信息
  • 下面来提取repo_dict与一些键相关联的值:

python_repos.py

--snip--
# 探索有关仓库的信息
repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))

# 研究第一个仓库
repo_dict = repo_dicts[0]

print("\nSelected information about first repository:")
print(‘Name:’, repo_dict[‘name’])
print(‘Owner:’, repo_dict[‘owner’][‘login’])
print(‘Stars:’, 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’])

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

数据可视化:使用API

1.6 概述最受欢迎的仓库

  • 下面编写一个循环,打印API调用返回的每个仓库的特定信息,以便在可视化中包含所有这些信息:

python_repos.py

--snip--
# 探索有关仓库的信息
repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))

print("\nSelected information about each repository:")
for repo_dict in repo_dicts:
print(’\nName:’, repo_dict[‘name’])
print(‘Owner:’, repo_dict[‘owner’][‘login’])
print(‘Stars:’, repo_dict[‘stargazers_count’])
print(‘Repository:’, repo_dict[‘html_url’])
print(‘Description:’, repo_dict[‘description’])

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 打印每个项目的名称、所有者、星级、在GitHub上的URL及描述:
    数据可视化:使用API

1.7 监视API的速率限制

  • 大多数API都存在速率限制,即你在特定时间内可执行的请求数存在限制
  • 要获悉你是否接近了GitHub的限制,可在浏览器中输入:https://api.github.com/rate_limit
{
  "resources": {
    "core": {
      "limit": 60,
      "remaining": 60,
      "reset": 1566879699
    },
    "search": {
      "limit": 10,
      "remaining": 10,
      "reset": 1566876159
    },
    "graphql": {
      "limit": 0,
      "remaining": 0,
      "reset": 1566879699
    },
    "integration_manifest": {
      "limit": 5000,
      "remaining": 5000,
      "reset": 1566879699
    }
  },
  "rate": {
    "limit": 60,
    "remaining": 60,
    "reset": 1566879699
  }
}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 从上面可知,极限为每分组10个请求
  • reset值指的是配额将重置的Unix时间或新纪元时间(1970年1月1日午夜后多少秒)
  • 用完配额后,你将收到一条简单的响应,由此知道已达到API极限
  • 达到极限后,必须等待配额重置

注意: 很多API都要求你注册获得API**后才能执行API调用

来源:《Python编程:从入门到实践》

1 使用Web API

  • Web API是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互——这种请求称为API调用
  • 请求的数据将以易于处理的格式(JSON/CSV)返回
  • 依赖于外部数据源的大多数应用程序都依赖于API调用

1.1 Git 和 GitHub

  • 这里将使用GitHub的API来请求有关该网站中Python项目的信息,然后使用Pygal生成交互式可视化,以呈现这些项目的受欢迎程度
  • GitHub(https://github.com)的名字源自Git,Git是一个分布式版本控制系统,让程序员团队能够协作开发项目
  • 对于喜欢的项目,GitHub用户可给它加星(star)以表示支持,用户还可跟踪他可能想使用的项目
  • 本章将编写一个程序,它自动下载GitHub上星际最高的Python项目的信息,并对这些信息进行可视化

1.2 使用API调用请求数据

  • GitHub的API让你能够通过API调用来请求各种信息
  • 要知道API调用是什么样的,可访问https://api.github.com/search/repositories?q=language:python&sort=stars
  • 这个调用返回GitHub当前托管了多少个Python项目,还有有关最受欢迎的Python仓库的信息
  • 下面来仔细研究这个调用:
    • 第一部分(https://api.github.com/)将请求发送到GitHub网站中响应API调用的部分
    • 接下来(search/repositories)让API搜索GitHub上的所有仓库
    • repositories后面的问号指出我们要传递一个实参
    • q表示查询,q= 让我们能够开始指定查询
    • language:python指出只想获取主要语言为Python的仓库的信息
    • sort=stars指定将项目按其获得的星级进行排序
  • 下面是响应的前几行。从响应可知,该URL并不适合人工输入
{
  "total_count": 4149745,
  "incomplete_results": false,
  "items": [
    {
      "id": 21289110,
      "node_id": "MDEwOlJlcG9zaXRvcnkyMTI4OTExMA==",
      "name": "awesome-python",
      "full_name": "vinta/awesome-python",
      --snip--

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 从第二行输出可知,当前GitHub总共有4149745个Python项目
  • “incomplete_results”: false,据此可知请求是成功的(如果无法全面处理该API,将返回true
  • "items"其中包含GitHub上最受欢迎的Python项目的详细信息

1.3 安装requests

  • requests包让Python程序能够轻松地向网站请求信息以及检查返回的响应
  • 安装requests,执行下面的命令
$ pip install --user requests

   
  • 1

1.4 处理API响应

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

python_repos.py

import requests
相关标签: python学习 python