目录
4.大数据采集的数据源有哪些?针对不同的数据源,我们可以采用哪些不同的方法和工具?
1、我们在进行数据清洗的时候,要重点处理哪些数据?数据清洗的基本流程是什么?
2、假设我们有一组数值型数据如下:[10, 12, 15, 18, 20, 22, 25, 28, 30, 32, 35],请使用等高和等宽分箱的方式对数据进行平滑处理
3、王涛作为银行的数据管理员,负责管理大量客户的金融数据,包括个人信息、账户余额和交易记录等敏感数据。他深知金融数据的安全性至关重要,并希望采取措施保护这些敏感数据。
1、什么是网络爬虫?结合流程图,一般的网络爬虫的基本步骤有哪些?网络爬虫有哪几种类型?
3、Scrapy体系架构包括哪几个组成部分?每个组成部分的功能是什么?
(1)结构化:结构化数据、非结构化数据、半结构化数据
(2)加工程度:裸数据、专家数据、信息和价值
(3)抽象程度:可分为数据(元)、元数据、数据对象
含义:不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素以及对记录和字段进行分层,数据的结构和内容混在一起,没有明显的区分,因此,它也被称为自描述的结构。
本质:难以发现同一的结构
特点:
(1)多样性:非结构化数据包括文本、图像、音频、视频等多种形式,涵盖了大量的信息内容和表达方式。这些数据来源广泛,包括社交媒体、新闻网站、传感器等,具有多样性和丰富性。
(2)复杂性:非结构化数据通常没有明确的格式和组织,不易于直接进行处理和分析。数据中可能存在大量的噪声、冗余和不一致性,需要通过数据清洗和预处理等步骤来提取有用的信息。
(3)高维度:非结构化数据通常具有高维度的特点,包含大量的变量和属性。例如,一张图片可能包含成千上万个像素点,一个文本文件可能包含数千个单词。这些高维度的数据需要采用适当的技术和算法进行降维和分析。
(4)实时性:非结构化数据的采集通常是实时进行的,例如社交媒体上的实时评论、传感器数据的实时监测等。这要求采集系统具备高效的处理能力和实时的数据传输能力。
(5)隐私性:非结构化数据中可能包含大量的个人隐私信息,例如社交媒体上的用户账号、位置信息等。在采集和处理非结构化数据时,需要遵守相关的隐私保护法规和规范,确保数据的安全性和合规性。
(1)传统数据采集:数据来源单一,数据量相对较少;结构单一;存储方式为关系型数据库和并行数据仓库
(2)大数据采集:数据来源广泛,数据量巨大;数据类型丰富,包括结构化、非结构化、半结构化数据;存储方式是分布式数据库,分布式文件系统
(1)传感器数据:通过摄像头等传感器,图片、视频等附件的采集
(2)互联网数据:网络爬虫
(3)日志文件:日志采集系统
(4)企业业务系统数据:ETL 工具
(1)在进行数据清洗时,重点处理以下几类数据:
(2)数据清洗的基本流程如下:
数据清洗基本流程:
(1)数据分析。原始数据源中存在数据质量问题,需要通过人工检测或计算机分析程序对原始数据源的数据进行检测分析。可以说,数据分析是数据清洗的前提和基础。
(2)定义数据清洗的策略和规则。根据数据分析步骤得到的数据源中的“脏数据”的具体情况,制定相应的数据清洗策略和规则,并选择合适的数据清洗算法。
(3)搜寻并确定错误实例。搜寻并确定错误实例步骤包括自动检测属性错误和用算法检测重复记录。手工检测数据集中的属性错误要花费大量的时间和精力,而且容易出错,所以需要使用高效的方法自动检测数据集中的属性错误,主要检测方法有基于统计的方法、聚类方法和关联规则方法等。检测重复记录的算法可以对两个数据集或一个合并后的数据集进行检测,从而确定同一个实体的重复记录。检测重复记录的算法有基本的字段匹配算法、递归字段匹配算法等。
(4)纠正发现的错误。根据不同的“脏数据”存在形式,执行相应的数据清洗和转换解决原始数据源中存在的质量问题。在某些特定领域,我们能够根据发现的错误模式,编制程序或借助于外部标准数据源文件、数据字典等,在一定程度上修正错误。有时候也可以相据数理统计知识进行自动修正,但是很多情况下都需要编制复杂的程序或借助于人工干预来完成修正。需要注意的是,对原始数据源进行数据清洗时,应该将原始数据源备份,以防需要撤销清洗操作。
(5)干净数据回流。在数据被清洗后,干净的数据替代原始数据源中的“脏数据”这样可以提高信息系统的数据质量,还可以避免将来再次抽取数据后进行重复的清洗工作。
分成4个箱子,每个箱子内包含3个数据,将箱子内的数据用箱子内数据的中位数代替,根据这种方法,数据可以被分成如下4个箱子:
箱子1: [10, 12, 15]
箱子2: [18, 20, 22]
箱子3: [25, 28, 30]
箱子4: [32, 35]
按箱的平均值平滑结果:{12.3,12.3,12.3,20,20,20,27.7,27.7,27.7,33.5,33.5}
按箱的中值平滑结果:{12,12,12,20,20,20,28,28,28,33.5}
按箱的边界平滑结果:{10,10,15,18,18,22,28,28,30,32,35}
2.等宽分箱的特点是什么?一般用什么值替换箱子内的所有元素?请给出等宽分箱的结果。
设置每个箱子的范围为5,将数据分配到各个箱子中,将箱子内的数据用箱子内数据的平均值代替,根据这种方法,数据可以被分成如下6个箱子:
箱子1: [10, 12]
箱子2: [15, 18]
箱子3: [20, 22]
箱子4: [25, 28]
箱子5: [30, 32]
箱子6: [35]
箱子内的数据平均值分别为:[11, 16.5, 21, 26.5, 31, 35]
等高分箱更适用于数据量较小、且数据分布不连续、存在异常值的情况。因为等高分箱可以保证每个箱子内包含相同数量的数据,从而能够更好地保留数据的局部特征和稀有特征,避免过拟合。
等宽分箱更适用于数据量较大、数据分布连续且可预测的情况。因为等宽分箱将数据按照相同的范围进行划分,可以将数据的差异最小化,并且在某些情况下可能更容易解释。但是等宽分箱容易受到异常值的影响,并且可能导致一些少见的特征被忽略。
最小化原则:只脱敏必要的数据,尽量保留数据的可用性。
数据一致性原则:确保脱敏后的数据与原始数据在逻辑上保持一致。
不可逆原则:脱敏后的数据不可逆转回原始数据。
安全性原则:确保脱敏后的数据仍能防止未经授权的访问。
答:①保持原有数据特征。数据脱敏前后数据特征应保持不变,例如,身份证号码由十七位教字本体码和一位校验码组成,分别为区域地址码 (6 位)、出生日期(8 位)、顺序码(3位)和校验码(1位),那么身份证号码的脱敏规则需要保证脱敏后这些特征信息不变。
②保持数据的一致性。在不同业务中,数据之间有一定的关联。例如,出生年月或年龄和出生日期有关联。身份证信息脱敏后需要保证出生年月字段和身份证号码中包含的出生日期的一致性。
③保持业务规则的关联性。保持数据业务规则的关联性是指数据脱敏时数据关联性及业务语义等保持不变,其中数据关联性包括主外键关联性、关联字段的业务语义关联性等。特别是高度敏感的账户类主体数据,往往会贯穿主体的所有关系和行为信息,因此需要特别注意保证所有相关主体数据的关联性。
④多次脱敏的数据一致性。相同的数据进行多次脱敏,或者在不同的测试系统中进行脱敏需要确保每次脱敏后的数据一致。只有这样才能保障业务系统数据变更的持续一致性以及广义业务的持续一致性。
2.对于敏感的客户的姓名、电话号码和地址等敏感信息,王涛将客户的姓名进行部分脱敏,只显示姓氏的首字母和星号,以隐藏客户的真实身份;电话号码中的数字进行随机替换,以模糊化真实号码。在这些操作中,他用到了哪些数据脱敏方法?
①姓名部分脱敏法:只显示姓氏的首字母和星号,以隐藏客户的真实身份;
②电话号码随机替换法:把客户电话号码中的数字进行随机替换,以模糊化真实号码。
3.王涛还可以采用哪些数据脱敏的方法提升金融数据的安全?请为每种方法举一个简单的例子。
①数据替换:用设置的定虚构值换真值。例如,将手机号码统一换为 13900010002。
②无效化: 通过对数据值的截断、加密、隐等使敏感数据脱敏,使其不再具有利用价值。例如,将地址的值替换为“******”。无效化与数据替换所达成的效果类似。
③偏移和取整:通过随机移位改变数值型数据。例如,把日期“2018-01-02 8:12:25”变为“2018-01-02 8:00:00”。偏移和取整在保持数据的安全性的同时,保证了范围的大致真实,这在大数据环境中具有重大价值。
④灵活编码:在需要特殊脱敏规则时,可执行灵活编码以满足各种脱敏规则。例如,用固定字母和固定位数的数字替代合同编号真值。
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成部分。
基本步骤:
把目标种子URL加入到待抓取的URL队列(发送HTTP请求到目标网站,请求网页的内容)然后读取URL,DNS解析并网页下载内容,同时把URL放入已爬取的URL中,最后进行网页解析后进行有效信息的存储。在访问已爬取过的URL时直接提取出URL并加入到待爬取的队列。
类型:
①通用网络爬虫(全网爬虫)
原理:爬行对象从一些种子 URL 扩充到整个 Web,该架构主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。
结构:分为页面爬行模块 、页面分析模块、链接过滤模块、页面数据库、URL 队列、初始URL集合。
爬行策略:深度优先策略和广度优先策略
②聚焦网络爬虫(主题网络爬虫)
原理:是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫。
结构:分为页面爬行模块 、页面分析模块、链接过滤模块、页面数据库、URL 队列、初始 URL 集合、链接评价模块以及内容评价模块几个部分。
爬行策略:基于内容评价的爬行策略、基于链接结构评价的爬行策略 、基于增强学习的爬行策略、基于语境图的爬行策略。
③增量式网络爬虫(核心:去重)
原理:是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。
结构:包含爬行模块、排序模块、更新模块、本地页面集、待爬行 URL 集以及本地页面URL 集。
爬行策略:统一更新法、个体更新法、基于分类的更新法;广度优先策略、PageRank 优先策略等(提高本地页面集中页面的质量)。
④深层网络爬虫
原理:深层网络是那些大部分内容不能通过静态链接获取的、隐藏在搜索界面后的,只有用户提交一些关键词才能获得的 Web 页面。
结构:包含六个基本功能模块 (爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS 控制器)和两个爬虫内部数据结构( URL 列表、LVS 表)。
爬行策略:Deep Web 爬虫爬行过程中最重要部分就是表单填写,包含两种类型:基于领域知识的表单填写、基于网页结构分析的表单填写
例如:小明尝试用自己的爬虫程序直接发送请求,但他发现网站返回了一个错误页面,并且在错误提示中提到了User-Agent。小明意识到网站通过检查User-Agent标头来识别爬虫请求。
应对:修改爬虫程序,设置一个合理的User-Agent标头,以模拟真实用户的请求。
小明可能会遇到以下一些反扒手段:
(1)User-Agent检测:小明尝试用自己的爬虫程序直接发送请求,但他发现网站返回了一个错误页面,并且在错误提示中提到了User-Agent。小明意识到网站通过检查User-Agent标头来识别爬虫请求。
应对:修改爬虫程序,设置一个合理的User-Agent标头,以模拟真实用户的请求。
(2)IP封禁:网站可能会根据IP地址来封锁访问频率过高或异常的IP地址。小明发现自己无法在网站上正常访问,怀疑自己的IP地址被网站屏蔽了。
应对:使用代理服务器。通过使用代理服务器来隐藏自己的真实IP地址,以避免IP限制。或者使用IP池来切换IP地址,以避免被封禁。可以通过购买专业的代理服务或者使用免费的代理网站来获取可用的代理IP。
(3)Cookie验证:网站可能会通过Cookie来验证用户的身份和访问权限。
应对:小明可以通过分析网站的Cookie生成规则,手动设置Cookie或者使用Cookie池来模拟真实用户的身份。
(4)验证码:网站设置验证码,要求用户输入正确的验证码才能继续访问。小明在爬取过程中遇到了验证码,需要手动输入才能继续访问网站。
应对:破解验证码:通过使用第三方库或者在线验证码识别平台来自动解析识别和输入验证码,可以通过调用API接口将验证码图片上传并获取识别结果,然后将识别结果自动填入验证码输入框。或者使用人工手动输入验证码。
(5)登录限制:小明发现部分页面需要登录才能访问,无法直接通过爬虫程序获取数据。
应对:使用模拟登录的方式,通过模拟真实用户的登录行为,包括发送POST请求携带用户名和密码进行登录操作。可以使用第三方库如Selenium来模拟浏览器行为进行登录。
(6)动态页面JavaScript渲染:网站可能会使用JavaScript动态加载数据或者进行页面渲染,而传统的爬虫程序无法执行JavaScript代码。小明发现网站的数据是通过JavaScript动态加载的,无法直接从HTML源码中获取到所需数据。
应对:使用无头浏览器,或者前端渲染技术。使用无头浏览器(Headless Browser)模拟真实用户的行为,可以解析动态页面并获取数据。例如使用Selenium + Chrome Headless等工具来模拟真实浏览器环境,让JavaScript得到执行并获取动态加载的数据(获取渲染后的页面数据)。
(7)请求频率限制:网站可能会对访问频率进行限制,例如设置每分钟或每小时只能访问一定次数。小明在短时间内发送大量请求,发现网站返回了错误或者拒绝访问。
应对:合理控制请求频率,可以通过设置延时或者随机延时来模拟人工访问的行为。通过设置访问间隔时间,或者使用分布式爬虫来分散访问压力,以避免被限制。另外,可以使用分布式爬虫技术,将请求分散到多个IP上,减少单个IP的请求频率。
(8)数据接口加密:网站可能会对数据接口进行加密或者进行访问权限限制。
应对:小明可以通过分析接口加密算法或者模拟登录获取访问权限,以获取加密的数据接口。
(9)数据混淆:网站可能会对数据进行混淆或者加密,使得爬虫无法直接解析和获取。
应对:小明可以通过分析数据混淆算法或者使用反混淆技术来还原数据。
(10)动态URL:网站可能会使用动态URL来生成页面,使得每次请求的URL都不同。
应对:小明可以通过分析URL生成规则,构造正确的URL来获取数据。
(11)模拟行为检测:网站可能通过分析用户的行为模式来检测是否是爬虫,例如检查鼠标移动、点击等行为。
应对:使用Selenium等工具模拟真实用户的行为,包括鼠标移动、点击等操作,以避免被检测为爬虫。
(12)Referer检测:网站可能通过检查请求头中的Referer来判断请求来源。
应对:在爬虫程序中设置合理的Referer,以模拟真实用户的请求来源。
1)Spider(爬虫):用于定义如何爬取特定网站(包括URL的生成和如何跟踪链接),以及如何从爬取的页面中提取数据。从特定的网页中提取自己需要的信息,负责解析响应并生成提取结果和新的请求。
2)Item(数据项):用于定义爬取的数据结构,类似于数据库表的结构。
3)Pipeline(管道):用于处理爬取到的数据,包括数据的清洗、去重、存储等操作。
4)Downloader(下载器):负责下载网页并将其转换为Scrapy能够处理的Response对象。用于下载网页内容,并将网页内容返回给爬虫
5)Scheduler(调度器):负责处理爬虫请求的调度顺序,确保请求按照合理的顺序发送给下载器。用来接受 Scrapy 引擎发过来的请求,压入队列中,并在引擎再次请求的时候提供给引擎。同时去除重复的网址
6)Downloader Middleware(下载器中间件):用于修改Scrapy的默认下载行为,如设置代理、修改请求头等。
7)Spider Middleware(爬虫中间件):用于修改Scrapy的默认爬虫行为,如修改请求、处理异常等
8)Engine:处理整个系统的数据流,触发事务,是整个爬虫的调度中心
9)Item Pipeline:负责处理由爬虫从网页中抽取的实体,主要任务是持久化实体、验证实体的有效性、清除不需要的信息
- Scrapy引擎(Engine)。Scrapy引擎相当于一个中枢站,负责调度器、项目管道、下载器和爬虫四个组件之间的通信。例如,将接收到的爬虫发来的 URL 发送给调度器,将爬虫的存储请求发送给项目管道。调度器发送的请求会被 Scrapy引擎提交到下载器进行处理,而下载器处理完成后会发送响应给 Scrapy引擎,Scrapy 引擎将其发送至爬虫进行处理。
- 爬虫( Spiders)。爬虫相当于一个解析器,负责接收 Srapy 引擎发送过来的响应,对其进行解析,开发人员可以在其内部编写解析规则。解析好后可以发送存储请求给 Scrapy 引擎。爬虫解析出的新的 URL后,可以向 Scrapy 引擎发送。注意,入口 URL 也存储在爬虫中。
- 下载器(Downloader)。下载器用于下载搜索引擎发送的所有请求,并将网页内容返回爬虫。下载器建立在 Twisted 这个高效的异步模型之上。
- 调度器(Scheduler)。调度器可以理解成一个队列,存储 Scrapy 引擎发送过来的 URL并按顺序取出URL发送给 Scrapy引擎进行请求操作。
- 项目管道(Item Pipeline)。项目管道是保存数据用的,它负责处理爬虫获取的项目,并进行处理,包括去重、持久化存储(如存数据库或写入文件)等。
- 下载器中间件(Downloader Middlewares)。下载器中间件是位于 Scrapy引擎和下载器间的框架,主要用于处理 Scrapy引擎与下载器之间的请求及响应,类似于自定义扩展下载功能的组件。
- 爬虫中间件(Spider Middlewares )。爬虫中间件是介于 Scrapy 引擎和爬虫之间的框架主要工作是处理爬虫的响应输入和请求输出。
- 调度器中间件(Scheduler Middlewares )。调度器中间件是介于 Scrapy 引擎和调度器之间的中间件,用于处理从 Scrapy引擎发送到调度器的请求和响应,可以自定义扩展和操作搜索引警与爬虫中间“通信”的功能组件(如进入爬虫的请求和从爬虫出去的请求 )。
①Scrapy 引擎从调度器中取出一个 URL 用于接下来的抓取。
②Scrapy 引擎把 URL 封装成一个请求并传给下载器。
③下载器把资源下载下来,并封装成应答包。
④爬虫解析应答包。
⑤如果解析出的是项目,则交给项目管道进行进一步的处理。
⑥如果解析出的是 URL,则把 URL 交给调度器等待抓取。