三因素五水平正交表三水平 响应面生成的17组数据 -1是最低值1是最高值 0代表什么意思?

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
数据挖掘基础教程(完整版) .pdf 273页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
数据挖掘基础教程(完整版) .pdf
你可能关注的文档:
··········
··········
数据挖掘基础教程
SAS EM 案例操作详解
2011 年 2 月
(讲义稿)
西南财经大学
金融智能与金融工程省重点实验室编著
数据和数据处理
数据和信息
数据和信息
1.1.2 SAS 中的数据
数据预处理概述
原始数据存在的问题
数据预处理的重要性
1.3 数据清洗
1.3.1 缺失值的处理
噪声数据处理
不一致数据处理
1.4 数据集成
1.5 数据转换处理
1.5.1 数据规范化处理
1.5.2 属性构造
1.6 数据消减
数据立方合计
数据块的消减
1.7 使用 SAS EM 进行数据预处理
1.8 思考题和练习
数据挖掘工具与方法
2.1 SAS 及其应用
2.2 SAS 数据挖掘方法-SEMMA 模型
2.2.1 Sample──数据取样
2.2.2 Explore──数据特征探索、分析和预处理
2.2.3 Modify──问题明确化、数据调整和技术选择
2.2.4 Model──模型的研发、知识的发现
2.2.5 Assess──模型和知识的综合解释和评价
其它数据挖掘软件工具
2.3.1 开源数据挖掘软件
2.3.2 SPSS
2.3.3 R 语言
思考题与练习
3.1 关联分析算法的基本原理
3.1.1 基本概念
3.1.2 规则有效性的评价标准
3.1.3 穷举法和 Apriori 方法
3.2 运用 SAS 进行关联分析
3.3 参考文献
4.1 聚类分析案例解析
4.2 聚类算法的基本原理
4.2.1 距离度量方法
4.2.2 相似系数度量方法
正在加载中,请稍后...您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
离子液体的制备及在脱硫中及应用1.doc 80页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
西北大学学位论文知识产权声明书
本人完全了解西北大学关于收集、保存、使用学位论文的规定。学校有权保留并向国家有关部门或机构送交论文的复印件和电子版。本人允许论文被查阅和借阅。本人授权西北大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。同时授权中国科学技术信息研究所等机构将本学位论文收录到《中国学位论文全文数据库》或其它相关数据库。
保密论文待解密后适用本声明。
学位论文作者签名:
指导教师签名:
西北大学学位论文独创性声明
本人声明:所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,本论文不包含其他人已经发表或撰写过的研究成果,也不包含为获得西北大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。
学位论文作者签名:
随着国家环保法规的日益严格,生产低硫汽油炼油业21世纪面临的迫切任务开展脱硫新技术的研究当务之急
离子液体作为一种新型绿色环保溶剂,具有不挥发、蒸汽压低、液态范围宽、热稳定性高等优点,基于这些优点使离子液体应用到FCC汽油脱硫中克服了传统脱硫技术中存在的不足,具有广阔的应用前景。
本论文主要对离子液体的制备及离子液体在脱硫方面的应用进行研究。
首先,采用微波法合成了离子液体1-丁基-3-甲基四氟硼酸盐([BMIM]BF4),并对其进行了红外光谱的表征。合成中间体1-丁基-3-甲基咪唑([BMIM]Br)的单因素实验结果表明,最佳合成工艺为:采用微波法合成,微波功率为320W,间歇反应时间为100s,配料比为1.1:1,分批加入N-甲基咪唑。合成[BMIM]BF4的单因素实验结果表明,最佳合成条件为:微波功率为320W,间歇反应时间为360s,采用蒸馏水作溶剂。红外光谱结果进一步表明,实验合成的离子液体是[BMIM]Br和[BMIM]BF4。同时采用一步合成法合成了盐酸三乙胺盐类离子液体,并对其溶解性和粘度进行了研究。
其次,本文利用制备的1-丁基-3-甲基四氟硼酸盐和盐酸三乙胺盐离子液体分别进行了脱硫实验,考察离子液体的脱硫效果。实验结果如下:
1. 在离子液体[BMIM]BF4的作用下,采用氧化萃取法的脱硫率明显高于直接萃取法。氧化萃取法脱硫的最佳条件为:剂油比v(IL):v(oil)=0.8,氧化时间t=180min,温度T=50℃,双氧水的体积v=2.5mL,脱硫率达到87.1%。同时[BMIM]BF4有很好的重复使用性能,重复使用5次脱硫率几乎不变。
2. 盐酸三乙胺盐离子液体的单因素脱硫实验结果为:萃取温度T=50℃,剂油比v(IL):v(oil)=0.08,萃取时间t=50mim,反应结束后静置15mim。
在单因素实验的基础上,根据Plackett-Burman试验设计对影响脱硫率的因素进行评价,得出剂油比、反应时间和反应温度是对脱硫率影响显著的因素。然后采用响应面法中的Box-Behnken设计对反应条件进行优化,得出最佳反应条件为:剂油比v(IL):v(oil)=0.1,反应温度T=54.3807℃,反应时间t=41.12min。在最佳反应条件下的理论最佳脱硫率为96.18%,经验际脱硫率为95.62,比理论稍低,实验所得模型非常可靠。
最后将盐酸乙胺盐离子液体应用在FCC汽油脱硫中。实验结果表明, [Et3NH]Cl-FeCl3/CuCl离子液体不但具有脱硫的效果同时还具有将烯烃的能力,单次脱硫率为64.64%,降烯率为32.59%。
关键词:1-丁基-3-甲基四氟硼酸盐离子液体,盐酸三乙胺盐离子液体,微波法合成,FCC汽油,响应面,脱硫,降烯烃
With the increasingly stringent national environmental rules, the production of low sulfur gasoline has become an urgent task of the petroleum refining industry in the 21st century. The catalytic cracking (FCC) gasoline accounts for about 80% of the total gasoline production in China, so gasoline sulfur mainly from FC
正在加载中,请稍后...您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
弹道学报第1期.pdf 112页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
弹道学报第1期
你可能关注的文档:
··········
··········
空间飞行器的一种直接定点入轨控制方法 ………………………… 刘新建 郝子龙 高兴龙
再入飞行器多约束预测 修正末导引律研究………………………… 冯必鸣 聂万胜 李 柯
多约束条件下高超声速导弹再入轨迹优化
……………………… 国海峰 黄长强 丁达理 等
自适应网格细化算法及应用 ……………………………… 王丽英 张友安 赵国荣 ( )
稳健优化在导弹启控点选择中的应用
…………………………… 朱大林 唐胜景 郭 杰 等
脉冲横流对末修弹气动特性的影响分析
………………………… 孙瑞胜 张 军 刘鹏云 等
脉冲修正弹参数优化设计方法
……………………………………… 常思江 曹小兵 王中原 等
非均匀参数化方法在弹道优化中的应用 …………………………… 郭尚生 杨荣军 王良明 ( )
反跑道与区域封锁子母弹联合封锁效能的评估方法
………… 黄广炎
正在加载中,请稍后...您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
南五味子“醋制入肝”炮制机理分析-analysis of processing mechanism of.docx 84页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
南五味子“醋制入肝”炮制机理分析-analysis of processing mechanism of
你可能关注的文档:
··········
··········
StudyonMechanismof“CuzhiRugan”ofFructusSchisandraeSphenantheraeAbstractObjective:OptimizevinegarcraftworkofFructusSchisandraeSphenantherae.CombinedwiththevitroChemistryexperimentsandthecomprehensiveevaluationofserumpharmacochemistryandPharmacokinetics,inquiryprocessingof―CuzhiRugan‖ofFructusSchisandraeSphenantherae.Method:1.ViengarcraftworkoftheFructusSchisandraeSphenantherae:Makingthefingerprintastheevaluationindexandusing3factorsand3levelsofBox-Behnkenresponsesurfaceexperimentaldesign,theeffectofvinegarquantity,moisteningtime,steamingtimeonvinegarpreparationprocessofFructusSchisandraeSphenantheraewasstudied,theviengartechnologyofFructusSchisandraeSphenantheraewasoptimized.Thestudyontheprocessingprincipleof―CuzhiRugan‖ofFructusSchisandraeSphenantherae:thedifferenceofDeoxyschizandrin、SchisantherinAandtheoil-waterpartitioncoefficientwereanalysisedbyHPLCmethodbeforeanafterthevinegar-Thedifferencesofα-amylaseinhibitionratioofthedifferentchemicalfractionsbeforeandaftervinegar-steamedofFructusSchisandraeSphenantheraeweredeterminedbyusingDNSandtheresistanceα-amylaseactivUVspectrophotometrywasusedtodeterminetheeffectsofFructusSchisandraeSphenantheraebeforeandaftervinegar-steamedontheDPPHabsorbance,estimatingthedifferenceintheaspectofanti-oxidationbetweenvinegar-steamedandnon-vinegar-steamedFructusSchisandraeSUsingCCl4inducedacuteliverinjuryinratsasanimalmodel,thelivertissueweresectionedwithin24htodeterminethechangesoftotalantioxidationability(T-AOC)oflivertissuewithhigh,midandlowdosegroupbeforeandaftervinegar-steamedofFructusSchisandraeSThedifferenceofantioxidantabilitybeforeandaftevinegar-steamedofFructusSchisandraeSphenantheraewascomprehensiveevaStudyonserumpharmacochemistryofvinegar-steamedofFructusSchisandraeSphenantherae:theconstituentswithactivesubstanceintothebloodbeforeandaftevinegar-steamedofFructusSchisandraeSphenantheraewerecomparativeanalysisedbyusingHPLCfingerprinting.StudyonthePharmac
正在加载中,请稍后...&p&先说结论,人肉搜索不是你想防止就能防止的,只要你在网上,我就能找到你。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-fcee614cd6abc98ec40196ddd839b49b_b.jpg& data-caption=&& data-size=&small& data-rawwidth=&1080& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/50/v2-fcee614cd6abc98ec40196ddd839b49b_r.jpg&&&/figure&&p&这是一个典型的安全攻防场景,攻击者的目的是获得信息,无论用什么方式;而防御者非常被动,就算被人攻击了也不会发现,你知道自己的信息是什么时候,以何种方式泄露的吗?安全对抗的本质是&b&成本vs收益&/b&,只能尽量去提高攻击者的成本。&/p&&p&记得2007年的暑假,大家都是单纯的少年,在网上填写的都是真实个人信息,网站上的低级漏洞也是五花八门。当时校内网(人人网)刚出现,同学们都会把真实的个人资料填在上面,简直是国内最大的&b&社工信息库&/b&,还可以利用漏洞获得更多的信息。为了在开学前先了解下将来的同学,用两天时间搜集了学校07级学生的所有信息,包括姓名、身份证、学号、电话、家庭信息、高考成绩等。所以你想去人肉别人,需要强大的信息收集能力和分析能力,你必须&b&思考如何才能获得你需要的信息&/b&。&/p&&p&首先思考下,为什么搜一个ID,在其他地方就能看到相关的内容呢?&/p&&p&1.数据是可以被搜索到的&/p&&p&2.你有权限获取数据&/p&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic1.zhimg.com/cade3bf72a62c12d85ec5a0c_120x160.jpg& data-image-width=&405& data-image-height=&600& class=&internal&&lxghost:谍影重重5 - 威胁情报实战&/a&&p&这篇文章里的介绍了一些新的系统,有助你提高对人肉搜索的理解,不是用搜索引擎那么简单,而是需要很多强大的武器~&/p&&p&国外有一些系统的教程和方法论,国内并没人做这方面的研究,更没有什么技术交流.....&/p&&a href=&//link.zhihu.com/?target=http%3A//osintframework.com/& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OSINT Framework&/a&&figure&&img src=&https://pic3.zhimg.com/50/v2-659a4d59fea0fcf41f8bcb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1748& data-rawheight=&1474& class=&origin_image zh-lightbox-thumb& width=&1748& data-original=&https://pic3.zhimg.com/50/v2-659a4d59fea0fcf41f8bcb_r.jpg&&&/figure&&a href=&//link.zhihu.com/?target=https%3A//inteltechniques.com/menu.html& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-a2f7cba32d3ad715cce433f_180x120.jpg& data-image-width=&1150& data-image-height=&125& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OSINT Search Tool by IntelTechniques&/a&&figure&&img src=&https://pic1.zhimg.com/50/v2-40c07c423ea849a50dab68d2d573e62c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1732& data-rawheight=&1324& class=&origin_image zh-lightbox-thumb& width=&1732& data-original=&https://pic1.zhimg.com/50/v2-40c07c423ea849a50dab68d2d573e62c_r.jpg&&&/figure&&p&下图是一个知乎用户的基础信息&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-dff7bfcfb43_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&978& data-rawheight=&904& class=&origin_image zh-lightbox-thumb& width=&978& data-original=&https://pic3.zhimg.com/50/v2-dff7bfcfb43_r.jpg&&&/figure&&p&随便找了个人,试了下&人肉搜索&,然而这些只是开始,需要深入进去才行,让每一个数据都发挥出最大的价值。&/p&&p&不过后面的内容我就不写了 &/p&
先说结论,人肉搜索不是你想防止就能防止的,只要你在网上,我就能找到你。这是一个典型的安全攻防场景,攻击者的目的是获得信息,无论用什么方式;而防御者非常被动,就算被人攻击了也不会发现,你知道自己的信息是什么时候,以何种方式泄露的吗?安全对抗…
&p&&b&摘要:&/b&本文详细讲解了python网络爬虫,并介绍抓包分析等技术,实战训练三个网络爬虫案例,并简单补充了常见的反爬策略与反爬攻克手段。通过本文的学习,可以快速掌握网络爬虫基础,结合实战练习,写出一些简单的爬虫项目。&/p&&p&&br&&/p&&p&&b&演讲嘉宾简介:&/b&&/p&&p&韦玮,企业家,资深IT领域专家/讲师/作家,畅销书《精通Python网络爬虫》作者,阿里云社区技术专家。&/p&&p&&br&&/p&&p&&b&&a href=&https://link.zhihu.com/?target=http%3A//click.aliyun.com/m/45830/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&本次直播视频精彩回顾,戳这里!&/a&&/b&&/p&&p&&b&&a href=&https://link.zhihu.com/?target=https%3A//yq.aliyun.com/download/2467& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&本节课(爬虫)所有代码下载&/a&&/b&&/p&&p&&br&&/p&&p&以下内容根据演讲嘉宾视频分享以及PPT整理而成。&/p&&p&&br&&/p&&p&本次的分享主要围绕以下五个方面:&/p&&p&一、数据采集与网络爬虫技术简介&/p&&p&二、网络爬虫技术基础&/p&&p&三、抓包分析&/p&&p&四、挑战案例&/p&&p&五、推荐内容&/p&&p&&br&&/p&&h2&&b&一、数据采集与网络爬虫技术简介&/b&&/h2&&p&网络爬虫是用于数据采集的一门技术,可以帮助我们自动地进行信息的获取与筛选。从技术手段来说,网络爬虫有多种实现方案,如PHP、Java、Python ...。那么用python 也会有很多不同的技术方案(Urllib、requests、scrapy、selenium...),每种技术各有各的特点,只需掌握一种技术,其它便迎刃而解。同理,某一种技术解决不了的难题,用其它技术或方依然无法解决。网络爬虫的难点并不在于网络爬虫本身,而在于网页的分析与爬虫的反爬攻克问题。希望在本次课程中大家可以领会爬虫中相对比较精髓的内容。&/p&&p&&br&&/p&&h2&&b&二、网络爬虫技术基础&/b&&/h2&&p&在本次课中,将使用Urllib技术手段进行项目的编写。同样,掌握了该技术手段,其他的技术手段也不难掌握,因为爬虫的难点不在于技术手段本身。本知识点包括如下内容:&/p&&p&·Urllib基础&/p&&p&·浏览器伪装&/p&&p&·用户代理池&/p&&p&·糗事百科爬虫实战&/p&&p&需要提前具备的基础知识:正则表达式&/p&&p&&br&&/p&&p&&b&1)Urllib基础&/b&&/p&&p&爬网页&/p&&p&打开python命令行界面,两种方法:ulropen()爬到内存,urlretrieve()爬到硬盘文件。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&&& import urllib.request
#open百度,读取并爬到内存中,解码(ignore可忽略解码中的细微错误), 并赋值给data
&&& data=urllib.request.ulropen(&http://www.baidu.com&).read().decode(&utf-8”, “ignore&)
#判断网页内的数据是否存在,通过查看data长度
&&& len(data)
提取网页标题
#首先导入正则表达式, .*?代表任意信息,()代表要提取括号内的内容
&&& import re
#正则表达式
&&& pat=&&title&(.*?)&/title&&
#re.compile()指编译正则表达式
#re.S是模式修正符,网页信息往往包含多行内容,re.S可以消除多行影响
&&& rst=re.compile(pat,re.S).findall(data)
&&& print(rst)
#[‘百度一下,你就知道’]
&/code&&/pre&&/div&&p&同理,只需换掉网址可爬取另一个网页内容&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&&& data=urllib.request.ulropen(&http://www.jd.com&).read().decode(&utf-8&, &ignore&)
&&& rst=re.compile(pat,re.S).findall(data)
&&& print(rst)
&/code&&/pre&&/div&&p&上面是将爬到的内容存在内存中,其实也可以存在硬盘文件中,使用urlretrieve()方法&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&&& urllib.request.urlretrieve(&http://www.jd.com&,filename=&D:/我的教学/Python/阿里云系列直播/第2次直播代码/test.html&)
&/code&&/pre&&/div&&p&之后可以打开test.html,京东网页就出来了。由于存在隐藏数据,有些数据信息和图片无法显示,可以使用抓包分析进行获取。&/p&&p&&br&&/p&&p&&b&2)浏览器伪装&/b&&/p&&p&尝试用上面的方法去爬取糗事百科网站url=&&a href=&https://link.zhihu.com/?target=https%3A//www.qiushibaike.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&qiushibaike.com/&/span&&span class=&invisible&&&/span&&/a&&,会返回拒绝访问的回复,但使用浏览器却可以正常打开。那么问题肯定是出在爬虫程序上,其原因在于爬虫发送的请求头所导致。&/p&&p&打开糗事百科页面,如下图,通过F12,找到headers,这里主要关注用户代理User-Agent字段。User-Agent代表是用什么工具访问糗事百科网站的。不同浏览器的User-Agent值是不同的。那么就可以在爬虫程序中,将其伪装成浏览器。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-a6f6d49a31f33d96b4ad7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1920& data-rawheight=&1041& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic2.zhimg.com/v2-a6f6d49a31f33d96b4ad7_r.jpg&&&/figure&&p&将User-Agent设置为浏览器中的值,虽然urlopen()不支持请求头的添加,但是可以利用opener进行addheaders,opener是支持高级功能的管理对象。代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#浏览器伪装
url=&https://www.qiushibaike.com/&
#构建opener
opener=urllib.request.build_opener()
#User-Agent设置成浏览器的值
UA=(&User-Agent&,&Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0. Safari/537.36 SE 2.X MetaSr 1.0&)
#将UA添加到headers中
opener.addheaders=[UA]
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read().decode(&utf-8&,&ignore&)
&/code&&/pre&&/div&&p&&br&&/p&&p&&b&3)用户代理池&/b&&/p&&p&在爬取过程中,一直用同样一个地址爬取是不可取的。如果每一次访问都是不同的用户,对方就很难进行反爬,那么用户代理池就是一种很好的反爬攻克的手段。&/p&&p&第一步,收集大量的用户代理User-Agent&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#用户代理池
&Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393&,
&Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0&,
&Mozilla/4.0 ( MSIE 7.0; Windows NT 5.1; Maxthon 2.0)&,
&/code&&/pre&&/div&&p&&br&&/p&&p&第二步,建立函数UA(),用于切换用户代理User-Agent&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def UA():
opener=urllib.request.build_opener()
#从用户代理池中随机选择一个
thisua=random.choice(uapools)
ua=(&User-Agent&,thisua)
opener.addheaders=[ua]
urllib.request.install_opener(opener)
print(&当前使用UA:&+str(thisua))
&/code&&/pre&&/div&&p&for循环,每访问一次切换一次UA&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&for i in range(0,10):
data=urllib.request.urlopen(url).read().decode(&utf-8&,&ignore&)
&/code&&/pre&&/div&&p&每爬3次换一次UA&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&for i in range(0,10):
if(i%3==0):
data=urllib.request.urlopen(url).read().decode(&utf-8&,&ignore&)
&/code&&/pre&&/div&&p&(*每几次做某件事情,利用求余运算)&/p&&p&&br&&/p&&p&&b&4)第一项练习-糗事百科爬虫实战&/b&&/p&&p&目标网站:&a href=&https://link.zhihu.com/?target=https%3A//www.qiushibaike.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&qiushibaike.com/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&需要把糗事百科中的热门段子爬取下来,包括翻页之后内容,该如何获取?&/p&&p&&br&&/p&&p&第一步,对网址进行分析,如下图所示,发现翻页之后变化的部分只是page后面的页面数字。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-bc40_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&184& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic2.zhimg.com/v2-bc40_r.jpg&&&/figure&&p&&br&&/p&&p&第二步,思考如何提取某个段子?查看网页代码,如下图所示,可以发现&div class=&content&&的数量和每页段子数量相同,可以用&div class=&content&&这个标识提取出每条段子信息。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-3cb7fb690ffba3c6cc05031_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1920& data-rawheight=&1033& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-3cb7fb690ffba3c6cc05031_r.jpg&&&/figure&&p&&br&&/p&&p&第三步,利用上面所提到的用户代理池进行爬取。首先建立用户代理池,从用户代理池中随机选择一项,设置UA。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import urllib.request
import random
#用户代理池
&Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393&,
&Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0&,
&Mozilla/4.0 ( MSIE 7.0; Windows NT 5.1; Maxthon 2.0)&,
opener=urllib.request.build_opener()
thisua=random.choice(uapools)
ua=(&User-Agent&,thisua)
opener.addheaders=[ua]
urllib.request.install_opener(opener)
print(&当前使用UA:&+str(thisua))
#for循环,爬取第1页到第36页的段子内容
for i in range(0,35):
#构造不同页码对应网址
thisurl=&http://www.qiushibaike.com/8hr/page/&+str(i+1)+&/&
data=urllib.request.urlopen(thisurl).read().decode(&utf-8&,&ignore&)
#利用&div class=&content&&提取段子内容
pat='&div class=&content&&.*?&span&(.*?)&/span&.*?&/div&'
rst=re.compile(pat,re.S).findall(data)
for j in range(0,len(rst)):
print(rst[j])
print(&-------&)
&/code&&/pre&&/div&&p&还可以定时的爬取:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&Import time
#然后在后面调用time.sleep()方法
&/code&&/pre&&/div&&p&换言之,学习爬虫需要灵活变通的思想,针对不同的情况,不同的约束而灵活运用。&/p&&p&&br&&/p&&h2&&b&三、抓包分析&/b&&/h2&&p&抓包分析可以将网页中的访问细节信息取出。有时会发现直接爬网页时是无法获取到目标数据的,因为这些数据做了隐藏,此时可以使用抓包分析的手段进行分析,并获取隐藏数据。&/p&&p&&b&1)Fiddler简介&/b&&/p&&p&抓包分析可以直接使用浏览器F12进行,也可以使用一些抓包工具进行,这里推荐Fiddler。Fiddler下载安装。假设给Fiddler配合的是火狐浏览器,打开浏览器,如下图,找到连接设置,选择手动代理设置并确定。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0b6d3ae58ad8a7176af39e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&669& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&669& data-original=&https://pic4.zhimg.com/v2-0b6d3ae58ad8a7176af39e_r.jpg&&&/figure&&p&&br&&/p&&p&假设打开百度,如下图,加载的数据包信息就会在Fiddler中左侧列表中列出来,那么网站中隐藏相关的数据可以从加载的数据包中找到。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-4e8bd2457e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&848& data-rawheight=&464& class=&origin_image zh-lightbox-thumb& width=&848& data-original=&https://pic1.zhimg.com/v2-4e8bd2457e_r.jpg&&&/figure&&p&&br&&/p&&p&&b&2)第二项练习-腾讯视频评论爬虫实战&/b&&/p&&p&目标网站:&a href=&https://link.zhihu.com/?target=https%3A//v.qq.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&v.qq.com/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&需要获取的数据:某部电影的评论数据,实现自动加载。&/p&&p&&br&&/p&&p&首先可以发现腾讯视频中某个视频的评论,在下面的图片中,如果点击”查看更多评论”,网页地址并无变化,与上面提到的糗事百科中的页码变化不同。而且通过查看源代码,只能看到部分评论。即评论信息是动态加载的,那么该如何爬取多页的评论数据信息?&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c68b0664ecccd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1920& data-rawheight=&1033& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic3.zhimg.com/v2-c68b0664ecccd_r.jpg&&&/figure&&p&&br&&/p&&p&第一步,分析腾讯视频评论网址变化规律。点击”查看更多评论”,同时打开Fiddler,第一条信息的TextView中,TextView中可以看到对应的content内容是unicode编码,刚好对应的是某条评论的内容。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-96bcffada8c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&850& data-rawheight=&469& class=&origin_image zh-lightbox-thumb& width=&850& data-original=&https://pic2.zhimg.com/v2-96bcffada8c_r.jpg&&&/figure&&p&&br&&/p&&p&解码出来可以看到对应评论内容。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-14bbb679aeb42c780edd41_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&851& data-rawheight=&228& class=&origin_image zh-lightbox-thumb& width=&851& data-original=&https://pic4.zhimg.com/v2-14bbb679aeb42c780edd41_r.jpg&&&/figure&&p&&br&&/p&&p&将第一条信息的网址复制出来进行分析,观察其中的规律。下图是两个紧连着的不同评论的url地址,如下图,可以发现只有cursor字段发生变化,只要得到cursor,那么评论的地址就可以轻松获得。如何找到cursor值?&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0cdcf17f59adfbffe3bff6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&488& data-rawheight=&133& class=&origin_image zh-lightbox-thumb& width=&488& data-original=&https://pic4.zhimg.com/v2-0cdcf17f59adfbffe3bff6_r.jpg&&&/figure&&p&&br&&/p&&p&第二步,查找网址中变化的cursor字段值。从上面的第一条评论信息里寻找,发现恰好在last字段值与后一条评论的cursor值相同。即表示cursor的值是迭代方式生成的,每条评论的cursor信息在其上一条评论的数据包中寻找即可。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-64a0d1c2fa7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&851& data-rawheight=&466& class=&origin_image zh-lightbox-thumb& width=&851& data-original=&https://pic3.zhimg.com/v2-64a0d1c2fa7_r.jpg&&&/figure&&p&&br&&/p&&p&第三步,完整代码&/p&&p&a.腾讯视频评论爬虫:获取”深度解读”评论内容(单页评论爬虫)&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#单页评论爬虫
import urllib.request
#https://video.coral.qq.com/filmreviewr/c/upcomment/[视频id]?commentid=[评论id]&reqnum=[每次提取的评论的个数]
vid=&j6cgzhtkuonf6te&
cid=&2033588&
#构造当前评论网址
url=&https://video.coral.qq.com/filmreviewr/c/upcomment/&+vid+&?commentid=&+cid+&&reqnum=&+num
headers={&User-Agent&:&Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0&,
&Content-Type&:&application/javascript&,
opener=urllib.request.build_opener()
headall=[]
for key,value in headers.items():
item=(key,value)
headall.append(item)
opener.addheaders=headall
urllib.request.install_opener(opener)
#爬取当前评论页面
data=urllib.request.urlopen(url).read().decode(&utf-8&)
titlepat='&title&:&(.*?)&'
commentpat='&content&:&(.*?)&'
titleall=re.compile(titlepat,re.S).findall(data)
commentall=re.compile(commentpat,re.S).findall(data)
for i in range(0,len(titleall)):
print(&评论标题是:&+eval('u&'+titleall[i]+'&'))
print(&评论内容是:&+eval('u&'+commentall[i]+'&'))
print(&------&)
except Exception as err:
print(err)
&/code&&/pre&&/div&&p&b.腾讯视频评论爬虫:获取”深度解读”评论内容(自动切换下一页评论的爬虫)&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#自动切换下一页评论的爬虫
import urllib.request
#https://video.coral.qq.com/filmreviewr/c/upcomment/[视频id]?commentid=[评论id]&reqnum=[每次提取的评论的个数]
vid=&j6cgzhtkuonf6te&
cid=&2033588&
headers={&User-Agent&:&Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0&,
&Content-Type&:&application/javascript&,
opener=urllib.request.build_opener()
headall=[]
for key,value in headers.items():
item=(key,value)
headall.append(item)
opener.addheaders=headall
urllib.request.install_opener(opener)
#for循环,多个页面切换
for j in range(0,100):
#爬取当前评论页面
print(&第&+str(j)+&页&)
#构造当前评论网址thisurl=&https://video.coral.qq.com/filmreviewr/c/upcomment/&+vid+&?commentid=&+cid+
&&reqnum=&+num
data=urllib.request.urlopen(thisurl).read().decode(&utf-8&)
titlepat='&title&:&(.*?)&,&abstract&:&'
commentpat='&content&:&(.*?)&'
titleall=re.compile(titlepat,re.S).findall(data)
commentall=re.compile(commentpat,re.S).findall(data)
lastpat='&last&:&(.*?)&'
#获取last值,赋值给cid,进行评论id切换
cid=re.compile(lastpat,re.S).findall(data)[0]
for i in range(0,len(titleall)):
print(&评论标题是:&+eval('u&'+titleall[i]+'&'))
print(&评论内容是:&+eval('u&'+commentall[i]+'&'))
print(&------&)
except Exception as err:
print(err)
&/code&&/pre&&/div&&p&&br&&/p&&h2&&b&四、挑战案例&/b&&/h2&&p&&b&1)第三项练习-中国裁判文书网爬虫实战&/b&&/p&&p&目标网站:&a href=&https://link.zhihu.com/?target=http%3A//wenshu.court.gov.cn/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&wenshu.court.gov.cn/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&需要获取的数据:2018年上海市的刑事案件接下来进入实战讲解。&/p&&p&&br&&/p&&p&第一步,观察换页之后的网页地址变化规律。打开中国裁判文书网2018年上海市刑事案件的第一页,在换页时,如下图中的地址,发现网址是完全不变的,这种情况就是属于隐藏,使用抓包分析进行爬取。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-bf912d704c23ba49ac7c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&705& data-rawheight=&264& class=&origin_image zh-lightbox-thumb& width=&705& data-original=&https://pic4.zhimg.com/v2-bf912d704c23ba49ac7c_r.jpg&&&/figure&&p&&br&&/p&&p&第二步,查找变化字段。从Fiddler中可以找到,获取某页的文书数据的地址:&a href=&https://link.zhihu.com/?target=http%3A//wenshu.court.gov.cn/List/ListContent& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&wenshu.court.gov.cn/Lis&/span&&span class=&invisible&&t/ListContent&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&可以发现没有对应的网页变换,意味着中国裁判文书网换页是通过POST进行请求,对应的变化数据不显示在网址中。通过F12查看网页代码,再换页操作之后,如下图,查看ListContent,其中有几个字段需要了解:&/p&&p&Param:检索条件&/p&&p&Index:页码&/p&&p&Page:每页展示案件数量&/p&&p&...&/p&&p&重要的是最后三个字段(vl5x,number,guid)该如何获取?首先,guid即uuid,叫全球唯一标识,是利用python中的uuid随机生成的字段。其次是number字段,找到ListContent上面的GetCode请求,恰好其Response中包含了number字段的值。而GetCode又是通过POST请求的,发现请求的字段只要guid这一项,那么问题便迎刃而解。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-b1dd6f22f68c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1920& data-rawheight=&1030& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic1.zhimg.com/v2-b1dd6f22f68c_r.jpg&&&/figure&&p&&br&&/p&&p&最后,难点在于vl5x字段如何获取?打开Fiddler,在换页操作后,查看ListContent中的vl5x的值,并在此次ListContent之前出现的数据包中的TextView里寻找这个字段或值,一般的网站可以很容易找到,但中国裁判文书网是政府网站,反爬策略非常高明,寻找的过程需要极高的耐心。&/p&&p&事实上,中国裁判文书网的vl5x字段可以从某个js包中获得,获取的方式是通过getKey()函数。从网页源代码中找到getKey()函数的js代码,由于代码是packed状态,用&a href=&https://link.zhihu.com/?target=http%3A//tool.chinaz.com/js.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&unpacked工具&/a&, 将其进行解码,后利用&a href=&https://link.zhihu.com/?target=http%3A//jsbeautifier.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&js界面美观工具&/a&可以方便理解。&/p&&p&但无关紧要,只需直接将getKey()函数s代码复制到unpack_js.html中,就可以解出vl5x字段的值,其中需要用到Cookie中的vjkl5字段值。需要注意提前下载好base64.js和md5.js,并在unpack_js.html加载。&/p&&p&&br&&/p&&p&第三步,以下是中国裁判文书网爬虫完整代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import urllib.request
import http.cookiejar
import execjs
import uuid
#随机生成guid
guid=uuid.uuid4()
print(&guid:&+str(guid))
fh=open(&./base64.js&,&r&)
js1=fh.read()
fh.close()
fh=open(&./md5.js&,&r&)
js2=fh.read()
fh.close()
fh=open(&./getkey.js&,&r&)
js3=fh.read()
fh.close()
#将完整js代码都加载进来
js_all=js1+js2+js3
#在生成的CookieJar添加到opner中
cjar=http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
#Referer常用于反爬,指来源网址
opener.addheaders=[(&Referer&,&http://wenshu.court.gov.cn/list/list/?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6&conditions=searchWord+2018+++%E8%A3%81%E5%88%A4%E5%B9%B4%E4%BB%BD:2018&conditions=searchWord+%E4%B8%8A%E6%B5%B7%E5%B8%82+++%E6%B3%95%E9%99%A2%E5%9C%B0%E5%9F%9F:%E4%B8%8A%E6%B5%B7%E5%B8%82&)]
urllib.request.install_opener(opener)
#用户代理池
import random
&Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393&,
&Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0&,
&Mozilla/4.0 ( MSIE 7.0; Windows NT 5.1; Maxthon 2.0)&,
urllib.request.urlopen(&http://wenshu.court.gov.cn/list/list/?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6&conditions=searchWord+2018+++%E8%A3%81%E5%88%A4%E5%B9%B4%E4%BB%BD:2018&conditions=searchWord+%E4%B8%8A%E6%B5%B7%E5%B8%82+++%E6%B3%95%E9%99%A2%E5%9C%B0%E5%9F%9F:%E4%B8%8A%E6%B5%B7%E5%B8%82&).read().decode(&utf-8&,&ignore&)
#将Cookie中的vjkl5字段提取出来
pat=&vjkl5=(.*?)\s&
vjkl5=re.compile(pat,re.S).findall(str(cjar))
if(len(vjkl5)&0):
vjkl5=vjkl5[0]
print(&vjkl5:&+str(vjkl5))
#将js代码中的旧Cookie的值替换为新的vjkl5的值
js_all=js_all.replace(&ce7c8849dffea151cefcb&,str(vjkl5))
#使用python执行js代码,请提前安装好对应模块(在命令行中执行pip install pyexejs)
compile_js=execjs.compile(js_all)
#获得vl5x字段值
vl5x=compile_js.call(&getKey&)
print(&vl5x:&+str(vl5x))
url=&http://wenshu.court.gov.cn/List/ListContent&
#for循环,切换第1页到10页
for i in range(0,10):
#从GetCode中获取number字段值
codeurl=&http://wenshu.court.gov.cn/ValiCode/GetCode&
#上面提到,GetCode中,只要guid一个字段,将其获取到
codedata=urllib.parse.urlencode({
&guid&:guid,
}).encode('utf-8')
codereq = urllib.request.Request(codeurl,codedata)
codereq.add_header('User-Agent',random.choice(uapools))
codedata=urllib.request.urlopen(codereq).read().decode(&utf-8&,&ignore&)
#print(codedata)
#构造请求的参数
postdata =urllib.parse.urlencode({
&Param&:&案件类型:刑事案件,裁判年份:2018,法院地域:上海市&,
&Index&:str(i+1),
&Page&:&20&,
&Order&:&法院层级&,
&Direction&:&asc&,
&number&:str(codedata),
&guid&:guid,
&vl5x&:vl5x,
}).encode('utf-8')
#直接发送POST请求
req = urllib.request.Request(url,postdata)
req.add_header('User-Agent',random.choice(uapools))
#获得ListContent中的文书ID值
data=urllib.request.urlopen(req).read().decode(&utf-8&,&ignore&)
pat='文书ID.*?&.*?&(.*?).&'
allid=re.compile(pat).findall(data)
print(allid)
except Exception as err:
print(err)
&/code&&/pre&&/div&&p&如此便可批量获取中国裁判文书网中的案件信息。友情提示,如果频繁爬取该网站,需扩充用户代理池。&/p&&p&&br&&/p&&h2&&b&五、推荐内容&/b&&/h2&&p&&b&1)常见反爬策略与反爬攻克手段介绍&/b&&/p&&p&数据的隐藏可以算是一种反爬策略之一,抓包分析是该反爬策略常见的反爬攻克手段。&/p&&p&当然,反爬还有很多手段,比如通过IP限制、UA限制、验证码限制...等等.&/p&&p&&b&2)如何深入学习Python网络爬虫(深入学习路线介绍)&/b&&/p&&p&通过上述的介绍,相信对网络爬虫已经有了基础的了解,以及能够写出一些简单的爬虫项目。&/p&&p&以下项目可以提供练习:&/p&&p&淘宝商品图片爬虫项目&/p&&p&淘宝商品爬虫项目&/p&&p&…&/p&&p&&b&3)关于Python爬虫,推荐书籍&/b&&/p&&p&《Python程序设计基础实战教程》 . 清华大学出版社.2018年&/p&&p&《精通Python网络爬虫》.机械工业出版社.2017年4月&/p&&figure&&img src=&https://pic2.zhimg.com/v2-25b7115424f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&639& data-rawheight=&318& class=&origin_image zh-lightbox-thumb& width=&639& data-original=&https://pic2.zhimg.com/v2-25b7115424f_r.jpg&&&/figure&&p&&br&&/p&&p&本文由云栖志愿小组董黎明整理,编辑百见&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//click.aliyun.com/m/45829/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&原文链接&/a& &/p&&p&&b&更多技术干货敬请关注云栖社区知乎机构号:&a href=&https://www.zhihu.com/org/a-li-yun-yun-qi-she-qu-48& class=&internal&&阿里云云栖社区 - 知乎&/a&&/b&&/p&
摘要:本文详细讲解了python网络爬虫,并介绍抓包分析等技术,实战训练三个网络爬虫案例,并简单补充了常见的反爬策略与反爬攻克手段。通过本文的学习,可以快速掌握网络爬虫基础,结合实战练习,写出一些简单的爬虫项目。 演讲嘉宾简介:韦玮,企业家,资…
&figure&&img src=&https://pic2.zhimg.com/v2-5aeaa47cccfd7f76b3ca_b.jpg& data-rawwidth=&852& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&852& data-original=&https://pic2.zhimg.com/v2-5aeaa47cccfd7f76b3ca_r.jpg&&&/figure&&blockquote&&p&作者:Jacob Joseph&br&系列名称:Improving analytics output with feature engineering&br&Part1: &a href=&http://link.zhihu.com/?target=http%3A//data-informed.com/how-to-improve-machine-learning-tricks-and-tips-for-feature-engineering/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&How to Improve Machine Learning: Tricks and Tips for Feature Engineering&/a&&br&Part2: &a href=&http://link.zhihu.com/?target=http%3A//data-informed.com/enhance-machine-learning-with-standardizing-binning-reducing/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Enhance Machine Learning with Standardizing, Binning, Reducing&/a&&br&Part3: &a href=&http://link.zhihu.com/?target=http%3A//data-informed.com/interactivity-non-normality-and-missing-values-how-to-address-common-data-challenges/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Get instant access to actionable big data eBooks – for freeInteractivity, Non-normality, and Missing Values: How to Address Common Data Challenges&/a&&br&Part4: &a href=&http://link.zhihu.com/?target=http%3A//data-informed.com/dimension-reduction-and-intuitive-feature-engineering-for-machine-learning/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Dimension Reduction and Intuitive Feature Engineering for Machine Learning&/a&&/p&&p&&strong&注&/strong&:本文是我爱机器学习(&a href=&http://link.zhihu.com/?target=http%3A//52ml.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&52ml.net&/span&&span class=&invisible&&&/span&&/a&)编者的简单总结,但也加入了自己的理解。&/p&&/blockquote&&h3&1. 数值变量标准化&/h3&&ul&&li&不同数据的Scale不一样,所以需要标准化。比如身高和体重。&/li&&li&不做标准化,有些算法会死得很惨,比如SVM、神经网络、K-means之类。标准化的一种方法是均值方差法。&/li&&li&不是什么时候都需要标准化,比如物理意义非常明确的经纬度,如果标准化,其本身的意义就会丢失。&/li&&li&标准化并不等同归一化,此处可参考其他资料。&/li&&/ul&&h3&2. 离散化&/h3&&ul&&li&原文是Binning/Converting Numerical to Categorical Variable,实际就是把连续型的数据利用Binning等方法转为离散的分类变量(Categorical Variable)。&/li&&/ul&&h3&3. 减少分类变量取值范围&/h3&&ul&&li&有些分类变量的少部分取值可能占据了90%的case,这种情况下如何处理,可以采用预测模型、领域专家、或者简单的频率分布统计。&/li&&li&我爱机器学习(&a href=&http://link.zhihu.com/?target=http%3A//52ml.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&52ml.net&/span&&span class=&invisible&&&/span&&/a&)编者认为还是应用为王,具体问题具体分析,高频和低频都是需要特别处理的地方,抛弃效果不好时,可以考虑采样(高频)或上采样(低频),加权等等方法。&/li&&/ul&&h3&4. 非正态分布转正太分布&/h3&&ul&&li&下图中的例子,z1本来是x的指数函数,取log后两者就变为线性关系了。&/li&&/ul&&figure&&img src=&https://pic3.zhimg.com/v2-f4efce1b15d_b.png& data-rawwidth=&769& data-rawheight=&890& class=&origin_image zh-lightbox-thumb& width=&769& data-original=&https://pic3.zhimg.com/v2-f4efce1b15d_r.jpg&&&/figure&&br&&ul&&li&这个例子太特别,作者也提到,现实中可能需要用其他转换,比如平方根立方根。其实就是数据转换,但是转哪种分布不好说,取决于转换后的特征的表征能力和对模型的贡献。&/li&&/ul&&h3&5. Missing Data&/h3&&ul&&li&感觉叫Missing Value更合适,这个在很多实际问题中确实挺重要,比如一个性别特征,三分之一为男,三分之一为女,还有一类没填,missing value不容忽视。&/li&&/ul&&h3&6. 哑变量&/h3&&ul&&li&哑变量又称为虚拟变量。分类变量(尤其是枚举型变量)有时候多个数值之间的差值没有物理意义,比如操作系统类别,iOS、Android、Windows分别取值0、1、2,它们相互之间的差值并没有任何物理意义。处理方法是直接生成三个哑变量,取值范围都是0或1,第一个哑变量表示是否为iOS,其他类似。&/li&&li&加入哑变量后就不会有枚举变量数值无比较意义的问题了。&/li&&/ul&&h3&7. 交叉特征&/h3&&ul&&li&有些特征一起考虑才有意义,简单来说if条件需要除了非要加入与/非了,这个重要性无需多言。&/li&&/ul&&h3&8. 降维&/h3&&ul&&li&为何要降维?&ul&&li&性能&/li&&li&避免过拟合&/li&&/ul&&/li&&li&方法&ul&&li&人肉:SIFT, VLAD, HOG, GIST, LBP&/li&&li&模型:Sparse Coding, Auto Encoders, Restricted Boltzmann Machines, PCA, ICA, K-means&/li&&/ul&&/li&&/ul&&h3&9. 直觉和额外的特征&/h3&&ul&&li&针对原始数据,可以利用自己的特长手动或自动生成直觉和额外的特征。比如文本问题,可以写个自动算法生成单词长度、元音个数、n-gram等等。&/li&&li&数据分析师可能会发现噪声中的信号。&/li&&/ul&&blockquote&原文:怎样提升机器学习:&a href=&http://link.zhihu.com/?target=https%3A//www.52ml.net/19563.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&特征工程的奇淫巧技&/a&&br&欢迎关注我爱机器学习微信公众号及微博:&a href=&http://link.zhihu.com/?target=https%3A//www.52ml.net/appwx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&我爱机器学习&/a&&/blockquote&
作者:Jacob Joseph 系列名称:Improving analytics output with feature engineering Part1:
&p&&b&1. 用眼睛&/b&&/p&&p&首先一个时间序列,他可能是有&b&&u&趋势&/u&&/b&的,是&b&&u&不平稳&/u&&/b&的。所以如果不平稳你要做&b&&u&差分&/u&&/b&,把趋势的因素抵消掉。这样,如你的图2,用眼睛目测就可以认为是一个平稳的时间序列。&/p&&br&&p&&b&2. ACF,PACF观察是否稳定,并选定模型&/b&&/p&&p&当然,目测只是目测,接下来要用&u&&b&ACF&/b&&/u&和&u&&b&PACF&/b&&/u&来进一步观察。&br&ACF(自相关系数)和PACF(偏自相关系数) &br&对于&br&AR(p)模型,&u&&b&PACF会在lag=p时截尾&/b&&/u&,也就是,PACF图中的值落入宽带区域中。&br&MA(q)模型,&u&&b&ACF会在lag=q时截尾&/b&&/u&,同理,ACF图中的值落入宽带区域中。&br&这是简单的识别方法。&br&你可以看到你的图中,ACF显然没有迅速的衰减截尾,而&u&&b&PACF在lag=1&/b&&/u&时他的值就落入宽带区域了。所以选用AR(1)模型,对于粗略的模拟,其实lag=14,15可以不用考虑的,当然,考虑也没啥问题。(举个例子,如果ACF在lag=3衰减入宽带区域,那就定MA(3))&/p&&br&&p&&b&3. 拟合该模型&/b&&/p&&p&好了,你拟合了模型,比如我用R软件&br&mod1&-arima(x,order=c(1,0,0))&br&x是你的时间序列名称,order里的第一项和最后一项代表p和q。&br&你自认为模拟好了,那你要检验模拟的好不好,会不会更好。&br&你可以通过AIC来做检验与比较。&br&比如,你还模拟了一个模型叫他&br&,mod2&-arima(x,order=c(1,0,1))&br&比较他们的AIC&br&AIC(mod1)&br&AIC(mod2)&br&谁的数值小谁更好。&/p&&br&&p&&b&4. 检验该模型拟合后的时间序列残差是否为白噪声&/b&&/p&&p&好了,假设我们认为mod2更好。我们必须进一步检验,你模拟的模型是不是包含了所有的因素,也就是他的除去这个模型,你的时间序列是不是&b&&u&白噪声(white noise)&/u&&/b&,如果不是,那就说明你还没有提出所有的因素。&/p&&p&我们先用简便的方法来看,看这个模型的残差是不是白噪声。&/p&&p&输入 acf(resid(mod2))&/p&&p&然后看显示图&/p&&figure&&img src=&https://pic4.zhimg.com/50/0ce2e3d6c23ecd88fb7ff3_b.jpg& data-rawwidth=&3264& data-rawheight=&1056& class=&origin_image zh-lightbox-thumb& width=&3264& data-original=&https://pic4.zhimg.com/50/0ce2e3d6c23ecd88fb7ff3_r.jpg&&&/figure&&p&你看见,acf的值在lag=1迅速衰减了(decay)了,所以你可以归结为,他是白噪声了。白噪声在lag=1是必须在宽带区域内,因为他的&b&&u&任意相邻两项没任何关系,所以也不会有什么自相关系数。&/u&&/b&&/p&&br&&p&&b&5. 进一步用Ljung-Box方法进行检验&/b&&/p&&p&&b&&u&原假设H0:自相关系数rho1=rho2=rho3...=0&/u&&/b&&br&如果检验出来拒绝了原假设(显著有差别),说明rho不等于0不行! &br&判断标准:&u&&b&p值小于0.05,或者卡方值大于3.84或5.99(主要看你选的a)拒绝原假设&/b&;&/u&&br&如果检验出来接受原假设,说明剩余白噪声。&br&判断标准:&b&&u&p值大于0.05,或者卡方值小于3.84或5.99(主要看你选的a)接受原假设。&/u&&/b&&br&具体,输入:&br&m&-floor(sqrt(length(x)))&br&Box.test(resid(x),lag=m,type=c(&Ljung-Box&),fitdf=2)&br&自由度为p与q之和&br&m是定义的。你的时间序列n的根号取整。&/p&&p&得出结果,&br&其实你的结果p=0.7是好啊!大于0.05就接受原假设啦。&br&接受原假设就说明你的拟合的模型的残差是白噪声。&br&记住,p值是越大越好(0.05界限),z,t,X方这些检验值都是越小越好(比如1.96;卡方3.84等等)。&/p&&p&补充一点,特征根方程根绝对值全部大于单位圆半径(1)也是一个检验时间序列平稳的标准。&/p&&br&&p&&b&再来用实际数据用R语言操作举个栗子:&/b&&/p&&p&我们有一个时间序列的数据 &D1_data.txt&&/p&&p&1.拿到这个时间序列你先目测,上图通过目测可以认为是一个平稳的时间序列。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-5b94d7da31db2c4c597d63b68dd70cbd_b.jpg& data-rawwidth=&554& data-rawheight=&260& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic2.zhimg.com/50/v2-5b94d7da31db2c4c597d63b68dd70cbd_r.jpg&&&/figure&&br&&div class=&highlight&&&pre&&code class=&language-text&&R步骤
a&-read.csv(&D:/D1_data.txt&) #括号中的东西取决于你的数据在电脑的哪里
aa&-ts(a) #我命名该时间序列为aa
plot(aa) #画出时间序列aa 上图
&/code&&/pre&&/div&&p&2.通过ACF和PACF也就是自相关系数和偏自相关系数来判断是否稳定。&/p&&br&&figure&&img src=&https://pic3.zhimg.com/50/v2-a859cec9c4b_b.jpg& data-rawwidth=&554& data-rawheight=&361& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&https://pic3.zhimg.com/50/v2-a859cec9c4b_r.jpg&&&/figure&&br&&p&由于ACF在lag=1之后便落入置信区间;PACF在lag=3之后落入置信区间。&/p&&p&我们认为改时间序列稳定。&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&R 步骤
layout(1:2) #一次显示两张图
acf(aa) #显示自相关系数
pacf(aa) #显示偏自相关系数
&/code&&/pre&&/div&&p&3.模型拟合&/p&&p&选择 ma(1)或者arma(3,1)。&/p&&p&用arima命令来拟合。并用AIC看哪个模型更好,AIC数值越小越好。&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&R步骤
ma1&-arima(aa,order = c(0,0,1))
arma13&-arima(aa,order = c(3,0,1))
AIC(arma13)
#AIC结果:
AIC(ma1) [1] 939.6636
AIC(arma13) [1] 943.8848
&/code&&/pre&&/div&&p&ma1优于arma13。&/p&&p&4.看看拟合好的模型的残差是否为白噪声&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&R步骤
acf(resid(ma1)) #ma1的残差的自相关系数
&/code&&/pre&&/div&&br&&figure&&img src=&https://pic2.zhimg.com/50/v2-ae7ded3b5d59732d6adb_b.jpg& data-rawwidth=&799& data-rawheight=&580& class=&origin_image zh-lightbox-thumb& width=&799& data-original=&https://pic2.zhimg.com/50/v2-ae7ded3b5d59732d6adb_r.jpg&&&/figure&&br&&p&Ok大功告成!&/p&
1. 用眼睛首先一个时间序列,他可能是有趋势的,是不平稳的。所以如果不平稳你要做差分,把趋势的因素抵消掉。这样,如你的图2,用眼睛目测就可以认为是一个平稳的时间序列。 2. ACF,PACF观察是否稳定,并选定模型当然,目测只是目测,接下来要用ACF和PACF…
&figure&&img src=&https://pic2.zhimg.com/5ab4e54a17c08cc907c03_b.jpg& data-rawwidth=&1024& data-rawheight=&435& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&https://pic2.zhimg.com/5ab4e54a17c08cc907c03_r.jpg&&&/figure&作为一个全栈的数据分析师,必须能够操办从数据爬取,到数据存储,到数据清洗,到数据分析,到数据可视化一条龙的服务。&p&很多人包括我自己会羡慕网上的一些可视化图片,怎么可以做的那么好看,将数据与UI完美地结合到一起,让冷冰冰的数据不那么枯燥甚至是生动有趣地展现在别人面前。&/p&&p&复杂的比如这种&/p&&p&&figure&&img src=&https://pic2.zhimg.com/c20b19dfde0c5de406a6389_b.png& data-rawwidth=&1158& data-rawheight=&579& class=&origin_image zh-lightbox-thumb& width=&1158& data-original=&https://pic2.zhimg.com/c20b19dfde0c5de406a6389_r.jpg&&&/figure&比如这种结合地图的&/p&&figure&&img src=&https://pic3.zhimg.com/7b6c976ff2f1eb6163b6_b.png& data-rawwidth=&707& data-rawheight=&888& class=&origin_image zh-lightbox-thumb& width=&707& data-original=&https://pic3.zhimg.com/7b6c976ff2f1eb6163b6_r.jpg&&&/figure&&br&&p&简单的比如&/p&&figure&&img src=&https://pic3.zhimg.com/2d95d0b08a7e0d124df05f7d7b7bfe62_b.png& data-rawwidth=&632& data-rawheight=&571& class=&origin_image zh-lightbox-thumb& width=&632& data-original=&https://pic3.zhimg.com/2d95d0b08a7e0d124df05f7d7b7bfe62_r.jpg&&&/figure&&br&&p&比如&/p&&figure&&img src=&https://pic3.zhimg.com/9a60b509c7cfe7cebe532_b.png& data-rawwidth=&355& data-rawheight=&272& class=&content_image& width=&355&&&/figure&&br&&p&高大上的感觉跃然纸上有木有!&/p&&br&&p&而我们日常使用Excel或者PPT画图,一般是这种&/p&&figure&&img src=&https://pic4.zhimg.com/5f8440abdfb247e0b70eafbb_b.png& data-rawwidth=&466& data-rawheight=&293& class=&origin_image zh-lightbox-thumb& width=&466& data-original=&https://pic4.zhimg.com/5f8440abdfb247e0b70eafbb_r.jpg&&&/figure&&p&这种&/p&&figure&&img src=&https://pic1.zhimg.com/8e9fd306e579c235eae9bb0_b.png& data-rawwidth=&821& data-rawheight=&505& class=&origin_image zh-lightbox-thumb& width=&821& data-original=&https://pic1.zhimg.com/8e9fd306e579c235eae9bb0_r.jpg&&&/figure&&br&&p&丑Cry了好么,千篇一律的柱形图和折线图,还有那一成不变的配色,老板看了都觉得你没有诚意。&/p&&figure&&img src=&https://pic2.zhimg.com/e2176cdbfc3f8ff3c45edec798ae392d_b.png& data-rawwidth=&317& data-rawheight=&127& class=&content_image& width=&317&&&/figure&&br&&p&如果你跟我一样比较懒,不想学UI设计,不想学一些可视化工具比如Tableau这种,也懒得去网上搜一些Web端的可视化工具像百度图说,文图这种,那么让我们一起用PPT画一张漂亮的可视化图片吧。&/p&&br&&br&&figure&&img src=&https://pic2.zhimg.com/f20d635db9bdcf4cb02ff7e_b.png& data-rawwidth=&360& data-rawheight=&121& class=&content_image& width=&360&&&/figure&&br&&p&一张可视化图片,我们主要关注2个点,一个是配色,一个是构图。&/p&&p&好的颜色搭配应该是不刺眼的,颜色间过渡自然的。&/p&&p&什么是颜色间过渡自然?就是不会一下从大红色,跳到天蓝色,又一下跳到黄色,突兀的配色会打破图片的美感。&/p&&p&反面例子比如&/p&&p&&figure&&img src=&https://pic1.zhimg.com/debcdac8cdb5ae1df46758_b.png& data-rawwidth=&569& data-rawheight=&508& class=&origin_image zh-lightbox-thumb& width=&569& data-original=&https://pic1.zhimg.com/debcdac8cdb5ae1df46758_r.jpg&&&/figure&你以为是百花齐放,实际上是闪瞎狗眼,看了让人不舒服,更不会给人美的感觉。&/p&&br&&p&正面例子比如&/p&&p&&figure&&img src=&https://pic4.zhimg.com/7d51feb6cad1a5e8f73f97f_b.png& data-rawwidth=&575& data-rawheight=&583& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&https://pic4.zhimg.com/7d51feb6cad1a5e8f73f97f_r.jpg&&&/figure&比如&/p&&figure&&img src=&https://pic3.zhimg.com/2d889ed9aa_b.png& data-rawwidth=&585& data-rawheight=&589& class=&origin_image zh-lightbox-thumb& width=&585& data-original=&https://pic3.zhimg.com/2d889ed9aa_r.jpg&&&/figure&&p&给人特别舒服自然的感觉,那是因为颜色之间有过渡,有一个由深变淡的过程。&/p&&br&&p&会运用颜色的过渡还不够,如果不懂得色彩之间的搭配和调和,使用了两种冲突的色彩,那么整张可视化图片就会显得low。&/p&&p&洗剪吹杀马特风&/p&&figure&&img src=&https://pic2.zhimg.com/fa117defeac_b.png& data-rawwidth=&636& data-rawheight=&651& class=&origin_image zh-lightbox-thumb& width=&636& data-original=&https://pic2.zhimg.com/fa117defeac_r.jpg&&&/figure&&br&&p&城乡结合风&/p&&figure&&img src=&https://pic2.zhimg.com/9dffc8bc659e239c0b4ceae92b73c7b5_b.png& data-rawwidth=&628& data-rawheight=&503& class=&origin_image zh-lightbox-thumb& width=&628& data-original=&https://pic2.zhimg.com/9dffc8bc659e239c0b4ceae92b73c7b5_r.jpg&&&/figure&&p&是不是特别朴素,是不是不管图片上的数字多么兴兴向荣,都给人一种这家公司迟早药丸的感觉?&/p&&figure&&img src=&https://pic2.zhimg.com/98bd42e0db77fbd64b8d9_b.png& data-rawwidth=&150& data-rawheight=&171& class=&content_image& width=&150&&&/figure&&br&&p&正面例子比如&/p&&p&&figure&&img src=&https://pic1.zhimg.com/bb3fa2ff2a8784dcb4b30bd3d84c95f8_b.png& data-rawwidth=&780& data-rawheight=&515& class=&origin_image zh-lightbox-thumb& width=&780& data-original=&https://pic1.zhimg.com/bb3fa2ff2a8784dcb4b30bd3d84c95f8_r.jpg&&&/figure&灰色的背景,搭配3种暖色调的颜色。&/p&&br&&p&什么,你说你不会颜色搭配?教你一招,谷歌 &b&“颜色搭配”&/b&,找到你喜欢的配色,然后用PPT的取色器挨个取色,搞定!&/p&&p&另外偶尔用一下渐变色填充,会有意想不到的效果&/p&&figure&&img src=&https://pic2.zhimg.com/1cd7f3ee394e243c5ad989_b.png& data-rawwidth=&287& data-rawheight=&465& class=&content_image& width=&287&&&/figure&&br&&br&&figure&&img src=&https://pic2.zhimg.com/5233c15edd18e58edf2acd_b.png& data-rawwidth=&360& data-rawheight=&130& class=&content_image& width=&360&&&/figure&&br&&p&只有漂亮的颜色,没有能够很好表达数据的构图,就像一个华丽的刀鞘,拔出来却是一把菜刀的感觉。&/p&&p&好的构图,除了要选择适合表达某类数据的图形之外,构图的丰富度,创意能够带给人很大的冲击力。&/p&&p&同样是条形图,弯曲的条形图给人感觉灵巧很多&/p&&p&&figure&&img src=&https://pic3.zhimg.com/0c9e1adc0eca263eaa06_b.png& data-rawwidth=&450& data-rawheight=&313& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&https://pic3.zhimg.com/0c9e1adc0eca263eaa06_r.jpg&&&/figure&具体做法是用PPT画几个同心的空心饼图,然后设置一下曲面的角度以及把另一半的颜色设置成背景色。&/p&&br&&p&&figure&&img src=&https://pic1.zhimg.com/66cbe5ec9c96bca6e2a42c5cedd7af98_b.png& data-rawwidth=&808& data-rawheight=&509& class=&origin_image zh-lightbox-thumb& width=&808& data-original=&https://pic1.zhimg.com/66cbe5ec9c96bca6e2a42c5cedd7af98_r.jpg&&&/figure&大图套小图,用各种饼图充斥整个画面,给人充足的信息量,并且颜色有深浅变化。&/p&&figure&&img src=&https://pic3.zhimg.com/7ddc96befc930eb6b21a_b.png& data-rawwidth=&735& data-rawheight=&421& class=&origin_image zh-lightbox-thumb& width=&735& data-original=&https://pic3.zhimg.com/7ddc96befc930eb6b21a_r.jpg&&&/figure&&p&在同一副图里运用多类型的图,表达多角度的数据,如这幅图就用了条形图、散点图、折线图和饼图。&/p&&br&&figure&&img src=&https://pic3.zhimg.com/c8dde3e155b2cb6c6432_b.png& data-rawwidth=&576& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&https://pic3.zhimg.com/c8dde3e155b2cb6c6432_r.jpg&&&/figure&&p&数据与现实结合,妙趣横生。&/p&&figure&&img src=&https://pic2.zhimg.com/b5973bc66afedcae90735_b.png& data-rawwidth=&566& data-rawheight=&397& class=&origin_image zh-lightbox-thumb& width=&566& data-original=&https://pic2.zhimg.com/b5973bc66afedcae90735_r.jpg&&&/figure&&p&数据与现实结合2(话说这种应该超出了PPT能做的范围,需要用到AI或者PS)&/p&&figure&&img src=&https://pic4.zhimg.com/bc685ebf735f3a4f906cb_b.jpg& data-rawwidth=&499& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&499& data-original=&https://pic4.zhimg.com/bc685ebf735f3a4f906cb_r.jpg&&&/figure&&p&数据与地图结合,这种可以去网上搜地图PPT素材,下载一些别人制作好的地图PPT模板,里边每个省份都可以作为单独模块去着色。&/p&&br&&p&PPT里边的一些工具可以让你的构图显得灵动。&/p&&figure&&img src=&https://pic2.zhimg.com/08bbac228f32affd3a55ab_b.png& data-rawwidth=&114& data-rawheight=&96& class=&content_image& width=&114&&&/figure&&br&&p&比如形状效果的阴影可以给你的条形图增加立体感。&/p&&br&&p&&figure&&img src=&https://pic3.zhimg.com/2ec2dfabe_b.png& data-rawwidth=&590& data-rawheight=&127& class=&origin_image zh-lightbox-thumb& width=&590& data-original=&https://pic3.zhimg.com/2ec2dfabe_r.jpg&&&/figure&设计里边可以选择多种构图效果。&/p&&br&&br&&p&作为一个数据分析师,如果愿意花一点点时间在数据可视化上,会给你的分析结果画龙点睛哦!&/p&&br&&br&&p&&b&更多文章请关注我的专栏 &a href=&https://zhuanlan.zhihu.com/washu& class=&internal&&数据挖掘机&/a&&/b&&/p&
作为一个全栈的数据分析师,必须能够操办从数据爬取,到数据存储,到数据清洗,到数据分析,到数据可视化一条龙的服务。很多人包括我自己会羡慕网上的一些可视化图片,怎么可以做的那么好看,将数据与UI完美地结合到一起,让冷冰冰的数据不那么枯燥甚至是生…
&figure&&img src=&https://pic2.zhimg.com/d86a52caeaa909e86ee9_b.jpg& data-rawwidth=&520& data-rawheight=&403& class=&origin_image zh-lightbox-thumb& width=&520& data-original=&https://pic2.zhimg.com/d86a52caeaa909e86ee9_r.jpg&&&/figure&&p&作
昊&/p&&p&知
乎:Heinrich&/p&&p&微
博:@花生油工人 &/p&&p&知乎专栏:与时间无关的故事&/p&&p&谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。&/p&&p&&b&转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。&/b&&/p&&br&&p&——更新于,想直接看更新的同学可以直接跳到第四章————&/p&&p&我保证这篇文章和你以前看过的所有文章都不同,这是12年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者……&/p&&p&这篇文章的核心思想就是:&/p&&h2&要让读者在不看任何数学公式的情况下理解傅里叶分析。&/h2&&p&傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成了大学里的杀手课程,不得不归咎于编教材的人实在是太严肃了。(您把教材写得好玩一点会死吗?会死吗?)所以我一直想写一个有意思的文章来解释傅里叶分析,有可能的话高中生都能看懂的那种。所以,不管读到这里的您从事何种工作,我保证您都能看懂,并且一定将体会到通过傅里叶分析看到世界另一个样子时的快感。至于对于已经有一定基础的朋友,也希望不要看到会的地方就急忙往后翻,仔细读一定会有新的发现。&/p&&p&————以上是定场诗————&/p&&p&下面进入正题:&/p&&p&抱歉,还是要啰嗦一句:其实学习本来就不是易事,我写这篇文章的初衷也是希望大家学习起来更加轻松,充满乐趣。但是千万!千万不要把这篇文章收藏起来,或是存下地址,心里想着:以后有时间再看。这样的例子太多了,也许几年后你都没有再打开这个页面。无论如何,耐下心,读下去。这篇文章要比读课本要轻松、开心得多……&/p&&p&p.s.本文无论是cos还是sin,都统一用“正弦波”(Sine Wave)一词来代表简谐波。&/p&&h2&一、什么是频域&/h2&&p&从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称其为时域分析。而我们也想当然的认为,世间万物都在随着时间不停的改变,并且永远不会静止下来。但如果我告诉你,用另一种方法来观察世界的话,你会发现&u&世界是永恒不变的&/u&,你会不会觉得我疯了?我没有疯,这个静止的世界就叫做频域。&/p&&p&先举一个&u&&b&公式上并非很恰当&/b&&/u&,但意义上再贴切不过的例子:&/p&&p&在你的理解中,一段音乐是什么呢?&/p&&figure&&img src=&https://pic4.zhimg.com/2caa1b75825_b.jpg& data-rawwidth=&800& data-rawheight=&270& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/2caa1b75825_r.jpg&&&/figure&&br&&br&&p&这是我们对音乐最普遍的理解,一个随着时间变化的震动。但我相信对于乐器小能手们来说,音乐更直观的理解是这样的:&/p&&p&&figure&&img src=&https://pic1.zhimg.com/8e1fce9d7607d97cebf73e1f36f03f06_b.jpg& data-rawwidth=&800& data-rawheight=&272& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/8e1fce9d7607d97cebf73e1f36f03f06_r.jpg&&&/figure&&br&好的!下课,同学们再见。&/p&&p&是的,其实这一段写到这里已经可以结束了。上图是音乐在时域的样子,而下图则是音乐在频域的样子。所以频域这一概念对大家都从不陌生,只是从来没意识到而已。&/p&&p&现在我们可以回过头来重新看看一开始那句痴人说梦般的话:世界是永恒的。&/p&&p&将以上两图简化:&/p&&p&时域:&br&&/p&&p&&figure&&img src=&https://pic2.zhimg.com/d4fa1de41ac84a56e432_b.jpg& data-rawwidth=&800& data-rawheight=&440& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/d4fa1de41ac84a56e432_r.jpg&&&/figure&&br&频域:&/p&&figure&&img src=&https://pic3.zhimg.com/1ca366b593d877a16c8ab9_b.jpg& data-rawwidth=&137& data-rawheight=&199& class=&content_image& width=&137&&&/figure&&br&&p&在时域,我们观察到钢琴的琴弦一会上一会下的摆动,就如同一支股票的走势;而在频域,只有那一个永恒的音符。&/p&&p&所以&/p&&h2&你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章。&/h2&&p&抱歉,这不是一句鸡汤文,而是黑板上确凿的公式:傅里叶同学告诉我们,任何周期函数,都可以看作是不同振幅,不同相位正弦波的叠加。在第一个例子里我们可以理解为,利用对不同琴键不同力度,不同时间点的敲击,可以组合出任何一首乐曲。&/p&&p&而贯穿时域与频域的方法之一,就是传中说的傅里叶分析。傅里叶分析可分为傅里叶级数(Fourier Serie)和傅里叶变换(Fourier Transformation),我们从简单的开始谈起。&/p&&h2&二、傅里叶级数(Fourier Series)的频谱&/h2&&p&还是举个栗子并且有图有真相才好理解。&/p&&p&如果我说我能用前面说的正弦曲线波叠加出一个带90度角的矩形波来,你会相信吗?你不会,就像当年的我一样。但是看看下图:&br&&figure&&img src=&https://pic3.zhimg.com/055bf33bbc5dbeb75dd9_b.jpg& data-rawwidth=&800& data-rawheight=&616& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/055bf33bbc5dbeb75dd9_r.jpg&&&/figure&&br&&br&&/p&&p&第一幅图是一个郁闷的正弦波cos(x)&/p&&p&第二幅图是2个卖萌的正弦波的叠加cos(x)+a.cos(3x)&/p&&p&第三幅图是4个发春的正弦波的叠加&/p&&p&第四幅图是10个便秘的正弦波的叠加&/p&&p&随着正弦波数量逐渐的增长,他们最终会叠加成一个标准的矩形,大家从中体会到了什么道理?&/p&&p&(只要努力,弯的都能掰直!)&/p&&p&随着叠加的递增,所有正弦波中上升的部分逐渐让原本缓慢增加的曲线不断变陡,而所有正弦波中下降的部分又抵消了上升到最高处时继续上升的部分使其变为水平线。一个矩形就这么叠加而成了。但是要多少个正弦波叠加起来才能形成一个标准90度角的矩形波呢?不幸的告诉大家,答案是无穷多个。(上帝:我能让你们猜着我?)&/p&&p&不仅仅是矩形,你能想到的任何波形都是可以如此方法用正弦波叠加起来的。这是没&br&有接触过傅里叶分析的人在直觉上的第一个难点,但是一旦接受了这样的设定,游戏就开始有意思起来了。&/p&&p&还是上图的正弦波累加成矩形波,我们换一个角度来看看:&/p&&figure&&img src=&https://pic2.zhimg.com/563deb4aba_b.jpg& data-rawwidth=&800& data-rawheight=&1289& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/563deb4aba_r.jpg&&&/figure&&br&&p&在这几幅图中,最前面黑色的线就是所有正弦波叠加而成的总和,也就是越来越接近矩形波的那个图形。而后面依不同颜色排列而成的正弦波就是组合为矩形波的各个分量。这些正弦波按照频率从低到高从前向后排列开来,而每一个波的振幅都是不同的。一定有细心的读者发现了,每两个正弦波之间都还有一条直线,那并不是分割线,而是振幅为0的正弦波!也就是说,为了组成特殊的曲线,有些正弦波成分是不需要的。&br&&/p&&p&这里,不同频率的正弦波我们成为频率分量。&/p&&p&好了,关键的地方来了!!&/p&&p&如果我们把第一个频率最低的频率分量看作“1”,我们就有了构建频域的最基本单元。&/p&&p&对于我们最常见的有理数轴,数字“1”就是有理数轴的基本单元。&/p&&p&时域的基本单元就是“1秒”,如果我们将一个角频率为&img src=&https://www.zhihu.com/equation?tex=%5Comega_%7B0%7D+& alt=&\omega_{0} & eeimg=&1&&的正弦波cos(&img src=&https://www.zhihu.com/equation?tex=%5Comega_%7B0%7D+& alt=&\omega_{0} & eeimg=&1&&t)看作基础,那么频域的基本单元就是&img src=&https://www.zhihu.com/equation?tex=%5Comega_%7B0%7D+& alt=&\omega_{0} & eeimg=&1&&。&/p&&p&有了“1”,还要有“0”才能构成世界,那么频域的“0”是什么呢?cos(0t)就是一个周期无限长的正弦波,也就是一条直线!所以在频域,0频率也被称为直流分量,在傅里叶级数的叠加中,它仅仅影响全部波形相对于数轴整体向上或是向下而不改变波的形状。&/p&&p&接下来,让我们回到初中,回忆一下已经死去的八戒,啊不,已经死去的老师是怎么定义正弦波的吧。&/p&&figure&&img src=&https://pic3.zhimg.com/81cac162c2d76df75a6690a_b.jpg& data-rawwidth=&560& data-rawheight=&201& class=&origin_image zh-lightbox-thumb& width=&560& data-original=&https://pic3.zhimg.com/81cac162c2d76df75a6690a_r.jpg&&&/figure&&br&&p&正弦波就是一个圆周运动在一条直线上的投影。所以频域的基本单元也可以理解为一个始终在旋转的圆&figure&&img src=&https://pic3.zhimg.com/e15e1db741930_b.jpg& data-rawwidth=&256& data-rawheight=&256& class=&content_image& width=&256&&&/figure&&br&&/p&&p&知乎不能传动态图真是太让人惋惜了……&/p&&p&想看动图的同学请戳这里:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/File%3AFourier_series_square_wave_circles_animation.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&File:Fourier series square wave circles animation.gif&/a&&/p&&p&以及这里:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/File%3AFourier_series_sawtooth_wave_circles_animation.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&File:Fourier series sawtooth wave circles animation.gif&/a&&/p&&p&点出去的朋友不要被wiki拐跑了,wiki写的哪有这里的文章这么没节操是不是。&/p&&p&介绍完了频域的基本组成单元,我们就可以看一看一个矩形波,在频域里的另一个模样了:&/p&&p&&figure&&img src=&https://pic2.zhimg.com/e2e3c0af3bdbcba721cda9e_b.jpg& data-rawwidth=&800& data-rawheight=&567& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/e2e3c0af3bdbcba721cda9e_r.jpg&&&/figure&&br&这是什么奇怪的东西?&/p&&p&这就是矩形波在频域的样子,是不是完全认不出来了?教科书一般就给到这里然后留给了读者无穷的遐想,以及无穷的吐槽,其实教科书只要补一张图就足够了:频域图像,也就是俗称的频谱,就是——&/p&&figure&&img src=&https://pic4.zhimg.com/bd33d94e2fc8b174f0d14ab_b.jpg& data-rawwidth=&800& data-rawheight=&360& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/bd33d94e2fc8b174f0d14ab_r.jpg&&&/figure&&br&&br&&p&再清楚一点:&br&&figure&&img src=&https://pic2.zhimg.com/40cf849e55edd_b.jpg& data-rawwidth=&800& data-rawheight=&481& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/40cf849e55edd_r.jpg&&&/figure&可以发现,在频谱中,偶数项的振幅都是0,也就对应了图中的彩色直线。振幅为0的正弦波。&br&&/p&&p&动图请戳:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/File%3AFourier_series_and_transform.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&File:Fourier series and transform.gif&/a&&/p&&p&老实说,在我学傅里叶变换时,维基的这个图还没有出现,那时我就想到了这种表达方法,而且,后面还会加入维基没有表示出来的另一个谱——相位谱。&/p&&p&但是在讲相位谱之前,我们先回顾一下刚刚的这个例子究竟意味着什么。记得前面说过的那句“世界是静止的”吗?估计好多人对这句话都已经吐槽半天了。想象一下,世界上每一个看似混乱的表象,实际都是一条时间轴上不规则的曲线,但实际这些曲线都是由这些无穷无尽的正弦波组成。我们看似不规律的事情反而是规律的正弦波在时域上的投影,而正弦波又是一个旋转的圆在直线上的投影。那么你的脑海中会产生一个什么画面呢?&/p&&br&&p&我们眼中的世界就像皮影戏的大幕布,幕布的后面有无数的齿轮,大齿轮带动小齿轮,小齿轮再带动更小的。在最外面的小齿轮上有一个小人——那就是我们自己。我们只看到这个小人毫无规律的在幕布前表演,却无法预测他下一步会去哪。而幕布后面的齿轮却永远一直那样不停的旋转,永不停歇。这样说来有些宿命论的感觉。说实话,这种对人生的描绘是我一个朋友在我们都是高中生的时候感叹的,当时想想似懂非懂,直到有一天我学到了傅里叶级数……&/p&&h2&三、傅里叶级数(Fourier Series)的相位谱&/h2&&p&&u&上一章的关键词是:从侧面看。这一章的关键词是:从下面看。&/u&&/p&&p&在这一章最开始,我想先回答很多人的一个问题:傅里叶分析究竟是干什么用的?这段相对比较枯燥,已}

我要回帖

更多关于 响应面法三因素三水平 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信