
1.1 什么是数据分析
数据分析作为一个传统领域,其本身的概念并没有统一的定义。本书为了让读者能够有一个全面的理解,就从“数据”和“数据分析”两个方面开始介绍。
1.1.1 与数据相关的概念
在日常生活中,我们与数据接触的机会非常多,但数据到底是什么,很多人并不能给出一个准确的描述。
1.数据
汉语字典中对数据的解释是,进行各种统计、计算、科学研究或技术设计等所依据的数值。在维基百科中,数据是指未经处理的原始记录,是可识别的、抽象的符号。
当然,数据不仅指狭义上的数字,也可以是具有一定意义的文字、字母、数字符号的组合、图形、图像、视频、音频等,还可以是客观事物的属性、数量、位置及其相互关系的抽象表示。例如,“0,1, 2,…”“阴、雨、下降、气温”“学生的档案记录、货物的运输情况”等都是数据。数据经过加工后就成为信息。
在计算机科学中,数据是所有能输入计算机并被计算机程序处理的符号的总称,是用于输入电子计算机进行处理,具有一定意义的数字、字母、符号和模拟量等的通称。在大数据时代,从企业的大量数据中分析和提取有意义的数据,是推动数据分析发展的主要驱动力之一。尽管每天有大量的数据产生,但实际上其中只有0.5%的数据被分析并被实际应用。收集、整理、组织和理解这些可能促进业务发展的信息就是数据分析。
2.数据分析
数据分析是一个检查、清理、转换和建模数据的过程,目的是发现有用的信息,得出结论并支持决策。数据分析包含多种方法,广泛应用于商业、科学和医疗等多个领域。尤其是在当今的商业世界中,数据分析在助力企业制定科学决策和提升运营效率方面发挥着重要作用。根据行业和分析目的的不同,可以选择多种方法进行组合式分析,产生更大的效能。
在生活中,我们也无时无刻不在进行数据分析。你带着50元去菜市场买菜,对于琳琅满目的鸡鸭鱼猪肉及各类蔬菜,想荤素搭配,你逐一询问价格,不断进行分析和组合,计算50元能买到多少肉和多少菜、大概能吃多久,最终在心里得出一组信息,这就是数据分析。
1.1.2 什么是大数据
在生活中,我们常用“数值+单位”的形式来描述数据的大小。在计算机领域中,数据单位有比特(bit),再大一点的是字节(Byte),1Byte=8bit。随着计算机和网络技术的发展,数据变得越来越大,根据2021年Facebook最新的统计数据,Facebook每月活跃用户超过22亿,每天生成4PB的数据(1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB,1PB=1024TB)。这些数据都存储在Hive(一个数据仓库工具)中,其中包含大约300PB的数据。而我们常用的移动硬盘也不过几个TB的大小,可见“大数据”之大。
严谨地讲,大数据是一个领域,主要是指能够从复杂数据集中提取信息并实现分析预测等功能的方法。这种高级数据分析方法可以提供更强的统计能力,并提高错误发现率和运算效率。大数据分析技术包括数据采集、数据存储、数据分析、信息搜索、数据共享、数据传输、可视化和隐私保护等方面。
1.1.3 数据分析工具
Python最初是用于软件和Web开发的面向对象的编程语言,在后期的发展中,逐渐对数据科学方面的功能进行了提升。NumPy是最早用于数据科学的库之一,可以用于数据可视化、数据合并、数据分组和数据清理等,支持多种文件格式,可从Excel表格中导入数据集以进行分析。Pandas则是基于NumPy构建的用于数据分析的扩展程序库。
R语言是另一种用于统计建模和数据分析的编程语言。在统计学中,探索性数据分析(Exploratory Data Analysis,EDA)是一种分析数据集以总结其主要特征的方法,其通常为视觉方法。使用plyr、dplyr包可以轻松地在R语言中进行数据操作。同时,R语言在使用gplot、lattice、ggvis等包进行数据可视化和分析时的表现也非常出色。在具体应用上,R语言被用于Facebook的状态更新和个人资料图片相关的行为分析,在Google中用于预测广告效果和经济趋势。限于本书篇幅,对R语言先不做介绍。
为了改善Python有限的数据分析功能,在实际分析过程中我们会安装第三方库,常见的有NumPy、Pandas、SciPy、Matplotlib、Scikit-learn等,其简介和图标分别如表1-1所示。接下来,我们将初步介绍这些库的安装及简单使用,详细的语法和使用方法会在后续的章节中讲解。
表1-1 Python常用的数据分析库

