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

研究生导师布置的作业!利用Python和API收集与分析网络数据!

程序员文章站 2022-05-04 15:15:12
猜猜看,下面这一组调查对象是什么? 为什么会这样呢? 因为我在布置作业的时候,很贴心地给了一个样例,是我之前写的一篇教程《 如何用R和API免费获取Web数据? 》。 于是,多组作业,都雷同。 讲到这里,他们一副不好意思的表情。 我却发觉,这里蕴藏着一个问题。 几乎所有国内云市场的 API 产品,都 ......

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

猜猜看,下面这一组调查对象是什么?

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

为什么会这样呢?

因为我在布置作业的时候,很贴心地给了一个样例,是我之前写的一篇教程《 如何用R和API免费获取Web数据? 》。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

于是,多组作业,都雷同。

讲到这里,他们一副不好意思的表情。

我却发觉,这里蕴藏着一个问题。

几乎所有国内云市场的 API 产品,都有丰富的文档。不少还干脆给出了各种编程语言对应调用代码。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

这是一款收费 API ,100次调用的价格为1分钱。

作为作业练习,100次调用已经足够了。

这价格,他们表示可以接受。

我自己走了一遍流程。

点击“立即购买”按钮。

你会被引领到付费页面。如果你没有登录,可以根据提示用淘宝账号登录。

支付1分钱以后,你会看到如下的成功提示。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

之后,系统会提示给你一些非常重要的信息。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

如果你的操作系统里面已经安装了 curl (没有安装的话,可以点击这个链接,寻找对应的操作系统版本下载安装),尝试把上图中 curl 开头的那一行代码拷贝下来,复制到文本编辑器里面。

就像这样:

curl -i -k --get --include 'https://ali-weather.showapi.com/weatherhistory?area=%E4%B8%BD%E6%B1%9F&areaid=101291401&month=201601' -H 'Authorization:APPCODE 你自己的AppCode'

然后,一定要把其中的“你自己的AppCode”这个字符串,替换为你真实的 AppCode 。

把替换好的语句复制粘贴到终端窗口里面运行。

运行结果,如下图所示:

研究生导师布置的作业!利用Python和API收集与分析网络数据!

看见窗口下方包含中文的数据了吗?

利用 API 获取数据,就是这么简单。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

上图中,除了刚才我们使用的 curl ,还包括以下语言访问 API 接口的样例说明:

  • Java

  • C#

  • PHP

  • Python

  • Object C

我们以 Python 作为例子,点开标签页看看。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

你只需要把样例代码全部拷贝下来,用文本编辑器保存为“.py”为扩展名的 Python 脚本文件,例如 demo.py 。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

为什么许多学生做不出来结果呢?

我让他们实际跑了一下,发现确实有的学生粗心大意,忘了替换自己的 AppCode 。

但是大部分同学,由于安装最新版本的 Anaconda (Python 3.6版),都遇到了下面的问题:

研究生导师布置的作业!利用Python和API收集与分析网络数据!

你可能会认为这是因为没有正确安装 urllib2 模块,于是执行

pip install urllib2

你可能会看到下面的报错提示:

研究生导师布置的作业!利用Python和API收集与分析网络数据!

在他们看来,官方网站提供的样例,就应该是可以运行的。报了错,又不能通过自己的软件包安装“三板斧”来解决,就会慌乱和焦虑。

更进一步,他们也不太了解 JSON 格式。

虽然,JSON已是一种非常清晰的、人机皆可通读的数据存储方式了。

他们想了解的,是怎么把问题迁移到自己能够解决的范围内。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

环境

首先我们来看看代码运行环境。

前面提到过,如果样例代码的运行环境,和你本地的运行 环境不一 ,计时代码本身没问题,也无法正常执行 。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

这个界面来自 Jupyter Lab。

图中左侧分栏,是工作目录下的全部文件。

右侧打开的,是咱们要使用的ipynb文件。

根据我的讲解,请你逐条执行,并仔细观察运行结果。

