数据预处理-单程往返-需求与思路|学习笔记

简介: 快速学习数据预处理-单程往返-需求与思路

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第三阶段数据预处理-单程往返-需求与思路】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/671/detail/11658


数据预处理-单程往返-需求与思路


内容介绍:

一,单程往返的概念及目标

二,代码实现


一,单程往返的概念及目标

数据分类有一个分类叫数据是单程的还是往返的。那么什么是单程什是往返?

模块的目的就是根据数据当中 httpReferrer 里面日期格式数据出现的次数。这个数据包含日期格式,比如年月日。根据这个数据出现的次数判断它是单程还是往返还是其他。如果有一个日期类型格式就是单程,两个就是往返,没有就是其他。

以南方航空为例,当前默认的,是从广州到北京。

image.png

现在默认的是往返,下面点击单程。

image.png

当点击单程的时候,发现返回日期没有了,重新点击往返就会再次显示。所以点击单程只有一个日期,往返就有两个日期。那也就说往返的业务场景有两个日期格式的数据,单程的有一个。

下面来监控。打开监控会显示下面的页面:

image.png

然后以从广州到北京为例,现在是往返类型有两个日期。

然后跟踪一下实际效果,点击网络。

image.png

在过滤 URL 里查询 query。

image.png

然后在里面找到并点击往返(Referer),会显示:

https://b2c.csair.com/B240/newTrips/static/main/page/booking

/index.html?

t=R&c1=CAN&c2=PEK&d1=2019-05-16&d2=2019-05-16&at=1

&ct=0&it=0

从中可以看到两个日期格式,把它打开并直接粘到程序里,这个就是 httpReferrer 。

里面的日期格式有两个,所以它是往返类型,就根据这个来进行计算。


二,代码实现

目标明确了,但是要怎么做?

先来创建一下实例来判断是单程还是往返

打这个标签的一个方法,就是下面这个方法:

TravelTypeClassifier.classifyByRefererAndRequestBody

把它粘贴过来,

把后面的括号补全。会发现现在它是红的,红的说明当前并没有名为 TravelTypeClassifier的 object 。 按下图步骤创建 object 。创建名为TraveITypeClassifier,

image.png

这个方法主要就是用于实现单程-往返的标签。

package

com.air.antispider.stream.dataprocess.businessprocess

//用于实现返程-往返标签

object TravelTypeclassifier {

}

主要在上面这个地方来实现这个工作。创建完之后这里就不报错了。

但是后面这个 classifyByRefererAndRequestBody 这个方法还没有,所以接下来要实现这个方法。在这个方法当中,我们根据 httpReferrer 去判断单程往返。所以需要找到这个数据,这个数据在哪?

//数据拆分功能

val(requestUr1,requestMethod,contentType,requestBody,

httpReferrer,remoteAddr,httpUserAgent,timeIso8601,

serverAddr,cookiesStr,cookieValue_JSESSIONID,

cookieValue_USERID)=DataSplit.dataSplit(encryptedId)

上面是对数据进行了拆分,里面有 httpRreferrer 这个数据。所以将其粘贴进来以后,这个方法就创建完了。

TravelTypeClassifier.classifyByRefererAndRequestBody(httpRreferrer)

这样参数就准备好了并且放到了这个方法里边,但是这个方法还没有,所以如下图所示创建方法:image.png

在这里加上注释:表明这个方法用于实现打单程往返标签

package

com.air.antispider.stream.dataprocess.businessprocess

//用于交现返程-往返标签

