前言
欢迎大家阅读这本书!你是不是也和许多人一样很想知道如何处理数据,以发掘其中的各种潜力呢?数据已经成了一种不可思议的新货币,影响着我们的生活、工作乃至交流方式。比如,电子设备与其他活动所收集的数据正在影响我们能够看到什么广告、媒体会推荐给我们哪些内容,以及我们上网搜索时的搜索结果。然而很多人可能没有意识到,目前已经有了一些工具与技术,能够访问并转换这些数据,进而从中提炼出有意义的观点及内容。本书就是写给想了解这些工具与技术的人看的。
数据,并非只能由大公司或政府的数据研究者来访问和使用。无论数据科学家还是保姆,都可以学着访问数据、解读数据,并从中提取信息,这是一项相当有用的技能。你只需要使用免费的软件与编程语言,就可以执行大量的数据处理工作,而且不用购买昂贵的计算机。只要能上网,你甚至可以在当地的图书馆中利用免费的在线平台来处理数据,而不一定非要使用公司或家里的计算机。
本书可以指导初学者,让大家相信自己有能力探索各种各样的数据。我们首先要学会访问数据,然后要了解如何评估数据的质量。把基础打好之后,我们再学习一些基本的数据分析与呈现方法,以便从中产生有意义的洞见。当然,对于如何分析与呈现数据,本书不可能讲得面面俱到,因为数据分析与数据可视化本身就是两个内容相当丰富的学科。然而大家在读完本书之后,肯定能学到其中最为关键的技巧,学会整理数据,并通过精确而有效的分析揭示其中的意义。
目标读者
本书主要是写给初学者看的,你只需要会使用计算机(例如,下载文件、打开程序、复制与粘贴等),并且愿意接受新观点和尝试新事物就行。你是不是一见数据或代码就怕,总觉得自己“数学很烂”,总认为处理数据与学习编程都是特别困难的事情?如果是的话,那尤其应该翻翻这本书。笔者在将近十年的时间中,把书中的技巧教给很多认为自己“不适合做技术”的人,但从来没有发现哪位学生搞不懂书里的内容。据笔者的经验,在讲授如何编程以及如何处理数据的时候,最大的问题其实并非教材的内容编得不好,而是教材没能很好地告诉读者如何实践这些内容[1]。笔者很感谢这些年来许多学生的提问,这促使笔者想办法把书里的内容以更好的方式传授给大家,同时很荣幸能有这个机会,把这些学生给笔者带来的启发通过本书分享给更多的人。当然,读书本身所起到的作用可能无法跟真正听课相比,但笔者还是希望,本书至少能教会你使用必备的工具,让你掌握基本的数据分析技术。另外,本书可能还会给你带来一些灵感,让你知道应该如何继续提升自己的技术水平。
如果你做过一些数据分析,但是感觉电子表格的功能太少,或者想要更为轻松地访问并操作更多的数据格式,那么也可以阅读本书。此外,那些会编写前端代码(例如,会使用JavaScript或PHP等语言来编程),但是想知道如何用Python语言来实现类似功能的朋友,同样能够在本书中找到你需要的内容。
你想自己走,还是让人牵着鼻子走
媒体理论家Douglas Rushkoff在Program or Be Programmed(OR Books出版社)一书的序言里,用开车打比方来解释为什么应该学习编程。Rushkoff写道:“除非你去学编程,否则在数字的世界里你永远只能当乘客,永远只能让别人从一个地方载到另一个地方。而且你坐的车没有窗户,就算司机跟你说县城里面只有一家超市,你也只能相信这话。”
Rushkoff接着又写道:“你可以把编程交给别人去做,但那样的话,你就必须信任对方,相信他们确实是在做你想要做的事情,而且是用一种对你有利的方式去做的。”这些年来,我问过好几百位同学相不相信所有人都能学会开车,他们说相信。但如果我问他们相不相信所有人都能学会编程,很少有人说相信。可是,开车实际上比编程复杂多了。既然如此,那么为什么有那么多人都认为编程太难呢?
笔者认为,Rushkoff打的那个比方正好可以解释这个问题,因为这种“没有窗户的车”不仅让乘客无法看到车外的情况,而且还让路人也无法观察到“司机”。我们之所以觉得人人都能学开车,是因为大家每天都可以看到各种各样的人在开车。
编程可就不一样了,我们很少能看到“掌控方向盘”的是谁。什么样的人会编写程序?程序应该由谁来写?实际上,既然我们都能学会开车,那肯定也能学会编程。
阅读说明
本书最好按照目录的顺序来阅读,因为每一章的概念与习题都建立在前面各章所讲的概念与习题的基础上。然而这些习题本身却是以两种形式同时呈现的,一种是notebook形式,另一种是独立的或者说是单独的程序文件。这样做有两个原因:首先,这可以让读者选择自己喜欢的形式;其次,这样可以让大家在这两种形式之间对比,看看它们在编写由数据所驱动的Python代码时有什么区别。根据笔者的经验,Python notebook形式的好处在于,你能够由此迅速入门并开始运行程序。然而如果你想编写一段较为健壮的代码,以便反复运行,那么这种形式用起来可能有点儿枯燥。我们通常并不能简单地从某种形式的代码里面复制一段,并将其粘贴到另一种形式中,因此笔者在本书的GitHub库里面会同时提供这两套代码。相应的数据文件也会通过Google Drive公布给大家。你在做这些习题的时候,可以选用自己喜欢的一种形式,也可以分别采用这两种形式,这样能够直观地看到二者之间的区别。
虽然本书使用的主要工具是Python,但是要想有效地整理并分析数据,我们还可以考虑使用其他工具,例如,编写程序代码时使用的文本编辑器与电子表格软件等,这样可以让数据处理起来更加容易。因此,除了要用Python,书中的个别习题还会用到其他工具。在提到这些工具时,笔者会做一些说明,让大家知道我为什么要在这里选择这款工具,并给出相应的操作步骤,指导大家完成习题中的任务。
排版约定
本书中使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽粗体(Constant width bold)
表示应由用户直接输入的命令或其他文本。
等宽斜体(Constant width italic)
表示应由用户提供的值或由上下文确定的值替换的文本。
该图示表示提示或建议。
该图示表示一般性说明。
该图示表示警告或注意。
示例代码
可以从https://github.com/PracticalPythonDataWranglingAndQuality下载补充材料(示例代码、练习等)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O'Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
Practical Python Data Wrangling and Data Quality,作者Susan E. McGregor,由O'Reilly出版,书号978-1-492-09150-9。
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permissions@oreilly.com联系我们。
O’Reilly在线学习平台(O’Reilly Online Learning)
40多年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O'Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn。
本书配套网站https://www.oreilly.com/library/view/practical-python-data/9781492091493上列出了勘误表、示例以及其他信息。
关于我们的书籍和课程的新闻和信息,请访问我们的网站http://oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://www.youtube.com/oreillymedia
致谢
笔者再次感谢这些年来勇于尝试新事物的各位同学,感谢大家在学习过程中向我提出切实的问题。感谢编辑Jeff Bleiel让我写作本书的过程变得如此顺利(至于书中的文字,则更是得到了Jeff的大力帮助),他和蔼而灵活,能够适度纠正我的偏颇,同时又能给我留出一定空间,让我展示自己的风格。感谢Joanna S. Kao、Anne Bonner与Randy Au这三位评审者,他们给我提出周详而丰富的意见。
笔者还要感谢Jess Haberman,他让我有机会把这些素材写到自己的书中,并感谢Jacqueline Kazil与Katharine Jarmul以她们各自的方式帮助我。另外要感谢Jeannette Wing与Cliff Stein,以及哥伦比亚大学数据科学研究所的各位同事,他们对本书所表现出的兴趣给我带来了许多新的想法。当然也要感谢诸位亲友对本书的关注与支持,他们或许并不了解我写的这个话题,但仍然给我关怀,这尤其让我感动。
最后,感谢我的家人,感谢你们无论在什么样的情况下都能给我支持。有了你们,我才觉得这本书写得确实很有意义。
[1] 很长一段时间以来,把相关的工具安装到位一直是个巨大的难题。现在好办多了,只要能上网就行!