按照老师所讲,仅供参考
前面为大数据的相关概念,后面为爬虫概念及使用
实际用书为大数据导论。。。
第一章 概述
1.数据
所有能输入到计算机并被计算机程序处理的符号的总称
2.数据的分类
- 结构化数据:包括预定义的数据类型、格式和结构的数据。例如关系数据库和CSV文档
- 半结构数据:具有可识别的模式并可以解析的文本数据文件。例如JSON以及XML
- 非结构化数据:没有固定结构的数据,通常保存为不同格式的文件。例如文章,声音,视频
- 半结构化和非结构化数据只有转换成结构化数据才可以让机器学习。
3.大数据4V特征
- 规模大(Volume):数据的采集,计算,存储量都非常的庞大。
- 变化快(Velocity):数据增长速度快,处理速度也快,获取数据的速度也要快。
- 种类杂(Variety):种类和来源多样化。种类有结构化、半结构化、非结构化数据等,常见
的来源有:网络日志、音频、视频、图片等等。 - 价值密度低 (Value):数据价值密度相对较低,犹如浪里淘金,我们需要对一系列价值密
度低的数据进行分析处理,才能获取大量信息中所蕴含的部分有价值信息。
4.大数据的计算特征
近似性,增量性,归纳性
思维模式:采样 vs 全样,精确 vs 非精确,因果 vs 关联
5.数据处理的一般过程
- 数据获取:
数据获取后,需要对数据进行变换、清洗等预处理,输出满足数据应用要求的数据 - 数据管理:
对数据进行分类、编码、存储、索引和查询 - 数据分析:
描述性分析、诊断性分析、预测性分析和规范性分析 - 数据可视化与交互分析:
帮助业务人员而非数据处理专家更好的理解数据分析的结果
6.大数据应用到了哪些行业 ?试列举一例。
- 社交网络:大量音频、文本信息、视频、图片等非结构化数据出现
- 电子商务:能更全面丰富的获取用户现实购物兴趣
- 移动互联网:准确、更快地收集用户信息,如位置、生活信息等数据
第二章 数据采集与治理
1.大数据的来源:
- 对现实世界的测量:通过感知设备或的数据。
- 人类的记录:由人录入计算机形成数据
- 计算机生成的数据:计算机通过现实世界模拟等程序生成的数据
2.数据采集
是指从真实世界对象中获得原始数据的过程,可靠性和时效性
常用方法:传感器,日志,爬虫,众包
3.数据质量的评估标准
- 完整性:数据信息是否缺失
- 一致性:数据是否遵循了统一的规范,逻辑关系是否正确和完整
- 准确性:数据是否存在异常或错误
- 及时性:数据从产生到可以查看的时间间隔
4.数据质量影响因素
- 信息因素:数据源规格不统一
- 技术因素:技术处理的异常
- 流程因素:流程设置不当
- 管理因素:人员素质和管理机制问题
5.处理连续数据
数据离散化,等距,等频,优化离散
6.数据集成
- 传统数据集成:联邦数据库、数据仓库、Mediator
- 跨界数据集成:基于阶段的方法,基于特征的方法,基于语义的方法
7.分箱法
- 等深分箱法:每箱具有相同的记录数,每个箱子的记录数成为箱子的深度。
- 等宽分箱法:在整个数据值的区间上平均分割,使得每个箱子的区间相等,这个区间被称为箱 子的宽度。
- 用户自定义分箱法:根据用户自定义的规则进行分箱处理。
以下是客户收入属性的取值,请按照上述三种方案进行分箱处理
800 1000 1200 1500 1500 1800 2000 2300 2500 2800 3000 3500 4000 4500 4800 5000
8.平滑处理
9.聚类:
将数据集合分组为若干簇,在簇外的值即为孤立点,这些孤立点就是噪声数据,对这些孤立点进行删除或替换操作。相似或相邻近的数据聚合在一起形成各个聚类集合,在这些聚类集合之外的数据数据。
10.回归:
通过发现两个相关的变量之间相关关系,构造一个回归函数使得该函数能够最大程度地满足两个变量之间的关系,使用这个函数来平滑数据。
11.处理冗余数据
通常采用过滤数据的方法来处理冗余数据:
- 重复过滤,从每一个重复数据中取出一条记录保留下来,删去其他的重复数据
- 条件过滤,根据一个或多个条件对数据进行过滤
12.不一致监测与修复
基于数据的完整性约束,包含依赖、函数依赖、条件函数依赖等
13.缺失值填充方法
- 删除:直接删除相应的属性或者样本
- 统计填充:使用所有样本关于这一维的统计值进行填充,如平均数、中位数、众数、最大值最小 值等。
- 统一填充:将所有的缺失值统一填充为自定义值,如”空“、”0“、”正无穷“、”负无穷等。
- 预测填充:通过预测模型利用存在的属性值预测缺失值。
14.实体识别
使得每个经过实体识别后得到的对象簇在将现实世界中指代的是同一实体。
解决的问题:冗余问题,重名问题
两类技术:
- 冗余发现:计算对象之间的相似度,通过阈值比较进行判断对象是否为同一实体类。
- 重名检测:利用聚类技术,通过考察实体属性间的关联程度判定相同名称的对象是否为
同一实体类。
15.有人认为,自己的数据掌握在别人手中不安全,可能会被侵犯隐私,请问你对此有什么看法?
互联网充斥着我们的日常生活,我们的数据不可能完全的掌握在自己手中,我们在网络上传输任何信息都能被传输平台获取到甚至被一些人非法截取。我们能做的就是,不在钓鱼平台输入我们的数据,让不法分子有机可乘。正规的平台即便是能获取我们的数据,也不会做出侵犯隐私的行为。
你认为如何约束信息”持有者“才能保证其客户信息安全?
要让其做出正规的承诺不会利用客户信息进行隐私侵犯。如在使用手机软件的时候,会获取地理位置、短信等,需要让其保证仅用来使软件正常运行,而不是把获取的隐私信息非法分享出去。
第三章 大数据管理(这次不考,就闲的写写)
1.数据库管理技术
数据管理技术是指对数据进行分类、编码、存储、索引和查询,是大数据处理流程中的关键技术,负责数据从落地存储(写) 到查询检索(读) 的核心系统
2.数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库
3.关系数据库
核心是将数据保存在由行和列组成的简单表中,而不是将数据保存在一个层次结构中
特点:
1、数据集中控制;
2、数据独立性高;
3、数据共享性好;
4、数据冗余度小;
5、数据结构化;
6、统一的数据保护功能。
4.关系数据模型
- 都用关系表示
- 确保数据完整:实体完整性,参照完整性,自定义完整性
- 一行是一个元祖,列称为关系的属性
- 如果在一个关系中存在唯一标识一个元组的属性集合(可以是单一属性构成的集合),则称该属性集合为这个关系的键或码。
- 用来唯一标识一个元组的最小属性集合,称为主键(主码)。
5.关系数据模型的数据操作
- 查询
选择(Select)、投影(Project)、并(Union)、差(Except)以及连接(Join)等 - 更新
插入(Insert)、修改(Update)、删除(Delete)
6.数据库事务特性
- 原子性(Atomicity):事务所包含的所有操作要么全部正确地反映在数据库中,要么全部不反映;
- 一致性(Consistency):事务的执行会使数据库从一种一致性的状态达到另一种一致性状态,即事务的执行不会让数据库出现不一致;
- 隔离性(Isolation):事务之间是隔离的,每个事务都感觉不到系统中有其他事务在并发地执行;
- 持久性(Durability):一个事务成功完成后,它对数据库的改变是永久的,即使系统出现故障也是如此。
7.分布式文件系统
分布式文件系统建立在通过网络联系在一起的多台价格相对低廉的服务器上,将要存储的文件按照特定的策略划分成多个片段分散放置在系统中的多台服务器上
8.HDFS特点
- 适合大文件存储和处理
- 集群规模可动态扩展
- 能有效保证数据一致性
- 数据的吞吐量大,跨平台移植性好
第四章 python数据分析概述
1.数据分析
- 狭义的数据分析是指根据分析目的,采用对比分析、分组分析、交叉分析和回归分析等分析方法,对收集来的数据进行处理与分析,提取有价值的信息,发挥数据的作用,得到一个特征统计量结果的过程。
- 数据挖掘则是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,通过应用聚类、分类、回归和关联规则等技术,挖掘潜在价值的过程。
2.社交媒体分析
- 用户分析主要根据用户注册信息,登录平台的时间点和平时发表的内容等用户数据,分析用户个人画像和
行为特征。 - 访问分析则是通过用户平时访问的内容,分析用户的兴趣爱好,进而分析潜在的商业价值。
- 互动分析根据互相关注对象的行为预测该对象未来的某些行为特征。
3.python优势
- 简单、易学
- 免费、开源
- 高级语言
- 强大的第三方类库
- 可扩展性、可嵌入性、跨平台性
4.数据分析常用库
- IPython——科学计算标准工具集的组成部分
- NumPy(Numerical Python)—— Python 科学计算的基础包
- SciPy——专门解决科学计算中各种标准问题域的模块的集合
- Pandas——数据分析核心库
- Matplotlib——绘制数据图表的 Python 库
- scikit-learn——数据挖掘和数据分析工具
- Spyder——交互式 Python 语言开发环境
第五章 python爬虫简介
1.爬虫
网络爬虫也被称为网络蜘蛛、网络机器人,是一个自动下载网页的计算机程序或自动化脚本。
2.网页的特点
-
网页都有自己唯一的URL(统一资源命令符,如https://www.baidu.com/)来进行定位
-
网页都使用HTML(超文本标记语言)来描述页面信息
-
网页都使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据
3.策略
- 深度优先策略:按照深度由低到高的顺序,依次访问下一级网页链接,直到无法再深入为止。网页的层次结构图中的爬行顺序可以是:A → D → E → B → C → F → G。
- 广度优先策略:按照网页内容目录层次的深浅来爬行,优先爬取较浅层次的页面。当同一层中的页面全部爬行完毕后,爬虫再深入下一层。爬行顺序可以是:A→B→C→D→E→F→G。
4.爬虫分类
- 通用网络爬虫
又称为全网爬虫,其爬行对象由一批种子URL扩充至整个Web,该类爬虫比较适合为搜索引擎搜索广泛的主题,主要由搜索引擎或大型Web服务提供商使用 - 聚焦网络爬虫
又被称作主题网络爬虫,其最大的特点是只选择性地爬行与预设的主题相关的页面
基于内容评价的爬行策略
基于链接结构评价的爬行策略
基于增强学习的爬行策略
基于语境图的爬行策略
- 增量式网络爬虫
增量式网络爬虫只对已下载网页采取增量式更新或只爬行新产生的及已经发生变化的网页,需要通过重新访问网页对本地页面进行更新,从而保持本地集中存储的页面为最新页面
统一更新法:以相同的频率访问所有网页,不受网页本身的改变频率的影响。
个体更新法:根据个体网页的改变频率来决定重新访问各页面的频率。
基于分类的更新法:爬虫按照网页变化频率分为更新较快和更新较慢的网页类别,分别设定不同的频率来访问这两类网页。
- 深层网络爬虫
深层页面为大部分内容无法通过静态链接获取,隐藏在搜索表单后的,需要用户提交关键词后才能获得的Web页面
基于领域知识的表单填写:该种方法一般会维持一个本体库,通过语义分析来选取合适的关键词填写表单。
基于网页结构分析的表单填写:这种方法一般无领域知识或仅有有限的领域知识,将HTML网页表示为DOM树形式,将表单区分为单属性表单和多属性表单,分别进行处理,从中提取表单各字段值。
5.不能爬取
- 个人隐私数据:如姓名、手机号码、年龄、血型、婚姻情况等,爬取此类数据将会触犯个人信息保护法。
- 明确禁止他人访问的数据:例如用户设置了账号密码等权限控制,进行了加密的内容。
还需注意版权相关问题,有作者署名的受版权保护的内容不允许爬取后随意转载或用于商业用途。 - robots协议中的规定
6.robots.txt
User-agent: *
Disallow: /
Allow: /public/
- 上面的User-agent描述了搜索爬虫的名称,这里将其设置为*则代表该协议对任何爬取爬虫有效。 比如,我们可以设置:User-agent: Baiduspider 。这就代表我们设置的规则对百度爬虫是有效的。 如果有多条User-agent记录,则就会有多个爬虫会受到爬取限制,但至少需要指定一条。
- Disallow 指定了不允许抓取的目录,比如上例子中设置为/则代表不允许抓取所有页面。
- Allow一般和Disallow一起使用,一般不会单独使用,用来排除某些限制。 现在我们设置为/public/,则表示所有页面不允许抓取,但可以抓取public目录。
7.网站反爬虫的目的与手段***
- 通过User-Agent校验反爬
- 通过访问频度反爬
- 通过验证码校验反爬
- 通过变换网页结构反爬
- 通过账号权限反爬
8.上有政策下有对策 (ps:(◑▽◐)这不比爬取策略形象多了)
- 发送模拟User-Agent
- 调整访问频度
- 通过验证码校验
- 应对网站结构变化
- 通过账号权限限制
- 通过代理IP规避
9.爬虫相关库
第六章 网页前端基础
1.socket库
提供多种协议类型和函数,可用于建立TCP和UDP连接
2.HTTP请求方式与过程
- 由HTTP客户端向服务器发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。
- HTTP服务器从该端口监听客户端的请求。
- 一旦收到请求,服务器会向客户端返回一个状态,比如“HTTP/1.1 200 OK”,以及返回的响应内容,如请求的文件、错误消息、或其它信息。
3.常用请求方法
4.请求(request)与响应(response)
HTTP协议采用了请求/响应模型。
- 客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。
- 服务器以一个状态行作为响应,响应的内容包括协议的版本、响应状态、服务器信息、响应头部和响应数据
5.具体步骤
- 连接Web服务器
- 发送HTTP请求
- 服务器接受请求并返回HTTP响应
- 释放连接TCP连接
- 客户端解析HTML内容
6.HTTP状态码种类***
HTTP状态码是用来表示网页服务器响应状态的3位数字代码,按首位数字分为5类状态码
7.HTTP头部类型***
- 通用头:既适用于客户端的请求头,也适用于服务端的响应头。与HTTP消息体内最终传输的数据是无关的,只适用于要发送的消息。
- 请求头:提供更为精确的描述信息,其对象为所请求的资源或请求本身。新版HTTP增加的请求头不能在更低版本的HTTP中使用,但服务器和客户端若都能对相关头进行处理,则可以在请求中使用。
- 响应头:为响应消息提供了更多信息。例如,关于资源位置的描述Location字段,以及关于服务器本身的描述使用Server字段等。与请求头类似,新版增加的响应头也不能在更低版本的HTTP版本中使用。
- 实体头:提供了关于消息体的描述。如消息体的长度Content-Length,消息体的MIME类型Content-Type。新版的实体头可以在更低版本的HTTP版本中使用。
8.cookie
- 客户端请求服务器:客户端请求网站页面
- 服务器响应请求:Cookie是一种字符串,为key=value形式,服务器需要记录这个客户端请求的状态,在响应头中增加一个Set-Cookie字段。
- 客户端再次请求服务器:客户端会对服务器响应的Set-Cookie头信息进行存储。当再次请求时,将会在请求头中包含服务器响应的Cookie信息。
Cookie机制可记录用户状态,服务器可依据Cookie对用户状态进行记录与识别。
第七章 简单静态网页爬取
1.静态网页
静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。
2.爬虫基本流程***
- 发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
- 获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
- 解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
- 保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
3.urllib3库***
- (1)生成请求
urllib3.request(method,url,fields=None,headers=None,**urlopen_kw)
-
(2)请求头处理
在request方法中,如果需要传入headers参数,可通过定义一个字典类型实现。定义一个包含User-Agent信息的字典,使用浏览器为火狐和chrome浏览器,操作系统为“Windows NT 6.1; Win64; x64”,向网站“https://www.jd.com/index.html”发送带headers参数的GET请求,hearders参数为定义的User-Agent字典。 -
(3)Timeout设置
为防止因为网络不稳定、服务器不稳定等问题造成连接不稳定时的丢包,可以在请求中增加timeout参数设置,通常为浮点数。
依据不同需求,timeout参数提供多种设置方法,可直接在URL后设置该次请求的全部timeout参数,也可分别设置该次请求的连接与读取timeout参数,在PoolManager实例中设置timeout参数可应用至该实例的全部请求中。 -
(4)请求重试设置
urllib3库可以通过设置retries参数对重试进行控制。默认进行3次请求重试,并进行3次重定向。自定义重试次数通过赋值一个整型给retries参数实现,可通过定义retries实例来定制请求重试次数及重定向次数。 -
(5)生成完整HTTP请求
使用urllib3库实现生成一个完整的请求,该请求应当包含链接、请求头、超时时间和重试次数设置。
4.requests库
requests库是一个原生的HTTP库,比urllib3库更为容易使用
- (1)生成请求
requests.request.method(url,**kwargs)
hd= {'User-Agent':'Chorme/10'}
r = request.get(url,headers=hd)
-
(2)查看状态码与编码
当requests库猜测错时,需要手动指定encoding编码,避免返回的网页内容解析出现乱码。
使用detect库检测 -
(3)请求头与响应头处理
requests库中对请求头的处理与urllib3库类似,也使用headers参数在GET请求中上传参数,参数形式为字典。使用headers属性即可查看服务器返回的响应头,通常响应头返回的结果会与上传的请求参数对应。 -
(4)Timeout设置
在requests库中通过设置timeout这个参数实现,超过该参数设定的秒数后,程序会停止等待。 -
(5)生成完整HTTP请求
一个完整的GET请求,该请求包含链接、请求头、响应头、超时时间和状态码,并且编码应正确设置。
利用decode函数对requests.content解决中文乱码
import requests
url = "http://xxx.com"
r = requests.get(url)
print(r.content.decode("gbk"))
5.chrome开发者工具
6.正则表达式
正则表达式是一种可以用于模式匹配和替换的工具,可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与待比较字符串或文件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
import re
example_obj = "1. A small sentence. - 2. Another tiny sentence. "
re.findall('sentence',example_obj) #从字符串任意位置查找,可以找到所有满足匹配条件的结果,并以列表的形式返回!!!
re.search('sentence',example_obj) #可以扫描整个字符串并返回第一个成功的匹配!!!
re.sub('sentence','SENTENCE',example_obj) ##替换
re.match('.*sentence',example_obj) ##必须从字符串开头匹配!!!
常用广义化符号
1、英文句号“.”:能代表除换行符“\n”任意一个字符;
2、字符类“[]”:被包含在中括号内部,任何中括号内的字符都会被匹配;
3、管道“|”:该字符被视为OR操作;
7.获取网页中的标题内容
使用正则表达式无法很好的定位特定节点并获取其中的链接和文本内容,而使用Xpath和Beautiful Soup能较为便利的实现这个功能。
8.xpath
- 它是一种基于XML的树状结构,在数据结构树中找寻节点,确定XML文档中某部分位置的语言
- (1)基本语法
初始化
lxml.etree.HTML(text, parser=None, *, base_url=None)
- (2)常用匹配表达式
- (3)功能函数
9.Beautiful Soup
- (1)创建
BeautifulSoup("<html>data</html>") #通过字符串创建
BeautifulSoup(open("index.html")) #通过HTML文件创建
- (2)格式化输出
BeautifulSoup.prettify(self, encoding=None, formatter='minimal')
对象类型
1.Tag对象类型
Tag有两个非常重要的属性:name和attributes。name属性可通过name方法来获取和修改,修改过后的name属性将会应用至BeautifulSoup对象生成的HTML文档。
2.NavigableString对象类型
NavigableString对象为包含在Tag中的文本字符串内容,如“The Dormouse‘s story ”中的“The Dormouse’s story”,使用string的方法获取,NavigableString对象无法被编辑,但可以使用replace_with的方法进行替换。
3.BeautifulSoup对象类型
BeautifulSoup对象表示的是一个文档的全部内容。大部分时候,可以把它当作Tag对象。 BeautifulSoup对象并不是真正的HTML或XML的tag,所以并没有tag的name和attribute属性,但其包含了一个值为“[document]”的特殊属性name。
4Comment对象类型
Tag、NavigableString、BeautifulSoup几乎覆盖了html和xml中的所有内容,但是还有一些特殊对象,文档的注释部分是最容易与Tag中的文本字符串混淆的部分。Beautiful Soup库中将文档的注释部分识别为Comment类型,Comment对象是一个特殊类型的NavigableString对象,但是当其出现在HTML文档中时,Comment对象会使用特殊的格式输出,需调用prettify方法。
- (3)搜索
常用的有find方法和find_all方法,两者的参数一致,区别为find_all方法的返回结果是值包含一个元素的列表,而find直接返回的是结果。
BeautifulSoup.find_all(name,attrs,recursive,string,**kwargs)
10.数据存储
将数据存储为JSON文件
json.dump(obj,fp,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,encoding='utf-8', default=None, sort_keys=False, **kw)
代码实例分析
1.request获取网页title
page = urllib.request.urlopen('https://www.cnki.net/') #获取网页
html = page.read().decode('utf-8')#转换成utf-8
title=re.findall('<title>(.+)</title>',html)#获取title之间所有内容
print (title)#输出
2.网页热词
https://weixin.sogou.com/
看到路径是名为topwords的ol下的li下的a
这里不直接 查找i标签后的,因为它的i标签不是全有特殊class名(什么辣鸡玩意,白费好久功夫)
- bs4获取
html_doc = "https://weixin.sogou.com/"#网页链接
req = urllib.request.Request(html_doc) #构造请求
webpage = urllib.request.urlopen(req) #获取网页
html = webpage.read().decode('utf-8')#utf-8打开
soup = BeautifulSoup(html, 'html.parser')#指定html.parser解析器解析
str=[]
top=soup.find(name="ol", attrs={"id" :"topwords"})#找到id为topwords的ol标签
for child in top.find_all('a'):#找到子孙标签中所有a标签
#print(child.string)
str.append(child.string)#保存标签内容
filename='sougou.json'
with open(filename,'w') as file_obj:
json.dump(str,file_obj)#写入json文件
with open(filename) as file_obj:
str=json.load(file_obj)#从json文件读取
print(str)
- xpath
url = "https://weixin.sogou.com/" #请求地址
response = requests.get(url= url) #返回结果
wb_data = response.text #文本展示返回结果
html = etree.HTML(wb_data) #将页面转换成文档树
str2=[]
content=html.xpath('//ol[@id="topwords"]/li/a/text()')#获取根节点下id为topwords的ol标签的子li标签的子a标签的内容
for item in content:
#print(item.encode('ISO-8859-1').decode('UTF-8'))
str2.append(item.encode('ISO-8859-1').decode('UTF-8'))#保存
filename2='sougou2.json'
with open(filename2,'w') as file_obj:
json.dump(str2,file_obj)#写入json文件
with open(filename2) as file_obj:
str2=json.load(file_obj)#读取json文件
print(str2)
动态网页仅仅提及,不写了
✿✿ヽ(゚▽゚)ノ✿完结撒花!