编辑推荐

适读人群:《探寻数据背后的逻辑:R语言数据挖掘之道》从事数据挖掘、数据分析、市场研究的工作者及学生群体。

√不只介绍R语言,更深入数据挖掘的本质:探寻数据背后的逻辑,挖掘人们的欲望、需求及态度

√深入浅出介绍R语言数据挖掘,以及数据挖掘和机器学习中的常见算法

√枚举了很多有趣的实例及其在商务领域的应用

√涉及多种数据类型和不同的挖掘任务

就R语言而言,书中详述了R语言的特点和一些弊端的经验性克服方法。

就数据挖掘而言,书中详细演示了从数据清洗、变量转换、筛选、构建模型、调优、监控及代码部署等一系列完整的流程。

内容简介

数据分析、数据挖掘的本质是探寻数据背后的逻辑,挖掘人们的欲望、需求、态度等。《探寻数据背后的逻辑:R语言数据挖掘之道》不仅仅教会读者如何掌握数据挖掘相关技能,更教会读者如何从数据挖掘结果中分析出更深层次的逻辑。

《探寻数据背后的逻辑:R语言数据挖掘之道》主要介绍使用R语言进行数据挖掘的过程。具体内容包括R软件的安装及R语言基础知识、数据探索、数据可视化、回归预测分析、时间序列分析、算法选择流程及十大算法介绍、数据抓取、社交网络关系分析、情感分析、话题模型、推荐系统,以及数据挖掘在生物信息学中的应用。另外,《探寻数据背后的逻辑:R语言数据挖掘之道》还介绍了R脚本优化相关内容,使读者的数据挖掘技能更上一层楼。

《探寻数据背后的逻辑:R语言数据挖掘之道》适合从事数据挖掘、数据分析、市场研究的工作者及学生群体,以及对数据挖掘和数据分析感兴趣的初级读者。

作者简介

宋云生,中山大学生命科学学院硕士毕业,混迹于医药商业、汽车制造等多个行业,先后从事市场研究、BI(商业智能)、质量控制等多个领域的数据研究和落地应用,现主攻自然语言理解领域的实际应用。

张坚洪,华南农业大学数学与应用数学本科毕业,先后从事汽车、金融等行业,主要工作方向为数据仓库、数据挖掘在互联网金融领域的应用。

黎新年,中山大学生命科学学院博士毕业,主要研究方向为基因组的进化、群体演化和系统发育。

目录

第1章万事不只开头难1
1.1工欲善其事,必先利其器:安装1
1.1.1安装R和RStudio1
1.1.2安装数据包3
1.1.3数据包加载、卸载、升级,查看帮助文档5
1.1.4什么样的R包值得相信7
1.2了解R的对象8
1.2.1如何进行常见的算术运算8
1.2.2R语言的三大数据类型10
1.2.3向量及其运算12
1.2.4因子变量鲜有人知的秘密15
1.2.5矩阵相关运算及神奇的特征值17
1.2.6数据框及其筛选、替换、添加、排序、去重18
1.2.7与数组(array)相比,表单(list)的用处更加广泛22
1.2.8如何进行数据结构之间的转化23
1.3R语言的重器:函数26
1.3.1自编函数26
1.3.2有用的R字符串函数29
1.4控制流在R语言里只是一种辅助工具31
1.4.1判断32
1.4.2循环33
1.5数据的读入与输出35
1.5.1常见数据格式的输入/输出(CSV、TXT、RDATA、XLSX)35
1.5.2数据库连接:Oracle、MySQL及Hive37
1.5.3乱码就像马赛克一样让人讨厌39

第2章数据探索,招招都是利器41
2.1不要在工作后才认识“脏数据”41
2.1.1以老板信服的方式处理缺失数据42
2.1.2异常值预警48
2.1.3字符处理正则表达式不再是天书49
2.2数据透视、数据整形、关联融合与批量处理50
2.2.1还忘不掉Excel的数据透视表吗50
2.2.2你能给数据做整形手术吗:long型和wide型52
2.2.3关联合并表54
2.2.4数据批处理:R语言里最重要的一个函数家族:*pply55
2.3一招完成数据探索报告58
2.4拯救你的很多时候是基础理论61
2.4.1参数检验及非参检验62
2.4.2学了很多算法却忘了方差分析68
2.4.3多因素方差分析及协方差作用70
2.4.4很多熟悉的数据处理方法已经成笑话,工具箱该换了73

