使用Python调用Web API实现图表统计

Web API:Web应用编程接口,用于URL请求特定信息的程序交互,请求的数据大多以非常易于处理的格式返回,比如JSON或CSV等。

本文将使用Python中的requests包实现Web API的调用,API接口来自于GitHub提供的公用API,最后使用图表对API调用的结果进行图表统计显示。

API地址为:https://api.github.com/search/repositories?q=language:python&sort=stars,该调用返回GitHub当前托管了多少个Python项目,包括最受欢迎的Python仓库的信息,结果如下:

{

"total_count": 3114636,

"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",

...

使用Web API

如果想要Python调用Web API,需要使用requests包,该包用于处理网络请求和返回响应信息。可以使用pip工具输入以下命令进行安装:

$ pip install --user requests

使用requests处理API响应

import requests

#执行API调用并存储响应

url='https://api.github.com/search/repositories?q=language:python&sort=stars'

# 调用url,将响应对象存储在变量r中

r=requests.get(url)

# 查看请求返回的http 状态码,200表示请求成功

print("Stauts Code",r.status_code)

# 使用json()将API的响应信息(json格式)转换为一个Python字典或JSON对象

response_dict=r.json()

#处理结果

print(response_dict.keys())

执行后,输出结果如下:

Stauts Code 200

dict_keys(['total_count', 'incomplete_results', 'items'])

对返回的结果进行深度处理

针对上述API返回的结果,进一步的进行解析,返回每一个仓库的详细信息。具体见代码注释说明:

import requests

#执行API调用并存储响应

url='https://api.github.com/search/repositories?q=language:python&sort=stars'

# 调用url,将响应对象存储在变量r中

r=requests.get(url)

# 查看请求返回的http 状态码,200表示请求成功

print("Stauts Code",r.status_code)

# 使用json()将API的响应信息(json格式)转换为一个Python字典或JSON对象

response_dict=r.json()

# 获取GitHub包含的Python库数量

print("Total repositories:",response_dict["total_count"])

#探索有关仓库的信息,items是由多个字典组成的列表,每一个字典包含一个仓库信息

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)

print("\nSelected information about each repository:")

# 循环遍历获取每一个仓库的详细信息

for repo_dict in repo_dicts:

# 项目名称

print('\nName:', repo_dict['name'])

# 键owner来访问表示所有者的字典,再使用键key来获取所有者的登录名。

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'])

上述代码返回的结果如下:

Stauts Code 200

Total repositories: 3114623

Repositories returned: 30

Selected information about each repository:

Name: awesome-python

Owner: vinta

Stars: 56507

Repository: https://github.com/vinta/awesome-python

Created: 2014-06-27T21:00:06Z

Updated: 2018-10-21T22:26:31Z

Description: A curated list of awesome Python frameworks, libraries, software an

d resources

Name: system-design-primer

Owner: donnemartin

Stars: 50650

Repository: https://github.com/donnemartin/system-design-primer

Created: 2017-02-26T16:15:28Z

Updated: 2018-10-21T22:02:07Z

Description: Learn how to design large-scale systems. Prep for the system design

interview. Includes Anki flashcards.

Name: models

....

注意:大多数API都存在速率限制,即你在特定时间内可执行的请求数存在限制。要获悉你是否接近了GitHub的限制,请在浏览器中输入https://api.github.com/rate_limit,你将看到类似于下面的响应:

通过结果可以指定,极限为每分钟10个请求。

使用Pygal对分析的结果进行可视化

完整代码如下所示,具体说明见代码中的详细注释:

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'

# 调用url,将响应对象存储在变量r中

r=requests.get(url)

# 查看请求返回的http 状态码,200表示请求成功

print("Stauts Code",r.status_code)

# 使用json()将API的响应信息(json格式)转换为一个Python字典或JSON对象

response_dict=r.json()

# 获取GitHub包含的Python库数量

print("Total repositories:",response_dict["total_count"])

#探索有关仓库的信息,items是由多个字典组成的列表,每一个字典包含一个仓库信息

repo_dicts=response_dict['items']

#print("Repositories returned:",len(repo_dicts))

## 创建两个空列表存储包含在图表中的信息,名称用于条形图表的标签,星的数量用于确定条形图表的高度

#names,stars=[],[]

# plot_dicts用于添加自定义工具提示

names,plot_dicts=[],[]

for repo_dict in repo_dicts:

names.append(repo_dict["name"])

# 并不是每个节点一定有description,所以加if判断

if repo_dict["description"]:

plot_dict={

# Pygal根据与键'value'相关联的数字来确定条形的高度

'value':int(repo_dict["stargazers_count"]),

# 使用与'label'相关联的字符串给条形创建工具提示

'label':repo_dict["description"],

# 为条形图表添加可点击的链接

'xlink': repo_dict['html_url'],

}

plot_dicts.append(plot_dict)

#可视化,定义样式,将其基色设置为深蓝色,并传入LightColorizedStyle

my_style=LS('#333366',base_style=LCS)

my_config = pygal.Config()

# 表示让标签绕x轴旋转45度

my_config.x_label_rotation = 45

# 表示隐藏了图例

my_config.show_legend = False

# 图表标题字体大小

my_config.title_font_size = 24

# 副标签字体大小,包括x轴上的项目名以及y轴上的大部分数字

my_config.label_font_size = 14

# 主标签字体大小,y轴上为5000整数倍的刻度

my_config.major_label_font_size = 18

# 将较长的项目名缩短为15个字符

my_config.truncate_label = 15

# 隐藏图表中的水平线

my_config.show_y_guides = False

# 设置了自定义宽度

my_config.width = 1000

# 使用Bar()创建一个简单的条形图

