1.1 大数据工程师必备技能
经验丰富的程序员往往能快速掌握某种算法库的使用方法,但是对于算法的选型、调优,则需要更多的理论知识和对算法更深层次的理解。而且算法技术发展很快,有时开发者刚刚熟悉某一工具,很快就有新的工具将其替代,因此只学习算法库的使用还远远不够。
模型和算法只是大数据开发的一部分。在算法的底层,有支撑数据运算和存储的操作系统和服务。在开发前期,需要抓取数据、做特征工程,还有与建立模型同等重要的数据的统计分析。在分析和建模后,还需要以图、表、描述或者应用程序的方式产品化,或者输出有意义的结论。大数据开发的各个步骤环环相扣,非常复杂,针对较大型的项目往往需要实施工程师、DP工程师、算法工程师、后端工程师和前端工程师配合完成。
大数据开发工程师大部分都从外围,即数据采集、前期处理做起,然后逐渐深入到核心算法;也有一些数学或者统计学专业的工程师从核心算法向周边延展。无论通过哪一种方法,想做好、做精大数据开发都需要对全链路有所了解,另外还需要理解业务数据并在实战中不断磨练。
本书以Python数据分析和建模为主,并延展到整条数据链路。下面探讨大数据相关的工作范围。
1.操作系统
当数据达到一定数量时往往使用集群解决方案,而Linux是集群方案的首选操作系统,同时配合Docker将常用的库和服务打包在镜像中,这样既屏蔽了不同底层操作系统的差异,又使得在其他机器上安装系统变得非常轻松高效。本章将会介绍Linux和Docker的安装和使用。
2.编程工具
目前,数据分析主要使用MATLAB,SPSS,Stata,R,Python等。其中,MATLAB是科学计算的首选工具,但其专业性较强,相对难以上手,并且它是一款商用软件,学习和使用的成本都比较高。Python和R语言也是科学计算领域成熟的编程语言,其中MATLAB中的功能一般都可以找到对应的Python第三方库。
图形界面的SPSS和Stata无须学习编程,常被需要对本领域进行数据分析的专业人士使用。久而久之,它们就成为很多专业文章必用的工具,在某些领域中甚至比Python,R及MATLAB更加流行。
在数据建模方面,由于R和Python具有易学、易读、易维护等优点,因此它们已成为主流工具。虽然Java和C++也支持一些数据分析建模库,但由于它们的调用方式不如Python灵活,因此在数据领域中并不太常用。但由于C++确实比Python更加高效,因此有些Python库的底层运算都由C++实现,上层用Python封装,这样在保证接口灵活调用的同时,也保证了运行效率。
Python强大的第三方库不仅支持科学计算,而且还支持文件管理、界面设计、网络通信等,因此,开发者使用Python一种语言即可实现应用程序的完整功能。
本书的多数章节都围绕Python数据分析展开,其中涵盖与Python数据处理相关的数据结构、数据表支持、图表库、统计库、机器学习模型库及简单的深度学习库,并以实例的方式综合讲解Python对各种典型问题的整体解决方案。
3.数据获取
从文件、数据库或数据仓库获取数据往往是大数据开发的第一步。数据文件和库文件大多是有格式的数据(如医院或学校的信息系统),往往可以直接读取;也有一部分是从其他渠道获取的,比如从他人提供的Web接口远程读取的数据,则需要定义格式、转换和保存在本地。
使用爬虫从网络上抓取数据也是不可或缺的手段之一,有时从网络上抓取所有数据,有时从网络上抓取周边辅助数据。例如,在参加数据比赛需要预测人流量并允许使用外部数据时,可能会从网络上抓取相关的天气信息作为特征来提高预测的准确性。本书将在第5章介绍数据获取的相关方法。
4.特征工程
特征工程主要是指在分析和建模之前所做的数据清洗、聚合、生成新特征等工作,开发者对业务的理解和前期经验也常在特征工程的处理中融入数据。例如,根据规则填补数据的缺失值、通过身高和体重生成新特征体重指数BMI、用PCA方法降低数据维度,等等。由于特征工程中的数据处理方法还依赖模型的选择,如使用PCA方法降维就会损失模型结果的可解释性,因此在做特征工程时必须要了解业务逻辑、数据分析和模型算法。
本书的第3章和第6章介绍了Python数据表工具Pandas及其数据处理工具的使用方法。通过对这些工具的学习,读者可以解决特征工程的大部分相关问题。
5.统计分析
统计分析方法由来已久,虽然它看起来不如建模预测高级,但是在很多专业领域中仍然是数据分析的主流方法。这一方面是由于在某些复杂领域中,数据比较复杂且数据量并不充足,比如在某类疾病发生率不高的情况下,无法获取足够多的各种情况的实例,这时模型训练和预测效果就不够好。另一方面,一些模型,如神经网络不能提供足够的可解释性,加之黑盒方法的准确率不够高,使其无法应用在敏感和精度要求较高的领域中。
因此,在医学等领域中,统计分析方法仍然占主导地位,该方法可以充分解构出历史数据中所携带的有意义的信息。它通过统计描述,如数据量、缺失量、均值、分位数、高频词等,对数据的概况有所了解,再通过统计假设方法分析自变量与因变量之间的关系。相对于仅用模型预测,它提供对数据多层面的描述和分析,并携带大量信息,即使在使用模型的业务中,也是对模型的重要补充。本书在第7章数据分析中介绍常用的统计分析方法。
6.模型算法
目前,模型算法是解决大数据问题的主流趋势,主要包括机器学习算法和深度学习算法。实际上,深度学习是机器学习的一个分支,但大家常把深度学习以外的其他算法简称为机器学习算法,以示区分。
对于当前成熟的算法,基本上无须自己编写代码,主要通过调用已有的工具库实现。近几年,甚至出现了Auto-ML等自动选择建模方法的工具。那么,是否还需要学习模型原理及具体实现呢?究竟是学习机器学习模型还是学习深度学习模型呢?
大多数的模型算法比较复杂,且需要用到较多的数学和概率方面的知识,这也是数据分析中学习难度最大的部分。本书的第8章主要介绍机器学习算法的原理和工具的使用方法,第12章结合图像处理实例介绍深度学习的基本原理和工具的使用方法,其主要目的是让读者理解它们的原理,以便对其更好地选择和使用,以及在必要时可以根据需求对模型做简单的修改和定制,以实用为主。
7.图表
数据分析和模型算法结果的展示都会用到图表,其分为作图和展示统计表两部分。表格常用于高效、简洁地展示信息,如原始数据内容的展示、用三线表或者表格文件输出的方式展示统计结果、模型预测报告等。Pandas提供将图表保存成多种数据文件以及导出成HTML格式网页的方法,这将在第5章详细介绍。
有些无法通过文字或者数值描述的更复杂的数据,如时序数据、展示特征相关程度的散点图、多特征相关性的热力图、展示分类结果的AUC-ROC曲线等,都可以使用作图方式直观地展示信息。本书的第4章将由浅入深地介绍三种Python作图工具的使用方法。
8.应用程序
建立应用程序是数据处理的最后一步,往往也是数据处理的目标:将分析和预测结果呈现给用户,并作为软件或者软件模块在具体的工作流程中发挥作用。这涉及编写前端软件,即在常见的B/S架构中,服务端以WebService的方式提供使用界面。它的好处在于不依赖操作系统,无须安装,用手机或电脑等各种终端即可访问。当对界面要求较高时,一般使用JavaScript开发,Python内部也支持Flask库实现相对简单的WebService功能,以及和JavaScript配合使用。该部分不是本书的重点,只在第5章最后部分简要介绍,以完善整个数据处理流程。