Python与数据分析的关系

常用的数据分析工具有 Python、R 语言、MATLAB 等,但在大数据分析领域,Python 是最受欢迎的主流程序语言。究其原因主要有以下几点。

1) Python 是一种解释型编程语言,在数据分析的场景中,解释型语言的好处是不需要对代码进行编译链接,只需要编写好程序,就可直接运行,这样就可以避免解决编译链接过程中所出现的各种问题。同时,Python 语言语法和结构相对简单,便于专注于数据分析的新手快速掌握。

2) Python 语言拥有与数据分析相关的大量开源库和分析框架,可直接使用,非常方便。另外,Python 不仅提供了数据处理的平台,而且它还能跟很多语言( C 和 Fortran )对接。

3) Python 其实不是只能用于数据分析,它还有很多其他方面的用途。例如,Python 是一门通用型的编程语言,它也可以作为脚本来使用,还能操作数据库;而且由于 Django 等框架的问世,Python 近年来还可用于开发 Web 应用,这就使 Python 开发的数据分析项目完全可以与 Web 服务器兼容,从而可以整合到 Web 应用中。

由此可见,由于 Python 具有比其他数据分析语言更多的优势,因此,使其成为数据分析中的最佳选择。

Python数据分析常用的类库

类库是用来实现各种功能的类的集合。Python 数据分析中常用的库有 NumPy、pandas、Matplotlib 和 SciPy 等,这些库在数据分析中起着很重要的作用,有关这些库的使用将在后面做详细介绍。本节只对这些库进行一个简单介绍。

Python NumPy

NumPy(Numerical Python)是 Python 科学计算的基础包,它可以提供以下功能。
  • 快速高效的多维数组对象 ndarray。
  • 用于对数组执行元素级计算和直接对数组执行数学运算的函数。
  • 用于读写硬盘上基于数组的数据集的工具。
  • 线性代数运算、傅里叶变换,以及随机数生成。
  • 用于将 C、C++、Fortran 代码集成到 Python 的工具。

除了为 Python 提供快速的数组处理能力,NumPy 在数据分析方面还有另外一个主要作用,即作为算法之间传递数据的容器。对于数值型数据,NumPy 数组在存储和处理数据时要比内置的 Python 数据结构高效得多。此外,由高级语言(如 C 和 Fortran )编写的库可以直接操作 NumPy 数组中的数据,无须进行任何数据复制工作。

Python pandas

pandas 是 Python 数据分析的核心库,它是基于 NumPy 构建的含有复杂数据结构和工具的数据分析包。pandas 最初是被作为金融数据分析工具而开发出来的,因此,它为时间序列分析提供了很好的支持。pandas 纳入大量库和标准数据模型,提供了大量的可快速便捷处理数据的函数和高效操作数据集所需的工具。

类似于 NumPy 的核心是 ndarray,pandas 则是围绕着 Series 和 DataFrame 这两个核心数据结构展开的,而 Series 和 DataFrame 分别对应于一维的序列和二维的表结构。pandas 提供了复杂精细的索引功能,以便快捷地完成重塑、切片、聚合和选取数据子集等操作。

Python Matplotlib

Matplotlib 是最流行的用于绘制数据图表的 Python 库,它非常适合创建出版物中用的图表。Matplotlib 提供了一整套与 MATLAB 相似的命令 API,十分适合交互式地进行制图,而且也可以方便地将它作为绘图控件,嵌入 GUI 应用程序中。通过 Matplotlib 的 pyplot 子库提供的与 MATLAB 类似的绘图 API,可方便用户快速绘制 2D 图表,例如直方图、条形图、散点图等。

Matplotlib 还提供了名为 pylab 的模块,其中包括了许多 NumPy 和 pyplot 中常用的函数,方便用户快速进行计算和绘图。Matplotlib 与 IPython 结合提供了一个非常好的交互式数据绘图环境,绘制的图表也是交互式的,用户可以利用绘图窗口工具栏中的相应工具放大图表的某个区域,或对某个图表进行平移浏览。

Python SciPy

SciPy 是一组专门用于科学计算的开源 Python 库,它构建于 NumPy 的基础上,提供了一个用于在 Python 中进行科学计算的工具集。SciPy 经常与 NumPy、pandas、Matplotlib 和 IPython 这些核心库一起使用,SciPy 主要包括 8 个包,这些包分别对应着不同的科学计算领域,SciPy 主要包括的包见表 1。

表 1:SciPy 的包简介
包名 描述
scipy.integrate 数值积分例程和微分方程求解器
scipy.linalg 扩展了由numpy. linalg提供的线性代数例程和矩阵分解功能
scipy.optimize 函数优化器(最小化器)和跟踪查找算法
scipy.signal 信号处理工具
scipy.sparse 稀疏矩阵和稀疏线性系统求解器
scipy.special SPECFUN (是一个实现了许多常用数学函数的 Fortran 库)的包装器
scipy.stats 标准连续和离散概率分布(如密度函数、采样器、连续分布函数等),各种统计检验方法,以及更好的 描述统计法
scipy.weave 利用内联的C+十代码加速数组计算的工具

注意:NumPy 与 SciPy 的有机结合完全可以替代 MATLAB 的计算功能。

Python  scikit-learn

scikit-learn 是一个简单有效的数据挖掘和数据分析工具,可供用户在各种环境下重复使用,而且 scikit-learn 是建立在 NumPy、SciPy 和 Matplotlib 的基础上的,对一些常用的算法进行了封装。

scikit-learn 的基本功能主要分为六大部分:分类、回归、聚类、数据降维、模型选择和数据预处理。在数据量不大的情况下,scikit-learn 可以解决大部分问题。对算法不精通的用户在执行建模任务时,并不需要自行编写所有算法,只需要简单地调用 scikit-learn 库里的模块就可以了。

Python IPython

IPython 是 Python 科学计算标准工具集的组成部分,它为交互式和探索式计算提供了一个高效的开发环境。它是一个增强的 Pythonshell,目的是提高编写、测试、调试 Python 代码的速度,主要用于交互式数据处理和利用 Matplotlib 对数据进行可视化处理。

除了标准的基本终端的 Pythonshell 外,该项目还提供了如下功能:
  • 一个类似于 Mathematica 的数据分析型软件,具有 Notebook 编辑窗口,即通过 Web 浏览器连接 IPython。
  • 一个基于 Qt 框架的 GUI 控制台,其中含有绘图、多行编辑和语法高亮显示等功能。
  • 用于交互式并行和分布式计算的基本框架。