我的数据科学教学生涯始于2013年第一次参加SoftwareCarpentry研讨班。此后,就一直在从事这方面的教学工作。2019年,我有幸成为RStudio(现为PBC Posit)教育集团的一名实习生。那时,数据科学教育方兴未艾。实习结束之后,我想将教学与医学的结合作为我的博士学位论文选题。幸运的是,我认识学校的一位图书管理员Andi Ogier,她把我介绍给了Anne M.Brown,Anne也对健康科学中的数据科学教学很感兴趣。之后的故事大家都知道了。Anne成为了我的博士生导师,我和指导委员会的其他成员,包括Dave Higdon、Alex Hanlon和Nikki Lewis,一起研究医学和生物医学领域中的数据科学教育。本书第1版为我的学位论文研讨班要讲授哪些数据科学的相关内容奠定了基础。本书第2版纳入了我在学习和研究教育和教学法时学到的许多内容。
简而言之,一定要交个图书管理员做朋友,他的工作与数据之间联系紧密。
2013年,我甚至对数据科学这个词闻所未闻。当时我还在攻读流行病学的MPH学位,对于本科专业背景为心理学和神经科学的我来说,t检验、方差分析以及线性回归之外的各种统计学方法深深吸引了我。也正是在2013年秋天,我第一次参加了SoftwareCarpentry研讨班,并担任了MPH项目的定量方法(Quantitative Methods)课程(该课程是第一学期流行病学和生物统计学的一门综合课)的助教,并第一次开始授课。自此,我便一直在从事数据科学领域的教学工作。
当年,我学习的第一门数据科学导论课程由Rachel Schutt博士、Kayur Patel博士和Jared Lander三位老师讲授,回顾多年来走过的路程,感触良多。三位老师打开了我的眼界。对我来说,之前那些貌似不可思议的事情都变得稀松平常,没有做不到的,只有想不到的(尽管能做到的不一定是最好的)。数据科学的技术细节编码方面是由Jared用R语言讲授的。
当年,我一直想学R语言,Python和R语言之争从未动摇过我的决心。一方面,我认为Python只是一种编程语言; 另一方面,我并不知道Python有大量的分析工具(从那时起我已经学会了很多工具,并取得了长足的进步)。在了解了SciPy堆栈和Pandas后,我认为它们就像桥梁一样连通了我学到的Python知识,以及我在流行病学研究和数据科学的学习中获得的知识。当精通R语言后,我发现其与Python有很多相似之处。我也意识到很多数据清理任务(以及常规的编程任务)都涉及思考如何得到所需的东西,剩下的基本都是语法问题而已。在进行数据分析时,最重要的是设计好分析的步骤,不要被编程细节所困扰。我用过很多种编程语言,从来不纠结于哪种语言更好。话虽如此,本书面向的是Python数据分析领域的新手。
在过去的几年中,我认识了很多人,参加了很多活动,也学到了很多的技能,本书就是对这些年经验的总结。其中,我学到的比较重要的一件事情(除了先要搞清楚问题到底是什么,以便用谷歌来搜索相关的Stack Overflow(IT问答网站,面向编程人员群体)页面之外)是: 阅读文档非常必要。作为一个参与过协作课程并编写过Python库和R软件包的人,我可以负责任地说,编写文档确实需要花费大量的时间和精力,这就是为什么整本书中不断引用相关文档页面的原因。有些函数有非常多的参数,应用的场景也不相同,一一介绍是不现实的。如果本书过于关注这些细节,那么书名要改成Loading Data Into Python了。当然,随着处理数据的增多、对各种数据结构越来越熟悉,你最终将会具备一定的预测能力。即使对之前从未见过的代码,也可以合理地推断出其执行结果。希望本书能为读者提供一个坚实的基础,助其自己进行探索,从而成为一个自学成才的学习者。
在撰写本书的过程中,我遇到了很多人,也从他们身上学到了很多东西,其中很多都是关于最佳实践的,比如编写向量化语句以替代循环语句、测试代码,以及组织项目目录结构等。从实际的教学过程中我也学到了很多关于教学的知识,以教促学确实是学习新知识的最佳方法。在过去的几年里,我学到的很多东西都是在我试图弄清楚如何教别人时获得的。一旦掌握了基础知识,学习新内容就相对容易了。教与学的过程多次重复后,会惊讶于自己学会了很多,比如学会了用于谷歌搜索的很多术语,并能解读Stack Overflow页面的解答。很多高手也在搜索他人提出的问题。无论这是你学习的第几种编程语言,希望本书都能为你提供一个坚实的基础,为你搭建一座通往其他数据分析语言的桥梁。
本书结构
本书共分为五部分,还包括一系列的附录。
第一部分
该部分基于真实的数据集介绍Pandas基础知识。
第1章首先介绍如何使用Pandas加载数据集,并查看数据的行和列,还大致讲解Python和Pandas的语法,最后给出若干具有启发性的示例,展示Pandas的用途。
第2章深入探讨Pandas的DataFrame和Series对象,还介绍布尔子集、删除值以及导入和导出数据的不同方式。
第3章主要介绍使用Matplotlib、Seaborn和Pandas的绘图方法以及如何创建探索性数据分析的绘图。
第4章讨论Hadley Wickham的论文《整洁数据》(Tidy Data),该论文涉及常见的数据重塑和清理问题。
第5章侧重于介绍对数据应用函数的内容,这是一项重要的技能,涵盖了许多编程主题。当需要扩展数据操作的规模时,了解.apply()的工作原理将有助于编写并行和分布式代码。
第二部分
该部分重点介绍加载数据后如何进一步处理数据。
第6章侧重于数据集的合并,即要么将它们连接在一起,要么合并不同的数据。
第7章介绍规范化数据以更稳健地存储数据。
第8章介绍.groupby()操作(即拆分应用组合)。这些强大的概念,如.apply(),通常是扩展数据所必需的,也是高效聚合、转换或过滤数据的好方法。
第三部分
该部分涵盖存储在列中的数据类型。
第9章介绍数据缺失会引发的问题、如何创建数据以填充缺失数据,以及如何处理缺失数据,特别是当对这些数据进行计算时可能会出现的问题。
第10章介绍数据类型,以及如何在DataFrame列中转换类型。
第11章介绍字符串操作,这是数据清理任务中经常遇到的问题,因为数据通常被编码为文本。
第12章探讨Pandas强大的日期和时间功能。
第四部分
在数据全部清洗完毕并准备就绪后,下一步就是拟合模型。模型不仅可用于预测、聚类和推断,还可用于探索性的目的。该部分的目标不是讲授统计学(这方面的书已经很多了),而是想展示这些模型的拟合方法,以及它们是如何与Pandas交互的。该部分内容对于使用其他编程语言进行模型拟合也颇具借鉴意义。
第13章的线性模型是一种较简单的拟合模型。本章介绍如何使用statsmodels库和Scikitlearn库来拟合这些模型。
第14章的广义线性模型,顾名思义,是更广义上的一种线性模型。通过该模型我们可以用不同的响应变量来拟合模型,例如二元数据或计数数据。
第15章介绍生存模型,当出现数据删失时需要用到它。
第16章,在拟合好核心模型之后需要进行模型诊断,对多个模型进行比较,并选出最佳模型。
第17章,当拟合的模型过于复杂或出现过拟合时,就要用到正则化技术。
第18章,当不知道数据中隐含的真实答案时可以使用聚类技术,但需要一种方法将相似的数据点聚类或进行分组。
第五部分
本书最后部分主要介绍Python的生态系统,并提供了一些额外的参考资料。
第19章简单介绍Python的计算堆栈,并开启了代码性能和扩展的学习之路。
第20章提供一些额外的链接和参考资料。
附录
可以将附录视为Python编程的入门教程。虽然它们并不是Python的完整介绍,但各个附录确实是对本书某些主题的有益补充。
附录A为介绍性章节,提供了概念图,以帮助分解概念并将其相互关联。
附录B~附录J涵盖与运行Python代码相关的所有任务,从安装Python到使用命令行执行脚本,再到组织代码,还包括创建Python环境和安装库。
附录K~附录Y涵盖与Python和Pandas相关的编程概念,是本书主要的补充参考。
附录Z复制了R中的一些建模代码,作为比较类似结果的参考。
如何阅读本书
无论是Python新手还是经验丰富的Python程序员,都建议从头至尾阅读整本书。拟将本书用作教材的读者会发现,本书的章节安排很适合研讨班或课堂教学。
对于初学者
对于初学者来说,建议先浏览附录A~附录J,因为这些附录中讲解了如何安装Python并使其正常工作。完成这些步骤后,读者就可以学习本书的主要内容了。前几章在必要时均引用了相关附录,并在开头给出了概念图和学习目标,有助于读者了解该章要介绍的主要内容,同时指出了需提前阅读的相关附录。
对于经验丰富的Python程序员
对于经验丰富的Python程序员来说,前两章的内容足以入门并掌握Pandas的语法,可以将本书其余的部分作为参考。前几章开头部分的学习目标指出了本章涵盖的主题。第一部分中关于整洁数据的章节和第三部分的章节对数据操作特别有帮助。
对于培训讲师
对于培训讲师来说,若将本书用作教学参考可按书中顺序来讲授每一章。每章的教学时长约为45~60分钟。本书在结构安排上尽量使各章不引用后续章节的内容,从而最大限度地减少学生的学担但可以根据实际需要灵活调整章节的顺序。
附录A中的概念图和前几章中列出的学习目标有助于了解概念之间的关系。
设置
每个人的计算机设置都会有所不同,因此,要想获得有关设置环境的最新说明可以访问本书在GitHub的页面,或者参考附录B以获取有关如何在计算机上安装Python的信息。
获取数据
获取本书所有数据和代码的最简单方法是扫描下方二维码。有关如何下载本书数据的最新说明可以在本书的存储库中找到,存储库及有关如何获得本书的更详细说明参见附录B.3。
安装Python
附录G和附录H分别给出了环境和安装软件包,可以从中找到如何设置Python的URL(Uniform Resource locator,URL,统一资源定位系统)和命令,以便编写代码。同样,本书的存储库中始终包含最新的说明。
全书代码