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

2023-11-06

b_0_201805221409252495.jpg

b_0_201805221409252996.jpg

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

b_0_201805221409255253.jpg

b_0_201805221409255754.jpg

b_0_201805221409263025.jpg

为什么会这样呢?

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

b_0_201805221409269580.jpg

b_0_201805221409261082.jpg

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

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

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

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

b_0_201805221409265596.jpg

b_0_201805221409267854.jpg

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

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

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

我自己走了一遍流程。

点击“立即购买”按钮。

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

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

b_0_201805221409266882.jpg

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

b_0_201805221409269139.jpg

b_0_201805221409264938.jpg

b_0_201805221409267196.jpg

b_0_201805221409267696.jpg

b_0_201805221409279954.jpg

如果你的操作系统里面已经安装了 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 。

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

运行结果,如下图所示:

b_0_201805221409271268.jpg

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

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

b_0_201805221409277539.jpg

b_0_201805221409279954.jpg

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

Java

C#

PHP

Python

Object C

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

b_0_201805221409273054.jpg

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

b_0_201805221409273555.jpg

b_0_201805221409271111.jpg

b_0_201805221409271612.jpg

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

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

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

b_0_201805221409289639.jpg

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

pip install urllib2

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

b_0_201805221409282897.jpg

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

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

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

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

b_0_201805221409285154.jpg

环境

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

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

b_0_201805221409284183.jpg

b_0_201805221409286440.jpg

这个界面来自 Jupyter Lab。

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

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

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

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

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

b_0_201805221409283712.jpg

b_0_201805221409289983.jpg

b_0_201805221409283241.jpg

b_0_201805221409285498.jpg

代码

首先,读入HTTP工具包requests。

import requests

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

appcode = 'Your AppCode here'

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

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

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

b_0_201805221409284526.jpg

b_0_201805221409296312.jpg

b_0_201805221409296813.jpg

b_0_201805221409294085.jpg

b_0_201805221409298883.jpg

看来我们需要在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

b_0_201805221409297912.jpg

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

调用返回值的 content 属性:

r.content

b_0_201805221409295183.jpg

这一屏幕,密密麻麻的。

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

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

b_0_201805221409297441.jpg

b_0_201805221409292171.jpg

b_0_201805221409309728.jpg

b_0_201805221409303770.jpg

b_0_201805221409302799.jpg

b_0_201805221409305056.jpg

b_0_201805221409307313.jpg

b_0_201805221409307814.jpg

b_0_201805221409301072.jpg

b_0_201805221409307627.jpg

b_0_201805221409302357.jpg

b_0_201805221409301386.jpg

b_0_201805221409311886.jpg

返回的是一个列表。

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

dfs[0]

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

b_0_201805221409316685.jpg

b_0_201805221409318942.jpg

b_0_201805221409317970.jpg

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

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

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

df = pd.concat(dfs)

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

df

这是开头部分:

b_0_201805221409312701.jpg

这是结尾部分:

b_0_201805221409319256.jpg

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

下面我们尝试做分析。

b_0_201805221409313986.jpg

b_0_201805221409316244.jpg

b_0_201805221409313799.jpg

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

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

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

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

读入绘图工具包 plotnine 。

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

b_0_201805221409316057.jpg

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

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

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

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

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

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

b_0_201805221409316557.jpg

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

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

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

b_0_201805221409327058.jpg

b_0_201805221409326086.jpg

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

讨论

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

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

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

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

希望与广大网友互动??