第3章从商务气质的数据可视化说起84
3.1说说数据可视化的专业素养84
3.1.1数据可视化历史上有多少背影等你仰望84
3.1.2商务图表应该具有哪些素质87
3.1.3那些你不知道的图表误导性伎俩94
3.1.4如何快速解构著名杂志的图表98
3.2ggplot2包:一个价值8万美元的态度103
3.2.1一张图学会ggplot2包的绘图原理105
3.2.2基础绘图科学:ggplot2包的主题函数继承关系图(关系网络图)127
3.2.3基础图表一网打尽132
3.2.4古老的地图焕发新颜151
3.3将静态图转为D3交互图表:plotly156
3.4从基础到进阶的变形图表157
3.4.1马赛克图(分类变量描述性分析)157
3.4.2Sankey图和chordDiagram图158

第4章分位数回归模拟股票指数风险通道163
4.1用线性回归预测医院的药品销售额163
4.2多项式回归及常见回归方程的书写168
4.3Lasso回归和回归评价的常见指标170
4.4分位数回归拟合上证指数风险通道175

第5章时间序列分析181
5.1时间序列分析:分析带有时间属性的数列181
5.2不是所有序列都叫时间序列181
5.3时间序列三件宝:趋势、周期、随机波动183
5.3.1趋势183
5.3.2周期184
5.3.3随机波动186
5.4预测分析186
5.4.1指数平滑法186
5.4.2ARIMA模型预测188

第6章选择什么算法也有一套流程192
6.1重新审视一下这几个模型192
6.1.1Logistic回归192
6.1.2我要的不是一棵树,而是整座森林:随机森林195
6.1.3神奇的神经网络196
6.2银行信用卡评估模型之变量筛选197
6.2.1变量构建197
6.2.2Logistic回归变量筛选198
6.2.3随机森林变量筛选203
6.2.4人工神经网络建模204
6.3必须面对的模型评估204

第7章深入浅出十大算法208
7.1C5.0算法208
7.1.1一个重要的概念:信息熵208
7.1.2非列变量选择的实例209
7.1.3C5.0算法的R实现210
7.2K-means算法212
7.2.1K-means算法的R实现212
7.2.2怎么确定聚类数213
7.3支持向量机(SVM)算法213
7.3.1通俗理解SVM214
7.3.2SVM的R实现216
7.4Apriori算法216
7.4.1举例说明Apriori217
7.4.2Apriori算法的R实现219
7.5EM算法220
7.5.1举例说明EM算法221
7.5.2EM算法的R实现222
7.6PageRank算法223
7.7AdaBoost算法224
7.8KNN算法与K-means算法有什么不同226
7.9NaiveBayes(朴素贝叶斯)算法227
7.10CART算法228

第8章数据抓取231
8.1数据挖掘工程师不可抱怨“巧妇难为无米之炊”231
8.2抓取股市龙虎榜数据,碰碰运气232
8.2.1了解XML和Html树状结构,才能庖丁解牛233
8.2.2了解RCurl包和网页解析函数234
8.2.3抓取股票龙虎榜235
8.2.4资金流入分析237
8.3抓取某家医药信息网站全站药品销售数据240
8.3.1所有医药公司名称一网打尽240
8.3.2为什么抓取数据时可以使用For循环242
8.3.3不要把代码写复杂244
8.3.4用Sankey数据流描绘医药市场份额流动248

第9章不可不说的社交网络关系254
9.1社交网络图254
9.1.1社交网络图告诉你和谁交朋友254
9.1.2这几个基本概念你需要抓牢256
9.1.3还有比本章任务更有趣的数据挖掘吗259
9.2你还要装备几个评价指标260
9.2.1社交网络大小260
9.2.2社交网络关系的完备性261
9.2.3节点实力评价262
9.3全球某货物贸易中的亲密关系263
9.3.1全球某货物贸易数据整合清洗263
9.3.2分组和社交网络中心267
9.3.3全球某货物交易圈:寻找各自的小伙伴270
9.4中国电影演艺圈到底有没有“圈”276
9.4.1数据清洗与整形276
9.4.2看看演艺圈长什么样279
9.4.3谁才是演艺圈的“关系户”281
9.4.4用Apriori算法查查演艺圈合作的“朋友”关系283
9.4.5给范冰冰推荐合作伙伴284

第10章情感分析:一种准确率高达90%的新方法?287
10.1情感分析及其应用:这是老生常谈287
10.1.1情感分析的用途287
10.1.2情感分析的方法论288
10.1.3有关情感分析的一些知识和方向289
10.2文本分析的基本武器:R290
10.2.1RJava包配置290
10.2.2Rwordseg包安装291
10.2.3jieba分词包安装291
10.3基于词典的情感分析的效果好过瞎猜吗292
10.3.1数据整理及词典构建292
10.3.2分词整理297
10.3.3情感指数计算299
10.3.4方法评价:优、缺点分析300
10.4监督式情感分析:挑选训练数据集是所有人心中的痛301
10.4.1TFIDF指标301
10.4.2构建语料库302
10.4.3随机森林模型304
10.4.4算法评估:随机森林应该建多少棵树308
10.5一种准确率高达90%的新方法316
10.5.1拿来主义的启示316
10.5.2情感词典和规则构建317
10.5.3朴素贝叶斯情感分析器329
10.5.4支持向量机(SVM)、决策树等情感分析器330
10.5.5如何选择支持SVM的核函数339
10.5.6情感分类器方法评价343
10.6谈谈情感分析的下一步思考344