object TravelTypeclassifier {

//实现打单程往返标签

def classifyByRefererAndRequestBody( httpReferrer:

string : Unit = {

}}

这样这个方法就创建完毕。

接下来就这个方法来实现打标签的过程。先把数据加过来,数据的代码如下:

https://b2c.csair.com/B2C40/newTrips/static/main/page/booking

/index.html?

t=R&c1=CAN&c2=PEK&d1=2019-05-16&d2=2019-05-16

&at=1&ct=0&it=0

整体的代码就是:

package

com.air.antispider.stream.dataprocess.businessprocess

//用于交现返程-往返标签

object TravelTypeclassifier {

//实现打单程往返标签

def classifyByRefererAndRequestBody( httpReferrer:

string : Unit = {

https://b2c.csair.com/B2C40/newTrips/static/main/page/booking

/index.html?

t=R&c1=CAN&c2=PEK&d1=2019-05-16&d2=2019-05-16

&at=1&ct=0&it=0

}}

这就是数据,那这个数据按照什么顺序来进行处理的。先看一下这个数据有什么特点。这个数据要怎么判断日期类型出现的数量?

使用一种最朴实的方法判断,看一下这个数据,前面是 url访问的路径,后面是一些参数。他们之间用问好分割。所以先用问号做一次拆分,拆分完以后再仔细观察后面的数据。

https://b2c.csair.com/B2C40/newTrips/static/main/

page/booking/index.html?

//

t=R&c1=CAN&c2=PEK&d1=2019-05-16&d2=2019-05-16

&at=1&ct=0&it=0

切分完以后的第二个数据再与字符(&)进行拆分。拆分的结果:

//https://b2c.csair.com/B2c40/newTrips/static/main/

page/booking/index.html ?l

//t=R&

//c1=CAN&

// c2=PEK&

//d1=2019-05-16&

//d2=2019-05-16&

//at=1&

//ct=0&

/ /it=0

拆完以后的每个参数里面都有等号。然后再用等号拆,拆分完以后的第二个值是就是我的数据,可能是也可能不不是日期。

所以就按照这个思路来,先用问号拆再用与字符拆然后再用等号儿拆。拆分完以后出来的第二个数据就是我们想要的数据。然后用日期这个格式的一个正则表达式去判断,拿这个数据去匹配正则表达式,如果匹配上就等于找到了。找到以后就做一个日期类型的计数器来统计数量。匹配上一次计数器加一,最后算一下计数器的数量就可以了。再根据数量来进行判断是单程还是往返。

总结一下这个思路:

第一步,先用问号对数据进行切分。

第二版,在第一步的基础上用语字符去进行拆分。

第三步,再用等号把第二部的数据进行切割,获取第二个数据。

第四步:等号拆分完以后,要在这里面用一个日期格式的正则表达式跟切分完以后的第二个数据去匹配。

第五步,用技数器记录匹配上的次数。

第六步,通过计数器的值判断是单程还是往返还是其他。

以上就是本节课的内容。

相关文章
|
算法
秒懂算法 | 最大网络流的增广路算法
增广路算法是由Ford和Fulkerson于1957年提出的。该算法寻求网络中最大流的基本思想是寻找可增广路,使网络的流量得到增加,直到最大为止。即首先给出一个初始可行流,这样的可行流是存在的,例如零流。如果存在关于它的可增广路,那么调整该路上每条弧上的流量,就可以得到新的可行流。对于新的可行流,如果仍存在可增广路,则用同样的方法使流的值增大。继续这个过程,直到网络中不存在关于新的可行流的可增广路为止。此时,网络中的可行流就是所求的最大流。
1189 0
秒懂算法 | 最大网络流的增广路算法
|
机器学习/深度学习 人工智能 算法
机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样
机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样
178 0
|
27天前
|
机器学习/深度学习 算法 大数据
蓄水池抽样算法详解及Python实现
蓄水池抽样是一种适用于从未知大小或大数据集中高效随机抽样的算法,确保每个元素被选中的概率相同。本文介绍其基本概念、工作原理,并提供Python代码示例,演示如何实现该算法。
27 1
|
1月前
|
算法 调度
多级反馈队列算法的具体实现过程是怎样的?
【10月更文挑战第25天】多级反馈队列算法通过动态调整进程的优先级和在不同优先级队列之间的转移,能够较好地适应不同类型进程的需求,兼顾了短作业优先、I/O密集型作业优先等多种调度策略的优点,提高了系统的整体性能和资源利用率,同时也能保证对实时性要求较高的进程能够及时得到响应。
48 4
|
3月前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
344 1
|
5月前
|
算法 C语言 C++
刷题训练之模拟
刷题训练之模拟
27 0
|
7月前
|
数据可视化 算法 区块链
R语言泊松过程及在随机模拟应用可视化
R语言泊松过程及在随机模拟应用可视化
|
7月前
|
算法 数据可视化
R语言中的模拟过程和离散化:泊松过程和维纳过程
R语言中的模拟过程和离散化:泊松过程和维纳过程
|
7月前
|
机器学习/深度学习 算法 定位技术
Python实现SMOGN算法解决不平衡数据的回归问题
Python实现SMOGN算法解决不平衡数据的回归问题
102 1
|
机器学习/深度学习 算法 C++
由数据范围反推算法复杂度以及算法内容
由数据范围反推算法复杂度以及算法内容