# x_label_rotation=45:表示让标签绕x轴旋转45度

# show_legend=False:表示隐藏了图例

# chart=pygal.Bar(style=my_style,x_label_rotation=45,show_legend=False)

# 将上述的配置进行改进,分装为一个my_config对象

# 传递配置设置

chart=pygal.Bar(my_config,style=my_style)

chart.title="Most-Starred Python Projects on GitHub"

chart.x_labels=names

# 暂不需要添加标签

#chart.add('',stars)

# 添加工具提示需要的字典列表

chart.add('',plot_dicts)

chart.render_to_file("python_repos.svg")

#print("\nSelected information about each repository:")

## 循环遍历获取每一个仓库的详细信息

#for repo_dict in repo_dicts:

# # 项目名称

# print('\nName:', repo_dict['name'])

# # 键owner来访问表示所有者的字典,再使用键key来获取所有者的登录名。

# 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'])

上述代码中,使用了pygal.Bar()方法创建一个简单的条形图,并向它传递了my_style。同时还传递了另外两个样式实参:让标签绕x轴旋转45度(x_label_rotation=45),并隐藏了图例(show_legend=False),因为只在图表中绘制一个数据系列。

执行代码显示结果如下图所示:

参考资源

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

本文后续会随着知识的积累不断补充和更新,内容如有错误,欢迎指正。

最后一次更新时间:2018-10-23

python 图表_Python入门学习系列——使用Python调用Web API实现图表统计相关推荐

  1. python版本更新_python入门学习第一天-初识Python

    初识Python Python简介 Python的历史 1989年圣诞节:Guido von Rossum开始写Python语言的编译器. 1991年2月:第一个Python编译器(同时也是解释器)诞 ...

  2. 为什么金融分析需要应用python语言_python入门第一篇:python语言简介

    四.Python发展史 1989年,Guido开始写Python语言的编译器. 1991年,第一个Python编译器诞生.它是用C语言实现的,并能够调用C语言的库文件.从一出生,Python已经具有了 ...

  3. python代码测试_Python入门学习系列——Python代码测试

    Python代码测试 对于编写的代码,可以使用unittest模块中的相关方法进行测试. 测试函数 首先定义一个简单的函数,该函数用来合并名称并返回. name_function.py: def ge ...

  4. Python零基础入门学习教程_001.python介绍_特性_版本问题_应用问题

    目录 ·简介 ·特点 1.可读性强 2.简洁,简单 3.面向对象 4.免费和开源 5.可移植性和跨平台 6.丰富的库(丰富的标准库,多种多样的扩展库) 7.可扩展性 ·应用范围 1.科学计算 2.人工 ...

  5. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  6. python零基础入门教程视频下载-Python零基础入门学习视频教程全42集,资源教程下载...

    课程名称 Python零基础入门学习视频教程全42集,资源教程下载 课程目录 001我和Python的第一次亲密接触 002用Python设计第一个游戏 003小插曲之变量和字符串 004改进我们的小 ...

  7. python基础教程视频教程百度云-Python零基础入门学习视频教程全42集百度云网盘下载...

    课程简介 Python零基础入门学习视频教程全42集百度云网盘下载 课程目录 042魔法方法:算术运算 041魔法方法:构造和析构 040类和对象:一些相关的BIF 039类和对象拾遗 038类和对象 ...

  8. python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...

    在这篇文章里,我会来阐述下为什么我觉得 Python 对于计算机编程入门教学来说是一门很棒的编程语言(对基础编程课程更多观点可以查看这篇文章).这也是从我针对初学者Python 编程教学过程中获得并总 ...

  9. 【python教程入门学习】学python要多久,0基础学python有多难

    学python要多久,0基础学python有多难,这是很多想学习python语言同学绕不开的问题,都害怕花完钱最终没有应有的回报!对于毫无经验0基础的同学来说学习python什么最重要,方向选对坚持下 ...

最新文章

  1. 简明Python3教程 10.模块
  2. FPGA的设计艺术(6)STA实战之SmartTime时序约束及分析示例(I)
  3. win10+ubuntu14.04双系统硬盘安装教程
  4. 为什么你的用户总是不满意?
  5. Python中列表推导式同filter和map的比较
  6. -----------最小生成树----------------
  7. rgb cmyk lab的区别
  8. Spring5参考指南: Resources
  9. 三相pmsm矢量控制仿真模型_低载波比工况下永磁同步电机磁链矢量轨迹分析
  10. 简单地使用线程之一:使用异步编程模型
  11. Play 2.0框架和XA交易
  12. JavaScript 监听手机端的touch滑动事件(滑动手势)
  13. 久等了,你要的 Python 书籍推荐,来了
  14. php怎么定义会员时间为七天,php怎么定义会员时间为七天
  15. asp excel导入mysql_asp excel导入数据库
  16. YUV/YIQ色彩空间的转换
  17. 基于深度学习智能问答笔记
  18. Altium Designer软件导出原理图和PCB图的PDF形式
  19. 苹果开发者账号续费时出现你的支付授权失败,请核对信息并重试..
  20. 团队管理:新业务团队如何结合绩效来度量开发目标

热门文章

  1. 2022-2028年中国热熔胶产业竞争现状及发展规模预测报告
  2. 基于Vue开发的购物车案例
  3. 适用于Linux 2的Windows子系统上的CUDA
  4. Camera Calibration 相机标定
  5. 2021年大数据HBase(十二):Apache Phoenix 二级索引
  6. 2021年大数据Hadoop(三十):Hadoop3.x的介绍
  7. 【hexo】搭建个人bolg日志 day1
  8. android.mk 里面内容介绍
  9. Java map 知识
  10. Kotlin的几个面试题