第11章话题模型:很多牛人过不去的坎儿346
11.1话题模型与文案文本集346
11.1.1任务仍然是以处理dirtydata开始347
11.1.2数据清洗348
11.2话题模型中几个重要的数据处理步骤350
11.2.1中文分词350
11.2.2数据整型352
11.2.3怎样设定“阈值”353
11.3上帝有多少个色子:话题数量估计356
11.3.1通俗地说一遍话题模型356
11.3.2主题数估计与交叉检验357
11.3.3如何使用复杂度、对数似然值确定主题数362
11.4LDA话题模型竟然能输出这么多关系368
11.4.1输出主题――词汇及其概率矩阵368
11.4.2输出主题――文档归属及其概率矩阵369
11.5话题之间也有社交(衍生)关系吗370
11.6话题模型的几个强大衍生品372
11.6.1话题模型提取特征词372
11.6.2三种方法确定聚类的类数和文本层次聚类373
11.6.3漂亮的文本聚类树和批量绘制大类词云图375

第12章排名就是简单的推荐系统吗?378
12.1全球宜居城市综合实力排行378
12.1.1综合实力排行:专家法VS数据驱动法379
12.1.2怎么比较两个排名结果382
12.2协同过滤推荐系统383
12.2.1基于商品的协同过滤系统(ItemCF)386
12.2.2基于用户的系统过滤系统(UserCF)388
12.2.3推荐系统效果评比390

第13章生物信息学中的数据挖掘案例392
13.1生物信息学与R语言392
13.2生物信息学中常用的软件包392
13.2.1软件包简介392
13.2.2数据表示方式――对象类(class)393
13.2.3生物信息学R包简介:Bioconductor和CRAN393
13.2.4ape包394
13.2.5读懂你的对象404
13.2.6修改工具包中的函数以适应新情况407

第14章产品化:关于内存、速度和自动化411
14.1不同终端调用、自动化执行R脚本及参数传递411
14.2与速度、内存、并行相关的程序优化414

精彩书摘

推荐序

提纲挈领式心诀:一名数据挖掘工程师的成长之路

我的学习之路

不知不觉毕业两年多了,有一些大音如霜工作室的读者总想了解一下我是怎么学习数据挖掘、数据分析的,下面就综合大家常见的问题分享一下自己的经历、经验。

我不是学数学的,也不是学计算机的,研究生的专业是植物学,而且方向是植物分类,可以说很难和数据挖掘、市场研究等领域扯上关系。唯一能扯上关系的也就是我的舍友是做生物信息学研究的。

说一句丢人的话,在读本科时上的SPSS课我都不知道在讲什么。那时没考过计算机等级考试,原因是我每分钟打汉字的速度都不过关,讲这么多,只是为了告诉读者,我的基础并不扎实。

需要说明的是,我的英语还不错,在大一和大二分别通过了英语四、六级考试(而其他科目则学得比较一般,因为我每学期只有一两个主要学习目标),在大四我读了很多英文文献。因为在读研究生期间需要查阅大量文献,我需要给这些文章建立一个数据库,于是年少无知的我就选择了Access。选择Access的原因并不是我比较熟悉它,而是我的老师用它,我至今也不会太多的操作。这应该算是我开始接触数据分析了。

使用高级语言时,记不住函数不要紧,但是你要有很强的搜索能力。

之所以讲这一段经历,不是为了说明我起步晚,而是为了说明建立Access文献数据库锻炼了我的英文搜索能力。我一碰到问题,就在Google里搜索,很快就能找到答案。于是Google几乎成了我的眼睛,真正做到了用Google搜索、发邮件、社交、阅读和写作。在公司里曾经传说,如果是连我都搜不到的内容,那么别人更不可能搜到。有些年轻人就怕英文,我并不是崇洋媚外,客观地想一想,现在的很多知识都是从欧美起源的,如果你连这门世界语言都不掌握,那么你获得的资料永远都是二手资料。另外,无论你是找函数还是找包、模块,抑或是为问题寻找答案,使用Google进行英文搜索会为你节省很多时间。掌握这门语言并不需要你听、说、读、写样样精通,而是将其作为一种工具,应用起来比较方便就可以了。

要善用英文搜索,原因很简单,你所用的编程语言或软件大多是外国人构建的,并且在国外已经普及,相关的问答社区早已完善,你碰到的问题可能早就有人解决了。

