数据科学概论
随着互联网的飞速发展,大数据(Big Data)的概念和技术成为当下流行的领域。 数据科学(Data Science)这一体系也随着大数据的崛起成为讨论热点。在各大招聘网站上,“数据科学家”也渐渐成为一个热门的工作职位。大专院校也纷纷开设大数据相关专业培养数据科学人才。哈佛商业评论说,数据科学家是二十一世纪最性感的职业。
数据科学是一个混合了数学、计算机科学以及相关行业知识的交叉学科,主要包括统计学、操作系统、程序设计、数据库、机器学习、数据可视化等相关领域的知识。随着数据量的爆发,大数据可以看做数据科学的一个分支。
操作系统
Windows
Microsoft Windows是美国微软公司开发的一套操作系统,它问世于1985年,并逐渐成为家家户户人们最喜爱的操作系统。直至今天,Windows操作系统仍然是家用和办公电脑操作系统的首选。由于病毒和漏洞的层出不穷,Windows的安全性和健壮性一直为人所诟病。
Mac OS X
Mac OS X是一套运行于苹果Macintosh系列电脑上的操作系统。它基于Unix内核,以简单易用和稳定可靠著称。但曲高和寡,毕竟Mac OS X难以成为主流。
Linux
Linux是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和[网络协议。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux最擅长的就是服务器系统。大数据平台无论是Hadoop还是Spark,最好的搭配就是Linux。
Linux强大而丰富的文本工具如grep、sed、awk等可以在不动用编程工具的前提下完成基本的数据处理流程。
基于Linux内核的发行版本已经有很多了,比较流行的诸如Ubuntu、Redhat、CentOS、Debian等等,目前使用最广泛的是Ubuntu。
架构
大数据的概念和技术流行之后,业界推出了很多基于大数据的软件架构,其中最有名的就是Hadoop和Spark。
Hadoop
Hadoop是一款支持数据分布式存储和数据分布式计算的软件平台,能够在廉价硬件上构建大型集群。Hadoop是Yahoo公司根据谷歌公司发表的MapReduce和Google文件系统(GFS)的论文开源实现而成。
简单来说,Hadoop架构包括两部分,一是HDFS分布式文件系统,二是MapReduce编程模型。前者负责将数据分布式并容错地存储在集群的各个节点,后者负责对数据进行分布式的分发、计算和归纳。
Hadoop上的数据和应用程序被分区成许多小部分,而每个部分都能在集群中的任意节点上运行。
Hadoop一经推出,立刻风靡大数据领域并成为事实上的行业标准,围绕Hadoop的技术生态圈迅速建立起来,主要包括下面几项技术:
- HBase:Hadoop上的分布式非结构化数据库(NoSQL)。
- Hive:构建于Hadoop之上的数据仓库,通过一种类SQL语言HiveQL为用户提供数据的归纳、查询和分析等功能。
- Mahout:机器学习算法软件包。
- Sqoop:结构化数据如关系数据库与Hadoop之间的数据转换工具。
- ZooKeeper:是一种为Hadoop设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。
Spark
Spark是一个开源的计算框架,可以用来替代Hadoop的MapReduce模型。Hadoop的MapReduce在运行过程中将中间数据存放到磁盘中,而Spark使用了内存运算技术,能在数据尚未写入硬盘时即在内存内分析运算。所以Spark的运算速度比Hadoop MapReduce快近100倍,即便是运行程序于硬盘时,Spark也能快上10倍速度。
Spark目前本身不包含分布式文件系统,所以Spark经常借用Hadoop的HDFS来实现分布式存储,而Spark本身负责分布式计算。
Spark的技术生态圈包含下列几项:
- Spark核心和弹性分布式数据集(RDDs):
Spark核心是整个项目的基础,提供了分布式任务分配、调度和基本的I/O功能。而其基础的程序抽象则称为弹性分布式数据集(RDDs)和作用其上的算子,RDDs是一个可以并行操作、有容错机制的数据集合。应用程序操纵RDDs的方法类似于操纵本地端的数据集合。 - Spark SQL:Spark SQL 是一个用来处理结构化数据的Spark组件,可以看作是一个分布式的SQL查询引擎。
- Spark Streaming:是Spark实时任务处理模块。
- MLlib:MLlib是Spark上分布式机器学习框架。Spark分布式内存式的架构比Hadoop磁盘式的Mahout快很多倍,扩充性更好。
MLlib可使用许多常见的机器学习和统计算法,简化大规模机器学习时间。 - GraphX:是Spark上的分布式图形处理框架。
编程语言
Hadoop基于Java语言,而Spark基于Scala语言,同时Spark通过PySpark支持Python语言。无论是Hadoop还是Spark,在其生态圈中都少不了SQL的身影,如Hive中的类SQL语言HQL、Spark-SQL等,再加上在统计分析领域如日中天的R语言,构成了大数据环境下的编程语言生态圈。
Python
随着大数据技术的不断推进,Python已经成为当之无愧的大数据第一编程语言。Python的第三方库numpy、scipy、matplotlib、pandas、keras等覆盖了从科学计算到深度学习的全栈环境,构成了Python语言数据科学的生态圈。在IEEE发布的编程语言流行度排行榜上,Python语言高居第一。
R
R语言是统计学家发明的一种语言,也可以说是一种统计软件,主要用于数据统计和数据可视化。R语言强大的第三方软件包涵盖了从统计分析、科学计算、机器学习、数据可视化等数据科学的各个领域,从而和Python一起成为大数据时代最流行的编程语言。
Java
Hadoop是基于Java语言的,所以在Hadoop下编程就必须学习和使用Java。Java语言是目前编程领域市场份额最多的语言,随着Android的流行和Hadoop的崛起,Java又焕发出新的活力。
SQL
SQL,指结构化查询语言,全称是 Structured Query Language。SQL是访问和处理关系型数据库的标准计算机语言。所有的关系型数据库如Oracle、SQL Server、MySQL等都是使用SQL语言进行数据库的创建、查询、修改等操作。数据科学离不开数据库,关系型数据库仍然是数据存储的主要结构,所以SQL语言也是数据科学领域不可或缺的知识。
数据库
据库(Database)是按照数据结构来组织、存储和管理数据的仓库。在数据库发展的历史上,经历了层次型、网络型到关系型的转变过程。从上世纪七十年代到现在,关系型数据库一统江湖。直到大数据时代,由于非结构化数据的大量涌现,才诞生了非关系型数据库。
关系型数据库
关系数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型是由埃IBM公司科学家Codd于1970年首先提出并发表论文,随后大量的商业性的关系数据库系统开始出现,例如,Oracle、DB2、SQL Server等。开源技术兴起后,又出现了MySQL、PostgreSQL等开源关系数据库系统。关系数据库依赖SQL语言进行数据的管理和操纵。在大数据时代,传统的关系型数据库仍然占据数据存储的相当部分份额。
非关系型数据库
非关系型的数据库,也称为NoSQL(Not only SQL)。随着互联网技术的兴起和飞速发展,传统的关系数据库在应付现代网站如Web 2.0网站,特别是超大规模和高并发的动态网站已经显得力不从心,暴露了很多难以克服的问题。而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合以及多重数据种类带来的挑战,尤其是大数据环境下数据存储的应用难题。目前流行的非关系型数据库包括Hadoop中的基于列存储的HBase、文档类型的MogoDB等。深入学习一种非关系型数据库在大数据时代是必不可少的。
数学基础
在数据科学领域,要想站到更高的层次看问题,必要的数学基础是不可少的。因为在数据分析中,几乎所有的数据模型都可以用数学来描述。而其中最重要的就是线性代数和概率统计。
线性代数
很多的算法中,数据在数学中的表示就是向量或矩阵,对数据进行处理很多时候就是对矩阵进行运算。另外,数据分析中的各种回归算法本身就是线性代数的问题。
概率与统计
在数据的统计与分析过程中,需要统计学的基础知识,例如期望、方差、协方差、假设检验等。很多的数据模型最终转化为一个概率问题,不一定要得到完全确定的结果,只要满足一定的概率就可以了。概率论在数据科学中应用较多的有贝叶斯统计、隐马尔可夫模型等。
凸优化
机器学习的算法之所以有效,是因为数据模型对数据的处理最终都会转化为一系列的数学优化问题,而且主要是凸优化问题,例如梯度下降算法等。所以除了线性代数和概率统计之外,我们可能还需要一点微积分的知识。
数据分析
数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。数据分析从统计学的角度可分为描述性数据分析、验证性数据分析和探索性数据分析,其中探索性数据分析侧重于在数据中发现新的特征,这和机器学习、数据挖掘形成重叠。其实,统计学习本来就是机器学习的一个分支。
数据分析流程一般可分为数据获取、数据清洗、数据建模、数据可视化等几个主要步骤。
数据获取
近年来流行的网络爬虫就是数据获取的一个重要方式,Python是编写爬虫程序的最佳选择。当然除了互联网数据之外,物联网下大量传感器也是数据获取的主要来源之一。
数据清洗
数据清洗主要对获取的数据进行整理和加工,包括对错误数据的修正、对缺失数据的处理、异常值的检测和处理以及数据标准化等等,最终形成可以应用数据模型的干净有效的数据。
数据建模和模型评估
这是数据分析过程中最重要的一步。按照业务需求建立不同模型,例如客户流失预警、欺诈检测等等。其中会应用到机器学习的一些算法。最后,由业务专家进行业务解释和结果评价并最终将模型推广应用。
数据可视化
数据分析的结果最好的展示形式是图表,特别是统计图形,能事半功倍地说明数据分析结果的各个方面,正所谓一图胜千言。Python中的matplotlib库和R中的ggplot2软件包是数据可视化编程领域的翘楚。
机器学习和数据挖掘
机器学习本身就是一门交叉学科,它汇集了统计学、线性代数、微积分、凸优化等数学知识以及数据库、算法、编程等计算机知识。数据挖掘的概念在很多场合和机器学习并不加以区分。严格来说,机器学习注重的是算法,而数据挖掘是利用机器学习算法在数据库的数据中发现有价值的信息。Python的sckit-learn、Hadoop的Mahout、Spark的MLlib都集成了流行的机器学习算法,可以直接使用。机器学习的算法主要包括回归、分类、聚类、关联分析、支持向量机、神经网络等等。
行业知识
一个好的数据分析师需要一定的行业知识。例如,如果做电商的销售数据分析,就必须对销售指标的意义了如指掌;如果做银行的信用卡客户分析,就必须对银行基本的业务有所了解。如果无法理解数据中的业务,也就无法更好地利用数据,也无法解读数据分析最后的结论。
结论
综上所述,作为大数据环境下数据科学的从业者、大专院校大数据相关专业的学生,需要学习的知识包括以线性代数、概率统计为主的数学知识,打下良好的理论基础。进而学习大数据架构平台Hadoop和Spark,事实上业界两大Hadoop发行公司Cloudera和Hortonworks都在其Hadoop发行版本中内置了Spark。作为大数据的基础,学习一种关系型数据库如MySQL和一种非关系型数据库如HBase或MogoDB是必不可少的。而对于编程人员和数据分析师来说,学习Python和R语言能专注于数据分析的逻辑,达到事半功倍的效果。最后,作为进阶,学习和掌握机器学习以及深度学习的各种流行算法,以达到数据科学的高层境界。