新書推薦:
《
从康德到黑格尔的发展:兼论宗教哲学(英国观念论名著译丛)
》
售價:HK$
60.5
《
突破不可能:用特工思维提升领导力
》
售價:HK$
77.3
《
王阳明大传:知行合一的心学智慧(精装典藏版)
》
售價:HK$
221.8
《
失衡与重塑——百年变局下的中国与世界经济
》
售價:HK$
132.2
《
南方谈话:邓小平在1992
》
售價:HK$
80.6
《
纷纭万端 : 近代中国的思想与社会
》
售價:HK$
109.8
《
中国古代文体形态研究(第四版)(中华当代学术著作辑要)
》
售價:HK$
168.0
《
朋党之争与北宋政治·大学问
》
售價:HK$
99.7
|
內容簡介: |
本书讲的是利用Python进行数据控制、处理、整理、分析等方面的具体细节和基本要点。同时,它也是利用Python进行科学计算的实用指南(专门针对数据密集型应用)。本书重点介绍了用于高效解决各种数据分析问题的Python语言和库。《利用Python进行数据分析》没有阐述如何利用Python实现具体的分析方法。
|
關於作者: |
Wes McKinney 资深数据分析专家,对各种Python库(包括NumPy、pandas、matplotlib以及IPython等)等都有深入研究,并在大量的实践中积累了丰富的经验。撰写了大量与Python数据分析相关的经典文章,被各大技术社区争相转载,是Python和开源技术社区公认的权威人物之一。开发了用于数据分析的著名开源Python库——pandas,广获用户好评。在创建Lambda Foundry(一家致力于企业数据分析的公司)之前,他曾是AQR Capital Management的定量分析师。
|
目錄:
|
目录
前言 1
第1章 准备工作 5
本书主要内容 5
为什么要使用Python进行数据分析 6
重要的Python库 7
安装和设置 10
社区和研讨会 16
使用本书 16
致谢 18
第2章 引言 20
来自bit.ly的1.usa.gov数据 21
MovieLens 1M数据集 29
1880—2010年间全美婴儿姓名 35
小结及展望 47
第3章 IPython:一种交互式计算和开发环境 48
IPython基础 49
内省 51
使用命令历史 60
与操作系统交互 63
软件开发工具 66
IPython HTML Notebook 75
利用IPython提高代码开发效率的几点提示 77
高级IPython功能 79
致谢 81
第4章 NumPy基础:数组和矢量计算 82
NumPy的ndarray:一种多维数组对象 83
通用函数:快速的元素级数组函数 98
利用数组进行数据处理 100
用于数组的文件输入输出 107
线性代数 109
随机数生成 111
范例:随机漫步 112
第5章 pandas入门 115
pandas的数据结构介绍 116
基本功能 126
汇总和计算描述统计 142
处理缺失数据 148
层次化索引 153
其他有关pandas的话题 158
第6章 数据加载、存储与文件格式 162
读写文本格式的数据 162
二进制数据格式 179
使用HTML和Web API 181
使用数据库 182
第7章 数据规整化:清理、转换、合并、重塑 186
合并数据集 186
重塑和轴向旋转 200
数据转换 204
字符串操作 217
示例:USDA食品数据库 224
第8章 绘图和可视化 231
matplotlib API入门 231
pandas中的绘图函数 244
绘制地图:图形化显示海地地震危机数据 254
Python图形化工具生态系统 260
第9章 数据聚合与分组运算 263
GroupBy技术 264
数据聚合 271
分组级运算和转换 276
透视表和交叉表 288
示例:2012联邦选举委员会数据库 291
第10章 时间序列 302
日期和时间数据类型及工具 303
时间序列基础 307
日期的范围、频率以及移动 311
时区处理 317
时期及其算术运算 322
重采样及频率转换 327
时间序列绘图 334
移动窗口函数 337
性能和内存使用方面的注意事项 342
第11章 金融和经济数据应用 344
数据规整化方面的话题 344
分组变换和分析 355
更多示例应用 361
第12章 NumPy高级应用 368
ndarray对象的内部机理 368
高级数组操作 370
广播 378
ufunc高级应用 383
结构化和记录式数组 386
更多有关排序的话题 388
NumPy的matrix类 393
高级数组输入输出 395
性能建议 397
附录A Python语言精要 401
|
內容試閱:
|
第1章
准备工作
本书主要内容
本书讲的是利用Python进行数据控制、处理、整理、分析等方面的具体细节和基本要点。同时,它也是利用Python进行科学计算的实用指南(专门针对数据密集型应用)。本书重点介绍了用于高效解决各种数据分析问题的Python语言和库。本书没有阐述如何利用Python实现具体的分析方法。
当书中出现“数据”时,究竟指的是什么呢?主要指的是结构化数据(structured data),这个故意含糊其辞的术语代指了所有通用格式的数据,例如:
多维数组(矩阵)。
表格型数据,其中各列可能是不同的类型(字符串、数值、日期等)。比如保存在关系型数据库中或以制表符逗号为分隔符的文本文件中的那些数据。
通过关键列(对于SQL用户而言,就是主键和外键)相互联系的多个表。
间隔平均或不平均的时间序列。
这绝不是一个完整的列表。大部分数据集都能被转化为更加适合分析和建模的结构化形式,虽然有时这并不是很明显。如果不行的话,也可以将数据集的特征提取为某种结构化形式。例如,一组新闻文章可以被处理为一张词频表,而这张词频表就可以用于情感分析。
大部分电子表格软件(比如Microsoft Excel,它可能是世界上使用最广泛的数据分析工具了)的用户不会对此类数据感到陌生。
为什么要使用Python进行数据分析
许许多多的人(包括我自己)都很容易爱上Python这门语言。自从1991年诞生以来,Python现在已经成为最受欢迎的动态编程语言之一,其他还有Perl、Ruby等。由于拥有大量的Web框架(比如Rails(Ruby)和Django(Python)),最近几年非常流行使用Python和Ruby进行网站建设工作。这些语言常被称作脚本(scripting)语言,因为它们可以用于编写简短而粗糙的小程序(也就是脚本)。我个人并不喜欢“脚本语言”这个术语,因为它好像在说这些语言无法用于构建严谨的软件。在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算(scientific computing)社区。进入21世纪以来,在行业应用和学术研究中采用Python进行科学计算的势头越来越猛。
在数据分析和交互、探索性计算以及数据可视化等方面,Python将不可避免地接近于其他开源和商业的领域特定编程语言工具,如R、MATLAB、SAS、Stata等。近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大替代方案。结合其在通用编程方面的强大实力,我们完全可以只使用Python这一种语言去构建以数据为中心的应用程序。
把Python当做粘合剂
作为一个科学计算平台,Python的成功部分源于其能够轻松地集成C、C++以及Fortran代码。大部分现代计算环境都利用了一些Fortran和C库来实现线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。许多企业和国家实验室也利用Python来“粘合”那些已经用了30多年的遗留软件系统。
大多数软件都是由两部分代码组成的:少量需要占用大部分执行时间的代码,以及大量不经常执行的“粘合剂代码”。粘合剂代码的执行时间通常是微不足道的。开发人员的精力几乎都是花在优化计算瓶颈上面的,有时更是直接转用更低级的语言(比如C)。
最近这几年,Cython项目(http:cython.org)已经成为Python领域中创建编译型扩展以及对接CC++代码的一大途径。
解决“两种语言”问题
很多组织通常都会用一种类似于领域特定的计算语言(如MATLAB和R)对新的想法进行研究、原型构建和测试,然后再将这些想法移植到某个更大的生产系统中去(可能是用Java、C#或C++编写的)。人们逐渐意识到,Python不仅适用于研究和原型构建,同时也适用于构建生产系统。我相信越来越多的企业也会这样看,因为研究人员和工程技术人员使用同一种编程工具将会给企业带来非常显著的组织效益。
为什么不选Python
虽然Python非常适合构建计算密集型科学应用程序以及几乎各种各样的通用系统,但它对于不少应用场景仍然力有不逮。
由于Python是一种解释型编程语言,因此大部分Python代码都要比用编译型语言(比如Java和C++)编写的代码运行慢得多。由于程序员的时间通常都比CPU时间值钱,因此许多人也愿意在这里做一些权衡。但是,在那些要求延迟非常小的应用程序中(例如高频交易系统),为了尽最大可能地优化性能,耗费时间使用诸如C++这样更低级、更低生产率的语言进行编程也是值得的。
对于高并发、多线程的应用程序而言(尤其是拥有许多计算密集型线程的应用程序),Python并不是一种理想的编程语言。这是因为Python有一个叫做全局解释器锁(Global Interpreter Lock,GIL)的东西,这是一种防止解释器同时执行多条Python字节码指令的机制。有关“为什么会存在GIL”的技术性原因超出了本书的范围,但是就目前来看,GIL并不会在短时间内消失。虽然很多大数据处理应用程序为了能在较短的时间内完成数据集的处理工作都需要运行在计算机集群上,但是仍然有一些情况需要用单进程多线程系统来解决。
这并不是说Python不能执行真正的多线程并行代码,只不过这些代码不能在单个Python进程中执行而已。比如说,Cython项目可以集成OpenMP(一个用于并行计算的C框架)以实现并行处理循环进而大幅度提高数值算法的速度。
|
|