在搜索文献的过程中,我喜欢上了《经济学人》的GraphicDetails栏目,发现其绘制的图表非常漂亮、专业,于是我就开始学习Excel,尽自己所能将Excel图表做得更漂亮、更专业,这些经历为我日后做数据可视化打下了坚实的基础:我知道了商务色彩搭配及图表要简洁、易读等原则,我知道怎么使自己的图表特色鲜明。后来看了大前研一先生的著作,了解了专业精神,我曾经写下这样一句话,以勉励自己:

所谓专业,即每一个细节都经得起推敲。

有一天,舍友看到我用Excel作图,嘲笑我孤陋寡闻,推荐我学习R语言,然后我就开始搜寻一些R语言入门读物进行阅读,慢慢地知道了关于这门语言的粗浅知识。

这个时候已经到研二下半学期了,我需要为自己未来的工作做打算了:是步入园林行业还是就此转行?必须做一个决断。我发现自己真的对植物分类不感兴趣,而我做家教的学生的妈妈是星空传媒的一个经理,平时待我很好,她说毕业可以介绍我去做市场研究。我了解了一下市场研究,发现其中涉及一些数据分析的内容(现在看起来很简单),于是,我从此决定踏上数据分析这条“不归路”。

为了快速上手、熟悉统计学知识,我并没有马上深入地学习R语言,而是像以往一样懒懒散散地学习(后悔当时没有实战学习)。我通过搜索发现,市场研究的岗位大多将熟练使用SPSS作为硬性要求,偶尔也会要求熟悉R语言,但SPSS对我来说更容易上手,于是就开始学习SPSS。SPSS帮助我巩固了统计学知识,当学习完简单的统计学知识后,我发现SPSS不够灵活,很多功能不够用,做出的图表很难看(这对于我来说是无法忍受的),因此,网络上有一些人鄙视SPSS,但很推崇R语言。于是我决定要深入地学习R语言。我先将SPSS的功能在R中做了一遍,有了一些自己的理解后,我开始在自己的论文里做一些数据分析的内容。

现在想来,如果我直接在实战中学习可能会节省更多的时间。

实战更能锻炼技能水平。

研二快结束了,开始找工作了。我找工作的目的很明确,如果工作不是做数据分析、数据研究的,那么我宁愿放弃这个工作的机会。非数据研究的岗位我也不去面试,这样又省下了大量的时间学习。

在工作中学习

2013年毕业后,我去了一家医药市场研究公司,当时的工作并不太忙,我有大量的时间学习。但这时也暴露了我的弱点,公司的数据并不是很规整(rawdata)的,往往需要标准化等,而且数据规模也不再是之前练习时那么小,在面对这些脏数据、大一点的数据时,我的数据清洗水平显得捉襟见肘。周围的人都是Excel高手,如果跟着他们学,估计也能成为高手,但是我一定要在R中做数据清洗整理,反正公司的工作不是很多,我就一点点地学习和积累,这样我的数据处理能力就逐渐扎实起来了。其间我用两天读完了《异类》这《探寻数据背后的逻辑:R语言数据挖掘之道》,感触很深,阅读经历已经写成一篇文章在我们的公众号里分享了。

任何一个工具在刚开始学习时都会觉得它很糟糕,其实这并不是工具的问题,而是自己的知识体系跟不上节奏,或者是它的很多方法与自己原有的认知相反,这时不要急于否定它,而是要深入地学习它。知识体系是一个积累过程,为自己准备一万个小时计划吧。

我们公司当时在做BI(商业智能),于是我接触了市面上常见的BI工具,包括Tableau、QV等,我熟悉它们的优、劣势,也熟悉它们的数据可视化效果。因为需要将R语言的页面融入BI中,所以我熟悉了shiny包,做了一些页面,但我渐渐看到R语言在做这些通用语言的工作时所暴露的缺点,于是开始接触Python。

后来,我们的合作公司的总经理听说我比较熟悉R语言,就向我请教,我们一起讨论了R语言和数据挖掘。得知他们在做文本挖掘,于是在我闲暇时间开始学习中文文本挖掘的内容。没有成型的数据和书,我就看帖子,去一个个地实现,然后积累经验,这时我对R的操作算得上非常熟练了,从实现到速度优化(并行计算等)等也已经非常熟练,积累的代码也非常多了。

后来,那个经理找我做医院处方数据挖掘工作,之后,他请我去负责法院文本数据挖掘,我没去,但成了他们的外援,仍然没收过钱,他们搭建的一台服务器也帮助我了解了不少Linux的知识。

刚开始,锻炼自己的机会远远比钱重要,反正自己闲着也是闲着,但是这种情况只适用于刚开始。