点此进行留言吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python研究生导师_研究生导师布置的作业!利用Python和API收集与分析网络数据!... 的相关文章

  • 二进制加权DAC

    二进制加权DAC 二进制加权数模转换器是一种将数字二进制数转换成与数字数值成比例的等效模拟输出信号的数据转换器 数字到模拟转换器 或DAC 因为他们更广为人知 是相反的模拟到数字转换器 DAC将二进制或非二进制数和代码转换成模拟值 其输出电
  • caffe目标检测模型训练全过程(三)目标检测第一步

    遍历整图查找蝴蝶位置 2018 04 22 训练模型对于识别背景和蝴蝶有比较好的效果 基本对不会识别错误 接下来 将通过整图遍历的原始而又野蛮的方式对一张原始图片进行处理 进而查找到蝴蝶的具体位置 具体思路如下图 对原图进行缩放成理想大小
  • rabbitmq在商户通知中的使用代码实例

    文章目录 controller层 MQ 消息发送器 接口 RabbitMQ的配置项 RabbitMQBeanProcessor MQ 线程池配置 mq清除商户登录信息通知 mq支付订单商户通知 代码选自jeepay controller层
  • 输入npm install 报错node-sass@4.13.0 postinstall:`node scripts/build.js` Failed at the node-sass@4.13.0

    错误详情 这个是因为sass安装时获取源的问题 先修改sass安装的源 再运行npm install就成功了 npm config set sass binary site https npm taobao org mirrors node
  • Tensorflow运行出现错误: No module named 'tensorflow.contrib'

    往下查看错误描述 可以看到 ModuleNotFoundError No module named tensorflow contrib 我安装的是tensorflow 1 15 因为tensorflow1 15以后的版本都已经删除了该模块
  • 学渣带你刷Leetcode0017. 电话号码的字母组合

    题目描述 给定一个仅包含数字 2 9 的字符串 返回所有它能表示的字母组合 给出数字到字母的映射如下 与电话按键相同 注意 1 不对应任何字母 示例 输入 23 输出 ad ae af bd be bf cd ce cf 说明 尽管上面的答
  • 多线程编程技巧

    java中 多线程类需要继承Thread或实现Runnable接口 在Run函数中执行多线程代码 但是需要用Start 函数开始执行 多线程并行执行 执行的顺序取决于本地操作系统给谁分配系统资源 Runnable共享资源的方法 a 如果每个
  • [数据结构]--图(图的遍历,最小生成树,最短路径算法)

    前言 在这里 如果大家对图或者数据结构还不太熟悉 想找一个动态的生成过程来参考 这是一个不错的网站 知识框架 图的定义 在线性结构中 数据元素之间满足唯一的线性关系 每个数据元素 除第一个和最后一个外 只有一个直接前趋和一个直接后继 在树形
  • java入门到精通6版pdf_java从入门到精通第6章.pdf

    100 第 6 章 继承 第6 章 继 承 继承是面向对象编程的重要特征之一 顾名思义 继承就是在现有类的基础上构建新类 以满足新的要求 在继承过程中 新的类继承原来的方法和实例变量 并且能添加自己的方 法和实例变量 在本章中主要讲解的内容
  • 多个df文件之间含有重叠项的处理

    在进行数据分析时 为获取某个完整的panel数据往往需要将多个文件进行整合 而当这些文件之间存在重叠的时候 单纯的拼接难以得到好的结果 本文将以pandas重复值处理的若干函数着手 分析最好的文件重复值处理方法 首先 pandas中处理重复
  • CSS快速入门

    目录 一 概念 二 好处 三 CSS与html结合方式 1 内联样式 2 内部样式 3 外部样式 四 CSS语法 五 选择器 基础选择器 1 id选择器 2 类选择器 3 元素选择器 例子 扩展选择器 1 选择所有元素 2 并集选择器 3
  • qt 和java混合编程

    用QAndroidJniObject来做new一个对象 java Qt C File file new File QAndroidJniObject file java io File V File file new File tmp a
  • 大数据课程L2——网站流量项目的算法分析&&数据处理

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 了解网站流量项目的算法分析 了解网站流量项目的数据处理 一 项目的算法分析 1 概述 网站流量统计是改进网站服务的重要手段之一 通过获取用户在网站的行为 可以
  • [UTCTF 2020]Spectre

    题目 一段wav音频 Audacity 查看频谱图 放大即可发现flag Sonic Visualiser 上下左右拖动就找到flag了
  • 如何从数组对象中拿到指定的数据格式,数组对象数据处理

    一 原始数据 result name book4 value 3 children name 你的名字 value 3 name 言叶之庭 value 5 name book5 value 3 children name 白夜行 value
  • selenium中获取页面元素方法介绍以及定位页面元素

    1 通过浏览器驱动获取 单个元素页面元素的8种方式 通过 id获取元素 el driver find element by id id 通过 name获取元素 el driver find element by name name 通过 c
  • 六、04【Java 多线程】之并发编程

    多线程并发编程 并行和并发的概念我们之前有提到过 在回顾下 并发 多个任务在同一个 CPU 核上 按细分的时间片轮流 交替 执行 从逻辑上来看那些任务是同时执行 并行 单位时间内 多个处理器或多核处理器同时处理多个任务 是真正意义上的同时进
  • 【华为OD机试】求最多可以派出多少支团队(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 用数组代表每个人的能力 一个比赛活动要求参赛团队的最低能力值为N 每个团队可以由1人或2人组
  • 基于SpringBoot的疾病预防系统的设计与实现

    系统合集跳转 一 系统环境 运行环境 最好是java jdk 1 8 我们在这个平台上运行的 其他版本理论上也可以 IDE环境 Eclipse Myeclipse IDEA或者Spring Tool Suite都可以 tomcat环境 To

随机推荐

  • 一个div里有多个a标签,改变a标签的字体颜色方法

  • 抓包工具_Charles使用

    目录 1 Charles准备工作 2 Charles抓包原理 3 Charles抓包步骤 4 Charles抓包分析 5 Charles重发请求 1 Charles准备工作 Charles是一种抓包工具 和fiddler mitmproxy
  • tuts4you上lena‘s40个crackme(1)

    本来是不打算写文章了 因为懒 想以后通过录屏的形式保存一下自己学的路程 但奈何开学后一直没找到机会 在宿舍也不愿意大吼大叫的讲东西 只好再写写文章了 最近学了一些汇编语言和逆向工程 所以就想通过这40给题目来看一看成效 这篇文章是第一题 博
  • SpringMVC框架学习笔记整理-动力节点王鹤(无必详细)

    继续整理了Springmvc的学习笔记 动力节点王鹤老师讲的springmvc 分享给大家 看了这么多网上的视频 还是只有王鹤老师讲的能听明白 就喜欢讲的细的 而且老师条理很清晰 视频资源 https www bilibili com vi
  • 对MRTK中HandInteractionExamples实例的一些理解

    文章目录 前言 一 按钮 二 边界框 三 操作示例 四 滑动条 五 其它 前言 对HoloLens实例的一些浅陋的理解 大部分为官方自己解释 一 按钮 BoxCollider 按钮前板的Box Collider PressableButto
  • 欧莫,github一看就懂【纯小白】

    教程 一看就懂 Github基础教程 哔哩哔哩 bilibili 分享原因 一不小心刷到的 对小白来说真的很友好 因为我也被github上的英文吓到过 突然刷到这样简单直白的介绍 忍不住分享一波u 2 giehub免费加速 教程 手把手教你
  • 语音端点检测(Voice Activity Detection,VAD)

    本文内容均翻译自这篇博文 该博主的相关文章都比较好 感兴趣的可以自行学习 Voice Activity Detection VAD Tutorial 语音端点检测一般用于鉴别音频信号当中的语音出现 speech presence 和语音消失
  • Java PrintWriter.write()方法具有什么功能呢?

    转自 Java PrintWriter write 方法具有什么功能呢 下文讲述java中PrintWriter write 方法的功能简介说明 如下所示 PrintWriter write 方法的功能 同print方法基本一致 print
  • 模式识别(1)协方差矩阵相关和K-means聚类算法实现(含源码)

    模式识别实验一 实验一 协方差矩阵和矩阵特征值 特征向量的计算 题目简介 给定一组数据 实现该组数据的协方差矩阵的计算 并用代码实现计算一个方阵的特征值和特征向量 一 协方差部分 1 协方差的定义 协方差在概率论和统计学中用于衡量两个变量的
  • java-maven的使用

    一 加载maven项目 1 idea工具栏file open 选择项目加载进来 2 右键pom xml 选择add as maven project 3 如果在pom xml上的某个依赖一直报红且依赖本身没有问题 本pom其他的依赖也没有问
  • 面试概率题目

    概率题目 现在的面试中 大部分公司都会问道概率相关的问题 我们现在给出几道常见的概率问题 1 三角形问题 题目 给你一根铅笔 将铅笔折两次 组成三角形的概率是多大 解析 设 铅笔长度是1 折两次之后 得到三条边 对应的长度分别是x y 1
  • css3实现动画的三种方式

    css实现动画主要有3种方式 第一种是 transition实现渐变动画 第二种是 transform转变动画 第三种是 animation实现自定义动画 transition渐变动画 过渡 语法格式 transition 要过渡的属性 花
  • win10 凭据管理

    点击WIN10左下角的开始选项 选择所有程序 找到WINDOWS系统 点开找到控制面板 打开控制面板 找到里面的 凭据管理器 打开凭据管理器 找到 WINDOWS凭据 然后点击 添加WINDOWS凭据 进入凭据添加页面 添加WINDOWS凭
  • 图像分割中的损失函数

    图像分割中的损失函数 文章目录 图像分割中的损失函数 前言 一 交叉熵损失 二 Dice loss 三 Focal loss 四 IOU损失函数 总结 前言 在深度学习中 所有算法都依赖于最小化或最大化一个函数 称之为损失函数 损失函数用于
  • 蓝桥杯基础练习(1)---数列排序

    一 数列排序问题的解决 问题描述 给定一个长度为n的数列 将这个数列按从小到大的顺序排列 1 lt n lt 200 输入格式 第一行为一个整数n 第二行包含n个整数 为待排序的数 每个整数的绝对值小于10000 输出格式 输出一行 按从小
  • 全球13台DNS根服务器分布:

    全球13台DNS根服务器分布 美国VeriSign公司 2台 网络管理组织IANA Internet Assigned Number Authority 1台 欧洲网络管理组织RIPE NCC Resource IP Europeens N
  • 解决curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused 问题

    自动化使用要去下载图像识别的工具 Tesseract mac 需要用到brew 但是我的电脑没有 就先需要下载homebrew 然而按照官网的命令 bin bash c curl fsSL https raw githubuserconte
  • 将一个链表分为奇偶两个链表

    1 问题描述 设计一个算法 将一个头结点为A的单链表 其数据域为整数 分解成两个单链表A和B 使得A链表只含有原来链表data域为奇数的节点 而B链表只含有原链表中data域为偶数的节点 而且保持原来的顺序 2 思路分析 这个问题不是在线网
  • python pandas.set_option()详解

    一 简介 set option是pandas里的一个函数 用法为pandas set option pat value 主要作用是设置一些指定参数的值 供设置的选项如下 后面会逐一进行介绍 compute use bottleneck us
  • python研究生导师_研究生导师布置的作业!利用Python和API收集与分析网络数据!...

    猜猜看 下面这一组调查对象是什么 为什么会这样呢 因为我在布置作业的时候 很贴心地给了一个样例 是我之前写的一篇教程 如何用R和API免费获取Web数据 于是 多组作业 都雷同 讲到这里 他们一副不好意思的表情 我却发觉 这里蕴藏着一个问题