前言

本书面向的读者是那些经常使用电子表格软件进行数据处理,但从未写过一行代码的人。前几章会教你设置Python运行环境,告诉你计算机是如何看待数据并对其进行简单处理的。你很快就能掌握在电子表格(包括CSV文件)和数据库中处理数据的方法。

刚开始,你可能会觉得这样做是一种退步,如果你能熟练使用Excel,这种感受会更加强烈。以前你只需复制粘贴就能完成的工作,现在却要煞费苦心地告诉Python如何在列的每个单元格之间循环,这效率太低了,想想就令人沮丧(特别是当你几次三番地回头去找某一处输入错误的时候)。但是当你逐渐掌握了Python之后,就会不断地发现它的真正价值所在,而其中一个极好的例子就是它可以自动完成你现在不断重复的工作。

本书的写作目的是让你全面地掌握Python,然后充满信心地写出按照你的期望运行的有效代码。一开始输入一些代码或许是个好主意,这样你就会熟悉像制表符、闭括号和引用之类的技术细节。但是,本书中的所有代码在网上都能找到(https://github.com/cbrownley/foundations-for-analytics-with-python)。你在做自己的工作时,完全可以通过复制粘贴来重用这些代码。没关系!适时地进行复制和粘贴也是高效编程的一部分。在阅读本书的同时完成示例程序,会使你更好地理解示例代码的原理。

祝你在成为程序员的道路上好运连连!

为什么要读这本书,为什么要学习这些技能

如果你经常做数据处理工作,就一定会为学习编程而兴奋。学习编程的一个好处是,你可以完成那些靠手工难以完成或者根本不可能完成的数据处理与分析工作。可能你已经遇到了这样的问题:需要处理的文件包含太多数据,以至于打开文件都非常困难或者根本不可行。即使打开了这些文件,手动处理也会花费大量时间,并且极易出错,因为你对数据进行的任何修改都需要很长时间才能更新,而且面对如此多的数据,进行修改时很容易漏掉某一行或某一列。你可能还遇到了其他情况,如需要处理大量的文件,以至于手动处理根本不可能完成。有些时候,你需要的数据来自于几十、几百甚至上千个文件。当所需的文件数量不断增加时,手动处理会变得越来越困难。在以上所有这些情况之下,写一个Python脚本来处理文件就可以解决你的问题,因为Python脚本可以快速有效地处理大型文件和大批量的文件。

学习编程的另一个好处是,你可以自动地重复数据处理和数据分析过程。在很多情况下,我们针对数据做的都是耗时的重复性工作。例如,一般的数据管理过程是,先从客户或供应商处获取数据,然后提取并保留所需的数据,之后还可能会进行一些数据转换或重新格式化,最后将数据保存到数据库或数据仓库中[这就是数据科学家熟知的数据ETL(extract、 transform、load,即抽取、转换和加载)过程]。类似地,典型的数据分析过程包括数据获取、数据准备、数据分析和结果展示。在数据管理和数据分析过程中,一旦建立了流程,就可以编写Python代码来进行各种操作。通过创建Python脚本来执行操作,你可以将耗时的重复性工作简化为执行一个脚本,并用节省下来的时间去做其他更有意义的工作。

最重要的是,在进行数据处理和数据分析时,使用Python脚本代替手动操作可以减小出错的可能性。手动进行数据处理时,非常可能出现复制粘贴错误或输入错误。导致出错的原因有很多:你可能因过于匆忙而忽略了错误,或者有些事导致你分心了,或者仅是因为你太累了。而且,当你处理大型文件或大批量的文件,或者进行重复性操作时,出错的可能性会更大。相反,Python脚本从来不会分心或疲劳。一旦你调试好脚本,确认它可以按照你的期望处理数据,它就会一如既往、不知疲倦地工作下去。

最后,学习编程非常有趣,而且能提高自身能力。只要熟悉了基本的语法,你就会非常乐于找到所需的语言功能,然后将它们组合在一起,以完成整体的数据分析目标。至于代码和语法,网上有许多示例可以教会你如何使用专门的功能来完成特定的任务。不过,这些示例虽能提供帮助,但是你需要通过自己的创造力和解决问题的能力来弄清楚如何修改这些代码,以使它们满足你的实际需要。找到合适的代码,并想办法让它们为你工作,这是个非常有意思的过程。此外,学习编程能极大地提高自身的能力。举个例子,考虑一下我前面提到过的情况,即要处理大型文件和大批量文件。如果不会编程,那么你要么需要花费大量时间,要么束手无策。一旦学会了编程,你就可以通过Python脚本轻松愉快地解决所有问题。有些数据处理和数据分析任务以前是非常困难或根本不可能完成的,但是现在你都可以轻松搞定,这会使你充满信心,能量爆棚,从而积极主动地寻找更多的机会,使用Python来迎接数据处理方面的挑战。

目标读者

本书的目标读者是那些经常从事数据处理工作,又具有极少或根本没有编程经验的人。书中的示例覆盖了常用的数据源和数据格式,包括文本文件、逗号分隔值(CSV)文件、Excel文件和数据库。在某些情况下,由于文件中数据过多,或由于文件数量太多,造成文件难以打开或不能通过手动处理。在其他一些情况下,从文件中抽取和使用数据的过程非常耗时并且容易出错。在这些情况下,如果你不会编程,就会将大量时间浪费在数据搜索、打开与关闭文件,以及复制和粘贴数据上面。

鉴于你可能从未运行过脚本,本书从最基本的操作开始,介绍如何在文本文件中编写代码以创建Python脚本。然后,我们会学习如何通过命令行窗口(Windows用户)或终端窗口(macOS用户)来运行Python脚本。(如果你做过一点编程,可以跳过第1章,直接学习第2章中的数据分析内容。)

本书的编写方式特别适合编程新手。书中提供的示例包含了完成某项任务所需的全部Python代码,而不是仅提供一些代码片段,让你自己将它们组合起来以完成任务。你以后可能会经常使用本书作为参考,而且会发现书中的代码确实有帮助。最后,正所谓“一图胜千言”,书中使用了大量屏幕截图来展示输入文件、Python脚本、命令行窗口、终端窗口和输出文件,这样你就可以真实地看到如何创建输入、代码、命令和输出了。

我会详细讲解代码的原理,也会推荐一些工具供你使用。这种方法可以帮助你打下坚实的基础,以理解在程序背后到底发生了什么。有时候,你需要在Google上搜索问题的解决方案并找到一些有用的代码。做完了书中的练习之后,你可以更好地理解这些代码的工作原理,也就是说,你不但知道如何根据具体情况使用它们,而且知道在出现问题时如何进行修复。因为你在每一章中都会编写一些代码,所以你会发现可以将本书作为参考书,或指导手册,然后在里面找到完成具体任务的方法。但是请记住,这仅是一本“学习如何编程”的书,你还需要不断提高和扩展编程技能,以便综合运用它们来完成各种任务。

为什么使用Windows

本书中的大部分示例都是演示在Microsoft Windows系统下如何创建和运行Python脚本。将重点放在Windows系统上的原因很简单:我想让本书帮助尽可能多的人。根据估计,大多数台式机和笔记本电脑(特别是用于商业分析的计算机)运行的是Windows操作系统。例如,根据Net Applications的调查,截至2014年12月,Microsoft Windows占领了大约90%的台式机和笔记本电脑操作系统市场。因为我想让本书满足台式机用户和笔记本电脑用户的需求,而且这些电脑中多数都安装了Windows操作系统,所以本书将集中讲述如何在Windows系统下创建和运行Python脚本。

尽管本书将重点放在了Windows上,但在适当情况下,我也提供如何在macOS系统上创建和运行Python脚本的示例。不论在哪种机器上运行,Python中几乎所有功能的表现都是一样的。当因为操作系统不同而出现差别时,我会分别给出具体的说明。例如,第1章的第一个例子演示了如何在Microsoft Windows和macOS系统下创建和运行Python脚本。类似地,第2章和第3章的第一个例子也演示了如何在Windows和macOS系统下创建和运行Python脚本。此外,第8章涵盖了两种操作系统,介绍了如何在Windows中建立计划任务以及如何在macOS中建立定时作业。如果你是Mac用户,可以使用每章的第一个例子作为模板,来学习如何创建Python脚本,如何使其可以执行,以及如何运行脚本,然后重复这些步骤来创建和运行每章中其余的示例程序。

为什么使用Python

如果你的目的是学习一门编程语言来使数据处理和数据分析任务规模化和自动化,那么Python绝对是一个好的选择。Python的一个显著特点就是使用空白字符和缩进来表示行的结尾和代码分块,这与很多其他语言不同,其他语言使用特殊字符(比如分号和花括号)来达到同样的目的。Python的这个特点使你一眼就能看出程序的组织方式。

在其他语言中,特殊字符的使用对于编程新手来说是个困扰,原因至少有两个。第一,这使得学习曲线更长并且更加陡峭。当你学习编程时,实质上是在学习一门新的语言,你必须花时间学习这些特殊字符的用法,然后才能有效地使用这门语言。第二,特殊字符使代码难以阅读。这是因为在使用分号和花括号表示代码块的语言中,并不总是使用缩进来标明代码块。如果没有缩进,多个代码块看上去就是乱七八糟的。

Python使用空白字符和缩进来表示代码分块,而不使用分号和花括号,这样就避免了上述问题。当你阅读Python代码时,你的视线会集中在实际的代码行上,而不是代码块的分隔符上,因为代码周围只有空白字符。Python要求代码块必须缩进,这样你会很容易看出代码块在哪里结束,新的代码块又在哪里开始。而且,Python社区特别强调代码的可读性,因此已经形成了一种文化,就是一定要书写易于阅读和理解的代码。Python的这些特点使学习曲线更短并且更加平坦,与其他语言相比,使用Python进行数据处理可以更快也更容易上手。

Python适用于数据处理与分析的另一个显著特点,是其具有大量的标准模块、附加模块以及函数,可以非常方便地完成一般的数据处理与分析操作。内建库和标准库中的模块和函数是Python的标准配置,所以只要你下载并安装了Python,就可以立即使用这些内建的模块和函数。在Python标准库页面(https://docs.python.org/3/library)中,你可以找到所有内建模块和标准模块的介绍。Python附加模块需要单独下载并安装,然后才能使用它们提供的附加功能。你可以在Python程序包索引页面(https://pypi.python.org/pypi)详细查看很多附加模块的介绍。

标准库中的模块提供的功能包括读取各种类型的文件(如文本文件、CSV、JSON、HTML、XML等),处理数值、字符串和日期型数据,使用正则表达式进行模式匹配,解析CSV文件,计算基本的统计量,以及向各种类型的输出文件和磁盘写入数据。有用的附加模块太多,无法一一介绍。本书要讨论和使用的附加模块如下所示。

xlrd xlwt

功能:解析与读写Microsoft Excel工作簿。

mysqlclient/MySQL-python/MySQLdb

功能:连接MySQL数据库,在数据库表上运行查询。

pandas

功能:读取各种类型的文件;管理、筛选和转换数据;聚合数据并计算基本统计量;创建各种类型的统计图表。

statsmodels

功能:估计各种统计模型,包括线性回归模型、广义线性模型和分类模型。

scikit-learn

功能:估计机器学习统计模型,包括回归、分类和聚类,以及执行数据处理、维度归约和交叉验证。

如果你是编程新手,并且正在寻找一门可以使数据处理与分析任务自动化和规模化的编程语言,那么Python就是理想的选择。Python对于空白字符和缩进的强调使代码更易于阅读和理解,因而和其他语言相比,它的学习曲线没有那么陡峭。Python的内建库和附加库可以方便地完成许多一般的数据处理和分析操作,让你可以轻松地一站式完成数据处理与分析任务。

基础Python和pandas

pandas是Python的一个功能强大的附加模块,提供对数据进行读/写、组合、转换和管理的功能,同时还可以计算统计量并创建统计图表。在完成数据处理任务时,使用pandas提供的功能可以大大减轻你的编码工作量。这个模块深受数据分析师和其他Python使用者青睐,因为它的功能实用且强大,运行速度快,使用简单,能够减少完成任务所需的代码量。正因为pandas功能强大且深受欢迎,所以本书将向你介绍它。本书在第2章和第3章中提供pandas版的Python脚本,在第6章中介绍如何使用pandas创建统计图表,在第7章中演示如何通过pandas计算各种统计量。我建议你学习一下Wes McKinney的著作《利用Python进行数据分析》Wes McKinney是pandas模块最初的开发者,他的这本书是学习pandas、NumPy和IPython的绝好教材,如果你想扩展一下使用Python进行数据分析的知识,这些是你应该学习的附加模块。

同时,如果你是编程新手,我还建议你学习一下基本的编程技能。一旦具有了编程技能,你就可以扩展自己解决问题的能力。你可以将复杂的问题分解成几个较小的问题,分别解决,然后将它们组合起来解决更大的问题。你还可以培养出一种直觉,去决定使用哪种数据结构和算法来有效且高效地解决各种问题。此外,你还会遇到像pandas这样的附加模块无法解决或者无法以你需要的方式解决的问题。在这种情况下,如果你没有基本的编程技能,就会束手无策。相反,如果你具有了编程技能,就可以创建所需功能,从而独立解决问题。能够独立解决编程问题是非常令人振奋的,并能极大提升个人能力。

因为本书是面向编程新手的,所以我会将重点放在基础的、通用的编程技能上。比如,第1章介绍数据类型、数据容器、控制流、函数、if-else逻辑和文件读写等基本概念。此外,在第2章和第3章中,每种脚本都提供两个版本的实现方式:基础Python版和pandas版。在每个案例中,我会首先讨论基础Python版的实现,让你学会独立编码解决问题,然后再给出pandas版的实现。我希望你能够从基础Python版中学会基本的编程技能,这样在使用pandas版时,你就能够更加深刻地理解pandas简化了的概念和操作。

Anaconda Python

当开始使用Python时,有很多程序可以用来编写代码。例如,如果你从Python.org下载了Python,在安装完成之后,就会得到一个具有图形用户界面(GUI)的文本编辑器,它叫作Idle。另外,你可以下载IPython Notebook,在一种基于Web的交互式环境下编写代码。如果你在macOS系统下工作,或者在Windows系统上安装了Cygwin,那么就可以在终端窗口中使用Nano、Vim或Emacs等内置文本编辑器编写代码。如果你已经熟悉了上面的任意一种程序,那么就可以随意使用它来处理本书中的示例代码。

但是,这里我要介绍如何从Continuum Analytics下载并安装免费的Anaconda Python发行版,因为与其他版本相比,它对于编程新手来说具有很多优点,而且同样适合编程老手! Anaconda Python最主要的优点是,它会预先安装几百个最流行的Python附加模块,所以你无需一个一个地安装这些模块以及它们的依赖模块。举例来说,本书要使用的所有附加模块在Anaconda Python中都预先安装好了。

另一个优点是,它同时提供了一个名叫Spyder的集成开发环境(IDE)。Spyder具有非常方便实用的界面,供你编写、运行和调试代码,还可以安装程序包和启动IPython Notebook。另外,它还具有很多美妙的功能,比如在线文档链接、语法着色、键盘快捷方式和错误提示。

Anaconda Python还有一个优点是跨平台性——具有Linux、Mac和Windows 3个版本。所以,如果你在Windows系统下熟悉了它的用法,在转到Mac系统时,仍然可以使用同样熟悉的界面。

如果你已经熟悉了Python和所有可用的附加程序包,那么在使用Anaconda Python时需要注意一点,就是安装附加程序包时的语法有些差别。在Anaconda Python中,你需要使用conda install命令。举例来说,要安装附加程序包argparse,你应该输入conda intall argparse。这种语法与通常的pip install是不同的。(如果你从Python.org下载并安装了Python,那么安装argparse包应该使用python -m pip install argparse。)Anaconda Python也允许你使用pip install语法,所以实际上可以使用任何一种方式,但是当你学习如何安装附加程序包时,应该知道这一点微小的区别。

安装Anaconda Python(Windows或Mac)

要安装Anaconda Python,需遵循以下步骤。

(1)访问http://continuum.io/downloads(网站会自动检测出你的操作系统,即Windows或Mac)。

(2)选择Windows 64-bit Python 3.5 Graphical Installer(如果你使用Windows)或者Mac OS X 64-bit Python 3.5 Graphical Installer(如果你使用Mac)。

(3)双击已下载的.exe文件(Windows系统)或.pkg文件(Mac系统)。

(4)按照安装程序的指示操作。

文本编辑器

尽管本书中会使用Anaconda Python和Spyder,但是熟悉一下其他可用于编写Python代码的文本编辑器还是有意义的。例如,如果你不想使用Anaconda Python,可以简单地从Python.org下载安装Python,然后使用像Notepad(Windows系统)和TextEdit(macOS系统)这样的文本编辑器。要使用TextEdit编写Python脚本,你需要打开TextEdit,将TextEdit → Preferences下面的单选按钮从“Rich text”改为“Plain text”,这样新文件就会以普通文本方式打开。然后你就可以使用扩展名.py保存文件了。

使用文本编辑器编写代码的好处是,它已经安装在你的计算机上了,所以你不用担心如何下载和安装一个新的软件。大多数台式机和笔记本电脑在出厂时都带有文本编辑器,如果你不得不使用一台没有Spyder或终端窗口的计算机,那就使用其自带的任意文本编辑器快速开始工作吧。

尽管完全可以使用像Notepad和TextEdit这样的文本编辑器编写Python代码,效率也很高,但是你还可以下载其他免费的文本编辑器,因为它们提供了一些额外的功能,包括代码高亮显示、制表符长度调整,以及多行缩进与减少缩进。这些功能(特别是代码高亮显示和多行缩进与减少缩进)非常有用,尤其是在你学习如何编写和调试代码时。

下面是一个提供这些功能的免费文本编辑器的不完全列表:

Notepad++(http://notepad-plus-plus.org,Windows)

Sublime Text(http://www.sublimetext.com,Windows和Mac)

jEdit(http://www.jedit.org,Windows和Mac)

TextWrangler(http://www.barebones.com/products/textwrangler,Mac)

再说一遍,本书使用Anaconda Python和Spyder,但是你可以随意使用一种文本编辑器处理示例代码。如果你下载了某种文本编辑器,请在网上查一下可以用来进行多行缩进与减少缩进的按键组合。当开始试着调试代码块时,这会使你轻松许多。

下载本书资料

本书中的所有Python脚本、输入文件和输出文件都可以在这个网址找到:https://github.com/cbrownley/foundations-for-analytics-with-python

可以将整个文件夹下载到你的计算机上,不过点击文件名然后将脚本复制粘贴到你的文本编辑器中会更简单。(GitHub是进行代码分享与协作的一个网站,非常适合跟踪项目的不同版本并管理协作过程,但是它的学习曲线相当陡峭。当你准备开始分享自己的代码和提交对他人代码的改进时,可以参考一下Chad Thompson的教程Learning Githttp://shop.oreilly.com/product/110000769.do,Infinite Skills)。

各章内容简介

第1章 Python基础

这一章介绍如何创建和运行Python脚本。该章的重点在于Python的基本语法和元素,你需要了解它们,才能学习后面的章节。例如,讨论像数值和字符串这样的基本数据类型,以及如何对它们进行操作;介绍主要的数据容器(列表、元组和字典),以及使用它们存储和操作数据的方法;介绍如何处理日期型数据,因为商业分析中经常出现日期。另外,还会讨论一些编程概念,比如控制流、函数和异常,它们是在编码中体现业务逻辑以及优雅地进行错误处理的重要元素。最后将介绍如何使计算机读入一个和多个文本文件,并且写回到CSV格式的输出文件中。这些技术对于访问输入数据和保存特定的输出数据都是非常重要的,后续章节会更深入地讨论这些问题。

第2章 CSV文件

这一章介绍如何读写CSV文件。首先介绍在不使用Python内置的csv模块情况下“手动”解析CSV格式的输入文件的一个例子。随后说明这种解析方法的潜在问题,并通过一个示例说明使用Python的csv模块解析CSV文件如何能避免这些问题。然后讨论如何使用3种不同类型的条件逻辑从输入文件中筛选出特定的行,将它们写入CSV格式的输出文件。接着给出两种不同的方法,以筛选出特定的列,并将它们写入输出文件。在介绍了如何读取和解析单个CSV格式的输入文件后,进一步讨论如何读取和处理多个CSV文件。这一节中的示例包括为每个输入文件提供摘要信息,从多个输入文件中连接数据,以及为每个输入文件计算基本的统计量。这一章最后将介绍两个不太常用的过程示例,包括选择一组连续的行和为数据集添加标题行。

第3章 Excel文件

这一章讨论如何使用可下载的扩展模块xlrd读取Excel工作簿。首先介绍一个Excel工作簿示例(也就是说明工作簿中包含多少个工作表,每个工作表的名称,每个工作表中行与列的数量)。因为Excel将日期保存为数值型数据,所以下一节介绍如何使用一系列函数将日期格式化,以使它们显示为日期形式而不是数值形式。然后,讨论如何使用3种不同类型的条件逻辑从单个工作表中筛选出特定的行,再将它们写入CSV格式的输出文件。在此之后,介绍两种不同的方式来筛选特定的列并写入输出文件。在介绍了如何读取和解析单个工作表之后,进一步讨论如何读取和处理工作簿中所有的或者一部分工作表。这几节中的示例程序展示了如何在工作表中筛选特定的行与列。在讨论了如何读取和分析单个工作簿中的任意数目的工作表之后,进一步讨论如何读取和处理多个工作簿。这一节中的示例程序包括为每个工作簿提供摘要信息,从多个工作簿中连接数据,以及为每个工作簿计算基本的统计量。这一章最后将介绍两个不太常用的过程示例,包括选择一组连续的行和为数据集添加标题行。

第4章 数据库

这一章讨论如何在Python中执行基本的数据库操作。首先介绍如何使用Python内建的sqlite3模块,这样你就不需要安装任何额外的软件了。示例程序说明了如何执行最常用的数据库操作,包括创建数据库和数据表,从CSV格式的输入文件加载数据到数据库中的表,使用CSV格式的输入文件更新数据表中的记录,以及查询数据表。使用sqlite3模块时,数据库连接的细节和与MySQL、PostgreSQL和Oracle等其他数据库系统连接有轻微的差别。为了说明这种差别,这一章的第二部分演示了如何同MySQL数据库系统进行交互。如果你的计算机上没有MySQL,那么需要先下载并安装。然后,具体操作的示例程序与sqlite3示例相对照,也包括创建数据库和数据表,从CSV格式的输入文件加载数据到数据库中的表,使用CSV格式的输入文件更新数据表中的记录,查询数据表,以及将查询结果写入CSV格式的输出文件。这一章两部分的示例合在一起,可以详细又完整地说明如何使用Python执行常用的数据库操作。

第5章 应用程序

这一章包含3个示例程序,演示了如何综合使用前面几章介绍的技术解决3个不同的问题,它们代表了一些常见的数据处理与分析任务。第一个应用程序介绍了如何在大量的Excel与CSV文件中找到特定的记录。可以想象,用计算机查询记录比手动查询要高效得多,也有趣得多。打开、搜索和关闭大量文件绝对不是一件有趣的事情,文件的数量越多,完成任务的难度就越大。因为这个问题涉及搜索CSV和Excel文件,所以示例程序会使用第2章和第3章中介绍的很多内容。

第二个应用程序介绍如何将数据通过分组或“装箱”划分到一个唯一的类别,并且为每个类别计算统计量。具体的例子就是对一个记录客户服务包购买的CSV文件[记录了客户在什么时间购买了特定的服务包(也就是铜牌服务包、银牌服务包和金牌服务包)]进行解析,然后将数据按客户姓名和服务包进行组织,通过相加计算出每个客户在每种服务包上花费的时间。这个示例使用了两个内建模块,创建了一个函数并将数据存储在字典中。字典在第1章中进行了介绍,但在第2章、第3章和第4章中都没有使用过。这个程序还引入了一种新的技术:记录下你刚处理过的行和正在处理的行,然后根据这两行的值计算出统计量。这两种技术(通过字典来分组或装箱数据,以及记录当前行和前一行)都非常强大,让你能够处理很多和时间相关的数据分析任务。

第三个应用程序介绍如何解析文本文件,将数据分组或装箱划分类别,然后按类别计算统计量。具体的例子是解析MySQL错误日志文件,按照日期和错误信息组织数据,然后计算出每种错误信息在每一天出现的次数。这个示例回顾了如何解析文本文件,这种技术在第1章中简要介绍过。这个示例也展示了如何将信息分别存储在列表和字典中,以用来创建输出文件的标题行和数据行;它还可以帮你回忆一下通过基本字符串操作来解析文本文件的方法。同时,这也是使用嵌套字典来分组或装箱数据以划分类别的一个绝好示例。

第6章 图与图表

在这一章中,你要学习如何使用Python创建常用的统计图和图表。你将使用4个制图库:matplotlib、pandas、ggplot和seaborn。首先使用matplotlib,因为它历史悠久、资料丰富(实际上,pandas和seaborn都是在matplotlib的基础上开发出来的)。matplotlib一节介绍如何创建直方图、条形图、折线图、散点图和箱线图。pandas一节讨论使用pandas简化语法来创建这些统计图的几种方式,并演示如何使用pandas创建统计图。ggplot一节指出了这个库与R和图形语法在历史上的联系,并演示如何使用ggplot创建常用的统计图。最后,seaborn一节讨论如何创建标准统计图,以及如何创建使用matplotlib难以创建的图表。

第7章 描述性统计与建模

这一章讨论如何生成标准摘要统计量,以及如何使用pandas和statsmodels包估计回归模型与分类模型。pandas中有计算集中趋势测度(例如:均值、中位数和众数)的函数,也有计算分散程度(例如:方差和标准差)的函数,还有进行数据分组的函数用于轻松计算这些统计量。statsmodels包中的函数可以估计多种类型的回归和分类模型。这一章介绍了如何基于pandas数据框中的数据建立多元线性回归和逻辑斯蒂分类模型,以及如何使用模型为新的输入数据预测输出值。

第8章 按计划自动运行脚本

这一章介绍如何在Windows和macOS系统上安排脚本定期自动运行。在这一章之前,脚本都是通过命令行方式手动运行的。在调试脚本和临时运行时,通过命令行手动运行脚本是非常方便的。但是,如果脚本需要定期运行(例如:每天、每周、每月或每个季度),或者需要定期运行很多脚本的话,手动运行就会非常麻烦。在Windows系统中,你可以创建任务计划来定期自动运行脚本。在macOS系统中,你需要创建定时任务,它可以实现同样的功能。这一章用若干屏幕截图展示了如何创建和运行任务计划和定时任务。通过安排脚本定期运行,你就不会忘记运行脚本,而且能够实现比通过命令行手动运行脚本更强大的功能。

第9章 从这里启航

最后一章介绍Python中其他的内置和扩展模块以及函数,它们对于数据处理与数据分析任务也是非常重要的。这一章还介绍了其他的数据结构。当你涉及本书之外的主题时,可能会遇到一些非常复杂的编程问题,而使用这些数据结构可以帮助你高效地解决问题。内置模块与函数是与Python安装程序捆绑在一起的,所以当你安装了Python之后,立刻就可以使用它们了。这一章讨论的内置模块包括collections、random、statistics、itertools和operator,内置函数包括enumerate、filter、reduce和zip。扩展模块没有包括在Python安装程序中,所以需要你单独下载并安装。这一章讨论的扩展模块包括NumPy、SciPy和Scikit-Learn;另外还简单介绍了栈、队列、树和图等其他数据结构,来帮助你更加快速和高效地存储、处理和分析数据。

排版约定

本书使用了下列排版约定。

黑体

表示新术语或重点强调的内容。

等宽字体(constant width)

表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。

加粗等宽字体(constant width bold

表示应该由用户输入的命令或其他文本。

等宽斜体(constant width italic

表示应该由用户输入的值或根据上下文确定的值替换的文本。

该图标表示提示或建议。

该图标表示一般注记。

该图标表示警告或警示。

使用示例代码

本书的所有补充资料(虚拟机、数据、脚本、定制的命令行工具等)都可以在这个地址下载:https://github.com/cbrownley/foundations-for-analytics-with-python

本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无需联系我们获得许可。比如,用本书的几个代码片段写一个程序就无需获得许可,销售或分发O'Reilly图书的示例光盘则需要获得许可;引用本书中的示例代码回答问题无需获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。

我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN。比如:“Foundations for Analytics with Python by Clinton Brownley (O'Reilly).Copyright 2016 Clinton Brownley, 978-1-491-92253-8.”

如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过permissions@oreilly.com与我们联系。

Safari® Books Online

Safari Books Online是应运而生的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商业作家的专业作品。

技术专家、软件开发人员、Web设计师、商务人士和创意专家等,在开展调研、解决问题、学习和认证培训时,都将Safari Books Online视作获取资料的首选渠道。

对于组织团体、政府机构和个人,Safari Books Online提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology以及其他几十家出版社的上千种图书、培训视频和正式出版之前的书稿。要了解Safari Books Online的更多信息,我们网上见。

联系我们

请把对本书的评价和问题发给出版社。

美国:

O'Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

对于本书的评论和技术性问题,请发送电子邮件到:bookquestions@oreilly.com

要了解更多O'Reilly图书、培训课程、会议和新闻的信息,请访问以下网站:

http://www.oreilly.com

我们在Facebook的地址如下:http://facebook.com/oreilly

请关注我们的Twitter动态:http://twitter.com/oreillymedia

我们的YouTube视频地址如下:http://www.youtube.com/oreillymedia

本书作者的Twitter账号为:@ClintonBrownley

致谢

我写这本书的目的是帮助那些没有或只有一点编程经验的人,这些人和几年前的我很相似,我要帮助他们学习一些基本的编程技能,让他们因为能够完成数据处理和数据分析项目而欣喜若狂。在学习编程之前,这些项目可能相当耗时或者根本不可能完成。

如果不是很多人对我进行教导、指引和支持,我根本就不可能完成这本书。首先,我要感谢我的妻子Anushka,她花了很多时间来教我基本的编程概念。她教我如何将复杂的编程任务分解为小任务,然后通过伪代码组织起来;教我如何有效地使用列表、字典和条件逻辑;还教我如何写出可扩展的、可伸缩的代码。开始时,她让我集中精力完成编程任务,不用太在乎代码是否优雅和高效。当我逐渐熟练之后,她总是会检查我的脚本并提出改进意见。在我写作本书期间,她一直这样支持着我。她检查了所有的脚本并提出了建议,使得脚本更加短小精悍、清晰易读,并且更加高效。她还做了大量的文字检查工作,并提出了增删和修改建议,以使得指令和解释更易于阅读和理解。在我写作的几个月中,除了这些教导和建议,她在其他方面也给了我极大的帮助。当我在夜里和周末写作时,她负责照顾我们的女儿;当我在写作中遇到困难时,她积极地鼓励我。没有她的指示、引导、批评、支持和始终不渝的爱,这本书根本不可能完成。

其次,我要感谢我的朋友和同事,他们鼓励、支持并帮助我进行编程训练。Heather Marquez和Ashish Kelkar给予了我极大的支持,他们帮助我参加培训课程以及那些能增强和扩展编程技能的项目。当我告诉他们我编写了一套培训材料,想开设一门10天的培训课程之后,他们帮助我成功地实现了计划。Rajiv Krishnamurthy也对我的学习帮助有加,一连几个星期,他为我提供各种各样的编程练习,并且每周和我碰头,讨论、评判和改进我的解决方案。Vikram Rao审校了本书的线性回归和逻辑斯蒂回归部分,并针对如何说明回归模型的关键点提出了非常好的建议。我还要感谢其他很多同事,他们与我一起做项目,帮助我理解和掌握技术,与我共享代码,检查我的代码并提出改进意见,还为我提供有用的信息资源。

然后,我要感谢我的3位Python培训导师:MarilynDavis、Jeremy Osborne和Jonathan Rocher。Marilyn和Jeremy的课程讲授基本编程概念和Python实现。Jonathan的课程讲授Python科学栈,包括numpy、scipy、matplotlib、seaborn、pandas和scikit-learn。我真的非常喜欢他们的课程,他们每个人都扩展和丰富了我对基本编程概念和其Python实现的理解。

我还要感谢为这本书提供支持的O'Reilly Media的同仁。在本书的写作和编辑过程中,Timothy McGovern一直是一位热情的伙伴。他审校了全部书稿,对本书的主题和各章内容都提出了极具价值的建议。他还对具体章节的文字、布局和格式提出了修改意见,使得它们更加易于阅读和理解。感谢他的同事Marie Beaugureau和Rita Scordamalgia,是她们与我一起完成了本书的出版过程并提供了市场资源。感谢ColleenCole和Jasmine Kwityn编辑了所有章节并将整本书制作得如此精美。最后,感谢Ted Kwartler审校了本书的第一稿,并提出了有用的改善建议。他的意见促使我添加了可视化和统计分析章节,为每个基础Python脚本配备pandas版,并删除了一些内容和示例来减少重复以增强可读性。得益于他的深思熟虑,本书的内容才能更加丰富而全面。

电子书

扫描如下二维码,即可购买本书电子版。