后来,我们公司推出了微信公众号平台,我开始给公司的公众号写文章。其间我为公司的公众号写了多篇关于综合排名的文章,阅读量最高达到4万多人次,当时公众号的粉丝才2000人左右。后来我又制作了评价医院市场趋势的综合指标体系,现在公司也一直在沿用这套指标,这些工作中的小点子都是我在公交车上想出来的。

除要把工作当成一种谋生手段外,还必须有极大的兴趣,要么不做,要么做好。

另外,我在公交车上读完了DataMiningwithRlearningbycasestudies、MachineLearningforHackers、RGraphicsCookbook等书籍,之所以提这三《探寻数据背后的逻辑:R语言数据挖掘之道》,是因为我不止读过一遍,这三《探寻数据背后的逻辑:R语言数据挖掘之道》很有特色,第一本帮助我学习了各种算法,第二本帮助我接触了实际应用中的知识,第三本帮我熟练了ggplot的函数及图表元素结构。我开始学会利用零散的时间,坚持积累,也开始学习高度自律。

古之成大事者,不唯有超世之才,亦必有坚韧不拔之志。

——苏轼

其实,我一直幻想着有一个自己想写什么就写什么的平台,于是,我和小伙伴们开通了微信公众号,直到现在,我们更注重文章的可读性、趣味性,而不仅仅是技术,但是每一篇文章都可以作为一个小项目让希望学习数据分析的读者能锻炼一下自己的技能。

经常有读者问学数据分析就一定要学编程吗?以及为什么要看英文资料?针对这两个问题,我写下了这样一段对话,希望你能在对话中找到答案。

为什么学习数据分析?

赚钱!

什么样的人容易赚钱?

技能比别人高的!

英语是不是一般人的难关?是不是大家都想学习傻瓜式操作软件?

是!

那么如果大家都这么想,你应该怎么做?

很明显,你要做其他人不愿意做的事情,才能赚到别人不能赚的钱!

作为数据分析师,一定要将自己和技术区分开,分析数据、挖掘数据本质上是探寻数据背后的人心,挖掘人们的欲望、需求、态度等,所以数据分析师还要尽量拓宽自己的视野和知识结构,尽自己所能博览群书。

我的经历大体如此,中间会有各种迷茫、各种苍白无力,但是如果你缺少什么,就去搜集资料,做出判断,努力去争取,这一点总不会错,千万不要一味地否定你不了解的东西,这也是我对待未知领域的态度。

作为一名技术人员,要让自己的知识时刻在进步!这是一种宿命。

前言/序言

前言

什么是规范化的数据挖掘流程

人总是被自己日常从事的工作所蒙蔽双眼,看不到事态发展的整体面貌,为了手里的工作而工作,这就是所谓的迷失吧。一个数据挖掘项目不仅仅是数据挖掘工程师手中的一部分工作(虽然它是工作的核心),作为一个力求向上的人,要跳出来看看项目的全貌。只有对项目全程有了足够的了解,才能更加有效地使用数据挖掘、机器学习、数据分析的工具。

数据挖掘项目一般可以分为问题边界、清洗整理、数据探索、算法评估、结果提升、结果报告、系统集成和系统测试8个主要的模块。一般而言,可以尽量将这些模块合并,但无论怎么合并,它们在项目中都是不可或缺的(当然,有些项目并没有其中某些模块的需求,比如市场研究项目,它们可能就不需要系统集成)。从右图中可以看到数据清洗、数据探索、算法评估占据了项目的大部分时间,这也说明它们是项目的核心内容,缺了这3项,就不能再称为是数据挖掘项目了。

数据挖掘项目流程如下图所示。

问题边界

问题边界一般是项目的开头部分,可以分为4点。首先要和业务部门细致沟通,从业务背景中提炼出对业务问题的描述,限定项目要解决的问题,便于组织力量集中对这些问题设计解决方案。然后根据解决构想将业务问题转换为数据语言,限定将要使用的数据界限,搞清楚要牵涉哪些数据。之后为了吸引业务部门必须整理出业务效用,告诉业务部门如果解决这些问题能够得到哪些改善,完成业务部门哪些具体目标。最后要将以上问题整理成一个可行的解决方案。很多人忽略了这个阶段,其后果就是业务部门觉得挖掘出来的结果不是他们想要的,或者节外生枝补充各种相关的或不相关的业务问题,最终扭曲了项目本身,使工作反复无常。所以,在项目实施之前,非常仔细地沟通并制定一个完善的问题边界非常重要。

清洗整理