本例中,我们主要会用到以下两个新的软件包。

首先是号称“给人用”(for humans)的HTTP工具包requests。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

代码

首先,读入HTTP工具包requests。

import requests

第二句里面,有“Your AppCode here”字样,请把它替换为你自己的AppCode,否则下面运行会报错。

appcode = 'Your AppCode here'

我们尝试获取丽江5月份的天气信息。

在API信息页面上,有城市和代码对应的表格。

位置比较隐蔽,在公司简介的上方。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

看来我们需要在HTTP数据头(header)中,加入 AppCode。

我们依次把这些信息都写好。

url = 'https://ali-weather.showapi.com/weatherhistory'payload = {'areaid': areaid, 'month': month}headers = {'Authorization': 'APPCODE {}'.format(appcode)}

下面,我们就该用 requests 包来工作了。

requests 的语法非常简洁,只需要指定4样内容:

  • 调用方法为“GET”

  • 访问地址 url

研究生导师布置的作业!利用Python和API收集与分析网络数据!

既然调用成功,我们看看 API 接口返回的具体数据内容吧。

调用返回值的 content 属性:

r.content

研究生导师布置的作业!利用Python和API收集与分析网络数据!

这一屏幕,密密麻麻的。

其中许多字符,甚至都不能正常显示。这可怎么好?

没关系,从 API 信息页上,我们得知返回的数据,是 JSON 格式。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

返回的是一个列表。

因为列表里面只有一个城市,所以我们只让它返回第一项即可。

dfs[0]

这次显示的,就是数据框了:

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

假设我们要综合分析几个城市的天气信息,那么就可以把这几个数据框整合在一起。

用到的方法,是 Pandas 内置的 concat 函数。

它接收一个数据框列表,把其中每一个个数据框沿着纵轴(默认)连接在一起。

df = pd.concat(dfs)

看看此时的总数据框效果:

df

这是开头部分:

研究生导师布置的作业!利用Python和API收集与分析网络数据!

这是结尾部分:

研究生导师布置的作业!利用Python和API收集与分析网络数据!

3个城市,4个多月的数据都正确读取和整合了。

下面我们尝试做分析。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

这次就对了,日期和 AQI 都分别变成了我们需要的类型。其他数据,暂时保持原样。

有的是因为本来就该是字符串,例如城市名称。

另一些,是因为我们暂时不会用到。

下面我们绘制一个简单的时间序列对比图形。

读入绘图工具包 plotnine 。

注意我们同时读入了 date_breaks ,用来指定图形绘制时,时间标注的间隔。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

我们指定横轴为时间序列,纵轴为 AQI,用不同颜色的线来区分城市。

绘制时间的时候,以“2周”作为间隔周期,标注时间上的数据统计量信息。

我们修改横轴的标记为中文的“日期”。

因为时间显示起来比较长,如果按照默认样式,会堆叠在一起,不好看,所以我们让它旋转45度角,这样避免重叠,一目了然。

为了让图中的中文正常显示,我们需要指定中文字体,这里我们选择的是开源的“文泉驿微米黑”。

数据可视化结果,如下图所示。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

怎么样,这张对比图,绘制得还像模像样吧?

从图中,你可以分析出什么结果呢?

反正我看完这张图, 很想去丽江 。

研究生导师布置的作业!利用Python和API收集与分析网络数据!

研究生导师布置的作业!利用Python和API收集与分析网络数据!

当然,要是能给我的repo加一颗星,就更好了。

讨论

你之前尝试过用 Python 和 API 获取数据吗?你使用了哪些更好用的软件包进行数据获取、处理、分析与可视化呢?你还使用过哪些其他的数据产品市场?欢迎留言,把你的经验和思考分享给大家,我们一起交流讨论。

转载于:玉树芝兰”(nkwangshuyi) 。

欢迎关注我的博客:https://home.cnblogs.com/u/Python1234/

欢迎加入千人交流答疑群:125240963