Python大学教程:面向计算机科学和数据科学(英文版)
作者 : [美]保罗·戴特尔(Paul Deitel) 哈维·戴特尔(Harvey Deitel) 著
丛书名 : 经典原版书库
出版日期 : 2021-03-05
ISBN : 978-7-111-67150-3
适用人群 : 高等院校计算机相关专业学生,Python爱好者
定价 : 169.00元
教辅资源下载
扩展信息
语种 : 英文
页数 : 856
开本 : 16
原书名 : Intro to Python for Computer Science and Data Science: Learning to Program with AI, Big Data and the Cloud
原出版社: Pearson Education Inc.
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书提供了一种独特的方法来讲解Python编程入门,内容符合最新的ACM/IEEECS和相关的计算课程倡议,以及由美国国家科学基金会赞助的数据科学本科课程。内容涵盖了最新的主题和应用的覆盖面,模块化架构使教师能够方便地调整文本,适应课程需求。

图书特色

Python大学教程:面向计算机科学和数据科学(英文版)
Intro to Python for Computer Science and Data Science: Learning to Program with AI, Big Data and the Cloud
[美]保罗·戴特尔(Paul Deitel) 哈维·戴特尔(Harvey Deitel) 著

图书前言

“塔尔山上有黄金。”1
在过去的几十年中,很多发展趋势一一显现。计算机的硬件速度越来越快,价格越来越便宜,尺寸越来越小。网络带宽(携带信息的能力)越来越大,价格越来越便宜。同时软件规模越来越庞大,而“开源”运动又将它们变成完全免费或者接近免费。短时间内,“物联网”将数十亿各种各样的设备连接起来,并快速产生了大规模的数据。
几年之前,如果有人让我们写一本主题为“大数据”和“云计算”的大学阶段编程入门教材,并且在封面上绘制一只彩色的大象(象征“巨大”),我们可能会如此反应:“嗯?”如果他们继续让我们在书名中囊括AI(人工智能),我们可能会说:“真的吗?这对于编程初学者会不会过于超前了?”
如果有人让我们在书名中加上“数据科学”,我们可能会问:“计算机科学不是已经包含了数据吗?为什么我们需要为此单独分一个科目?”好吧,如今谈及程序设计,最酷的说法就是“什么都是数据”—数据科学、数据分析、大数据、关系数据库(SQL)以及NoSQL和NewSQL数据库。
如今我们真的写了这样一本书!欢迎阅读!
在本书中,你将会着手学习当今最引人入胜、最前沿的计算技术—你将会看到,它将计算机科学和数据科学轻松地结合在一起,是一门适用于这些学科和相关学科的入门课程。此外,你将使用Python进行编程—世界上发展速度最快、最流行的编程语言之一。在前言中,我们将展示这本书的“灵魂”。
专业程序员常常很快喜欢上Python。他们欣赏Python的表现力、易读性、简洁性和交互性。他们喜欢开源软件世界,这个世界正在为广泛的应用领域不断生成可复用的软件。
无论你是教师、初学者或者有经验的专业人士,这本书都将对你有所帮助。Python对于初学者而言是优秀的第一门编程语言,并且适用于开发工业级的应用。对于新人而言,本书前面的章节奠定了坚实的编程基础。
我们希望你在这本书中学到知识,并且发现快乐与挑战。徜徉其中,享受乐趣。
将Python用于计算机科学和数据科学教学
许多顶尖的美国大学使用Python作为介绍计算机科学的语言,“CS学科排名前10的有8个(80%)、排名前39的有27个(69%)使用Python”2。Python如今在教学和科学计算中尤其受到欢迎3,最近已超过R语言并成为最受欢迎的数据科学编程语言4,5,6。
模块化体系结构
我们预计计算机科学的本科生课程将会包含数据科学部分—这本书为此而设计,并且在Python编程方面满足数据科学入门课程的需求。
本书的模块化体系结构帮助我们满足计算机科学、数据科学和其他相关受众的多样化需求。教师能方便地进行调整,为不同专业的学生开设系列课程。
第1~11章介绍传统的计算机科学编程主题。第1~10章每章都包含可选的、简洁的“数据科学入门”一节,介绍人工智能、基础统计、趋中和离中度量、模拟、静态/动态可视化、CSV文件的使用、数据探索和数据整理的pandas库、时间序列和简单的线性回归。这会帮助你学习第12~17章中的数据科学、AI、大数据和云计算相关的案例研究,你能在真实世界数据集中完整地使用这些案例研究。
学完第1~5章中的Python相关知识以及第6~7章中的一些关键部分,你已经能够在第12~17章中解决数据科学、AI和大数据案例研究中的关键用例,这对于所有的编程通识课都是实用的:
计算机科学方面的课程可以着重于第1~11章并略讲第1~10章的“数据科学入门”部分。教师还可以介绍第12~17章中的部分或者全部案例研究。
数据科学方面的课程可以略讲第1~11章,着重于大部分或者全部的第1~10章中的“数据科学入门”部分以及第12~17章中的案例研究。
前言中的“章节依赖关系”部分将展示本书的独特架构并帮助教师规划个性化的教学大纲。
第12~17章的内容很酷、很强大、很现代。其中包含能动手实现的案例研究,例如有监督学习、无监督学习、深度学习、强化学习(在习题中)、自然语言处理、Twitter数据挖掘、IBM Watson可视化计算、大数据以及其他内容。在这个过程中,你将会掌握数据科学的大量术语和概念,包括术语的定义以及在不同规模的程序中使用的概念。
本书读者对象
模块化的结构使得本书适用于以下读者:
所有标准的Python计算机科学及相关专业。首先,我们的书是一本现代的、可靠的Python CS1入门教材。ACM/IEEE的计算课程建议列出了5个类别:计算机工程、计算机科学、信息系统、信息技术和软件工程7。这本书对这些类别都适用。
数据科学专业的本科生课程。我们的书对许多数据科学课程都是有用的。对于入门级课程而言,它遵循课程建议,整合了所有课程的关键领域。在计算机科学或者数据科学课程计划中,本书都可以作为第一本专业教材,也可用作高年级课程的Python参考书。
非计算机和数据科学专业学生的辅修课程。
数据科学的研究生课程。这本书可以作为入门级课程的主要教材,也可以作为高年级课程的Python参考书。
两年制学院。这些学校会为准备进入四年制学院的数据科学专业的学生开设相关课程—这本书就是一个合适的选择。
高中。就像出于强烈的兴趣爱好而开设计算机课程一样,很多高中已经开设了Python编程和数据科学课程8。最近在LinkedIn上发表的一篇文章写道:“高中就应该教授数据科学,课程应该直面我们的学生将要选择的职业类型,直接关注工作和技术的发展方向。”9我们相信数据科学很快就会成为一门受欢迎的大学先修课程并且最终会有数据科学的AP考试。
专业行业培训课程。
本书主要特色
保持简洁,保持短小,保持新颖
保持简洁(KIS)。在书的各个方面以及教师和学生资源中,我们都力求简单明了。例如,在写自然语言处理的时候,我们使用了简洁直观的TextBlob库而不是更为复杂的NLTK。一般情况下,当有多个库都能完成相近的任务时,我们选择最简单的一个。
保持短小(KIS)。本书的538个案例研究中大多数都很短小—伴随交互式IPython的即时反馈,通常只有几行代码。我们大约只在40个大型脚本和完整案例研究中使用了较长的代码示例。
保持新颖(KIT)。我们查阅了大量最新的Python编程和数据科学教材以及专业书籍,浏览、阅读或者观看了大约15 000篇最新的文献、研究论文、白皮书、视频、博客文章、论坛文章和文档。这让我们能够“把握”Python、计算机科学、数据科学、AI、大数据和云计算社区的脉搏,从而创建出1566个崭新的案例研究、习题和项目(EEP)。
IPython的实时反馈、搜索、发现和实验教学方法
学习这本书的理想方法是阅读它并同时运行代码示例。在整本书中,我们使用了IPython解释器,它采用一种友好的、实时反馈的模式,能够在Python及其扩展库上快速进行搜索、发现和实验。
大多数代码都在小型的可交互的IPython会话中展示。你所写的每一个代码片段,IPython能够立即读取然后计算并给出结果。这种即时反馈使你保持注意力,并助力学习过程、支撑原型设计和加速软件开发过程。
我们的书总是强调现场代码的教学方法,通过样例输入和结果显示,专注于程序的完整和可运行。IPython的“魔力”在于将代码片段转换为实时代码,每当你输入一行时,这些代码就会“活起来”。这有助于学习并鼓励动手实验。
IPython是学习常见错误的报错信息的好方法。我们有时故意犯错来告知你将发生什么,因此,当我们说某件事是错误的时候,试试看会发生什么。
本书配有557道自检习题(适合于“翻转课堂”,稍后介绍)和471个章末习题和项目,它们中的大多数遵循了同样的实时反馈理念。
Python编程基础
首先,本书是一本Python入门教材。我们提供了丰富的Python编程知识和常规的编程基础内容。
我们讨论了Python的编程模型—过程式编程、函数式编程和面向对象编程。
我们强调解决问题和算法设计。
我们为准备进入产业界的学生准备了最好的习题。
函数式编程贯穿全书。第4章中的一个图表展示了Python中关键的函数式编程能力及其对应的章节。
538个案例研究以及471个习题和项目
学生通过动手实践的方法,在广泛选择的真实世界案例研究、习题和项目(EEP)中开展学习,这些内容来自计算机科学、数据科学和其他很多领域。
538个案例研究的内容均围绕计算机科学、数据科学、人工智能和大数据,从单个代码片段到完整案例研究均有涉及。
471个习题和项目自然地拓展了章节中的示例。每章都以一系列涵盖了各种主题的习题作为结尾,这有助于教师根据受众的需求调整课程内容并且在每个学期布置不同的作业。
EEP向你提供了引人入胜的、富有挑战性的、有趣的Python基础知识,包括可以上手实验的AI、计算机科学和数据科学项目。
学生将面对令人兴奋且有趣的有关AI、大数据和云技术应用问题的挑战,比如自然语言处理、Twitter数据挖掘、机器学习、深度学习、Hadoop、MapReduce、Spark、IBM Watson、关键的数据科学库(NumPy、pandas、SciPy、NLTK、TextBlob、spaCy、BeautifulSoup、Textatistic、Tweepy、Scikit-learn、Keras)、关键的可视化库(Matplotlib、Seaborn、Folium)以及其他。
我们的EEP鼓励你思考未来。下述案例研究虽然只出现在前言中,但本书包含了多个发人深省的类似项目:利用深度学习、物联网以及电视摄像机(由体育赛事数据训练出来的),我们可以自动进行数据分析、回顾比赛细节以及即时回放,因此球迷不再需要忍受直播体育赛事的误判和延迟。既然如此,我们可能会产生这样的想法:可以使用这些技术来取消裁判。为什么不呢?我们已经越来越多地把自己的生命托付给基于深度学习的技术,比如机器人外科医生和自动驾驶汽车。
项目习题鼓励你更加深入地了解所学的知识并研究本书没有涉及的技术。真正的项目通常规模更大,需要更多的网络搜索和实现代价。
在教师手册中,我们提供了许多习题的答案,包括第1~11章中核心的Python代码。答案仅对教师可见,详见后文中关于Pearson教师资源的介绍。我们没有提供项目和研究习题的答案。
我们鼓励你仔细观看示例和开源代码案例研究(详见GitHub网页),包括课程级别项目、学期级别项目、专业方向级别项目、毕业设计项目和毕业论文。
557道自检习题及其答案
平均每个小节后有三道自检习题。
自检习题的类型包括填空、判断和讨论,能帮你测试是否理解了所学的内容。
IPython交互式自检习题可帮助你不断尝试并强化所学的编程技术。
为快速掌握所学知识,自检习题后面都跟有答案。
避免烦琐的数学语言,多用自然语言进行解释
数据科学的主题与数学高度相关。这本书将用作计算机科学和数据科学第一门课的教科书,学生可能没有深厚的数学知识背景,所以我们避免了烦琐的数学语言,把数学内容留在高层次的课程中。
在案例研究、习题和项目中,我们关注数学的概念而不是细节。我们使用statistics、NumPy、SciPy、pandas等Python库和其他的很多库来解决问题,从而隐藏了数学复杂性。所以,学生能够直接使用数学技术(如线性回归),而不需要知道背后的数学知识。在机器学习和深度学习的案例研究中,我们专注于创建在“幕后”做数学运算的对象—这是基于对象编程的关键之一。这个做法等同于安全地驾驶一辆汽车前往目的地时不需要知道制造引擎、变速箱、动力转向和防滑刹车系统背后的数学、工程和科学知识。
可视化
67张可视化结果图帮助你理解概念,包含二维或三维的、静态的、动态的、动画的和交互式的图表、图形、图片、动画等。
我们关注由Matplotlib、Seaborn、pandas和Folium(用于交互式地图)产生的高层可视化结果。
我们使用可视化作为教学工具。例如,我们使用动态滚压模型和柱状图使大数定律“鲜活”起来。随着滚动数量的增加,你将看到每个面在滚动总数中所占的百分比逐渐接近16.667%(1/6),代表百分比的柱条也趋于一致。
你需要了解自己的数据。一种简单的办法是直接看原始数据。即使是少量的数据,你也可能很快迷失在细节当中。对于大数据而言,可视化对于数据探索和传递可复制的研究结果尤为重要,数据规模可能是百万级的、上亿的甚至更为庞大。通常而言,一图胜千言10—在大数据中,一个可视化结果能够比得上数据库中数亿甚至更多的个体。
有时候,你需要“飞到离数据40 000英尺高”才能在“大范围”看到它。描述性统计当然有帮助,但是也可能产生误导。你将在习题中研究Anscombe四重奏,这个案例研究通过可视化直观地表明:差异显著的数据集可能产生几乎相同的描述性统计。
我们展示了可视化结果和动画代码以便你能够自己实现。我们也通过Jupyter Notebook的形式给出动画的源代码文件,便于你自定义代码和动画参数,进而重新执行动画,然后查看其带来的影响。
许多习题都要求你创建自己的可视化结果。
数据经验
“数据科学本科课程建议”中提出:“数据经验需要在所有课程中扮演核心角色。”11
在本书的案例研究、习题和项目中,你将使用许多真实世界数据集和数据源。网上有各种免费的开源数据集供你实验。有些我们参考的网站列出很多数据集,我们鼓励你探索这些数据集。
我们收集了上百份教学大纲,追踪了教师的数据集偏好,并研究了最流行的监督机器学习、无监督机器学习和深度学习的数据集。你将会使用到的许多库都附带用于实验的标准数据集。
你将学习如何进行数据获取和分析准备,学习使用多种技术进行数据分析、模型调整并有效交流结果,特别是通过可视化。
像开发者一样思考
你将以开发者为视角,使用像GitHub和StackOverflow一样的流行网站并且进行大量互联网搜索。“数据科学入门”部分和第12~17章中的案例研究提供了丰富的数据经验。
GitHub为寻找开源代码提供了一个优秀的场所,你可以把代码合并到自己的项目中(并将你的代码贡献到开源社区中)。它是软件开发者版本控制工具库中的重要组成部分,这些工具帮助开发团队管理他们的开源(和私有)项目。
我们鼓励你学习GitHub等网站上发布的代码。
在为计算机科学和数据科学的职业生涯做准备的过程中,你将大量使用免费且开源的Python和数据科学库,来自政府、工业界和学术界的真实世界数据集,以及免费、免费试用或免费增值的软件和云服务。
动手实践云计算
很多大数据分析发生在云端。在云端动态地度量你的应用程序需要的硬件和软件规模是比较容易的。你将会使用各种各样的云服务(某些是直接的,某些是间接的),包括Twitter、Google翻译、IBM Watson、Microsoft Azure、OpenMapQuest、geopy、Dweet.io 和 PubNub。你将在习题和项目中了解更多。
我们鼓励你使用各种云服务供应商提供的免费、免费试用或免费增值的服务。我们更喜欢那些不需要信用卡的,因为谁都不想冒意外地积攒巨额账单的风险。如果你决定使用需要信用卡的服务,确保你使用的免费层不会自动跳转到支付层。
数据库、大数据和大数据基础设施
根据IBM(2016年11月)的数据,全球90%的数据是在过去的两年内产生的12。有证据表明,数据产生的速度正在加快。
根据2016年3月Analytics Week的一篇文章,五年内将有超过500亿台设备连接到互联网,到2020年前,我们将每秒为地球上的每一个人产生1.7兆字节的新数据13!
本书包含了对关系数据库和带有SQLite的SQL的探讨,感兴趣的读者可以选择阅读。
数据库是存储和操作你要处理的大量数据的关键性大数据基础设施。关系数据库处理结构化数据,它们不适用于大数据应用程序中的非结构化和半结构化数据。因此,随着大数据的发展,为了有效处理这些数据,NoSQL和NewSQL数据库应运而生。本书包含对NoSQL和NewSQL的概述,以及利用MongoDB JSON文件数据库的动手实践的案例研究。
第17章包含关于大数据硬件与软件基础设施的细致讨论。
人工智能案例研究
为什么这本书没有关于人工智能的章节呢?毕竟,“AI”是印在封面上的。在第12~16章的案例研究中,我们介绍的人工智能主题(计算机科学与数据科学的一个关键交集)包含自然语言处理、利用数据挖掘对Twitter进行情感分析、利用IBM Watson进行认知计算、监督机器学习、无监督机器学习、深度学习和强化学习(在习题中)。第17章介绍了大数据硬件和软件基础设施,这些基础设施支撑了计算机科学家和数据科学家研究的前沿AI解决方案。
计算机科学
第1~10章的Python基础知识会让你像计算机科学家一样思考。第11章提供了一个更高的视角,其中讨论的都是经典的计算机科学话题。第11章强调性能问题。
内置集合:列表、元组、集合、字典
今天,大多数应用开发人员不再构建定制的数据结构。这是CS2课程的主题—严格来说,我们的范围是CS1和相应的数据科学课程。书中用两章的篇幅详细介绍了Python的内置数据结构—列表、元组、字典和集合,大多数数据结构任务都可以通过这些数据结构来完成。
使用NumPy数组、pandas Series和DataFrame进行面向数组的编程
在这本书中我们专注于开源库中的三个关键数据结构—NumPy数组、pandas Series和pandas DataFrame。这些库被广泛用于数据科学、计算机科学、人工智能和大数据。NumPy的性能比内置Python列表高出两个数量级。
第7章中详细介绍了NumPy数组。pandas等许多库都是在NumPy的基础上构建的。第7~9章的“数据科学入门”部分介绍了pandas Series和DataFrame,这两个库以及NumPy数组将在剩余的章节中频繁使用。
文件处理和序列化
第9章介绍文本文件处理,然后演示了如何使用流行的JSON(JavaScript对象表示法)格式把对象序列化。JSON是一个普遍使用的数据交换格式,在后面的数据科学章节中你会经常见到它—通常为简单起见把JSON的细节隐藏在库中。
基于对象编程
在我们为本书进行调研期间研究的所有Python代码中,很少遇到自定义类,而这在Python开发者使用的强大的库中是很常见的。
我们强调大量使用Python开源社区打包到工业标准类库中的类。你将专注于:了解有哪些库,选择你的应用程序需要的库,从现有类(通常是一行或两行代码)创建对象以及让它们“跳起来、舞起来、唱起来”。这叫作基于对象编程—它使你能够简洁地构建令人印象深刻的应用程序,这是体现Python吸引力的重要组成部分。
通过这种方法,你可以使用机器学习、深度学习、强化学习(在习题中)和其他AI技术来解决各种各样有趣的问题,包括语音识别和计算机视觉等认知计算方面的挑战。过去,如果仅仅学过入门级编程课程,是不可能完成这些任务的。
面向对象编程
对计算机科学专业的学生来说,开发自定义类是一个至关重要的面向对象编程技能,相关的继承、多态和鸭子类型也同样重要。我们将在第10章中讨论这些内容。
面向对象编程的讨论是模块化的,所以教师可以分开介绍基础或中级部分。
第10章包括关于doctest单元测试的讨论,以及一个有趣的关于洗牌和切牌的模拟案例研究。
数据科学、人工智能、大数据和云计算相关的6个章节只需要一些简单的特定类定义。不希望讲授第10章的教师可以让学生简单地模仿我们的类定义。
隐私性
在习题中,你将研究更加严格的隐私法,例如美国的HIPAA(健康保险便携性和责任法案)和欧盟的GDPR(一般数据保护条例)。隐私的关键方面是保护用户的个人身份信息(PII),而大数据的一个重要挑战是很容易在数据库中交叉引用个人信息。我们在本书的一些地方都提到了隐私问题。
安全性
安全比隐私更为重要。我们有针对性地处理了一些Python特有的安全问题。
人工智能和大数据带来了独特的隐私、安全和伦理方面的挑战。在习题中,学生将会研究OWASP Python安全项目(http://www.pythonsecurity.org/)、异常检测、区块链(比特币和以太坊等数字加密货币背后的技术)等。
伦理观
伦理难题:假设利用人工智能的大数据分析预测出,一个没有犯罪记录的人有很大概率犯下严重罪行,那么他应该被逮捕吗?在习题中,你将会研究这个问题以及其他伦理问题,包括深度造假(人工智能生成的仿真图片和视频)、机器学习中的偏好和CRISPR基因编辑。学生还可以研究与人工智能和智能助手(例如IBM Watson、Amazon Alexa、Apple Siri、Google Assistant和Microsoft Cortana)有关的隐私和伦理问题。例如,就在最近,一位法官命令亚马逊将Alexa的记录用于一起犯罪案件的处理14。
复现性
通常在科学研究中,数据科学尤其需要复现实验和研究的结果,并有效地展现这些结果。Jupyter Notebook就是做这项工作的首选方式。
我们将分享Jupyter Notebook的使用经验,它可以帮助你掌握“数据科学本科课程建议”中提到的数据复现技术。
我们在关于编程技术和软件的内容中讨论了Jupyter Notebook和Docker等复现技术。
透明性
“数据科学本科课程建议”中提到了数据透明。数据透明主要指的是数据可用性。许多政府和组织现在秉持公开数据的原则,使得任何人都可以访问其数据15。我们给出了一个由这些实体提供的公共数据集。
数据透明的其他方面包括确定数据的正确性和了解其来源(想想那些“假新闻”)。我们使用的许多数据集都与我们提供的关键库绑定在一起,例如机器学习的Scikit-learn和深度学习的Keras。我们还提及了各种精挑细选的数据集仓库,例如加州大学欧文分校(UCI)的机器学习库(超过450个数据集)16和卡内基·梅隆大学的StatLib数据集档案(超过100个数据集)17。
性能
我们在一些案例研究和习题中使用性能测试分析工具比较了执行相同任务的不同方法的性能。其他与性能相关的讨论包括生成器表达式、NumPy 数组与Python列表、机器学习和深度学习模型的性能以及Hadoop和Spark分布式计算的性能。
大数据和并行性
计算机应用程序一般擅长一次做一件事。今天更复杂的应用程序需要并行地做很多事情。人类大脑被认为拥有相当于1千亿个并行处理器18。多年来我们一直在编写程序级别的并行化,这种并行化既复杂又容易出错。
在本书中,你不必编写自己的并行代码,而是可以通过让Keras在TensorFlow上运行、利用Hadoop和Spark大数据工具实现并行化来开展并行计算。在这个大数据/人工智能的时代,纯粹需要处理大量数据的应用程序可以利用多核处理器、图形处理单元(GPU)、张量处理单元(TPU)和大型云端计算机集群开展真正的并行计算。一些大数据任务可能有数千个处理器并行工作,以便在合理的时间内分析大量数据。将这些处理过程顺序化是不可取的,因为会花费太长时间。
章节依赖关系
如果你是一名设计课程大纲的教师,或者一位决定阅读哪些章节的专业人士,这部分将帮助你做出最好的决定。请阅读本书的目录,它可以帮你快速熟悉本书的独特架构。按照章节顺序教学或阅读是最为简单的。然而,第1~10章的“数据科学入门”中的大部分内容以及第12~17章的案例研究,只需要掌握下面列出的第1~5章的内容和第6~10章的小部分内容即可。
第一部分:Python基础快速入门
我们建议所有的课程都涵盖关于Python的第1~5章:
第1章介绍在第2~11章的Python编程以及第12~17章的大数据、人工智能和基于云计算的案例研究中需要的基本概念。这一章也包括运用IPython和Jupyter Notebook的试用案例研究。
第2章介绍Python编程的基础知识,利用代码示例说明关键语言特性。
第3章介绍Python的控制语句,重点介绍问题求解和算法开发,以及基本的列表处理。
第4章介绍使用已有函数和自定义函数作为构建块的程序架构,以及使用随机数生成的模拟技术和元组的基本原理。
第5章介绍Python的内置列表和元组集合的更多细节,并开始介绍函数式编程。
第二部分:Python数据结构、字符串和文件19
下面总结了关于Python的第6~9章的章节间依赖关系,并假设你已经阅读了第1~5章。
第6章介绍字典和集合,“数据科学入门”部分不依赖于本章内容。
第7章介绍使用NumPy进行面向数组的编程,“数据科学入门”部分需要关于字典(第6章)和数组(第7章)的知识。
第8章进一步深入讨论字符串,“数据科学入门”部分需要掌握原始字符串和正则表达式(8.11~8.12节),以及7.14节介绍的pandas Series和DataFrame。
第9章介绍文件和异常。对于JSON序列化,理解关于字典的基础知识(6.2节)是很有用的。另外,“数据科学入门”部分需要关于内置函数open和with语句(9.3节)以及DataFrame(7.14节)的知识。

第三部分:Python高阶主题
下面总结了第10~11章的章节间依赖关系,并假设你已经阅读了第1~5章。
第10章介绍面向对象程序设计。“数据科学入门”部分需要关于DataFrame的知识(7.14节)。只想讲解类和对象的教师可以讲授10.1~10.6节;如需讲解更高阶的主题,例如继承、多态和鸭子类型,则可以讲授10.7~10.9节。10.10~10.15节提供了其他高阶视角。
第11章介绍计算机科学思维。需要的预备知识包括:创建和访问数组中的元素(第7章),%timeit简介(7.6节),字符串合并方法(8.9节),以及Matplotlib FuncAnimation(6.4节)等。
第四部分:人工智能、云计算和大数据案例研究
下面总结了第12~17章的章节间依赖关系,并假设你已经阅读了第1~5章。第12~17章的大部分内容还需要6.2节中关于字典的基础知识。
第12章介绍自然语言处理,需要用到关于DataFrame的内容(7.14节)。
第13章介绍Twitter数据挖掘,需要用到的知识包括:DataFrame(7.14节),字符串合并方法(8.9节),JSON基础知识(9.5节),TextBlob(12.2节),以及Word Clouds(12.3节)。一些例子需要通过继承定义类(第10章),但读者可以在阅读第10章前简单地模仿我们提供的类定义。
第14章介绍IBM Watson和认知计算,使用了内置函数open和with。
第15章介绍机器学习,需要用到的知识包括:NumPy 数组基础知识和unique方法(第7章),DataFrame(7.14节),以及Matplotlib函数subplots(10.6节)。
第16章介绍深度学习,需要用到的知识包括:NumPy数组基础知识(第7章),字符串合并方法(8.9节),常用的机器学习概念(第15章),以及案例研究“数字数据集上的k近邻分类法”(第15章)。
第17章介绍大数据,需要用到的知识包括:使用字符串切分方法(6.2.7节),Matplotlib FuncAnimation(6.4节),pandas Series和DataFrame(7.4节),字符串合并方法(8.9节),JSON模块(9.5节),NLTK停用词(12.2.13节),以及Twitter认证、Tweepy中用于推文流处理的StreamListener类、geopy和folium库(第13章)。一些例子需要通过继承定义类(第10章),但读者可以在阅读第10章前简单地模仿我们提供的类定义。
计算和数据科学课程
我们在为写本书做准备时阅读了以下的ACM/IEEE CS及其相关课程文档。
计算机科学课程201320
CC2020:计算课程愿景21
信息技术课程201722
网络安全课程201723
以及由NSF和高级研究院资助的研究团队发起的2016年“数据科学本科课程建议”24。
计算课程体系
根据“CC2020:计算课程愿景”,课程体系“需要修订和更新,以涵盖计算方面的新兴领域,例如网络安全和数据科学”25。
数据科学包括一些关键主题(除了常见内容以外),例如机器学习、深度学习、自然语言处理、语音合成与识别以及其他一些经典的人工智能技术,因此也包括计算机科学的一些主题。
数据科学课程
研究生层次的数据科学课程建设情况良好,本科生层次的数据科学课程正快速增长以满足强劲的行业需求。基于新课程提议,我们的鼓励动手实践的、非数学的、面向项目的、编程密集型的方法将促进数据科学内容进入本科课程。
现在已经有很多本科数据科学和数据分析项目,但是它们并未有机融合。为此,2016年组建了由25位成员构成的数据科学课程委员会,并发布了“数据科学本科课程建议”以及相关的10门本科生主修课程。
课程委员会认为:“为了提高综合课程所能提供的潜在协同效应和效率,许多传统的计算机科学、统计学和数学课程应该为数据科学专业的学生重新设计。”26
课程委员会建议利用计算机和数学思维整合这些领域的所有课程,并表明新教科书是不可或缺的27—这本书就是根据课程委员会的建议而设计的。
Python已经迅速成为世界上最受欢迎的通用编程语言之一。对于那些只想在数据科学主修课程中教授一种语言的学校来说,选择Python是合情合理的。
数据科学与计算机科学的重叠28
在“数据科学本科课程建议”中,包括算法设计、程序设计、计算思维、数据结构、数据库、数学、统计思维、机器学习、数据科学和很多其他的内容—这和计算机科学有明显的重合部分,特别是数据科学课程还包括一些关于AI的关键话题。尽管这是一本Python编程教材,但是我们有效地将数据科学融入各种示例、习题、项目和完整实现的案例研究中,因此本书仍然涉及推荐的10门数据科学课程中相关领域的内容(除了较难的数学知识以外)。
“数据科学本科课程建议”中的关键点
在这一节中,我们从“数据科学本科课程建议”29及其附录30中摘选了一些关键点,并努力将其和许多其他目标结合在一起:
学习计算机科学课程中常见的编程基础知识,包括数据结构的使用。
能够通过创建算法来解决问题。
学习过程式、函数式和面向对象的编程。
全面理解计算思维和统计思维,包括通过模拟来探究概念。
使用开发环境(我们使用IPython和Jupyter Notebook)。
在每门课程的实际案例研究和项目中使用真实数据。
获取、探索和转换(辨析)数据以进行分析。
创建静态、动态和交互式的数据可视化。
提供可复现的结果。
使用现有的软件和基于云计算的工具。
使用统计模型和机器学习模型。
使用高性能工具(Hadoop、Spark、MapReduce和NoSQL)。
关注数据的伦理、安全、隐私、可复现和透明性问题。
需要数据科学技能的工作
2011年,麦肯锡全球研究所发表了报告《大数据:推动创新、竞争和生产力的新浪潮》。报告中写道:“仅仅在美国,对于经验丰富的数据分析技术人员,缺口为14万~19万名;对于能够分析大数据并根据分析结论做出决策的经理和分析师,缺口已达到150万名。”31现在仍然是这样的情况。2018年8月的《LinkedIn劳动力报告》指出,美国缺少超过15万具有数据科学技能的人32。IBM、Burning Glass Technologies和商业–高等教育论坛于2017年发布的一份报告称,到2020年,美国将会有成千上万的新工作需要数据科学技术33。
Jupyter Notebook
为了方便起见,我们以Python源代码(.py)文件格式提供本书的示例,可与命令行IPython解释器一起使用;同时提供了Jupyter Notebook(.ipynb)文件格式,你可以将其加载到网络浏览器中并执行。你可以使用喜欢的任意一种方式执行代码示例。
Jupyter Notebook是一个免费的开源项目,支持结合文本、图形、音频、视频和交互式的程序编码,便于在Web浏览器中快速且方便地输入、编辑、执行、调试和修改代码。文章《什么是Jupyter?》这样评价它:
Jupyter已成为科学研究和数据分析的标准。它将计算和参数结合在一起,让使用者能够构建“计算架构”。……并且简化了向同伴和同事分发工作软件的问题34。
根据我们的经验,它是一个同时适合新手和经验丰富的开发人员的绝佳学习环境和快速原型开发工具。因此,我们使用Jupyter Notebook而非Eclipse、Visual Studio、PyCharm或Spyder等传统的集成开发环境(IDE)。学术界和专业人士已经广泛使用Jupyter共享研究成果。传统的开源社区35机制提供了对Jupyter Notebook的支持(具体可参见后文)。
我们认为Jupyter Notebook是一种优秀的Python教学工具,所以大多数教师都会选择使用Jupyter。本书的Jupyter Notebook包括:
例子。
自检习题。
所有包含代码的章末习题。
可视化和动画,这是本书教学方法中的关键部分。我们以Jupyter Notebook格式提供代码,以便学生可以方便地复现我们的结果。
有关运行本书示例的信息,请参见1.10节。
合作和分享成果
“数据科学本科课程建议”36中重点强调了团队合作和研究结果交流,这两方面内容对将要进入数据分析相关的工业、政府、学术领域的学生而言非常重要:
只需要复制文件或者通过GitHub,你就可以非常方便地和团队成员分享自己创建的笔记。
研究结果(包括代码和心得)可以通过nbviewer(https://nbviewer.jupyter.org)和GitHub之类的工具以静态网页形式共享—两者均自动将笔记变成网页展示。
Jupyter Notebook对复现性的支持
在数据科学以及其他所有科学中,实验和研究应具有可复现性。这个问题多年来在很多文献中被讨论到,包括:
高德纳(Donald Knuth)在1992年出版的计算机科学著作Literate Programming 37。
文章“Language-Agnostic Reproducible Data Analysis Using Literate Programming”38中认为:“Lir(文学,可再现计算)是基于高德纳提出的‘literate programming’(文学编程)的概念。”
从本质上讲,可复现性覆盖了用于产生结果的完整环境—硬件、软件、通信、算法(尤其是代码)、数据和数据的来源(起源和沿袭)。
“数据科学本科课程建议”在四个地方提到了可复现性这一目标。文章《数据科学的五十年》中提到,“让学生学会让工作可复现,可以让他们更轻松、更深入地评估自己的工作;让他们复现他人的部分分析结果,使他们能够学习诸如‘原生数据分析’之类的技能,这些技能通常实践性很强,但未被系统性讲授。对他们开展围绕可复现性的训练,将使他们毕业后完成的工作成果更加可靠。”39
Docker
第17章将介绍Docker,它是一种将软件打包到容器中的工具,该工具能够跨平台地、方便地、可复现地和可移植地将软件执行需要的内容打包起来。我们在第17章中使用的某些软件包需要复杂的设置和配置。对于其中许多内容,你可以下载免费的现有版本的Docker容器。这使你能够避免复杂的安装问题,并在台式机或笔记本电脑上本地运行软件,从而使Docker成为一种帮助你快速且便捷地开始使用新技术的好方法。
Docker还有助于提高可复现性。你可以创建自定义Docker容器,并为其配置学习中使用的每个软件和每个库的版本。这将使其他人能够重新构建你所使用的环境,然后再现你的工作,并帮助你再现自己的结果。在第17章中,你将使用Docker下载并执行一个预先配置的容器,以供你使用Jupyter Notebook编写和运行大数据Spark应用程序。
课堂测试
在本书编写过程中,我们的一位学术评审人—圣地亚哥大学经济学系助理教授Alison Sanchez博士在新课程“商业分析策略”中对本书进行了测试。她评论道:“(这门课程)对于来自各种教育背景和专业的Python初学者来说真是太棒了。在我的课堂中,商业分析专业的学生刚开始这门课程时几乎没有编程经验。除了喜欢书中内容之外,他们还可以轻松地跟随示例进行练习,并在课程结束时,有能力使用从书中学到的技术来挖掘和分析Twitter数据。书中清楚地给出了示例代码的详细解析,这使没有计算机科学背景的学生容易理解。模块化的章节结构、广泛的当代数据科学领域的讨论话题以及配套的Jupyter Notebook,使本书成为各种数据科学、商业分析和计算机科学等课程的教师和学生的绝佳资源。”
“翻转课堂”
现在,许多教师正在使用“翻转课堂”40,41。学生上课之前(通常通过视频授课)自行学习内容,上课时间将用于诸如动手写代码、以小组为单位的工作和讨论等任务。我们的书和附录用于翻转课堂是非常合适的:
我们提供了内容丰富的VideoNotes,本书作者之一Paul Deitel将在视频中针对Python核心章节讲授相关概念。有关视频获取的详细信息请参见后文。
有些学生通过动手实践才能获得最好的学习效果,而仅仅视频是不够的。这本书最引人注目的特色之一是交互式教学方法—配有538个Python案例研究(许多仅包含一个或几个代码片段)以及557道带有答案的自检习题。这些使学生能够在得到即时反馈的基础上一点一点地学习—完全适合自主掌控节奏。学生可以轻松修改“热门”代码并查看更改的效果。
配套的Jupyter Notebook补充材料为学生提供了使用代码的便捷机制。
我们提供471个习题和项目,学生可以在家中和课堂上进行练习,其中许多都适用于小组项目。
我们在习题和项目中提供了许多有关伦理、隐私、安全等方面的探索性问题, 这些适合课堂讨论和小组工作。
特色:IBM Watson分析和认知计算
在本书编写的初期,我们对IBM Watson产生了浓厚的兴趣。我们进行了详尽的服务调查,发现Watson“免费套餐”中的“无须信用卡”政策对我们的读者来说是最友好的。
IBM Watson是一个认知计算平台,已经用于各种实际场景。认知计算系统模拟人脑的模式识别和决策能力,在得到更多的数据后进行“学习”42,43,44。书中包含重要的Watson实践方案。我们使用免费的Watson Developer Cloud—Python SDK,它提供了应用程序编程接口(API),你可以通过编程方式与Watson的服务进行交互。Watson使用起来很有趣,并且是帮助你发挥创意的绝佳平台。你将演示或使用以下Watson API:对话、发现、语言翻译器、自然语言分类器、自然语言理解、个人见解、语音到文本、文本到语音、音调分析器和视觉识别。
Watson的轻量级层服务和Watson案例研究
IBM通过为其API提供免费的轻量级层来鼓励学习和实践45。在第14章中,你将尝试许多Watson服务的演示程序46。然后,你将使用Watson轻量级层的文字转语音、语音转文字和翻译服务去实现“旅行者助手”翻译App。你将用英语说一个问题,然后该App会将你的语音翻译成英语文本,然后再将其翻译成西班牙语,最后变成西班牙语语音。接下来,你要说一个西班牙语回答(如果你不会说西班牙语,我们给你提供了一个可以使用的音频文件)。然后,该App会将语音快速翻译成西班牙语文本,再将文本翻译成英语并说出英语回复。是不是很酷!
教学方法
本书包含来自许多领域的丰富的案例研究、习题和项目。学生基于真实世界的数据集来解决有趣的现实问题。这本书专注于遵守软件工程的基本原则,同时还强调程序的清晰性。
使用不同字体来强调重点内容
我们把关键术语设置为粗体以便于识别。此外,我们把电脑屏幕上显示的相关界面组件用bold Helvetica字体表示,并使用Lucida字体表示Python代码。
目标和大纲
每章的开头都是对本章目标的介绍,从而让读者知道在接下来的一章中应该期待看到什么内容,同时也给予读者一个机会,可以在读完这一章后确定是否达到了预期的目标。章节大纲使得学生能够以自顶向下的方式来理解所学内容。
538个案例研究
本书中的538个案例研究包含将近4000行代码。对于这么厚的一本书来说,这个代码量可以说是相当少的,这主要得益于Python是一门表达能力很强的语言。此外,我们的代码也尽可能地使用强大的类库来完成大部分工作。
160个表格/插图/可视化表示
本书包含丰富的表格、线图以及其他的可视化表示。这些可视化表示以2D、3D、静态、动态和交互式等多种形式呈现。
编程的智慧
我们荟萃了本书作者们加起来90多年的丰富编程和教学经验,将其整合到本书对于编程智慧的讨论中,包括:
良好的编程实践和我们推荐的Python习惯用法能帮助你编写出更清晰、更容易理解和更容易维护的程序。
列举了常见的编程错误,降低了你以后犯这些错误的可能性。
“防错贴士”给出了如何在程序中定位和除去bug的建议,其中许多贴士描述了如何在一开始就防止bug进入程序。
“性能贴士”重点强调可以使程序跑得更快或者占用更少内存的方法。
“软件工程观察”重点强调软件(尤其是大型系统)体系结构和设计上的问题。
小结
在第2~17章的最后都有小结部分,总结了这一章所学的内容。
本书用到的软件
在本书中,所有你需要用到的软件都可以在Windows、macOS和Linux操作系统下运行,并且可以从因特网上免费下载。我们使用免费的Anaconda Python发行版编写此书中的案例研究,它包含了大部分你需要用到的Python库、可视化库和数据科学库,以及Python、IPython解释器、Jupyter Notebook和Spyder(非常优秀的Python数据科学集成开发环境)—虽然我们仅使用IPython和Jupyter Notebook来开发书中的程序。
Python文档
在阅读本书时,你会发现以下文档很有帮助:
Python标准库:https://docs.python.org/3/library/index.html。
Python语言参考:https://docs.python.org/3/reference/index.html。
Python文档列表:https://docs.python.org/3/。
解答你的问题
在线论坛使得你可以和其他Python程序员互动,并解答你在Python上遇到的问题。常用的Python编程论坛以及通用的编程论坛包括:
python-forum.io
StackOverflow.com
https://www.dreamincode.net/forums/forum/29-python/
除此之外,许多供应商会为他们的工具和库提供论坛。在本书中你将使用的大部分库都在GitHub.com上管理和维护,这些库的维护人员会通过项目主页上的Issues板块提供技术支持。如果无法在网上找到相关解答,请访问我们这本书的网站来获取帮助:http://www.deitel.com/47。
获得关于Jupyter的帮助
你可以可通过以下途径获得关于Jupyter Notebook的技术支持:
Project Jupyter谷歌论坛群: https://groups.google.com/forum/#!forum/jupyter。
Jupyter实时聊天室:https://gitter.im/jupyter/jupyter。
GitHub:https://github.com/jupyter/help。
StackOverflow:https://stackoverflow.com/questions/tagged/jupyter。
Jupyter for Education Google Group(适用于采用Jupyter进行教学的教师):https://groups.google.com/forum/#!forum/jupyter-education。
学生和教师的补充资源
下列补充资源适用于学生和教师。
代码示例和入门视频
为了充分理解本书,你应该在阅读相关讨论的同时执行每个代码示例。在本书网站http://www.deitel.com/上,我们提供:
可下载的Python源代码(.py文件)和Jupyter Notebook源代码(.ipynb文件),涵盖书中的代码示例、基于代码的自检习题以及包含代码描述的章末习题。
入门视频,展示了如何使用IPython和Jupyter Notebook运行代码示例。我们会在1.10节介绍这些工具。
博客文章和本书更新。
配套网站
本书配套网站的地址是https://www.pearson.com/deitel。配套网站除了包含上面提到的代码外,还有丰富的视频,在这些视频中,作者之一Paul Deitel解释了书中核心Python章节的大部分案例研究。
Pearson教师资源中心的教师资源48
以下补充资源仅通过Pearson Education的IRC(教师资源中心,地址为http://www.pearsonhighered.com/irc)向有资格的教师提供:
PPT幻灯片。
教师答案手册:包含大部分习题的解析。对于项目和研究习题,我们没有提供答案解析—这其中有许多涉及本质的问题,并且适合作为学期级项目、专业方向级项目、拔尖课程项目和论文题目。在把一道习题布置为作业之前,教师应确保在IRC上能找到这道题对应的解答。
测验文档:包含多项选择题、简答题及答案,并且这些练习都很容易使用自动化评分工具来进行评分。
请不要直接写信向我们请求拥有上述教师资源(包括习题答案)的访问权限。访问权限只对使用这本书进行教学的大学教师可用。符合条件的教师可以通过Pearson代理获取IRC的访问权限。如果你不是我们的注册教师成员,请与你的Pearson代理联系或者访问以下网址:https://www.pearson.com/replocator。
考试试卷副本
教师可通过Pearson代理索取关于本书的考试试卷的副本:https://www.pearson.com/replocator。
和作者保持联系
如果需要向我们提问、需要教学进度上的协助或者向我们报告书中的错误,请给我们发送电子邮件:deitel@deitel.com。
或者在社交媒体上和我们互动:
Facebook(http://www.deitel.com/deitelfan)
Twitter(@deitel)
LinkedIn(http://linkedin.com/company/deitel-&-associates)
YouTube(http://youtube.com/DeitelTV)
致谢
我们要感谢Barbara Deitel为这个项目在网络上花费了很长时间收集资料。同时,我们很幸运能够和Pearson出版社的专业出版团队合作。我们还要感谢Tracy Johnson(计算机科学高等教育课件联合执行经理)的指导、智慧和付出—她在本书创作过程中的每一步都向我们提出挑战,要求我们“止于至善”。Carole Snyder负责这本书的生产制作并且和Pearson许可团队沟通,迅速处理了书中的图片和引用涉及的版权问题。我们选定了封面的艺术风格,然后由Chuti Prasertsith完成封面的设计。
我们还要感谢学术专业评审人所付出的努力。Meghan Jacoby和Patricia Byron-Kimball招募了评审专家并负责管理评审过程。在非常紧张的时间安排下,评审专家仔细审查了我们的工作,在提高表达的准确性、完整性和时效性方面提供了许多建议。
评审专家列表
提案评审人
? Irene Bruno博士,乔治·梅森大学信息科学与技术系副教授。
? Lance Bryant,希彭斯堡大学数学系副教授。
? Daniel Chen,Lander Analytics公司数据科学家。
Garrett Dancik,东康涅狄格州立大学计算机科学/生物信息学系副教授。
? Marsha Davis博士,东康涅狄格州立大学数学科学系主任。
? Roland DePratti,东康涅狄格州立大学计算机科学系兼职教授。
? Shyamal Mitra,得克萨斯大学奥斯汀分校计算机科学系高级讲师。
? Mark Pauley博士,内布拉斯加大学奥马哈分校信息科学学院生物信息学高级研究员。
? Sean Raleigh,威斯敏斯特学院数学系副教授、数据科学系主任。
? Alison Sanchez,圣地亚哥大学经济学系助理教授。
? Harvey Siy博士,内布拉斯加大学奥马哈分校信息科学与技术计算机科学副教授。
? Jamie Whitacre,独立数据科学顾问。
书籍评审人
? Daniel Chen,Lander Analytics公司数据科学家。
? Garrett Dancik,东康涅狄格州立大学计算机科学/生物信息学系副教授。
? Pranshu Gupta,迪西尔斯大学计算机科学系助理教授。
? David Koop,马萨诸塞大学达特茅斯分校数据科学助理教授、数据科学项目联合主任。
? Ramon Mata-Toledo,詹姆斯?麦迪逊大学计算机科学系教授。
? Shyamal Mitra,得克萨斯大学奥斯汀分校计算机科学系高级讲师。
? Jamie Whitacre,独立数据科学顾问。
? Elizabeth Wickes,伊利诺伊大学信息科学学院讲师。

特别感谢
我们要特别感谢圣地亚哥大学的Alison Sanchez助理教授,她在圣地亚哥大学新开设的“商业分析策略”课程中使用本书的预发布版进行了课堂测试。她看完了冗长的使用建议,在还没有见过书的情况下就决定采用这本书,并且签字成为本书的评审人员。我们真诚地感谢她在整本书的写作过程中提供的指导(和勇气)。
现在让我们开始吧!当你阅读这本书的时候,我们将非常感谢你的评论、批评、纠错和改进建议。你可以将邮件发送到deitel@deitel.com,我们会在第一时间做出回应。
再次欢迎你来到激动人心的Python开源编程世界。我们希望你能享受这本书,以及它所包含的和Python、IPython、Jupyter Notebook、AI、大数据、云技术相关的前沿计算机应用开发技术。最后,我们祝你前程似锦!
关于作者
Paul J. Deitel,Deitel&Associates公司首席执行官兼首席技术官,毕业于麻省理工学院,在计算机领域拥有38年的经验。Paul是经验丰富的编程语言培训专家,自1992年以来就为软件开发人员教授专业课程。他已经向来自全球的企业客户提供了数百门编程课程,包括思科、IBM、西门子、Sun Microsystems(现在为Oracle)、戴尔、富达、肯尼迪航天中心的NASA、国家严重风暴实验室、白沙导弹靶场、Rogue Wave软件、波音、北电网络、彪马、iRobot等。他和他的合作者Harvey M. Deitel博士是世界上畅销的编程语言教科书/专业书籍/视频作者。
Harvey M. Deitel博士,Deitel&Associates公司董事长兼首席战略官,在计算领域拥有58年的经验。Deitel博士在麻省理工学院电气工程系获得理学学士学位和硕士学位,在波士顿大学的数学系获得博士学位—他在这些专业分离出计算机科学专业前就已经学过相关知识了。在1991年与儿子Paul创立Deitel&Associates公司之前,他已经获得了波士顿大学的终身职位并担任计算机科学系主任,拥有丰富的大学教学经验。Deitel品牌的出版物赢得了国际上的广泛认可,并被翻译为日语、德语、俄语、西班牙语、法语、波兰语、意大利语、简体中文、繁体中文、韩语、葡萄牙语、希腊语、乌尔都语和土耳其语等100多种语言出版。Deitel博士已为学术、公司、政府和军事客户提供了数百门编程课程。
关于Deitel&Associates公司
Deitel&Associates公司由Paul Deitel和Harvey Deitel创建,是一家国际认可的计算机类著作创作和企业培训组织,专门研究计算机编程语言、对象技术、移动App开发以及Internet和Web软件技术。该公司的培训客户包括一些世界上的大公司、政府机构、军事部门和学术机构。该公司在世界各地的客户网站上提供关于主流编程语言和平台的有讲师指导的培训课程。
通过与Pearson/Prentice Hall 44年的合作,Deitel&Associates公司以印刷物和电子书的形式出版了前沿的编程教科书和专业书籍,发布了前沿的编程方面的LiveLessons视频课程、Safari-Live在线研讨会和Revel交互式多媒体课程。如果你需要联系Deitel&Associates公司和作者,或者希望给有讲师指导的现场培训课程提出建议,请发送电子邮件至deitel@deitel.com。希望了解更多关于Deitel现场企业培训的信息,请访问http://www.deitel.com/training。希望购买Deitel书籍的个人客户,请访问https://www.amazon.com/。公司、政府、军队和学术机构的大宗订单请直接与Pearson联系。希望了解更多信息,请访问https://www.informit.com/store/sales.aspx。

上架指导

计算机科学及应用

封底文字

【需要制作封二,请联系责编 @杨宇梅】

本书完美地平衡了计算机科学基础知识的教学和数据科学技术的实践,使得读者不仅能够学到程序设计方法,还能够在大量程序库的支持下仅编写少量代码就完成实际任务。书中将基础概念与丰富的Python示例紧密结合,帮助学生迅速找到各种数据科学问题的解决方案,其中对云服务的应用尤其值得称赞。——David Koop,马萨诸塞大学达特茅斯分校数据科学助理教授

来自真实世界的有趣示例和练习有助于学生开展有效的数据分析。本书对于数据科学概念的解释非常到位,并且介绍了多种实用的机器学习模型,你将了解如何选择合适的模型,以及这个模型到底好在哪里。此外,书中对大数据技术的概述也值得一读。——Jamie Whitacre,数据科学顾问

非常赞的Python入门书籍!无论是Python编程还是数据科学方面的初学者,我都要向你们强烈推荐本书。同时,书中对IBM Watson及其服务的介绍也很实用。——Shyamal Mitra,得克萨斯大学高级讲师

在同类技术书籍中,本书是极其出众的数据科学/Python入门教程。——Roland Depratti,东康涅狄格州立大学计算机科学系兼职教授

通过阅读本书,你将学会在工业标准库和云计算服务的基础上开发应用程序。——Daniel Chen,Lander Analytics公司数据科学家

本书以学生为中心,通过大量自顶向下、逐步精化的程序范例来解读程序开发的真实过程。书中涵盖必要的机器学习基础知识,但又避免了过多的数学细节,因此不会给读者造成学习负担。——Garrett Dancik,东康涅狄格州立大学计算机科学/生物信息学系副教授

图书目录

第1章 计算机和Python简介 1
1.1 引言 2
1.2 硬件和软件 3
1.2.1 摩尔定律 4
1.2.2 计算机组成 4
1.3 数据层级 6
1.4 机器语言、汇编语言和高级语言 9
1.5 对象技术简介 10
1.6 操作系统 13
1.7 Python简介 16
1.8 (语言)库 18
1.8.1 Python标准库 18
1.8.2 数据科学库 18
1.9 其他常见编程语言 20
1.10 试用:使用IPython和Jupyter Notebook 21
1.10.1 将IPython交互模型用作计算器 21
1.10.2 使用IPython解释器执行Python程序 23
1.10.3 在Jupyter Notebook中编写和执行代码 24
1.11 Internet和WWW 29
1.11.1 Internet:网际网 29
1.11.2 WWW:用户友善的Internet 30
1.11.3 计算和资源云 30
1.11.4 物联网 31
1.12 软件技术 32
1.13 大数据 33
1.13.1 大数据分析 38
1.13.2 数据科学和大数据案例研究 39
1.14 数据科学入门:大数据移动应用案例研究 40
第2章 Python程序设计简介 49
2.1 引言 50
2.2 变量和赋值语句 50
2.3 算术操作 52
2.4 print函数、单引号字符串和双引号字符串 56
2.5 三引号字符串 58
2.6 从用户处获得输入 59
2.7 判断:if语句与比较操作 61
2.8 对象和动态类型 66
2.9 数据科学入门:基本统计功能 68
2.10 小结 70
第3章 控制语句和程序设计 73
3.1 引言 74
3.2 算法 74
3.3 伪代码 75
3.4 控制语句 75
3.5 if语句 78
3.6 if...else和if...elif...else语句 80
3.7 while语句 85
3.8 for语句 86
3.8.1 迭代、列表和迭代器 88
3.8.2 内置range函数 88
3.9 增量赋值 89
3.10 程序设计:通过序列控制重复 90
3.10.1 需求声明 90
3.10.2 算法的伪代码形式 90
3.10.3 在Python中为算法编码 91
3.10.4 格式化字符串简介 92
3.11 程序设计:通过哨兵控制重复 93
3.12 程序设计:嵌套控制结构 97
3.13 内置函数range:进一步讨论 101
3.14 使用Decimal类型表达货币总量 102
3.15 break和continue语句 105
3.16 布尔操作and、or和not 106
3.17 数据科学入门:趋势的度量—均值、中值、众数 109
3.18 小结 111
第4章 函数 119
4.1 引言 120
4.2 函数的定义 120
4.3 多参数函数 123
4.4 随机数生成器 125
4.5 案例研究:机会游戏 128
4.6 Python标准库 131
4.7 math模块函数 132
4.8 使用IPython的tab补全功能 133
4.9 缺省形参值 135
4.10 关键字实参 136
4.11 任意实参表 136
4.12 方法:归属于对象的函数 138
4.13 作用域规则 138
4.14 import:进一步讨论 140
4.15 给函数传递实参:进一步讨论 142
4.16 函数调用栈 145
4.17 函数式程序设计 146
4.18 数据科学入门:数据分布的度量 148
4.19 小结 150
第5章 序列:列表和元组 155
5.1 引言 156
5.2 列表 156
5.3 元组 161
5.4 序列拆包 163
5.5 序列切片 166
5.6 del语句 169
5.7 给函数传递列表 171
5.8 排序列表 172
5.9 搜索序列 174
5.10 其他列表方法 176
5.11 用列表模拟栈 178
5.12 列表解析 179
5.13 生成器表达式 181
5.14 过滤器、映射和约简 182
5.15 其他序列处理函数 185
5.16 二维列表 187
5.17 数据科学入门:模拟和静态可视化 191
5.17.1 600、60000和6000000次掷骰子的图示 191
5.17.2 掷骰子实验的序列和百分比的可视化 193
5.18 小结 199
第6章 字典和集合 209
6.1 引言 210
6.2 字典 210
6.2.1 创建字典 210
6.2.2 在字典中遍历 212
6.2.3 基本的字典操作 212
6.2.4 字典方法keys和values 214
6.2.5 字典比较 216
6.2.6 案例研究:学生成绩字典 217
6.2.7 案例研究:词计数 218
6.2.8 字典方法update 220
6.2.9 字典解析 220
6.3 集合 221
6.3.1 集合比较 223
6.3.2 集合的数学操作 225
6.3.3 集合的可变操作和方法 226
6.3.4 集合解析 228
6.4 数据科学入门:动态可视化 228
6.4.1 了解动态可视化 228
6.4.2 实现动态可视化 231
6.5 小结 234
第7章 使用NumPy进行面向数组的编程 239
7.1 引言 240
7.2 从已有数据中创建数组 241
7.3 数组属性 242
7.4 用特定值填充数组 244
7.5 使用range创建数组 244
7.6 列表与数组的性能比较:%timeit简介 246
7.7 数组操作 248
7.8 NumPy计算方法 250
7.9 全局函数 252
7.10 索引和切片 254
7.11 视图:浅拷贝 256
7.12 深拷贝 258
7.13 转换和转置 259
7.14 数据科学入门:pandas Series和DataFrame 262
7.14.1 pandas series 262
7.14.2 DataFrame 267
7.15 小结 275
第8章 字符串:进一步讨论 283
8.1 引言 284
8.2 格式化字符串 285
8.2.1 类型声明 285
8.2.2 域宽和对齐 286
8.2.3 数值格式化 287
8.2.4 字符串format方法 288
8.3 字符串拼接和重复 289
8.4 字符串空白符剥离 290
8.5 改变字符的大小写 291
8.6 字符串比较操作 292
8.7 子串搜索 292
8.8 子串替换 294
8.9 字符串切分和合并 294
8.10 字符和字符测试方法 297
8.11 原生字符串 298
8.12 正则表达式简介 299
8.12.1 re模块和fullmatch函数 300
8.12.2 子串替换和串切分 303
8.12.3 其他搜索函数和匹配处理 304
8.13 数据科学入门:pandas、正则表达式和数据治理 307
8.14 小结 312
第9章 文件和异常 319
9.1 引言 320
9.2 文件 321
9.3 文本文件处理 321
9.3.1 写文本文件:with语句简介 322
9.3.2 读文本文件 323
9.4 更新文本文件 325
9.5 JSON序列化 327
9.6 安全问题:pickle序列化和反序列化 330
9.7 关于文件的其他说明 330
9.8 异常处理 331
9.8.1 除0异常和非法输入 332
9.8.2 try语句 332
9.8.3 在except从句中捕捉多重异常 335
9.8.4 函数或过程能够抛出什么异常 336
9.8.5 try套件应该封装什么代码 336
9.9 finally子句 336
9.10 显式引发异常 339
9.11 (可选)栈展开和回溯 339
9.12 数据科学入门:CSV文件的处理 342
9.12.1 Python标准库模块CSV 342
9.12.2 将CVS文件读入pandas DataFrame 344
9.12.3 读取Titanic Disaster数据库 346
9.12.4 对Titanic Disaster数据库进行简单的数据分析 347
9.12.5 乘客年龄直方图 348
9.13 小结 349
第10章 面向对象程序设计 355
10.1 引言 356
10.2 定制类Account 358
10.2.1 试用Account类 358
10.2.2 Account类的定义 360
10.2.3 组合:对象引用作为类的成员 361
10.3 属性的受控访问 363
10.4 数据访问的特性 364
10.4.1 试用Time类 364
10.4.2 Time类的定义 366
10.4.3 Time类定义的设计要领 370
10.5 私有属性模拟 371
10.6 案例研究:洗牌和切牌 373
10.6.1 试用Card和DeckofCards类 373
10.6.2 Card类属性简介 375
10.6.3 DeckofCards类 377
10.6.4 在Matplotlib中显示扑克图片 378
10.7 继承:基类和子类 382
10.8 构建继承层次和多态简介 384
10.8.1 基类Commission-Employee 384
10.8.2 子类SalariedCommission-Employee 387
10.8.3 CommissionEmployee和SalariedCommissionEmployee的多态处理 391
10.8.4 关于基于对象和面向对象程序设计的说明 391
10.9 鸭子类型和多态 392
10.10 操作符重载 393
10.10.1 试用Complex类 394
10.10.2 Complex类的定义 395
10.11 异常类层次和定制异常处理 397
10.12 有名元组 399
10.13 Python 3.7新数据类简介 400
10.13.1 创建Card数据类 401
10.13.2 使用Card数据类 403
10.13.3 数据类相较有名元组的优势 405
10.13.4 数据类相较传统类的优势 406
10.14 使用文档字符串和doctest进行单元测试 406
10.15 命名空间和作用域 411
10.16 数据科学入门:时间序列和简单线性回归 414
10.17 小结 423
第11章 计算机科学思维:递归、搜索、排序和大O表示法 431
11.1 引言 432
11.2 阶乘 433
11.3 阶乘的递归法 433
11.4 斐波那契数列的递归法 436
11.5 递归和循环 439
11.6 搜索和排序 440
11.7 线性搜索 440
11.8 算法效率:大O表示法 442
11.9 二叉搜索 444
11.9.1 二叉搜索的实现 445
11.9.2 二叉搜索的大O表示法 447
11.10 排序算法 448
11.11 选择排序 448
11.11.1 选择排序的实现 449
11.11.2 效用函数print_pass 450
11.11.3 选择排序的大O表示法 451
11.12 插入排序 451
11.12.1 插入排序的实现 452
11.12.2 插入排序的大O表示法 453
11.13 归并排序 454
11.13.1 归并排序的实现 454
11.13.2 归并排序的大O表示法 459
11.14 总结:本章算法的大O表示法 459
11.15 可视化算法 460
11.15.1 生成函数 462
11.15.2 实现选择排序算法的动画演示 463
11.16 小结 468
第12章 自然语言处理 477
12.1 引言 478
12.2 TextBlob 479
12.2.1 创建TextBlob 481
12.2.2 语料化:文本的断句和取词 482
12.2.3 言语分部标注 482
12.2.4 提取名词短语 483
12.2.5 使用TextBlob缺省情绪分析器进行文本情绪分析 484
12.2.6 使用NaiveBayesAnalyzer进行文本情绪分析 486
12.2.7 语言检测和翻译 487
12.2.8 屈折辨析:多元化和单一化 489
12.2.9 拼写检查和更正 489
12.2.10 规范化:词根和词性还原 490
12.2.11 词频 491
12.2.12 从WordNet中获取定义、同义词、反义词 492
12.2.13 停用词删除 494
12.2.14 n-gram模型 496
12.3 使用Bar Charts和Word Clouds进行词频可视化 497
12.3.1 使用Bar Charts进行词频可视化 497
12.3.2 使用Word Clouds进行词频可视化 500
12.4 使用Textatistic进行可读性评测 503
12.5 使用spaCy进行有名实体识别 505
12.6 使用spaCyn进行相似性评估 507
12.7 其他NLP工具和库 509
12.8 机器学习和深度学习的自然语言应用 509
12.9 自然语言数据集 510
12.10 小结 510
第13章 Twitter数据挖掘 515
13.1 引言 516
13.2 Twitter API概述 518
13.3 创建Twitter账户 519
13.4 获取Twitter证书—创建App 520
13.5 推文中有什么 521
13.6 Tweepy 525
13.7 使用Tweepy在Twitter中认证 525
13.8 从Twitter账户中获取信息 527
13.9 Tweepy Cursors简介:获取账户的关注者和好友 529
13.9.1 确定账户的关注者 529
13.9.2 确定账户关注了谁 532
13.9.3 获取用户当前的推文 532
13.10 搜索当前推文 534
13.11 趋势发现:Twitter趋势API 536
13.11.1 趋势主题位置获取 536
13.11.2 趋势主题列表获取 537
13.11.3 从趋势主题中创建词云 539
13.12 推文分析前的清理/预处理 541
13.13 Twitter流处理API 542
13.13.1 创建StreamListener的子类 543
13.13.2 流处理初始化 545
13.14 推文情感分析 547
13.15 地址匹配与映射 551
13.15.1 推文的获取和映射 552
13.15.2 twetutilities.py效用函数 556
13.15.3 LocationListener类 558
13.16 存储推文的方式 559
13.17 Twitter和时间序列 560
13.18 小结 560
第14章 IBM Watson和认知计算 565
14.1 引言:IBM Watson和认知计算 566
14.2 IBM云账户和云控制台 568
14.3 Watson服务 568
14.4 附加服务和工具 572
14.5 Watson开发者云Python SDK 573
14.6 案例研究:旅行者助手—翻译App 574
14.6.1 运行App前的准备工作 575
14.6.2 试用App 576
14.6.3 SimpleLanguageTranslator.py脚本走查 577
14.7 Watson资源 587
14.8 小结 589
第15章 机器学习:分类、回归和聚类 593
15.1 机器学习入门 594
15.1.1 Scikit-learn 595
15.1.2 机器学习的类别 596
15.1.3 Scikit-learn数据集 598
15.1.4 经典的数据科学研究步骤 599
15.2 案例研究:数字数据集上的k近邻分类法(第一部分) 599
15.2.1 k近邻算法 601
15.2.2 载入数据集 602
15.2.3 可视化数据 606
15.2.4 划分训练集和测试集 608
15.2.5 创立模型 609
15.2.6 训练模型 610
15.2.7 预测数字类别 610
15.3 案例研究:数字数据集上的k近邻分类法(第二部分) 612
15.3.1 模型的准确性度量 612
15.3.2 k折交叉验证 616
15.3.3 多模型寻优 617
15.3.4 超参调优 619
15.4 案例研究:时间序列和简单线性回归 620
15.5 案例研究:加州订房数据集上的多线性回归 625
15.5.1 载入数据集 626
15.5.2 用pandas观察数据集 628
15.5.3 特征的可视化 630
15.5.4 划分训练集和测试集 634
15.5.5 训练模型 634
15.5.6 测试模型 635
15.5.7 预期及预测价格的可视化 636
15.5.8 回归模型度量 637
15.5.9 最佳模型选择 638
15.6 案例研究:无监督机器学习—降维 639
15.7 案例研究:无监督机器学习—k均值聚类 642
15.7.1 载入Iris数据集 644
15.7.2 观察Iris数据集:使用pandas进行统计描述 646
15.7.3 使用Seaborn pairplot可视化数据集 647
15.7.4 使用评估器KMeans 650
15.7.5 使用主成分分析法进行降维 652
15.7.6 选择最佳聚类评估器 655
15.8 小结 656
第16章 深度学习 665
16.1 引言 666
16.1.1 深度学习应用 668
16.1.2 深度学习演示程序 669
16.1.3 Keras资源 669
16.2 Keras内置数据集 669
16.3 Anaconda定制化环境 670
16.4 神经网络 672
16.5 张量 674
16.6 视觉处理卷积神经网络和多分类器 676
16.6.1 载入MNIST数据集 677
16.6.2 数据探索 678
16.6.3 数据准备 680
16.6.4 构造神经网络 682
16.6.5 模型训练和评价 691
16.6.6 模型存储和载入 696
16.7 使用TensorBoard进行神经网络训练的可视化 697
16.8 ConvnetJS:基于浏览器的深度学习训练和可视化 700
16.9 序列处理中的循环神经网络和IMDb数据集的情感分析 701
16.9.1 载入IMDb电影评论数据集 702
16.9.2 数据探索 703
16.9.3 数据准备 705
16.9.4 构造神经网络 706
16.9.5 模型训练和评价 709
16.10 深度学习模型调参 710
16.11 ImageNet上的卷积网络模型预学习 711
16.12 强化学习 712
16.12.1 深度强化学习 713
16.12.2 OpenAI Gym 713
16.13 小结 714
第17章 大数据:Hadoop、Spark、NoSQL和IoT 723
17.1 引言 724
17.2 关系型数据库和结构化查询语言 728
17.2.1 books数据库 730
17.2.2 SELECT查询 734
17.2.3 WHERE子句 734
17.2.4 ORDER BY子句 736
17.2.5 INNER JOIN:从多个表中合并数据 737
17.2.6 INSERT INTO语句 738
17.2.7 UPDATE语句 739
17.2.8 DELETE FROM语句 739
17.3 NoSQL和NewSQL大数据数据库概述 741
17.3.1 NoSQL键值对数据库 741
17.3.2 NoSQL文档数据库 742
17.3.3 NoSQL列数据库 742
17.3.4 NoSQL图数据库 743
17.3.5 NewSQL数据库 743
17.4 案例研究:MongoDB JSON文档数据库 744
17.4.1 创建MongoDB Atlas簇 745
17.4.2 将推文注入MongoDB 746
17.5 Hadoop 755
17.5.1 Hadoop概述 755
17.5.2 使用MapReduce汇总Romeo and Juliet的词长度 758
17.5.3 在微软Azure HDInsight上创建Apache簇 758
17.5.4 Hadoop Streaming 760
17.5.5 Mapper的实现 760
17.5.6 Reducer的实现 761
17.5.7 准备运行MapReduce案例研究 762
17.5.8 运行MapReduce作业 763
17.6 Spark 766
17.6.1 Spark概述 766
17.6.2 Docker和Jupyter Docker栈 767
17.6.3 使用Spark进行词统计 770
17.6.4 在微软Azure上进行词统计 773
17.7 Spark Streaming:使用pyspark-notebook Docker栈进行Twitter哈希标注统计 777
17.7.1 将推文注入套接字 777
17.7.2 推文哈希标注累计和Spark SQL简介 780
17.8 物联网和仪表盘 786
17.8.1 发布和订阅 788
17.8.2 使用Freeboard仪表盘可视化PubNub实时采样流 788
17.8.3 使用Python模拟互联网恒温器 790
17.8.4 使用Freeboard.io创建仪表盘 792
17.8.5 创建Python PubNub订阅 794
17.9 小结 798


Contents
1Introduction to Computers and Python 1
1.1 Introduction 2
1.2 Hardware and Software 3
1.2.1 Moore’s Law 4
1.2.2 Computer Organization 4
1.3 Data Hierarchy 6
1.4 Machine Languages, Assembly Languages and High-Level Languages 9
1.5 Introduction to Object Technology 10
1.6 Operating Systems 13
1.7 Python 161.8It’s the Libraries! 18
1.8.1 Python Standard Library 18
1.8.2 Data-Science Libraries 18
1.9 Other Popular Programming Languages 20
1.10 Test-Drive: Using IPython and Jupyter Notebooks 21
1.10.1 Using IPython Interactive Mode as a Calculator 21
1.10.2 Executing a Python Program Using the IPython Interpreter 23
1.10.3 Writing and Executing Code in a Jupyter Notebook 24
1.11 Internet and World Wide Web 29
1.11.1 Internet: A Network of Networks 29
1.11.2 World Wide Web: Making the Internet User-Friendly 30
1.11.3 The Cloud 30
1.11.4 Internet of Things 31
1.12 Software Technologies 32
1.13 How Big Is Big Data? 33
1.13.1 Big Data Analytics 38
1.13.2 Data Science and Big Data Are Making a Difference: Use Cases 39
1.14 Intro to Data Science: Case Study—A Big-Data Mobile Application 40
2Introduction to Python Programming 49
2.1 Introduction 50
2.2 Variables and Assignment Statements 50
2.3 Arithmetic 52
2.4 Function print and an Intro to Single- and Double-Quoted Strings 56
2.5Triple-Quoted Strings 58
2.6Getting Input from the User 59
2.7Decision Making: The if Statement and Comparison Operators 61
2.8Objects and Dynamic Typing 66
2.9Intro to Data Science: Basic Descriptive Statistics 68
2.10Wrap-Up 70
3Control Statements and Program Development 73
3.1Introduction 74
3.2Algorithms 74
3.3Pseudocode 75
3.4Control Statements 75
3.5if Statement 78
3.6if…else and if…elif…else Statements 80
3.7while Statement 85
3.8for Statement 86
3.8.1Iterables, Lists and Iterators 88
3.8.2Built-In range Function 88
3.9Augmented Assignments 89
3.10Program Development: Sequence-Controlled Repetition 90
3.10.1Requirements Statement 90
3.10.2Pseudocode for the Algorithm 90
3.10.3Coding the Algorithm in Python 91
3.10.4Introduction to Formatted Strings 92
3.11Program Development: Sentinel-Controlled Repetition 93
3.12Program Development: Nested Control Statements 97
3.13Built-In Function range: A Deeper Look 101
3.14Using Type Decimal for Monetary Amounts 102
3.15break and continue Statements 105
3.16Boolean Operators and, or and not 106
3.17Intro to Data Science: Measures of Central Tendency—Mean, Median and Mode109
3.18Wrap-Up 111
4Functions 119
4.1Introduction 120
4.2Defining Functions 120
4.3Functions with Multiple Parameters 123
4.4Random-Number Generation 125
4.5Case Study: A Game of Chance 128
4.6Python Standard Library 131
4.7math Module Functions 132
4.8Using IPython Tab Completion for Discovery 133
4.9Default Parameter Values 135
4.10Keyword Arguments 136
4.11Arbitrary Argument Lists 136
4.12Methods: Functions That Belong to Objects 138
4.13Scope Rules 138
4.14import: A Deeper Look 140
4.15Passing Arguments to Functions: A Deeper Look 142
4.16Function-Call Stack 145
4.17Functional-Style Programming 146
4.18Intro to Data Science: Measures of Dispersion 148
4.19Wrap-Up 150
5Sequences: Lists and Tuples 155
5.1Introduction 156
5.2Lists 156
5.3Tuples 161
5.4Unpacking Sequences 163
5.5Sequence Slicing 166
5.6del Statement 169
5.7Passing Lists to Functions 171
5.8Sorting Lists 172
5.9Searching Sequences 174
5.10Other List Methods 176
5.11Simulating Stacks with Lists 178
5.12List Comprehensions 179
5.13Generator Expressions 181
5.14Filter, Map and Reduce 182
5.15Other Sequence Processing Functions 185
5.16Two-Dimensional Lists 187
5.17Intro to Data Science: Simulation and Static Visualizations 191
5.17.1Sample Graphs for 600, 60,000 and 6,000,000 Die Rolls 191
5.17.2Visualizing Die-Roll Frequencies and Percentages 193
5.18Wrap-Up 199
6Dictionaries and Sets 209
6.1Introduction 210
6.2Dictionaries 210
6.2.1Creating a Dictionary 210
6.2.2Iterating through a Dictionary 212
6.2.3Basic Dictionary Operations 212
6.2.4Dictionary Methods keys and values 214
6.2.5Dictionary Comparisons 216
6.2.6Example: Dictionary of Student Grades 217
6.2.7Example: Word Counts 218
6.2.8Dictionary Method update 220
6.2.9Dictionary Comprehensions 220
6.3Sets 221
6.3.1Comparing Sets 223
6.3.2Mathematical Set Operations 225
6.3.3Mutable Set Operators and Methods 226
6.3.4Set Comprehensions 228
6.4Intro to Data Science: Dynamic Visualizations 228
6.4.1How Dynamic Visualization Works 228
6.4.2Implementing a Dynamic Visualization 231
6.5Wrap-Up 234
7Array-Oriented Programming with NumPy 239
7.1Introduction 240
7.2Creating arrays from Existing Data 241
7.3array Attributes 242
7.4Filling arrays with Specific Values 244
7.5Creating arrays from Ranges 244
7.6List vs. array Performance: Introducing %timeit 246
7.7array Operators 248
7.8NumPy Calculation Methods 250
7.9Universal Functions 252
7.10Indexing and Slicing 254
7.11Views: Shallow Copies 256
7.12Deep Copies 258
7.13Reshaping and Transposing 259
7.14Intro to Data Science: pandas Series and DataFrames 262
7.14.1pandas Series 262
7.14.2DataFrames 267
7.15Wrap-Up 275
8Strings: A Deeper Look 283
8.1Introduction 284
8.2Formatting Strings 285
8.2.1Presentation Types 285
8.2.2Field Widths and Alignment 286
8.2.3Numeric Formatting 287
8.2.4String’s format Method 288
8.3Concatenating and Repeating Strings 289
8.4Stripping Whitespace from Strings 290
8.5Changing Character Case 291
8.6Comparison Operators for Strings 292
8.7Searching for Substrings 292
8.8Replacing Substrings 294
8.9Splitting and Joining Strings 294
8.10Characters and Character-Testing Methods 297
8.11Raw Strings 298
8.12Introduction to Regular Expressions 299
8.12.1re Module and Function fullmatch 300
8.12.2Replacing Substrings and Splitting Strings 303
8.12.3Other Search Functions; Accessing Matches 304
8.13Intro to Data Science: Pandas, Regular Expressions and Data Munging 307
8.14Wrap-Up 312
9Files and Exceptions 319
9.1Introduction 320
9.2Files 321
9.3Text-File Processing 321
9.3.1Writing to a Text File: Introducing the with Statement 322
9.3.2Reading Data from a Text File 323
9.4Updating Text Files 325
9.5Serialization with JSON 327
9.6Focus on Security: pickle Serialization and Deserialization 330
9.7Additional Notes Regarding Files 330
9.8Handling Exceptions 331
9.8.1Division by Zero and Invalid Input 332
9.8.2try Statements 332
9.8.3Catching Multiple Exceptions in One except Clause 335
9.8.4What Exceptions Does a Function or Method Raise? 336
9.8.5What Code Should Be Placed in a try Suite? 336
9.9finally Clause 336
9.10Explicitly Raising an Exception 339
9.11(Optional) Stack Unwinding and Tracebacks 339
9.12Intro to Data Science: Working with CSV Files 342
9.12.1Python Standard Library Module csv 342
9.12.2Reading CSV Files into Pandas DataFrames 344
9.12.3Reading the Titanic Disaster Dataset 346
9.12.4Simple Data Analysis with the Titanic Disaster Dataset 347
9.12.5Passenger Age Histogram 348
9.13Wrap-Up 349
10Object-Oriented Programming 355
10.1Introduction 356
10.2Custom Class Account 358
10.2.1Test-Driving Class Account 358
10.2.2Account Class Definition 360
10.2.3Composition: Object References as Members of Classes 361
10.3Controlling Access to Attributes 363
10.4Properties for Data Access 364
10.4.1Test-Driving Class Time 364
10.4.2Class Time Definition 366
10.4.3Class Time Definition Design Notes 370
10.5Simulating “Private” Attributes 371
10.6Case Study: Card Shuffling and Dealing Simulation 373
10.6.1Test-Driving Classes Card and DeckOfCards 373
10.6.2Class Card—Introducing Class Attributes 375
10.6.3Class DeckOfCards 377
10.6.4Displaying Card Images with Matplotlib 378
10.7Inheritance: Base Classes and Subclasses 382
10.8Building an Inheritance Hierarchy; Introducing Polymorphism 384
10.8.1Base Class CommissionEmployee 384
10.8.2Subclass SalariedCommissionEmployee 387
10.8.3Processing CommissionEmployees and SalariedCommissionEmployees Polymorphically 391
10.8.4A Note About Object-Based and Object-Oriented Programming 391
10.9Duck Typing and Polymorphism 392
10.10Operator Overloading 393
10.10.1Test-Driving Class Complex 394
10.10.2Class Complex Definition 395
10.11Exception Class Hierarchy and Custom Exceptions 397
10.12Named Tuples 399
10.13A Brief Intro to Python 3.7’s New Data Classes 400
10.13.1Creating a Card Data Class 401
10.13.2Using the Card Data Class 403
10.13.3Data Class Advantages over Named Tuples 405
10.13.4Data Class Advantages over Traditional Classes 406
10.14Unit Testing with Docstrings and doctest 406
10.15Namespaces and Scopes 411
10.16Intro to Data Science: Time Series and Simple Linear Regression 414
10.17Wrap-Up 423
11Computer Science Thinking: Recursion, Searching, Sorting and Big O 431
11.1Introduction 432
11.2Factorials 433
11.3Recursive Factorial Example 433
11.4Recursive Fibonacci Series Example 436
11.5Recursion vs. Iteration 439
11.6Searching and Sorting 440
11.7Linear Search 440
11.8Efficiency of Algorithms: Big O 442
11.9Binary Search 444
11.9.1Binary Search Implementation 445
11.9.2Big O of the Binary Search 447
11.10Sorting Algorithms 448
11.11Selection Sort 448
11.11.1Selection Sort Implementation 449
11.11.2Utility Function print_pass 450
11.11.3Big O of the Selection Sort 451
11.12Insertion Sort 451
11.12.1Insertion Sort Implementation 452
11.12.2Big O of the Insertion Sort 453
11.13Merge Sort 454
11.13.1Merge Sort Implementation 454
11.13.2Big O of the Merge Sort 459
11.14Big O Summary for This Chapter’s Searching and Sorting Algorithms 459
11.15Visualizing Algorithms 460
11.15.1Generator Functions 462
11.15.2Implementing the Selection Sort Animation 463
11.16Wrap-Up 468
12Natural Language Processing(NLP) 477
12.1Introduction 478
12.2TextBlob 479
12.2.1Create a TextBlob 481
12.2.2Tokenizing Text into Sentences and Words 482
12.2.3Parts-of-Speech Tagging 482
12.2.4Extracting Noun Phrases 483
12.2.5Sentiment Analysis with TextBlob’s Default Sentiment Analyzer 484
12.2.6Sentiment Analysis with the NaiveBayesAnalyzer 486
12.2.7Language Detection and Translation 487
12.2.8Inflection: Pluralization and Singularization 489
12.2.9Spell Checking and Correction 489
12.2.10Normalization: Stemming and Lemmatization 490
12.2.11Word Frequencies 491
12.2.12Getting Definitions, Synonyms and Antonyms from WordNet 492
12.2.13Deleting Stop Words 494
12.2.14n-grams 496
12.3Visualizing Word Frequencies with Bar Charts and Word Clouds 497
12.3.1Visualizing Word Frequencies with Pandas 497
12.3.2Visualizing Word Frequencies with Word Clouds 500
12.4Readability Assessment with Textatistic 503
12.5Named Entity Recognition with spaCy 505
12.6Similarity Detection with spaCy 507
12.7Other NLP Libraries and Tools 509
12.8Machine Learning and Deep Learning Natural Language Applications 509
12.9Natural Language Datasets 510
12.10Wrap-Up 510
13Data Mining Twitter 515
13.1Introduction 516
13.2Overview of the Twitter APIs 518
13.3Creating a Twitter Account 519
13.4Getting Twitter Credentials—Creating an App 520
13.5What’s in a Tweet? 521
13.6Tweepy 525
13.7Authenticating with Twitter Via Tweepy 525
13.8Getting Information About a Twitter Account 527
13.9Introduction to Tweepy Cursors: Getting an Account’s Followers and Friends 529
13.9.1Determining an Account’s Followers 529
13.9.2Determining Whom an Account Follows 532
13.9.3Getting a User’s Recent Tweets 532
13.10Searching Recent Tweets 534
13.11Spotting Trends: Twitter Trends API 536
13.11.1Places with Trending Topics 536
13.11.2Getting a List of Trending Topics 537
13.11.3Create a Word Cloud from Trending Topics 539
13.12Cleaning/Preprocessing Tweets for Analysis 541
13.13Twitter Streaming API 542
13.13.1Creating a Subclass of StreamListener 543
13.13.2Initiating Stream Processing 545
13.14Tweet Sentiment Analysis 547
13.15Geocoding and Mapping 551
13.15.1Getting and Mapping the Tweets 552
13.15.2Utility Functions in tweetutilities.py 556
13.15.3Class LocationListener 558
13.16Ways to Store Tweets 559
13.17Twitter and Time Series 560
13.18Wrap-Up 560
14IBM Watson and Cognitive Computing 565
14.1Introduction: IBM Watson and Cognitive Computing 566
14.2IBM Cloud Account and Cloud Console 568
14.3Watson Services 568
14.4Additional Services and Tools 572
14.5Watson Developer Cloud Python SDK 573
14.6Case Study: Traveler’s Companion Translation App 57
414.6.1Before You Run the App 575
14.6.2Test-Driving the App 576
14.6.3SimpleLanguageTranslator.py Script Walkthrough 577
14.7Watson Resources 587
14.8Wrap-Up 589
15Machine Learning: Classification, Regression and Clustering 593
15.1Introduction to Machine Learning 594
15.1.1Scikit-Learn 595
15.1.2Types of Machine Learning 596
15.1.3Datasets Bundled with Scikit-Learn 598
15.1.4Steps in a Typical Data Science Study 599
15.2Case Study: Classification with k-Nearest Neighbors and the Digits Dataset, Part 1 599
15.2.1k-Nearest Neighbors Algorithm 601
15.2.2Loading the Dataset 602
15.2.3Visualizing the Data 606
15.2.4Splitting the Data for Training and Testing 608
15.2.5Creating the Model 609
15.2.6Training the Model 610
15.2.7Predicting Digit Classes 610
15.3Case Study: Classification with k-Nearest Neighbors and the Digits Dataset, Part 2 612
15.3.1Metrics for Model Accuracy 612
15.3.2K-Fold Cross-Validation 616
15.3.3Running Multiple Models to Find the Best One 617
15.3.4Hyperparameter Tuning 619
15.4Case Study: Time Series and Simple Linear Regression 620
15.5Case Study: Multiple Linear Regression with the California Housing Dataset 625
15.5.1Loading the Dataset 626
15.5.2Exploring the Data with Pandas 628
15.5.3Visualizing the Features 630
15.5.4Splitting the Data for Training and Testing 634
15.5.5Training the Model 634
15.5.6Testing the Model 635
15.5.7Visualizing the Expected vs. Predicted Prices 636
15.5.8Regression Model Metrics 637
15.5.9Choosing the Best Model 638
15.6 Case Study: Unsupervised Machine Learning, Part 1—Dimensionality Reduction639
15.7 Case Study: Unsupervised Machine Learning, Part 2—k-Means Clustering642
15.7.1Loading the Iris Dataset 644
15.7.2Exploring the Iris Dataset: Descriptive Statistics with Pandas 646
15.7.3Visualizing the Dataset with a Seaborn pairplot 647
15.7.4Using a KMeans Estimator 650
15.7.5Dimensionality Reduction with Principal Component Analysis 652
15.7.6Choosing the Best Clustering Estimator 655
15.8Wrap-Up 656
16Deep Learning 665
16.1Introduction 666
16.1.1Deep Learning Applications 668
16.1.2Deep Learning Demos 669
16.1.3Keras Resources 669
16.2Keras Built-In Datasets 669
16.3Custom Anaconda Environments 670
16.4Neural Networks 672
16.5Tensors 674
16.6 Convolutional Neural Networks for Vision; Multi-Classification with the MNIST Dataset676
16.6.1Loading the MNIST Dataset 677
16.6.2Data Exploration 678
16.6.3Data Preparation 680
16.6.4Creating the Neural Network 682
16.6.5Training and Evaluating the Model 691
16.6.6Saving and Loading a Model 696
16.7Visualizing Neural Network Training with TensorBoard 697
16.8ConvnetJS: Browser-Based Deep-Learning Training and Visualization 700
16.9Recurrent Neural Networks for Sequences; Sentiment Analysis with the IMDb Dataset701
16.9.1Loading the IMDb Movie Reviews Dataset 702
16.9.2Data Exploration 703
16.9.3Data Preparation 705
16.9.4Creating the Neural Network 706
16.9.5Training and Evaluating the Model 709
16.10Tuning Deep Learning Models 710
16.11Convnet Models Pretrained on ImageNet 711
16.12Reinforcement Learning 712
16.12.1Deep Q-Learning 713
16.12.2OpenAI Gym 713
16.13Wrap-Up 714
17Big Data: Hadoop, Spark, NoSQL and IoT 723
17.1Introduction 724
17.2Relational Databases and Structured Query Language (SQL) 728
17.2.1A books Database 730
17.2.2SELECT Queries 734
17.2.3WHERE Clause 734
17.2.4ORDER BY Clause 736
17.2.5Merging Data from Multiple Tables: INNER JOIN 737
17.2.6INSERT INTO Statement 738
17.2.7UPDATE Statement 739
17.2.8DELETE FROM Statement 739
17.3NoSQL and NewSQL Big-Data Databases: A Brief Tour 741
17.3.1NoSQL Key–Value Databases 741
17.3.2NoSQL Document Databases 742
17.3.3NoSQL Columnar Databases 742
17.3.4NoSQL Graph Databases 743
17.3.5NewSQL Databases 743
17.4Case Study: A MongoDB JSON Document Database 744
17.4.1Creating the MongoDB Atlas Cluster 745
17.4.2Streaming Tweets into MongoDB 746
17.5Hadoop 75517.5.1Hadoop Overview 755
17.5.2Summarizing Word Lengths in Romeo and Juliet via MapReduce 758
17.5.3Creating an Apache Hadoop Cluster in Microsoft Azure HDInsight 758
17.5.4Hadoop Streaming 760
17.5.5Implementing the Mapper 760
17.5.6Implementing the Reducer 761
17.5.7Preparing to Run the MapReduce Example 762
17.5.8Running the MapReduce Job 763
17.6Spark 766
17.6.1Spark Overview 766
17.6.2Docker and the Jupyter Docker Stacks 767
17.6.3Word Count with Spark 770
17.6.4Spark Word Count on Microsoft Azure 773
17.7 Spark Streaming: Counting Twitter Hashtags Using the pyspark-notebook Docker Stack777
17.7.1Streaming Tweets to a Socket 777
17.7.2Summarizing Tweet Hashtags; Introducing Spark SQL 780
17.8Internet of Things and Dashboards 786
17.8.1Publish and Subscribe 788
17.8.2Visualizing a PubNub Sample Live Stream with a Freeboard Dashboard 788
17.8.3Simulating an Internet-Connected Thermostat in Python 790
17.8.4Creating the Dashboard with Freeboard.io 792
17.8.5Creating a Python PubNub Subscriber 794
17.9Wrap-Up 798

教学资源推荐
作者: [美]杰瑞米·瓦特(Jeremy Watt),[美]雷萨·博哈尼(Reza Borhani),[美]阿格洛斯·K. 卡萨格罗斯(Aggelos K. Katsaggelos) 著
作者: [意] 詹卡洛·福尔蒂诺(Giancarlo Fortino)拉法埃莱·格雷维纳(Raffaele Gravina)斯特凡诺·加尔扎拉诺(Stefano Galzarano) 著
作者: [美]黄铠(Kai Hwang)著
作者: [法]奥利弗·布瓦西耶(Olivier Boissier) [巴西]拉斐尔·H. 博蒂尼(Rafael H. Bordini) [巴西]乔米·F. 胡布纳(Jomi F. Hübner) [意]亚历桑德罗·里奇(Alessandro Ricci) 著
参考读物推荐
作者: 刘驰 王占健 戴子彭 等编著
作者: 刘树春 贺盼 马建奇 王佳军 等著
作者: 刘铁岩 陈薇 王太峰 高飞 著