清洗整理是数据挖掘工程师非常熟悉的工作,但是,很少有人认识到这是项目中花费时间最多的部分,很多人会以为算法评估部分才会花费最多的时间。其实不然,如果数据清洗进行得不顺利,则将直接影响后面的工作和模型的效果。首先要设计畅通、高效的数据抽取程序,将数据从各种数据平台抽取出来供数据挖掘工具使用,然后进行数据清洗,将数据转化为数据挖掘工具便于处理的对象类型(在R里指list、data.frame、arrary等),再进行质量清洗,包括处理缺失值、异常值、其他污点(在文本挖掘中多如牛毛)等。之后要对数据整形,包括一些统计变化,例如中心化、标准化、降维等,更重要的是数据形状的变化。

还有一项就是数据抽样,面对大数据,在数据处理阶段就要进行抽样,不能因为要清洗一个点就清洗全量的数据,那样会花费大量的时间。不如抽取小样本进行测试,等进行完数据清洗程序后,再进行全量数据的整体清理,这样反而更加省时省事,这里的样本量需要尽量保证抽到足够多的问题数据,同时要让程序运行起来非常轻松、高效。

数据探索

数据探索要完成两个目标:变量转换和变量筛选。其中变量转换既包括变量的重新计算变形,也包括概念变量的构建,比如,在客户流失预警项目中要定义什么样的客户是流失客户,就会产生出一个新的变量。如果这个变量的定义不能用业务进行合理解释,那么下面的工作就是“瞎子点灯白费油”了。有些变量不仅不会对模型产生正向的影响,而且除了影响速度,还会降低模型的效果。显然进行变量筛选就非常重要了。谷歌预测流感模型筛选变量足以证明数据探索多么重要,而且在大数据环境下,数据探索已不再是一件轻而易举就能完成的事情了。

算法评估

算法评估是数据挖掘项目的灵魂。算法评估首先要求我们充分了解算法或模型的参数意义,然后需要预留测试数据集。模型评估不是仅仅比较模型结果的准确性是否存在差异(别忘了统计学教导我们比较差异时要判断差异的显著水平),所以,模型比较是对不同模型准确性均值的比较。算法筛选完成后,工作就告一段落了,这时要和业务部门一起对结果进行业务解释,不能进行业务解释的数据挖掘结果就是为了数据挖掘而数据挖掘,这显然就是迷失在了项目中,遗忘了项目要解决的问题边界。最后要对结果进行完整的评估报告。评估报告是必需的,因为除了将它给领导看,更重要的是它能帮助你总结发现这个过程中可以改善的节点。

结果提升

首先要判断是否需要调整算法或模型,包括更换算法或调整参数。如果模型调整没有必要,那么就要考虑使用模型融合提高模型效率。模型融合的方法包括装袋(Bagging)和提升(Boosting)等,有些方式可能用业务解释起来比较困难,这也是数据挖掘工程师要考虑的问题之一,显然,有些问题选择可解释模型比较好。在项目中对一些极端情况最好另做处理。

结果报告

“丑媳妇也要见公婆,”分析结果报告最终要给业务部门的同事学习,教他们如何使用数据挖掘的结果进行业务分析和部署,其中主要成果要突出,吸引他们的眼球,一定要联系业务具体的困境或具体的业务情景,即所谓的对症下药。规律和结果必须通过易读的方式传达给受众,充满技巧的数据可视化是不二之选,将美妙的可视化图表嵌入具体的应用情景中进行宣讲,往往能达到事半功倍的效果,因此,在此处无论多么努力都不为过。SWOT分析是业务部门最喜欢的分析方式,我们当然不能放过,以对方熟悉的方式表达自己的诉求,是交流的法宝。

模块固化这一步工作的快慢取决于之前的工作,如果之前已经考虑到后面要进行模块固化,那么就会将代码写得比较规范、注释良好,这种情况下就很容易将数据清洗、数据整形、变量转换、模型构建、结果输出等模块的内容固定下来,成为一个数据有进口及有出口的脚本文件。

系统集成

将固化下来的模块按照一定的秩序集成在一起,就成为一个分析的脚本体系。在这个体系中,有输入就有产出,中间不需要人工干预,是一个有序的自动化脚本体系。这一步考验数据挖掘工程师对每一步任务的理解。良好的模块集成可以提升整个系统的速度,减少后期维护的时间和次数。

模块集成后要与其他系统集成在一起,首先要和数据平台(数据库、Hive、Hadoop)对接,为分析模块提供数据来源和存储分析结果,同时要和前台展示对接,将结果可视化,让结果真正接触受众,即所谓的为决策者提供支持。

系统测试

这么一个“五脏俱全”的系统需要维护在所难免,总有一些极端情况会导致数据分析模块宕机,所以,代码一定要写得尽量规范,注释要尽量清晰,否则在维护时会有一种再造系统的感觉。关于规范请参看Google'sRStyleGuide。



序言

提纲挈领式心诀:一名数据挖掘工程师的成长之路

