为什么是Python

Python作为胶水语言

Python成为成功的科学计算工具的部分原因是, 它能够轻松地集成C、 C++以及Fortran代码。 大部分现代计算环境都利用了一些FortranC库来实现线性代数、 优选、 积分、 快速傅里叶变换以及其他诸如此类的算法。 许多企业和国家实验室也利用Python来“粘合”那些已经用了多年的遗留软件系统。

解决“两种语言”问题

很多组织通常都会用一种类似于领域特定的计算语言(如SASR) 对新想法做研究、 原型构建和测试, 然后再将这些想法移植到某个更大的生产系统中去(可能是用JavaC#C++编写的) 。人们逐渐意识到, Python不仅适用于研究和原型构建, 同时也适用于构建生产系统。 为什么一种语言就够了, 却要使用两个语言的开发环境呢?

为什么不选Python

虽然Python非常适合构建分析应用以及通用系统, 但它对不少应用场景适用性较差。

  • Python是一种解释型编程语言, 因此大部分Python代码都要比用编译型语言(比如JavaC++) 编写的代码运行慢得多
    • 当然,程序员的是将比CPU时间值钱,所以也有很多人会对此做取舍
    • 但是,在那些延迟要求非常小或高资源利用率的应用中(例如高频交易系统)Python就相形见绌了
  • 对于高并发、 多线程的应用程序而言(尤其是拥有许多计算密集型线程的应用程序),Python
    不是一种理想的编程语言

    • Python有一个叫做全局解释器锁(Global Interpreter LockGIL) 的组件, 这是一种防止解释器同时执行多条Python字节码指令的机制

      重要的Python库

      NumPy

      NumPy(Numerical Python)的简称
  • 快速高效的多维数组对象ndarray

  • 用于对数组执行元素级计算以及直接对数组执行数学运算的函数
  • 用于读写硬盘上基于数组的数据集的工具
  • 线性代数运算、 傅里叶变换, 以及随机数生成

除此之外,Numpy的另一个主要作用,就是作为算法和库之间传递数据的容器

pandas

本书用的最多的pandas对象是

  • DataFrame,一个面向列(column-oriented)的二维表结构
  • Series,一个一维的标签化数组对象

pandas这个名字源于panel data(面板数据, 这是多维结构化数据集在计量经济学中的术语) 以及Python data analysis(Python数据分析)

matplotlib

  • 最流行的绘制图表和其他二维数据可视化库
  • 最初由John D.Hunter(JDH) 创建, 目前由一个庞大的开发团队维护

    SciPy

    SciPy是一组专门解决科学计算中各种标准问题域的包的集合, 主要包括下面这些包:

  • scipy.integrate: 数值积分例程和微分方程求解器

  • scipy.linalg: 扩展了由numpy.linalg提供的线性代数例程和矩阵分解功能
  • scipy.optimize: 函数优化器(最小化器) 以及根查找算法
  • scipy.signal: 信号处理工具
  • scipy.sparse: 稀疏矩阵和稀疏线性系统求解器
  • scipy.special: SPECFUN(这是一个实现了许多常用数学函数(如伽玛函数) 的Fortran库)的包装器
  • scipy.stats: 标准连续和离散概率分布(如密度函数、 采样器、 连续分布函数等) 、 各种统计
    检验方法, 以及更好的描述统计法。

NumPySciPy结合使用, 便形成了一个相当完备和成熟的计算平台。

scikit-learn

  • 分类: SVM、 近邻、 随机森林、 逻辑回归等等
  • 回归: Lasso、 岭回归等等
  • 聚类: k-均值、 谱聚类等等
  • 降维: PCA、 特征选择、 矩阵分解等等
  • 选型: 网格搜索、 交叉验证、 度量
  • 预处理: 特征提取、 标准化

    statsmodels

    scikit-learn比较, statsmodels包含经典统计学和经济计量学的算法

常用模块惯例

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import pandas as pd
  4. import seaborn as sns
  5. import statsmodels as sm