新闻媒体正在越来越多地报道数据泄露、网络犯罪,以及如何利用数据窥视我们的生活。但为什么是现在?为什么今天这个时代是数据相关产业的温床?
在19世纪,世界处于工业时代。人类通过伟大的机械发明和工业探索世界。工业时代的领袖们,比如亨利·福特,认识到通过这些机器可以创造巨大的市场机会,赚取前所未有的利润。
当然,工业时代有利也有弊。在我们将大量商品送到消费者手中时,人类也开始了和污染的斗争。
在19世纪,我们非常擅长制造大型机器。但到了20世纪,我们的目标是让机器变得更小、更快。工业时代已经结束,取而代之的是信息时代。
为了更好地理解事物的运转情况,我们开始使用机器收集和存储我们自身与周围环境的各种信息(数据)。
从1940年开始,像ENIAC(被认为是最早的计算机之一)这样的机器被用来计算和运行之前从未计算过的数学方程、运行模型和模拟,如图1.1所示。
图1.1ENIAC计算机
我们终于有了比人类更擅长运算数字的像样的实验室助手!和工业时代一样,信息时代也有利有弊。
信息时代的好处是人类取得了科技发明的非凡成就,比如电视和移动电话;坏处虽然没有全球性污染那样严重,但仍然留给我们一个21世纪的难题——过多的数据。
是的,信息时代在数据收集领域的高速发展,让电子化数据的产量爆炸式增长!据估算,在2011年,我们产生了1.28×1012 GB的数据(好好想一下有多大吧)。
仅仅1年之后,在2012年,我们产生了超过2.8×1012 GB的数据!这个数字只会继续爆炸或增长。预计2020年产生的数据量将达到4×1013 GB。
每当我们发布推文,张贴脸书,用微软Word软件保存简历,或者用短信给妈妈发送一张照片,都促进了这个数字的增长。
我们不仅以前所未有的速度生产数据,我们消费数据的速度也在加快。在2013年,手机用户平均每月使用的流量在1GB以内。
据估算,今天这一数字已经远超每月2GB。我们希望从数据中探寻的是洞察,而不仅仅用于性格测试。数据就在那里,总有一些对我们有价值!肯定有!
我们拥有如此多的数据,而且正在生产更多数据,我们甚至制造了很多疯狂的小机器24×7不间断的收集数据,在21世纪,我们面对的真正问题是如何搞懂这些数据。
先辈们在19世纪发明了机器,在20世纪生产和收集了数据,在数据时代则要从数据中探寻洞察和知识,让地球上每个人都受益。美国政府已新设立了“首席数据科学家”的职务。
那些到现在还没有数据科学家的科技公司,比如Reddit,已经开始招募数据科学家。这样做的好处显而易见——用数据做精准的预测和模拟,可以让我们以前所未有的方式观察世界。
这听起来很不错,但究竟是什么意思呢?
本文我们将研究现代数据科学家们使用的专业术语。我们将学习贯穿全书的数据科学关键词和用语。
在开始接触Python代码之前,我们还将讨论为什么使用数据科学,以及催生数据科学的3个重要领域:
● 数据科学基本的专业术语。
● 数据科学的3个领域。
● 基本的Python语法。
什么是数据科学
在我们进行更深入的讨论之前,先熟悉一下本书将涉及的基本定义。数据科学领域让人激动或者讨厌的都是太年轻,以至于很多定义在教科书、新闻媒体和企业白皮书上各不相同。
1.1.1 基本的专业术语
以下对专业术语的定义较为通用,足够日常工作和讨论之用,也符合本书对数据科学原理的定位。
我们先从什么是数据开始。给“数据”下定义可能有些可笑,但确实非常重要。
当使用“数据”这个词时,我们指的是以有组织和无组织格式聚集在一起的信息。
● 有组织数据:指以行列结构分类存储的数据,每一行代表一个观测对象,每一列代表一个观测特征。
● 无组织数据:指以自由格式存储的数据,通常指文本、原始音频/信号和图片等。这类数据必须进行解析才能成为有组织的数据。
每当你打开Excel(或者其他电子制表软件)时,你面对的是等待输入有组织数据的空白行或列。这类程序并不能很好地处理无组织数据。
虽然大部分时候我们处理的都是有组织数据,因为它最容易发现洞察,但我们并不畏惧原始的文本数据和处理无组织数据的各种方法。
数据科学是从数据中获取知识的艺术和科学。这个定义虽小,却非常准确地描述了这一宏大课题的真正目的!数据科学涉及的范围非常广,需要好几页纸才能列出全部内容(我确实尝试编写过)。
数据科学是关于如何处理数据、获取知识,并用知识完成以下任务的过程:
● 决策。
● 预测未来。
● 理解过去或现在。
● 创造新产业或新产品。
本文将讨论数据科学的各种方法,包括如何处理数据、探寻洞察,并利用这些洞察做准确的决策和预测。
数据科学也是利用数据获取之前未曾想到的新见解的科学。
举个例子,假设你和其他3个人坐在会议室,你们需要根据数据做出一个决定。目前已经有4种观点,你需要使用数据科学的方法提出第5个、第6个,甚至第7个观点。
数据科学不是取代人类大脑,而是和人类大脑一起工作。数据科学也不应该被认为是终极解决方案,它仅仅提供了一个富有见地的观点,也仅仅是一个观点而已,但它值得在会议桌上拥有一席之地。
1.1.2 为什么是数据科学
很明显,我们在数据时代拥有过剩的数据。但为什么数据科学能够作为一个新词汇出现呢?我们过去使用的数据分析方法出了什么问题?
首先,在数据时代,数据通过各种来源以各种形式被收集,且很多是无组织数据。
巨大的数据量使得传统的人工方式已经无法在合理的时间内完成数据分析。数据会缺失、不完整,甚至完全错误。
很多时候,数据的尺度不同导致对数据难以进行对比。
比如在分析二手汽车价格时,一个特征是汽车制造年份,另一个特征是汽车行驶里程数。
只有进行数据清洗之后,数据中蕴含的关系才会越来越明显,深埋在数兆行数据中的知识才能显露出来。
数据科学的主要用途之一是使用清晰的方法和过程,发现并利用数据中蕴含的关系。
我们之前从历史的角度讨论了数据科学,下面我们用几分钟时间,通过一个简单的例子,讨论数据科学在当今商业中扮演的角色。
1.1.3 案例:西格玛科技公司
西格玛科技公司CEO Ben Runkle正在解决一个大问题。
他的公司正在不断失去老客户,他不知道背后的原因,但必须尽快采取行动。同事告诉他,公司必须开发新功能和新产品,并巩固现有技术,这样才能降低流失率。
为了保险起见,他请来了首席数据科学家Jessie Hughan博士。Hughan博士并不认为新产品和新功能能够挽救公司。
相反,她在分析了历史客户服务记录后,向Runkle展示了最近几天的记录和令人吃惊的发现:
“……不确定如何导出,你呢?”
“创建新列表的按钮在哪里?”
“等等,你真的知道滚动条在哪里吗?”
“如果今天无法解决,它将给我带来大麻烦……”
很明显,用户在使用现有UI/UX时遇到了麻烦,而不是因为新功能的缺失!
Runkle和Hughan组织员工对UI/UX进行了重要改善,西格玛公司的销售额也达到了前所未有的高度。
当然,这个例子的分析过程过于简单,但它揭示了一个观点。我们喜欢将Runkle这样的人称为司机。
今天,许多严重依靠直觉的CEO希望快速做出决定,并尝试所有的方案,直到找到答案。
Hughan博士则具有分析能力。
她和Runkle一样希望解决问题,但她的策略是从用户产生的数据中寻找答案,而不是依靠感觉。
数据科学正是利用这样的分析能力,帮助“司机”做决定。
这两种思维方式在企业中都有用途。然而,统治着数据科学领域的是Hughan博士的思维方式——将公司的数据作为信息源,从中得出解决方案,并一直坚持下去。
数据科学韦恩图
一个常见的误解是,只有博士和天才们才能掌握数据科学背后的数学和编程知识。这绝对是个错误!理解数据科学需要从以下3个领域开始。
● 数学/统计学:指使用方程和公式进行分析。
● 计算机编程:指通过代码用计算机生成结果。
● 领域知识:指理解问题所处的领域(医学、金融、社会科学等)。
图1.2所示的韦恩图形象地展示了这3个领域的关系,数据科学是三者的交集。
图1.2 韦恩图
编程技术可以让你构思和编写复杂的机器算法。数学和统计学知识可以让你对算法进行推理、评价和改善,以适应特殊情况。而领域知识则可以让你将以上结果在现实中发挥价值。
虽然拥有以上3个技能中的两个已经可以让你足够聪明,但这仍然不够。试想你精通编程,并接受过正式的日间交易训练。
你开发了一个自动交易系统,但由于缺乏数学知识而无法对算法的有效性进行评价,导致长期来看自动交易系统是赔本的。
因此,只有当你同时拥有编程、数学和领域知识3个技能,才能真正应用数据科学。
你可能好奇什么是领域知识。它仅仅指工作中涉及的专业知识。如果让一个金融分析师分析心脏病数据,那么他很可能需要心脏病专家的帮助才能搞懂数字的含义。
数据科学是这3个领域的交叉地带。
为了从数据中获取知识,我们需要利用计算机获取数据,理解模型背后的数学含义,以及最重要的——理解分析结果应用的场景,包括数据展示等。
比如,假设我们创建了一个心脏病预测模型,那么是否需要创建一个PDF文档或APP应用程序,使得只需输入一些关键数字就能得到预测结果?以上是需要数据科学家回答的问题。
本文将深入讨论计算机程序和数学。领域知识则来自于数学科学实践和学习他人的分析案例
1.2.1 数学
很多人不喜欢听数学相关的东西,他们会附和着点点头,以掩饰对这个主题的不屑。本文将引导你学习数据科学必备的数学知识,特别是概率和统计学,我们将用它们创建模型。
数据模型指数据元素之间有组织的、正式的关系,通常用来模拟现实世界的某个现象。
我们还会用数学公式表示变量间的关系。作为前数学家和现任数学教师,我理解学习这些内容的困难程度,并将尽最大的努力清晰地讲解所有内容。
在数据科学的3个技能中,数学让我们拥有从一个行业跨到另一个行业的能力。掌握了数学理论,我们就可以将为时尚界打造的模型转变成金融模型。
案例:产卵鱼—幼鱼模型
在生物学中,我们使用“产卵鱼—幼鱼模型”和其他模型一起评价物种的健康程度。
该模型描述了单位动物群体中含有的健康父母和新生后代间的关系。
在图1.3中,我们可视化展示了三文鱼产卵鱼和幼鱼之间的关系,原始数据来自一个公开数据集。
图1.3 对产卵鱼—幼鱼模型的可视化
我们可以明显地看出两者之间存在某种程度的正相关(两个指标同时增长)。但如何才能量化这种关系呢?
比如,已知种群中产卵鱼的数量,我们如何预测种群中幼鱼的数量呢?反之也一样。
通常来讲,模型允许我们通过一个变量得到另一个变量。比如:
幼鱼=0.5×产卵鱼+60
假设我们已知某三文鱼群中含有1.15产卵鱼(单位:千),那么根据以上公式,我们有:
幼鱼=0.5×1.15+60
幼鱼=60.575
这个结果有助于判断种群的健康变化。通过模型,我们可以观察两个变量之间的关系和变化趋势。
模型有很多种,比如概率模型和统计模型。这些模型又都属于一个更大的范式——机器学习。它们的核心思想是利用数据找出最佳的模型,使得我们不再依赖人类的直觉,而是依赖数据做出判断。
本例的目的是展示如何使用数学方程表示数据元素间的关系。事实上,这和我使用的三文鱼数据没有任何相关性。
在本文中,我们还将研究营销资金、情绪数据、饭店点评等不同数据集,以便让你尽可能地接触不同的领域。
数学和代码是数据科学家得以居身幕后,将自身技能应用于任何地方的工具。
1.2.2 计算机编程
让我们说实话吧,你可能认为计算机比数据更酷。没关系,我不怪你。新闻中很少出现数学新闻,正如很少出现纯技术新闻一样。
打开电视,你不会看到素数的最新理论,相反,你看到的是新款手机拍摄的照片比之前更好的报道。
计算机语言是关于如何和机器交流,让机器执行人类命令的语言。和书可以用多种语言写一样,计算机也有多种语言进行交流。
很多计算机语言都有助于我们研究数据科学,比如Python、Julia和R。本书将专注Python。
1.2.3 为什么是Python
我们选择Python有很多理由,包括以下几个。
● Python的阅读和编写极其简单,即使你从来没有写过代码,也能快速地阅读和理解本书的例子。
● Python是生产和学术研究中最常见的语言之一(事实上也是增长最快的语言)。
● Python有庞大而友好的在线社区,这意味着只需简单搜索就能找到问题的答案。
● Python有内置的数据科学模块,既适合数据科学家新手,也适合有经验的数据科学家。
最后一条是我们专注Python最重要的原因。
Python内置的模块不仅功能强大,而且很容易安装。
Python练习
在深入学习Python之前,最好先熟悉一下必备的编程知识。
在Python中,我们用变量作为对象的占位符。我们重点关注以下几种变量的类型。
● 整型。比如:3,6,99,−34,34,11111111。
● 浮点型(指有小数点的数值)。比如:3.14159,2.71,−0.34567。
● 布尔型(指真或假)。命题“星期六是周末”是真命题。命题“星期五是周末”是假命题。命题“圆周率等于圆周长除以直径”是真命题。
● 字符串(指由文本或单词构成的类型)。“我喜欢汉堡”“Matt棒极了”,每条推文是一个字符串。
● 列表(指由多个对象组成的集合)。比如:[1, 5.4, True, ‘Apple’]。
我们还需要理解一些基本的逻辑运算符。请牢记,这些运算符的计算结果是布尔型,即真(True)或假(False)。下面来看几个例子。
● ==(如果两边的值完全相等,则为真;反之为假)。3 + 4 == 7(真),3 – 2 == 7(假)。
● <(如果左边的值小于右边的值,则为真;反之为假)。3 < 5(真),5 < 3(假)。
● <=(如果左边的值小于或等于右边的值,则为真;反之为假)。3 <= 3(真),5 <= 3(假)。
● >(如果左边的值大于右边的值,则为真;反之为假)。3 > 5(假),5 > 3(真)。
● >=(如果左边的值大于或等于右边的值,则为真;反之为假)。3 >= 3(真),3 >= 5(假)。
用Python编写代码时,我们使用井号(#)表示注释,注释不会被当作代码处理,仅作为用户阅读代码的参考。井号(#)右边的任何信息都是被执行的代码的注释。
1 案例:简单的Python代码
在Python中,我们使用空格或制表符表示隶属于其他行的代码。
请注意if语句的使用,它和你想要表达的意思完全一致,即当紧跟在if后的命题为真时,if语句下缩进的代码将被执行,如下所示。
由于print语句前有缩进,所以代码print"True!"隶属于if x + y == 15.3。这意味着print语句只有在x + y等于15.3的情况下才会被执行。
列表类型变量可以保存不同数据类型的对象,比如变量my_list含有1个整型、1个浮点型、1个布尔型和1个文本型对象。
在以上代码中:
● 指令len用于计算列表的长度(结果为4)。
● Python的索引以0为起始,而不是1。事实上,大部分计算机程序都从0开始计数。如果要得到列表的第1个对象,需要使用索引0;如果要得到列表的第95个对象,需要使用索引94。
2 案例:分析一条推文
以下是更多的Python代码。在本例中,我们将分析一些含有股票价格信息的推文(本书中一个重要的案例是根据社交媒体情绪变化,预测股票价格的波动)。
下面对以上代码片段逐条进行解释。
(1)用变量tweet存储推文信息:RT @robdv: $TWTR now top holding for Andor, unseating $AAPL。
(2)word_in_tweet变量用于对原始推文进行切分(将文字隔开)。如果输出该变量,你将看到以下内容:
(3)接下来使用for循环,对文本列表进行迭代,逐个查看列表中的对象。
(4)然后用if语句,判断推文中的每一个词是否包含$符号(人们在推文中使用$表示股票行情)。
(5)如果if语句的运行结果为真(即推文中包含$符号),则输出该词。
这段代码的运行结果如下:
它们是这条推文中仅有的两个含有$符号的单词。
凡是本书中出现的Python代码,我会尽量解释清楚每一行代码的用途。
1.2.4 领域知识
正如之前所说,领域知识主要是了解你的工作所涉及的特定领域的专业知识。
如果你是分析股票市场数据的金融分析师,你就需要了解该行业的专业知识。
如果你是准备报道世界发展指数的新闻工作者,那最好找一个该领域的专家进行咨询。本书将演示多个领域的案例——医学、营销和金融,甚至包括UFO!
但是,这是否意味着如果你不是医生,就不能分析医学数据呢?当然不是!
卓越的数据科学家能将他们的技能应用在任何领域,包括他们不熟悉的领域。数据科学家可以适应新领域,并在分析完成后持续贡献价值。
领域知识中最重要的部分是演示能力。你的听众决定了演示的内容,你的分析结果仅仅是交流的工具。
即使你预测市场趋势的方法准确率高达99.99%,但如果你的程序没有被采用,那它就没有任何价值。
同样地,如果分析结果不适合使用场景,它也没有价值。
《深入浅出数据科学》
[美] 斯楠·奥兹德米尔(Sinan Ozdemir) 著
本书可以帮助读者把数学、编程和商业分析联系起来。通过学习这本书,读者有信心探究和解答复杂的数据科学问题,从抽象的原始的统计,发掘出切实可行的观点和想法。本书适合缺乏数学知识的编程人员,或者是拥有数学技能、想投身数据科学领域的人士阅读使用。
长按二维码,可以关注我们哟
每天与你分享IT好文。
在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程
异步图书福利送不停
邀请10名好友关注10天直接获取异步图书一本(点击文字获取活动详情哦)
点击阅读原文,购买《深入浅出数据科学》
阅读原文