我的学习之路

不知不觉毕业两年多了,有一些大音如霜工作室的读者总想了解一下我是怎么学习数据挖掘、数据分析的,下面就综合大家常见的问题分享一下自己的经历、经验。

我不是学数学的,也不是学计算机的,研究生的专业是植物学,而且方向是植物分类,可以说很难和数据挖掘、市场研究等领域扯上关系。唯一能扯上关系的也就是我的舍友是做生物信息学研究的。

说一句丢人的话,在读本科时上的SPSS课我都不知道在讲什么。那时没考过计算机等级考试,原因是我每分钟打汉字的速度都不过关,讲这么多,只是为了告诉读者,我的基础并不扎实。

需要说明的是,我的英语还不错,在大一和大二分别通过了英语四、六级考试(而其他科目则学得比较一般,因为我每学期只有一两个主要学习目标),在大四我读了很多英文文献。因为在读研究生期间需要查阅大量文献,我需要给这些文章建立一个数据库,于是年少无知的我就选择了Access。选择Access的原因并不是我比较熟悉它,而是我的老师用它,我至今也不会太多的操作。这应该算是我开始接触数据分析了。

使用高级语言时,记不住函数不要紧,但是你要有很强的搜索能力。

之所以讲这一段经历,不是为了说明我起步晚,而是为了说明建立Access文献数据库锻炼了我的英文搜索能力。我一碰到问题,就在Google里搜索,很快就能找到答案。于是Google几乎成了我的眼睛,真正做到了用Google搜索、发邮件、社交、阅读和写作。在公司里曾经传说,如果是连我都搜不到的内容,那么别人更不可能搜到。有些年轻人就怕英文,我并不是崇洋媚外,客观地想一想,现在的很多知识都是从欧美起源的,如果你连这门世界语言都不掌握,那么你获得的资料永远都是二手资料。另外,无论你是找函数还是找包、模块,抑或是为问题寻找答案,使用Google进行英文搜索会为你节省很多时间。掌握这门语言并不需要你听、说、读、写样样精通,而是将其作为一种工具,应用起来比较方便就可以了。

要善用英文搜索,原因很简单,你所用的编程语言或软件大多是外国人构建的,并且在国外已经普及,相关的问答社区早已完善,你碰到的问题可能早就有人解决了。

在搜索文献的过程中,我喜欢上了《经济学人》的GraphicDetails栏目,发现其绘制的图表非常漂亮、专业,于是我就开始学习Excel,尽自己所能将Excel图表做得更漂亮、更专业,这些经历为我日后做数据可视化打下了坚实的基础:我知道了商务色彩搭配及图表要简洁、易读等原则,我知道怎么使自己的图表特色鲜明。后来看了大前研一先生的著作,了解了专业精神,我曾经写下这样一句话,以勉励自己:

所谓专业,即每一个细节都经得起推敲。

有一天,舍友看到我用Excel作图,嘲笑我孤陋寡闻,推荐我学习R语言,然后我就开始搜寻一些R语言入门读物进行阅读,慢慢地知道了关于这门语言的粗浅知识。

这个时候已经到研二下半学期了,我需要为自己未来的工作做打算了:是步入园林行业还是就此转行?必须做一个决断。我发现自己真的对植物分类不感兴趣,而我做家教的学生的妈妈是星空传媒的一个经理,平时待我很好,她说毕业可以介绍我去做市场研究。我了解了一下市场研究,发现其中涉及一些数据分析的内容(现在看起来很简单),于是,我从此决定踏上数据分析这条“不归路”。

为了快速上手、熟悉统计学知识,我并没有马上深入地学习R语言,而是像以往一样懒懒散散地学习(后悔当时没有实战学习)。我通过搜索发现,市场研究的岗位大多将熟练使用SPSS作为硬性要求,偶尔也会要求熟悉R语言,但SPSS对我来说更容易上手,于是就开始学习SPSS。SPSS帮助我巩固了统计学知识,当学习完简单的统计学知识后,我发现SPSS不够灵活,很多功能不够用,做出的图表很难看(这对于我来说是无法忍受的),因此,网络上有一些人鄙视SPSS,但很推崇R语言。于是我决定要深入地学习R语言。我先将SPSS的功能在R中做了一遍,有了一些自己的理解后,我开始在自己的论文里做一些数据分析的内容。

现在想来,如果我直接在实战中学习可能会节省更多的时间。

实战更能锻炼技能水平。

研二快结束了,开始找工作了。我找工作的目的很明确,如果工作不是做数据分析、数据研究的,那么我宁愿放弃这个工作的机会。非数据研究的岗位我也不去面试,这样又省下了大量的时间学习。

在工作中学习

