书名:数亦有道:Python数据科学指南
ISBN:978-7-115-56385-9
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 王树义 翟羽佳
责任编辑 赵祥妮
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书结合数据科学的具体应用场景,由浅入深、循序渐进地引导读者入门数据科学,覆盖了数据获取、数据预处理、数据分析等方面的内容,共10章。本书首先概括性地介绍各章的主要内容,然后通过一个个生动的案例讲解数据获取、数据预处理、自然语言处理、机器学习和深度学习等方面的典型应用,最后为读者提供进一步学习Python的方向和方法建议。本书各章的案例均基于具体应用场景,以简单、清晰的方式对数据科学相关的技术原理和实际操作进行讲解。
本书适合高等院校的理工科、管理学科的本科生、研究生学习,尤其适合非计算机专业但对计算机编程感兴趣的学生参考学习,同时也适合数据科学行业的从业者阅读。
目前,数据科学的技术门槛逐渐降低。面对海量信息扑面而来的我们,该如何从这种趋势中收获更多呢?
我们经常听别人谈论,数据科学的门槛在逐渐降低。数据科学、机器学习、自然语言处理、神经网络、人工智能……一系列的名词让我们眼花缭乱,让我们对这个时代充满期待。每个人都跃跃欲试,希望自己也能用新技术让工作卓有成效。但是,如果我们从事的不是与信息技术(Information Technology,IT)相关的工作,学习的不是计算机专业,那可能会逐渐发现,技术世界似乎“不那么友好”。
如我们只想对文本提取主题,作者却写了这么长的公式:
又如我们想做一个时间序列的预测,结果一个处理单元就有图1所示的结构。
除了不断“从入门到放弃”,我们还能做什么?
别急,这不是真相。真相是,只要我们知道如何找到正确的工具包,就可以用短短几行代码完成以前手工需要做几天的工作。
编程,对于有需求的人来说,如今已经变成了和驾驶一样的基础技能。开辆自动挡的汽车,不难吧?我们可以安全行驶几十万千米,成为名副其实的“老司机”,而不必理解发动机(或者电动机)的构造。汽车需要维护和保养,这是自然的,但是这些工作我们都可以交给专业人士。我们需要了解的无非是转向、制动、油门、信号灯……
图1
数据科学技术门槛的降低就应该体现在处理数据问题的时候,我们应当像驾驶汽车一样自然地处理这些问题,而不应当像学习发动机构造一样“挑战自我”。
在机械师的眼中,发动机的构造简单易懂。所以他们中的大部分人写发动机构造教程的时候,很少考虑那些对物理一无所知的读者的感受。
同样,那些制造数据科学与人工智能工具的人也很聪明,相关原理于他们而言就是“理所当然”,所以大部分数据科学类教程,对于读者阅读数学公式和分析模型构造提出了较高要求。而这对于大部分读者,尤其是非理工科的读者来说是一大障碍。
非理工科读者们充满期待,试图通过掌握数据科学工具来完成科研与工作任务,而拿到的教程依然在完完整整地罗列公式,甚至是推导过程。这就像我们想学开车,教练却要我们先学习发动机构造。
读者此时可能会产生自卑感—因为看不懂这些公式。其实,这又有什么?
想必你我都认同,普通的非专职司机(可能是成功的生物学家、成功的作家等),即便不懂发动机的构造和工作原理,依然可以很好地开车,顺利、安全地到达目的地。
因此,我们任何人都不应该在这“数字技术洪流”中受到阻碍。特别是,我们不应该把自己推到“数字鸿沟”的另一端。
我们需要的是找到适合自己阅读的教程。这种教程的特点是什么?在笔者看来,大致包括以下3点。
秉持与上述特点一致的原则,从2017年6月开始,笔者在自己的公众号“玉树芝兰”和简书、知乎、科学网专栏等写了一系列的数据科学教程。很荣幸,这些教程受到了很多读者的欢迎。
现在,笔者将这一系列教程整理成书,分享给读者。本书每一小节都保持了“原汁原味”的问题导向风格的标题。这样读者可以在浏览目录后,迅速定位到自己需要的部分,实践和复用代码,解决遇到的实际问题。
为了让读者更容易理解并实践书中的内容,本书的程序输出结果以截图形式直接给出,部分较复杂内容更保留了输入形式截图。
本书案例大部分有配套代码和案例数据,下载链接:https://github.com/zhaihulu/DataScience/。读者可以尽情下载、修改和使用。本书中的每个案例都经历了成百上千个读者的实际运行和检验。他们的提问和反馈也曾帮助笔者查找出许多问题,或是查找到教程讲解中不容易理解的部分,从而促使笔者不断迭代改进表述方式和案例,这些都在本书有所体现。
如果你是理工科的学生,甚至是计算机专业的学生,也没有关系。或许本书有些内容对于你来说过于简单,甚至有些啰唆,但你也可以换个角度来看它。
笔者的专栏和公众号读者里面,不乏知名大学信息科学、计算机科学、统计学和数学专业的老师与研究生。笔者曾经疑惑,他们怎么也来读笔者的教程?后来笔者明白了,有的老师是希望这些教程能帮助自己的学生快速上手,有的老师是希望切磋教学用例和教学方法。而有的老师则是从专业的角度帮笔者把关。
他们给了笔者很多的鼓励,也提供了诸多有益的反馈和点拨。在此,笔者向他们表示衷心的感谢!欢迎读者帮笔者挑挑“硬伤”,提高这本书的质量。我们可以共同协作,以免误人子弟的情况出现。
所以你看,你并不孤独。开放的数据科学教育需要大家都贡献自己的一份力量。Welcome on board(欢迎加入我们)!
王树义 翟羽佳
2021年9月
视频导向图书是一种创新的内容分发形式,它以我们熟悉的图书为载体,但图书只是一个起点。通过视频导向图书,读者可以很容易地使用手边的智能设备,如手机和平板电脑,从图书出发,和图书背后的创作者建立联系,获取视频、直播甚至线下活动等丰富形式的内容,提升获取信息的效率和体验。
所有视频导向图书上都有两种形式的入口。
二维码是大家非常熟悉、几乎天天都接触的。本书中的二维码入口如图1所示(它真的可以扫描)。
图1 二维码入口
为了保证这个二维码不会失效,我们采用了活码进行跳转。关注微信公众号“内容市场”,使用微信“扫一扫”来扫描书上的二维码,根据页面提示进入微信小程序即可观看讲解视频。也可以使用卷积传媒研发的应用—内容市场,来扫描二维码并观看讲解视频。
虽然扫描二维码是一种很熟悉的体验,但不得不承认这种方式有点太常见。为此,我们提供了另一种有趣的入口:把一张图直接变成一段视频并就地播放!方法是使用 “内容市场”App来扫描触发图,它在本书中如图2所示(它真的可以扫描)。
您可以在智能手机上的应用市场等渠道下载和安装“内容市场”App。
图2 触发图
单击“内容市场”底部的扫描按钮来扫描触发图,首次识别可能需要等待数秒,但马上您就可以获得相当惊喜的就地播放体验了,而且还可以看到运动跟踪的效果。当然,您不需要一直手持设备并对准触发图,而是随时可以单击“全屏播放”,视频就会切换到全屏播放。
“内容市场”为读者提供的内容分为两个部分,一是与图书配套的、在图书上提供入口的增值内容,二是由图书的作者再度创作的、并不在图书上提供入口的订阅内容。
本书所有的读者都可以免费享用所有的增值内容,如果您看了视频感觉有所收获,也可以将它们分享给您的亲朋好友。
订阅内容也有很多免费的,但有些内容可能需要另外付费购买,这完全出于您的需求和意愿。
如果读者朋友们在使用软件或任何内容时遇到了技术故障或任何困难,可以联系客服工作人员。
卷积传媒
本书按照先易后难的顺序组织各章,因此本章简要介绍其余各章的内容,并提示读者可能遇到的问题。
本书的大部分教程都是在Python运行环境—Jupyter Notebook上运行和演示的。
安装这个运行环境最简单的方法就是安装Anaconda集成套件。
我们会在第2章讲解并带领读者安装Anaconda,然后运行第一个Jupyter Notebook,并成功输出 “hello world!”。
本书代码大多采用Python 3版本,但部分内容会涉及Python 2.x。
为什么呢?因为随着技术的发展,Python已经逐步过渡到3.x版本。尽管许多第三方软件包都已经宣布了时间表,会尽快支持3.x版本,放弃对2.x版本的支持,可是目前某些软件包依然只能支持Python2.x,虽然这样的软件包越来越少了。你需要暂时做个“两栖动物”,千万不要束缚自己,固执地不肯用低版本Python。
解决了Anaconda的环境设置问题,我们就可以尝试不同的数据科学任务。我的建议是先尝试词云(Word Cloud)。因为它比较简单,而且会让你有成就感。
跟着第3章的教程“词云制作”和“中文分词”一步步执行,用少量Python代码,你就可以做出图1-1所示的词云。
当然我们也会讲解如何改变词云边框的外观,构造更加漂亮的词云,如图1-2所示。
学习完前3章,你将掌握Python运行环境安装、文本文件读取、常见软件包调用、可视化分析与结果呈现、中文分词等基本“功夫”。
图1-1
图1-2
除此之外,在第3章我们还通过实例,给大家讲解使用Python和R语言探索数据集的具体应用,让大家一步步深入数据分析领域。
掌握了初步的数据分析后,你会发现自己变成了“数据饥渴症患者”。如果没有数据,你就无法思考、解答现实问题。
如何获取数据呢?我们先要区分数据的来源。数据的来源很多,但是对于研究者来说,来自网络和文献的数据比较常用。目前主流(合法)的网络数据获取方法主要分为3类:
在第4章,我们讲解了如何把开放数据集下载到本地,并且在Python中使用,还介绍了常见的CSV、JSON和XML等格式的开放数据文件的读取、初步处理和可视化方法与流程。
如果没有开放数据集可供下载,网站只提供API,该怎么办呢?在4.2节中,我们使用Python读取阿里云云市场的一款天气数据API,获得指定城市的天气变化记录,并且做可视化分析。
如果没有开放数据集,网站也没有提供API,那就得“直接上大锤”了。4.3节介绍了非常人性化、易用的网页抓取软件包requests_html,你可以用它尝试抓取网页内的指定类型的链接。
希望这些内容可以帮助你高效地获得优质数据,支撑起你的思考和探索。
数据科学的实际工作,80%甚至90%的时间都是在做数据预处理,许多数据分析的场景都要求输入结构化的数据。
然而,结构化的数据不一定就待在那里,静候我们来使用。很多时候,它蕴藏在以往生成的非结构化文本中。我们大部分时间接触到的数据都没有结构。各种类型的数据混合在一起,需要用一种通用的快速方式统一处理。
从大量的文本中抽取结构化的数据是一项重要但烦琐的工作。大家可能早已习惯人工阅读文本信息,把关键点抽取出来,然后将之复制、粘贴到表格中。从原理上讲,这样做无可厚非,但是实际操作中太麻烦,而且效率太低。
在第5章中,我们会介绍如何使用更简单的方式,自动化地快速完成这些烦琐的操作步骤。
1 图中n代表不同情感对应的文本行数,index对应文本中的段落位置。
我们还将尝试自然语言处理(Natural Language Processing,NLP)。
如果你希望对单一长文本提取若干重要关键词,该怎么办呢?请阅读6.1节的内容。这一节会介绍如何采用词汇向量化(Vectorization)、TextRank等成熟的关键词提取算法来解决问题。
情感分析(Sentiment Analysis)是自然语言处理在许多社会科学领域热门的应用之一。在第6章中我们会详细讲述英文和中文文本情感分析的两个案例,采用不同的软件包,有针对性地满足应用需求。只需要少量代码,Python就能“告诉”我们文本的情感倾向,是不是很期待?
以情感分析为基础,我们可以尝试增加维度,对更大体量的数据做分析。增加时间维度就可以持续分析变化的舆情。我们会介绍如何用Python实现舆情时间序列可视化,一步步指引你在时间刻度上可视化情感分析结果,如图1-3所示。
图1-3不是很美观。不过我们需要容忍自己起步时的笨拙,通过不断迭代以精进技术。一出手就获得满分,这对极少数“天才”来说确实是日常。但对大多数人而言,则是“拖延症”的开始。你可能迫不及待想要尝试用自己的数据进行时间序列可视化分析。阅读到6.3节,你可能会对情感分析有些了解。
但是情感分析不只是极性分析(正面/负面)。我们都知道,人的情感其实是由多方面共同构成的。如何从文本中分析出多维度的情感特征变化呢?在6.4节中,我们会分析《权力的游戏》中某一集的剧本,你会获得图1-4所示的结果。
如果你是《权力的游戏》的观众,请告诉我,这张图描绘的是哪一集?6.4节的可视化分析部分,用的是R。
图1-3
图1-41
R也是数据科学领域一个非常受欢迎的开源工具。它的通用性和热度可能不如Python(毕竟Python除了数据科学,还能做许多其他的事),但是由于统计学界诸多学者的拥护和添砖加瓦,因此它有一个非常好的生态系统。
从文本中抽取主题、运用成熟的词嵌入(Word Embeddings)方法、对文本进行语义分析……第6章还有很多需要你去探索的问题。
2 图片来源;CSDN社区。
你可以尝试做更进一步的分析,例如机器学习(Machine Learning)。
机器学习的妙用体现在那些你(其实是人类)无法准确描述解决步骤的问题的解决上,让机器通过对大量案例(数据)的观察、试错,构建一个相对有用的模型来自动化处理问题,或者为人类的决策提供辅助依据。大体上,机器学习主要分为3类:
本书会介绍一些案例供大家理解学习。
监督学习与非监督学习最大的差别在于数据。数据已有标注(一般是人工赋予标记),一般用监督学习;数据没有标注,一般只能用非监督学习,如图1-5所示。
图1-52
在监督学习部分,我们将讲解分类(Classification)任务的例子。
如何用Python和机器学习做出决策中的案例?我们选择贷款审批辅助决策。采用机器学习算法决策树(Decision Tree),如图1-6所示。
图1-6
在7.2节中,我们不仅对停用词(Stop Words)处理方式进行详细的介绍,而且把监督学习中的朴素贝叶斯(Naive Bayes)模型应用于情感分析,手把手教你如何训练自己的情感分类模型。
除此之外,我们还将深入讲解如何从海量文本中抽取主题。
深度学习(Deep Learning)指用深度神经网络(Deep Neural Network,DNN)进行机器学习。相对于传统机器学习方法,它使用的模型结构更为复杂,需要更多数据的支持,并且训练起来需要消耗更多的计算资源和时间。
常见的深度学习应用包括语音识别、计算机视觉、机器翻译等。当然,可能新闻里面经常提的是围棋。我们提供的案例不用挑战人类智能极限,而是与日常工作和生活更加相关。
8.1节介绍深度神经网络的基本结构,通过客户流失预警的例子,讲述使用前馈神经网络进行监督学习的基本样例。实际操作部分,我们采用TensorFlow作为后端,TFLearn作为前端,构造自己的一个深度神经网络。
基于深度神经网络的基础知识,我们开始讲解机器学习中的计算机视觉。8.2节实践分类马和羊的图像集合,卷积神经网络(Convolutional Neural Network,CNN)这时就大放异彩了。8.2节将分析卷积神经网络中不同层(Layer)的作用。我们将尽量避免用公式,而是用图像和平实简洁的语言来解释概念。
我们使用的深度学习框架是苹果公司的Turi Create。我们将会调用一个层数非常多的卷积神经网络帮助我们迁移学习(Transfer Learning),试图用很少的训练数据获得非常高的分类准确率。为了解释这种“奇迹”,8.3节进一步介绍“寻找近似图片”。希望读者通过8.3节的内容,能对迁移学习有更深入的认识。
前几章我们从实例应用方面对机器学习和深度学习进行了简单的介绍,但大多数人对这两个概念仍然一知半解。很多实践案例往往只是介绍机器学习和深度学习的具体任务和操作,缺乏对机器学习的整体流程和可能出现的问题的详细论述。在这一部分,我们将梳理有关机器学习的概念和机制,分析如何更加有效地沟通机器学习的结果,以及如何更加科学地利用数据集进行学习训练,进一步带领大家深入理解和掌握机器学习的含义和应用规则。
9.1节中我们以二元分类任务为引,介绍机器学习过程中的重要概念,然后针对不同的数据类型,解释如何选择更合适的实施模型,进而帮助大家在执行机器学习任务时,能够从原理和评估的角度有效准确地完成任务。
对训练好的模型,我们终归需要对结果进行解释和分析。但因为模型准确率再高,有时也免不了会有运气的成分,所以其能否在实际应用中发挥作用,并不能单单靠着简单的几个指标来评判。哪怕是机器学习的结果已经远超人类,但在很多涉及健康、安全、隐私等的领域,大家对于机器学习的结果还是不能完全接受。特别是对整个模型学习过程不了解的情况下,大家对机器学习的决策肯定是不会加以采纳的。因此在9.2节中,我们将会对如何解释机器学习的结果进行介绍和讨论,相信在学习完这一章后,大家会对模型结果的沟通有更深的理解和把握。
机器学习的根本就是数据,而数据又分成训练集、验证集和测试集,包含了各种各样的数据集合类型。在9.3节我们会进一步讨论数据集的选取和构建,希望大家能够在这一节的引导下更加游刃有余地处理数据。
随着知识、技能和经验的积累,你的疑问可能也逐渐增多了吧?或许有的读者对本书有此疑问—案例挺有意思,也很简单易学,但是怎么把它用到我自己的学习、工作和科研中呢?在第10章中,我们会提供一些关于继续学习和探索的意见和指引。
对于Python的深度学习,我们根据不同的人群的学习特性进行分类。你可以根据分类的结果,选择更适合自己的学习路径。本书中还推荐了进一步学习的资料,不仅包括书籍,还包括视频。希望这种互动教学方式对你入门数据科学有所帮助。
不仅如此,我们还将向你展示一种任务导向的学习方式,期望它可以提升你的Python运用能力和数据科学学习效率。