Python语言诞生已经超过25年,距离Python 3发布也已经快10年了。经过大浪淘沙,Python却依旧势头强劲,长期稳居编程语言市场占有率前十,甚至前五。各个领域都能看到Python的身影,从Web开发到数据挖掘,从网络爬虫到图像分析等。这从一个侧面也印证了一门编程语言要想“成功”,除了优良的语言本身特性之外,强大的生态圈也必不可少。
正式使用Python参与一个Web开发项目之后,译者就被Python语言本身之优美、框架之强大所吸引。随着不断了解,发现Python在数据分析领域是当仁不让的翘楚。虽然一些语言也偏向于数据分析,例如R语言,但是Python却和工程实践结合得更紧密,一门语言就可以让读者开发包含强大数据分析的后台Server。
本书是《Python Data Analysis》的后续,如果说前一本书更偏向于介绍各种工具库和数据分析技术的使用,例如用于科学计算的库SciPy/NumPy,用于操作数据的库pandas,用于机器学习的库scikit-learn,用于绘制图形的库matplotlib,那么本书则更侧重于将这些技术应用于实际领域,解决实际的问题。作者Ivan Idris曾是Java和数据库应用开发者,后专注于Python和数据分析领域,致力于编写干净、可测试的代码。他还是《Python Machine Learning By Example》《NumPy Cookbook》等书的作者,在工程实践和书籍撰写方面都非常有经验。虽然译者预先已有心理准备,但是当真正开始翻译时,才被作者领域涉及之多、知识之渊博所折服。读者不但能从本书中找到Python用于数据分析的典型案例,例如信号处理、聚类等,甚至还能找到财务数据用于股票市场的分析。可以说这本书涵盖了Python在数据分析领域的方方面面。不但如此,作者还创建了一个包含各种工具的Docker镜像,方便读者使用。诚然,这也给翻译带来了不小的难度。有些领域过于专业,虽然查阅了大量资料,但限于译者本身水平所限,可能仍然存在错误,希望读者不吝指教。
最后,这是一本Cookbook(食谱式手册)成为我翻译本书的另一个原因。各种Cookbook一直是译者学习各种技术的参考书,一方面它更偏向于实践,另一方面它更直接,包含各种实例,本书也是如此。大量代码片段和图例一定能帮助读者快速掌握用Python进行数据分析的各种技术。
封面图
目录
- 译者序
- 前言
- 第1章 为可重复的数据分析奠定基础1
- 1.1简介1
- 1.2安装Anaconda2
- 1.3安装数据科学工具包3
- 1.4 用virtualenv和virtualenvwrapper创建Python虚拟环境5
- 1.5 使用Docker镜像沙盒化Python应用6
- 1.6 在IPython Notebook中记录软件包的版本和历史8
- 1.7配置IPython11
- 1.8学习为鲁棒性错误校验记录日志13
- 1.9为你的代码写单元测试16
- 1.10配置pandas18
- 1.11配置matplotlib20
- 1.12 为随机数生成器和NumPy打印选项设置种子23
- 1.13 使报告、代码风格和数据访问标准化24
- 第2章创建美观的数据可视化28
- 2.1简介28
- 2.2图形化安斯库姆四重奏28
- 2.3选择Seaborn的调色板31
- 2.4选择matplotlib的颜色表33
- 2.5与IPython Notebook部件交互35
- 2.6查看散点图矩阵38
- 2.7 通过mpld3使用d3.js进行可视化40
- 2.8创建热图41
- 2.9 把箱线图、核密度图和小提琴图组合44
- 2.10使用蜂巢图可视化网络图45
- 2.11显示地图47
- 2.12使用类ggplot2图49
- 2.13使用影响图高亮数据51
- 第3章统计数据分析和概率53
- 3.1简介53
- 3.2将数据拟合到指数分布53
- 3.3将聚合数据拟合到伽马分布55
- 3.4将聚合计数拟合到泊松分布57
- 3.5确定偏差59
- 3.6估计核密度61
- 3.7 确定均值、方差和标准偏差的置信区间64
- 3.8使用概率权重采样66
- 3.9探索极值68
- 3.10 使用皮尔逊相关系数测量变量之间的相关性71
- 3.11 使用斯皮尔曼等级相关系数测量变量之间的相关性74
- 3.12 使用点二列相关系数测量二值变量和连续变量的相关性77
- 3.13 评估变量与方差分析之间的关系78
- 第4章处理数据和数值问题81
- 4.1简介81
- 4.2剪辑和过滤异常值81
- 4.3对数据进行缩尾处理84
- 4.4测量噪声数据的集中趋势85
- 4.5使用Box-Cox变换进行归一化88
- 4.6使用幂阶梯转换数据90
- 4.7使用对数转换数据91
- 4.8重组数据93
- 4.9应用logit()来变换比例95
- 4.10拟合鲁棒线性模型97
- 4.11使用加权最小二乘法考虑方差99
- 4.12使用任意精度进行优化101
- 4.13使用任意精度的线性代数103
- 第5章 网络挖掘、数据库和大数据107
- 5.1简介107
- 5.2模拟网页浏览108
- 5.3网络数据挖掘110
- 5.4 处理非ASCII文本和HTML实体112
- 5.5实现关联表114
- 5.6创建数据库迁移脚本117
- 5.7在已经存在的表中增加一列117
- 5.8在表创建之后添加索引118
- 5.9搭建一个测试Web服务器120
- 5.10 实现具有事实表和维度表的星形模式121
- 5.11使用Hadoop分布式文件系统126
- 5.12安装配置Spark127
- 5.13使用Spark聚类数据128
- 第6章信号处理和时间序列132
- 6.1简介132
- 6.2使用周期图做频谱分析132
- 6.3 使用Welch算法估计功率谱密度134
- 6.4分析峰值136
- 6.5测量相位同步138
- 6.6指数平滑法140
- 6.7评估平滑法142
- 6.8使用Lomb-Scargle周期图145
- 6.9分析音频的频谱146
- 6.10使用离散余弦变换分析信号149
- 6.11对时序数据进行块自举151
- 6.12对时序数据进行动态块自举153
- 6.13应用离散小波变换155
- 第7章 利用金融数据分析选择股票159
- 7.1简介159
- 7.2计算简单收益率和对数收益率159
- 7.3 使用夏普比率和流动性对股票进行排名161
- 7.4 使用卡玛和索提诺比率对股票进行排名162
- 7.5分析收益统计164
- 7.6将个股与更广泛的市场相关联166
- 7.7探索风险与收益169
- 7.8使用非参数运行测试检验市场170
- 7.9测试随机游走173
- 7.10 使用自回归模型确定市场效率175
- 7.11为股票价格数据库建表177
- 7.12填充股票价格数据库178
- 7.13优化等权重双资产组合183
- 第8章文本挖掘和社交网络分析186
- 8.1简介186
- 8.2创建分类的语料库186
- 8.3以句子和单词标记化新闻文章189
- 8.4 词干提取、词形还原、过滤和TF-IDF得分189
- 8.5识别命名实体193
- 8.6提取带有非负矩阵分解的主题194
- 8.7实现一个基本的术语数据库196
- 8.8计算社交网络密度200
- 8.9计算社交网络接近中心性201
- 8.10确定中介中心性202
- 8.11评估平均聚类系数203
- 8.12计算图的分类系数204
- 8.13获得一个图的团数205
- 8.14使用余弦相似性创建文档图206
- 第9章集成学习和降维209
- 9.1简介209
- 9.2递归特征消除210
- 9.3应用主成分分析来降维211
- 9.4应用线性判别分析来降维213
- 9.5多模型堆叠和多数投票214
- 9.6学习随机森林217
- 9.7 使用RANSAC算法拟合噪声数据220
- 9.8使用Bagging来改善结果222
- 9.9用于更好学习的Boosting算法224
- 9.10嵌套交叉验证227
- 9.11使用joblib重用模型229
- 9.12层次聚类数据231
- 9.13Theano之旅232
- 第10章 评估分类器、回归器和聚类235
- 10.1简介235
- 10.2直接使用混淆矩阵分类235
- 10.3计算精度、召回率和F1分数237
- 10.4 检测接收器操作特性和曲线下的面积240
- 10.5可视化拟合优度242
- 10.6 计算均方误差和中值绝对误差243
- 10.7用平均轮廓系数评估聚类245
- 10.8将结果与伪分类器进行比较247
- 10.9 确定平均绝对百分误差和平均百分误差250
- 10.10与伪回归器进行比较252
- 10.11计算平均绝对误差和残差平方和254
- 10.12检查分类的kappa系数256
- 10.13运用Matthews相关系数258
- 第11章图像分析261
- 11.1简介261
- 11.2安装OpenCV261
- 11.3 应用尺度不变特征变换(SIFT)264
- 11.4使用加速鲁棒特征检测特征265
- 11.5量化颜色267
- 11.6图像降噪269
- 11.7提取图像区域270
- 11.8使用Haar级联进行面部识别272
- 11.9搜索明亮的星星275
- 11.10从图像中提取元数据278
- 11.11从图像中提取纹理特征280
- 11.12对图像应用层次聚类282
- 11.13使用光谱聚类分割图像283
- 第12章并行和性能285
- 12.1简介285
- 12.2使用Numba做即时编译286
- 12.3 使用Numexpr加速数值表达式288
- 12.4使用线程模块运行多线程289
- 12.5 使用concurrent.futures模块启动多任务291
- 12.6 使用asyncio模块异步访问资源294
- 12.7使用execnet做分布式处理297
- 12.8分析内存使用情况299
- 12.9 计算平均值、方差、偏度和峰度300
- 12.10使用最近最少使用算法进行缓存304
- 12.11缓存HTTP请求306
- 12.12使用Count-min sketch进行流式统计308
- 12.13充分利用GPU和OpenGL310
- 附录A术语表313
- 附录B函数参考317
- 附录C在线资源323
- 附录D 命令行和其他工具的一些提示和技巧326