2013年毕业后,我去了一家医药市场研究公司,当时的工作并不太忙,我有大量的时间学习。但这时也暴露了我的弱点,公司的数据并不是很规整(rawdata)的,往往需要标准化等,而且数据规模也不再是之前练习时那么小,在面对这些脏数据、大一点的数据时,我的数据清洗水平显得捉襟见肘。周围的人都是Excel高手,如果跟着他们学,估计也能成为高手,但是我一定要在R中做数据清洗整理,反正公司的工作不是很多,我就一点点地学习和积累,这样我的数据处理能力就逐渐扎实起来了。其间我用两天读完了《异类》这《探寻数据背后的逻辑:R语言数据挖掘之道》,感触很深,阅读经历已经写成一篇文章在我们的公众号里分享了。

任何一个工具在刚开始学习时都会觉得它很糟糕,其实这并不是工具的问题,而是自己的知识体系跟不上节奏,或者是它的很多方法与自己原有的认知相反,这时不要急于否定它,而是要深入地学习它。知识体系是一个积累过程,为自己准备一万个小时计划吧。

我们公司当时在做BI(商业智能),于是我接触了市面上常见的BI工具,包括Tableau、QV等,我熟悉它们的优、劣势,也熟悉它们的数据可视化效果。因为需要将R语言的页面融入BI中,所以我熟悉了shiny包,做了一些页面,但我渐渐看到R语言在做这些通用语言的工作时所暴露的缺点,于是开始接触Python。

后来,我们的合作公司的总经理听说我比较熟悉R语言,就向我请教,我们一起讨论了R语言和数据挖掘。得知他们在做文本挖掘,于是在我闲暇时间开始学习中文文本挖掘的内容。没有成型的数据和书,我就看帖子,去一个个地实现,然后积累经验,这时我对R的操作算得上非常熟练了,从实现到速度优化(并行计算等)等也已经非常熟练,积累的代码也非常多了。

后来,那个经理找我做医院处方数据挖掘工作,之后,他请我去负责法院文本数据挖掘,我没去,但成了他们的外援,仍然没收过钱,他们搭建的一台服务器也帮助我了解了不少Linux的知识。

刚开始,锻炼自己的机会远远比钱重要,反正自己闲着也是闲着,但是这种情况只适用于刚开始。

后来,我们公司推出了微信公众号平台,我开始给公司的公众号写文章。其间我为公司的公众号写了多篇关于综合排名的文章,阅读量最高达到4万多人次,当时公众号的粉丝才2000人左右。后来我又制作了评价医院市场趋势的综合指标体系,现在公司也一直在沿用这套指标,这些工作中的小点子都是我在公交车上想出来的。

除要把工作当成一种谋生手段外,还必须有极大的兴趣,要么不做,要么做好。

另外,我在公交车上读完了DataMiningwithRlearningbycasestudies、MachineLearningforHackers、RGraphicsCookbook等书籍,之所以提这三《探寻数据背后的逻辑:R语言数据挖掘之道》,是因为我不止读过一遍,这三《探寻数据背后的逻辑:R语言数据挖掘之道》很有特色,第一本帮助我学习了各种算法,第二本帮助我接触了实际应用中的知识,第三本帮我熟练了ggplot的函数及图表元素结构。我开始学会利用零散的时间,坚持积累,也开始学习高度自律。

古之成大事者,不唯有超世之才,亦必有坚韧不拔之志。

——苏轼

其实,我一直幻想着有一个自己想写什么就写什么的平台,于是,我和小伙伴们开通了微信公众号,直到现在,我们更注重文章的可读性、趣味性,而不仅仅是技术,但是每一篇文章都可以作为一个小项目让希望学习数据分析的读者能锻炼一下自己的技能。

经常有读者问学数据分析就一定要学编程吗?以及为什么要看英文资料?针对这两个问题,我写下了这样一段对话,希望你能在对话中找到答案。

为什么学习数据分析?

赚钱!

什么样的人容易赚钱?

技能比别人高的!

英语是不是一般人的难关?是不是大家都想学习傻瓜式操作软件?

是!

那么如果大家都这么想,你应该怎么做?

很明显,你要做其他人不愿意做的事情,才能赚到别人不能赚的钱!

作为数据分析师,一定要将自己和技术区分开,分析数据、挖掘数据本质上是探寻数据背后的人心,挖掘人们的欲望、需求、态度等,所以数据分析师还要尽量拓宽自己的视野和知识结构,尽自己所能博览群书。

我的经历大体如此,中间会有各种迷茫、各种苍白无力,但是如果你缺少什么,就去搜集资料,做出判断,努力去争取,这一点总不会错,千万不要一味地否定你不了解的东西,这也是我对待未知领域的态度。

作为一名技术人员,要让自己的知识时刻在进步!这是一种宿命。


其他推荐