本节书摘来华章计算机《数据驱动安全:数据安全分析、可视化和仪表盘》一书中的第2章 ,第2.2.1节,[美]杰·雅克布(Jay Jacobs)鲍布·鲁迪斯(Bob Rudis) 著 薛杰 王占一 张卓 胡开勇 蒋梦飏 赵爽 译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.2.1 理解Python数据分析和可视化生态系统
虽然Python有很多可用的库,但是仅有少数库在处理数据方面很出色,而我们仍旧称这些库是一个生态系统,是因为每一个库的开发和支持来自不同的组织、社区或者个人,他们互相合作,却组织松散。
如下是一些几乎每一个项目都需要的库:
Numpy(www.numpy.org/),可以为通用数据创造一个多维容器,支持对数据的多种操作,生成随机数。它也能够“广播”对于Python对象的操作,使其代码更简洁和高效。
SciPy库(www.scipy.org/scipylib/index.html),Numpy的上层封装,便捷的面向数组操作,能够将Numpy广播操作扩展到Python语言中的其他类型的数据元素。另外它还附带统计相关的操作。
Maplotlib(http://matplotlib.org/),一个Python强力的通用库使你的数据转化为产品级的图像。
pandas(http://pandas.pydata.org),该库提供了更高的性能、易用的数据结构和数据分析工具;pandas将Data.Frame类型引入Python的命名空间里,关于这个详细的情况我们会在2.3节讨论。虽然这样会让那些Python的死忠阿谀pandas,但是本质上来看,Python更像R语言,会使我们更简单地在两者间切换。
这些模块,结合IPython,有时会被SciPy栈的核心组件引用(自从它包含了SciPy库以后,这有点费解)。你可以从www.scipy.org/获取更多关于栈的信息。
当你用你自己方法采用此生态系统时,你会发现如下代码:
import段的代码会载入库里的函数和变量,使其名称和功能性在当前Python工作会话里生效,as组件能使模块里的变量、函数和对象能简单地被引用。
假如你的许多程序组件,都要引用每一个Scipy程序包里的基本常规模块,你可以创建一个文本作为基本模板,包含这些imports和其他(以后)能重复使用的代码来节省打字的时间。
你将来当然会使用软件包来连接数据库、读取文件、执行一些功能,你可以花一些时间在Python Package Index(PyPI)上细读所有灵巧的模块(https://pypi.python.org/pypi),但如果它是和SciPy栈有联系的,它将会成为你数据科学之旅上一个常规的老伙计。
Python的“难点”
Python有两个特性容易让新手受挫。第一个“难点”是空白缩进,空格在Python代码里是非常重要的。对于代码段,没有{}或begin/end来标记开始和结束。你必须保持一致的缩进来区分一起执行的代码段,不一致的缩进会导致解释器输出错误信息,程序代码出现异常。现在大部分文本编辑器或者IDE都可以配置提示功能。
第二个“难点”是在使用变量前缺少声明,将一个变量breaches初始化为某个值,不经意间引用该变量,breaches在解释器里不会出错,但是输出的结果却不符合预期。
Canpy的包管理器(http://docs.enthought.com/canopy/quick-start/package_ manager.html)易于进行Python核心安装和相关的模块的实时更新。但是假如你选择手动安装,你需要依赖操作系统的包管理器来安装的Python解释器。升级独立的附加模块可以使用如下python代码完成:
关于Python版本
本书的例子基于Python2.7,在编写本书时,Canpy依然使用Python2.7。现在Python有两个主要的版本,2.7.x和3.3.x,Python 3和Python2.7对默认行为做了很多改变,许多包也完成了更新以便与新版本兼容。但是仍旧有许多包只兼容Python2.7,所以稳定性和广泛性使得Python2.7版本成为了数据分析的好选择。
对于Python2.7和Python3.3之间的改变可以参考《What抯 New In Python 3.0》(http://docs.python.org/3/whatsnew/3.0.html)。