(1)NumPy:NumPy代表Numerical Python。尽管Python列表的创建和操作相对简便,但它在支持向量化操作方面却存在局限。相比之下,NumPy库为矢量操作提供了极大的便利,使得其在数值计算和数据科学领域中的应用更为高效和灵活。同时,Python列表没有固定类型的元素,例如,for循环在每次迭代时,都需要检查数据类型。然而在NumPy数组中,数据类型是固定的,也支持向量化操作。通过更改N维数组对象Ndarray的大小,将创建一个新数组并删除原始数组,所以它的内存效率更高。并且NumPy数组中的元素具有相同的数据类型,因此在内存中大小相同,这样就有助于对大量数据进行高级数学运算和其他类型的运算。与Python内置序列相比,对NumPy进行操作的执行效率更高,代码更少。
(2)Pandas:Pandas是一个开源Python包,广泛应用于数据科学、数据分析和机器学习任务。它建立在NumPy包之上,该包提供对多维数组的支持。作为最受欢迎的数据处理包之一,Pandas与Python生态系统中的许多其他数据科学模块配合良好。Pandas建立在NumPy包之上,意味着Pandas中使用或复制了NumPy的许多结构。Pandas中的数据通常用于SciPy中的统计分析、Matplotlib中的绘图函数及Scikit-learn中的机器学习算法。
(3)SciPy:Python中的SciPy是一个开源库,数据类型和函数构建在NumPy上。SciPy适用于数值数据的复杂计算,用于解决数学、科学、工程和技术问题。它允许用户使用各种高级Python命令来操作数据和可视化数据。SciPy也读作“Sigh Pi”,代表Scientific Python。SciPy实际上是Python工具的集合,这些工具支持积分、微分、梯度优化等操作,其中包含所有代数函数。虽然这些函数中的一些在某种程度上也存在于NumPy中,但NumPy却不是完全成熟的形式。目前,SciPy在机器学习中的应用比NumPy更多一些。
(4)Matplotlib:Matplotlib一个基于NumPy数组构建的多平台数据可视化库,旨在与SciPy堆栈的广泛组件协同工作。作为Python及其数值扩展的得力助手,它提供了丰富的数据可视化和图形绘制功能。尤为值得一提的是,Matplotlib为MATLAB用户提供了一个强大且开源的替代方案,使他们能够无缝地转换到Python环境中进行数据处理和可视化。开发人员可以通过Matplotlib的API编程接口,轻松地在程序中嵌入绘图功能,实现数据的直观展示。此外,Matplotlib的另一大亮点在于其出色的兼容性,能够与众多操作系统和图形后端无缝配合,为用户提供流畅且高效的可视化体验。
(5)Scikit-learn:Scikit-learn是一个通用的机器学习库,建立在NumPy之上。它具有许多机器学习算法,如支持向量机、随机森林,多用于数据预处理和后处理的实用程序。对于数据挖掘和数据分析来说,它是一个简单有效的工具,可以使用Scikit-learn执行各种任务,例如,模型选择、聚类、分类和回归。该库专注于数据建模,但不擅长加载、操作和汇总数据。Scikit-learn提供了一些主流模型,如图1-1所示。
①分类:主要用于识别对象属于哪个类别。
②回归:预测与对象关联的连续值属性。
③聚类:用于对K-Means等未标记数据进行分组。
④降维:用于减少数据中用于汇总、可视化和特征选择(例如,主成分分析)的属性数量。
⑤型号选择:比较、验证和选择参数和模型。
⑥预处理:用于特征提取和归一化。

