美文网首页
Python数据可视化day06|使用API

Python数据可视化day06|使用API

作者: 习惯芥末味 | 来源:发表于2018-04-23 22:16 被阅读0次

    学习如何编写一个独立的程序,并对其获取的数据进行可视化。这个程序将使用Web应用编程接口 (API)自动请求网站的特定信息而不是整个网 页,再对这些信息进行可视化。

    使用API调用请求数据(基于GitHub的信息)

    调用AIP分两部分:
    第一部分:将请求发送 到GitHub网站中响应API调用的部分;
    第二部分:让API搜索GitHub上的所有仓库
    例如:

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

    repositories后面的问号指出我们要传递一个实参。q 表示查询,而等号让我们能够开始指定查询(q= )。通过使用language:python ,我们指出只想获取主要语言为 Python的仓库的信息。最后一部分(&sort=stars )指定将项目按其获得的星级进行排序。

    安装requests

    $ pip install --user requests
    

    处理API响应

    ➜ python_repos.py
    import requests  #导入模块requests
    
    # 执行API调用并存储响应
    url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
    r = requests.get(url)  #get请求方式
    print("Status code:", r.status_code)  #status_code合适调用是否成功
    
    # 将API响应存储在一个变量中
    response_dict = r.json()  #将返回的json信息转换为python字典
    
    # 处理结果 
    print(response_dict.keys())
    

    打印response_dict中的键:

    Status code: 200
    dict_keys(['items', 'total_count', 'incomplete_results'])
    

    状态码为200,因此我们知道请求成功了。响应字典只包含三个键:'items'、'total_count' 和'incomplete_results'

    处理响应字典

    将API调用返回的信息存储到字典中后,就可以处理这个字典中的数据了

    ➜ 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)
    

    我们打印这个字典的所有键,看看其中包含哪些信息,输出让我们对实际包含的数据有了更清晰的认识:

    Status code: 200
    Total repositories: 713062 
    Repositories returned: 30
    Keys: 68 
    archive_url assignees_url blobs_url 
    --snip--
    url
    watchers 
    watchers_count
    

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

    输出结果:

    Status code: 200
    Total repositories: 713065 
    Repositories returned: 30
    Selected information about first repository: 
    Name: httpie
    Owner: jkbrzt
    Stars: 16101
    Repository: https://github.com/jkbrzt/httpie
    Created: 2012-02-25T12:39:13Z
    Updated: 2015-07-13T14:56:41Z
    Description: CLI HTTP client; user-friendly cURL replacement featuring intuitive UI, JSON support, syntax highlighting, wget-like downloads, extensions, etc.
    

    概述最受欢迎的仓库

    打印API调用返回的每个仓库的特定信息,以便能够在可视化中包含所有这些信息:

    ➜ python_repos.py
    --snip--
    # 探索有关仓库的信息
    repo_dicts = response_dict['items']
    print("Repositories returned:", len(repo_dicts))
    
    print("\nSelected information about first repository:")  #打印了一条说明性消息
    for repo_dict in repo_dicts:  #遍历repo_dicts 中的所有字典
        print('Name:', 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'])
    

    输出结果:

    Status code: 200
    Total repositories: 713067 
    Repositories returned: 30
    Selected information about each repository:
    Name: httpie
    Owner: jkbrzt
    Stars: 16101
    Repository: https://github.com/jkbrzt/httpie
    Description: CLI HTTP client; user-friendly cURL replacement featuring intuitive UI, JSON support, syntax highlighting, wget-like downloads, extensions, etc.
    Name: django
    Owner: django
    Stars: 15028
    Repository: https://github.com/django/django
    Description: The Web framework for perfectionists with deadlines.
     --snip--
    
    Name: powerline
    Owner: powerline
    Stars: 4315
    Repository: https://github.com/powerline/powerline
    Description: Powerline is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile.
    

    监视API的速率限制

    大多数API都存在速率限制,即你在特定时间内可执行的请求数存在限制。

    {
      "resources": {
        "core": {
          "limit": 60, 
          "remaining": 58,
           "reset": 1426082320
        }, 
    ❶    "search": {
    ❷     "limit": 10,
    ❸     "remaining": 8, 
    ❹     "reset": 1426078803
        } 
    },
    "rate": {
      "limit": 60, 
      "remaining": 58, 
      "reset": 1426082320
      } 
    }
    

    我们关心的信息是搜索API的速率限制(见❶)。从❷处可知,极限为每分钟10个请求,而在当前这一分钟内,我们还可执行8个请求(见❸)。reset 值指的是配额将重置的 Unix时间或新纪元时间 (1970年1月1日午夜后多少秒)(见❹)。用完配额后,你将收到一条简单的响应,由此知道已到达API极限。到达极限后,你必须等待配额重置。
    注意:很多API都要求你注册获得API密钥后才能执行API调用。

    使用Pygal可视化仓库

    有了一些有趣的数据后,我们来进行可视化,将创建一个交互式条形图

    ➜ python_repos_pygal.py
    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响应存储在一个变量中
    response_dict = r.json()
    print("Total repositories:", response_dict['total_count'])
    
    # 探索有关仓库的信息
    repo_dicts = response_dict['items']
    
    
    names, stars = [], []   #创建两个空列表,来存储包含在图表中的信息
    for repo_dict in repo_dicts:
        names.append(repo_dict['name'])  #将项目的名称和获得的星数附加到这些列表的末尾
        stars.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-Starred Python Projects on GitHub' 
    chart.x_labels = names
    
    chart.add('', stars)  #添加数据
    chart.render_to_file('python_repos.svg')
    
    GitHub上受欢迎程度最高的Python项目图表

    相关文章

      网友评论

          本文标题:Python数据可视化day06|使用API

          本文链接:https://www.haomeiwen.com/subject/lbcrlftx.html