通过 Jupyter 开启数据科学之路
4.1 简介
Python 有大量的第三方库, 已形成生态. Jupyter 是一个交互式工具, 易于使用与展示.
4.1.1 NumPy(np)
NumPy, Numerical Python, 是科学计算的基础包. 提供矩阵, 向量的计算功能.
NumPy 的核心对象是 ndarray
. 它封装了基于 Python 原生数据类型的 n 维数组. 其计算非常的简洁. 例如矩阵计算只需要: c = a + b
即可.
使用步骤:
- 导入
numpy
, 一般会命名为np
. - 使用
np.array()
创建矩阵对象. 将数组视为行向量, 有行向量组成矩阵. - 使用
<a>.ndim
获得矩阵的秩, 又称为维度, 轴数. - 使用
<a>.shape
获得矩阵的形状, 例如(4,3)
表示 4 行 3 列. - 使用
<a>.size
获得元素个数. - 使用
np.arange()
获得一维数组, 再使用reshape(r, c)
方法生成矩阵. - 使用
<a>.T
获得转置.
基本上都与线性代数中的运算相对应.
NumPy 的基本运算都是将各个分量上的元素进行两两运算. 如果要进行矩阵乘法, 使用: a @ b
.
4.1.2 Pandas(pd)
Pandas 主要用于数据处理与分析. 基本可以理解为表格计算的工具集, 处理关系运算的工具 (猜测).
Pandas 提供两个重要的数据结构: Series
和 DataFrame
Series
是以为标签化同类型数组.DataFrame
是二维标签化表格型数据结构.
使用:
- 导入模块 (先导入
numpy
), 一般命名为pd
pd.DataFrame({ 'dept': [ ... ], 'qty': [ ... ] })
初始化- 可以当做集合, 访问分量. 例如:
df['dept']
,df['qty']
. - 可以使用
df['列名'].str.lower()
对数据批量处理. - 可以使用聚合函数:
df['列'].sum()
- 可以使用
groupby('列')
对结果进行分组 (逻辑上与 SQL 一样).
索引也是从 0 开始的.
4.1.3 Matplotlib(plt)
一个可视化包, 以简单的方式将数据绘制成图. 它是一个 Python2D
的绘图库.
基于 pandas
的数据绘制折线图
import numpy as py
import pandas as pd
df = dp.DataFrame(...)
import matplotlib.pyplot as plt
df.plot()
即可绘制出折线图.
若要绘制正弦曲线
x = np.linspace(0,10)
y = np.sin(x)
plt.plot(x, t)
基于 Matplotlib 还有更为强大的 seborn.
4.1.4 SciPy
SciPy, Scientific Python. 它是基于 NumPy 的用于科学计算的函数集合包. 是基于 Fortran 进行的封装.
SciPy 的常用模块有:
scipy.constants
: 物理常量和数学常量.scipy.fftpack
: 快速傅里叶变换.scipy.integrate
: 积分.scipy.interpolate
: 插值.scipy.linalg
: 线性代数.scipy.ndimage
: n 维图像包.scipy.signal
: 信号处理.scipy.spatial
: 空间数据结构.scipy.stats
: 统计.
然后书中给出了利用样本点生成三次插值函数的案例
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
# 在 0 到 10 中生成 8 个等距的点 (优点是不用计算不长/间隔)
x = np.linspace(0, 10, 8)
y = np.sin(x)
# 生成一个三次插值函数
func = interpolate.interp1d(x, y, kind='cubic')
# 使用新函数来生成绘制用的点
x_interp = np.linspace(0, 10, 100)
y_interp = func(x_interp)
# 绘图
plt.figure()
plt.plot(x, y, 'o')
plt.plot(x_interp, y_interp)
plt.show()
4.2 了解机器学习
简要介绍 scikit-learn. 基于 Scipy 开发出了很多工具包, 统称为 Scikit. 其中 scikit-learn 是用于机器学习的.
它提供六大类工具:
- 数据预处理, data preprocessing. 主要是数据特征提取.
- 分类, classification. 为数据划分类别.
- 回归, regression. 预测给定数据相关的连续值.
- 聚类, clustering. 主要是识别具有相似特征的对象.
- 数据降维, data dimensionality reduction. 主要是减少无关数据, 减少需要处理的数据.
- 模型选择, model selection. 目的为了提高精度.
具体细节不多整理.
然后给出了一个鸢尾花数据集的案例, 加以说明. 这里略.
然后列举了其他工具 (因为 scikit-learn 对深度学习支持有限, 并对图形处理器支持不好). 该领域更新太快, 略去.