图1-1 Scikit-learn的主流模型
1.1.4 数据分析技术的发展
如今,数据分析受到很多关注,在各种规模的企业中扮演着越来越重要的角色,而数据分析的实践也是随着时间的推移逐渐发展起来的。接下来通过一段简单的介绍来了解数据分析的历史。
(1)数据分析与统计:数据分析,其深厚的根基源自悠久的统计学历史。据传,统计学的萌芽可追溯至古埃及时代,那时它便以定期人口普查的形式,助力了金字塔的宏伟建设。纵观历史长河,统计学的应用在世界各地的政府中均占据着举足轻重的地位,成为政府进行各类规划活动,尤其是税收管理时不可或缺的人口普查工具。当我们收集到这些数据后,接下来的关键步骤便是深入分析这些数据,以揭示其中蕴含的信息与规律。
(2)数据分析与计算:在使用计算机之前,美国1880年的人口普查需要7年多的时间来处理收集到的数据并得出最终报告。为了缩短人口普查所需的时间,1890年,Herman Hollerith发明了“制表机”。这台机器能够系统地处理记录在穿孔卡片上的数据。由于制表机的发明,1890年的人口普查仅用了18个月就完成了,比预计时间要少得多。冯·诺依曼架构被发明后,数据已经被视为要处理的信息来进行分析。转折点是20世纪80年代关系数据库的出现,它允许用户编写Seque(l SQL)语句从数据库中检索数据。对于用户来说,RDB和SQL能够按需分析他们的数据,使处理数据的过程变得容易,有助于扩展数据库的使用。
(3)数据仓库和商业智能:从20世纪80年代后期开始,由于硬盘驱动器的成本不断下降,收集的数据量显著增加。就在那时,William H. Inmon提出了“数据仓库”的概念,这是一个针对报告和数据分析进行优化的系统。与通常的关系数据库不同的是,数据仓库通常针对查询的响应时间进行优化。很多时候,数据与时间戳一起存储,而诸如Delete和Update之类的操作的使用频率要低得多。例如,如果企业要比较每个月的销售趋势,则可以将所有销售交易与时间戳一起存储在数据仓库中,并根据此时间戳进行查询。商业智能(Business Intelligence,BI)一词是由Gartner Group的Howard Dresner于1989年提出的。BI通过深度搜索、精准收集与细致分析业务中积累的海量数据,为制定更优的业务决策提供有力支持。特别是在大型企业中,BI的地位尤为重要。在制定业务决策时,这些企业会充分运用BI系统,对客户数据进行深入的分析,以获取更有价值的洞察,从而更精准地把握市场动态,提升决策的科学性与准确性。
(4)数据挖掘:数据挖掘出现在20世纪90年代左右,是在大型数据集中发现模式的计算过程。通过采用不同于常规方法的方式分析数据,可以得到意想不到但有益的结果。数据库和数据仓库技术使数据挖掘的发展成为可能,这些技术使公司能够存储更多数据并仍然以合理的方式对其进行分析,进而出现了一种普遍的业务趋势,即公司开始分析历史购买模式以“预测”客户的潜在需求。
(5)互联网:对在网络上搜索特定网站的需求,Larry Page和Sergey Brin开发了Google搜索引擎,在分布式计算机上处理和分析大数据。令人惊讶的是,Google引擎会在几秒钟内响应用户最有可能希望看到的结果。该系统的关键点在于它是自动化、可扩展和高性能的。2004年,关于MapReduce的白皮书极大地启发了工程师,吸引了大量人才来应对处理大数据的挑战。为应对该挑战,2010年左右出现了许多开源软件项目,如Apache Hadoop和Apache Cassandra。
(6)云端大数据分析:21世纪10年代初期,基于云计算的数据仓库Amazon Redshift和处理数千台Google服务器中的查询的Google BigQuery问世,二者都显著降低了数据分析成本并减少了处理大数据的障碍。如今,每家公司都能够在合理的预算内获得用于大数据分析的基础设施。即使是过去没有预算来进行此类分析的初创公司,现在也能够通过使用Amazon Redshift等大数据工具快速重复PDCA[PDCA是英语单词Plan(计划)、Do(执行)、Check(检查)和Ac(t 修正)的第一个字母,是一种绩效检查方式]周期。
正如我们所见,自计算机出现以来,数据分析和计算机技术一直在发展并相互影响。随着收集到的数据规模越来越大,每个阶段都不得不引入新的数据分析方法。随着数据收集和计算的成本越来越低,我们还会继续看到大数据领域的突破。