[Python]B14─资料科学⼯具概览

Hi! 大家好,我是Eric,这次教大家Python的资料科学工具概览!
http://img2.58codes.com/2024/emoticon12.gif


■ 资料科学工具概览

■ 前置作业
若使用的环境是Anaconda或Miniconda环境的话,我们可以先执行下列程式码安装这次介绍的工具套件。

$ conda install numpy scipy pandas matplotlib scikit-learn

■ NumPy:Python数值计算
NumPy是Python储存与操作高维阵列一个非常有效率的工具。

NumPy有下面2个重要特性:

它提供了ndarray结构体,能够高效地储存和操作向量、矩阵和更高维度的资料集。它提供易读且高效率的语法来处理资料,支援从简单的按元素的算术运算(element-wise)
到相对複杂的线性代数运算。NumPy的 阵列 基本上与Python的列表很像,举例像是产生1-9的阵列:
import numpy as np      #引入NumPy套件,并取名为npx = np.arange(1, 10)    #引入NumPy套件的.arange函式x
NumPy阵列除了提供 高效率储存资料 的方法,也提供了 高效率的函式针对元素进行运算 ,如将上面的x元素全部平方:
x ** 2
比较上面阵列运算的结果与列表推导的结果:
[val ** 2 for val in range(1, 10)]
不像列表受限于一维, NumPy阵列可以是多维的 ,像是下面我们将上面的x调整成3x3维度的阵列:
M = x.reshape((3, 3))M
NumPy也可以做矩阵的运算,像是用 .T 计算转置矩阵(transpose matrix):
M.T
或是透过 np.dot()进行矩阵乘法:
np.dot(M,[5,6,7])
或是透过 np.linalg.eigvals()进行特徵值分解,特徵值是NxN维的矩阵A和N维的非零向量v,若满足Av=λv,其中λ为一纯量,则称λ是v对应的特徵值。也就是特徵向量被施以线性变换A,只会使向量伸长或缩短,而其方向不变:
np.linalg.eigvals(M)

上面几个线性代数的计算是现代资料分析的基础,在**机器学习(machine learning)和资料探勘(data mining)**尤为明显。

■ Pandas:标籤化的行导向资料储存(Labeled Column-oriented Data)
Pandas是一个比NumPy新很多的函式库,基本上是以NumPy为基础。Pandas提供了一个标籤化的介面来访问多维资料,并且以 资料框(data frame) 物件的形式呈现,R语言的使用者可能会感受很熟悉。

import pandas as pd       #引入pandas套件,并命名为pddf = pd.DataFrame({'label': ['A', 'B', 'C', 'A', 'B', 'C'],'value': [1, 2, 3, 4, 5, 6]})df
Pandas允许我们直接以名字选择列进行操作:
df["label"]

-针对字串栏位套用字串处理函式:

df["label"].str.lower()

-针对数值栏位套用总计(aggregate)函式:

df['value'].sum()

-更重要的是可以直接应用高阶的资料库串接与分组操作,我们只用一行程式码就计算出了相同标籤的数值总和,若是使用NumPy或核心的Python程式码,可能会经过繁複的过程才能达到目的!

df.groupby("label").sum()

■ Matplotlib:MatLab风格的科学视觉化
Matplotlib是目前Python最受欢迎的科学视觉化函式库,儘管它的爱好者都认为它的介面有时过于繁琐,但它对于绘製各种类别的图表可说非常强的工具套件。

要使用Matplotlib,若是Jupyter Notebook的使用者,我们要先开启记事本模式:
%matplotlib notebook              #Jupyter Notebook使用者需要额外执行这行程式码import matplotlib.pyplot as plt   #引入Matplotlib套件,并命名为pltplt.style.use('ggplot')           #使用R语言的ggplot风格画图
首先我们先用NumPy阵列建立一些资料,并将结果画出来:
x = np.linspace(0, 10)     # 从 0 到 10 範围内取值y = np.sin(x)              # 取这些值的正弦值plt.plot(x, y);            # 绘製成⼀条曲线#若我们使用互动模式执行上面的程式码,可以在一个互动式的视窗移动、缩放、滚动来浏览资料
若想了解更多Matplotlib资讯,详阅Matplotlib线上画廊:http://matplotlib.org/gallery.html

■ SciPy:Python科学计算
SciPy是基于NumPy建立的一个科学计算功能集合。下面列出重要的模组:

scipy.fftpack:快速傅立叶转换(Fast Fourier Transforms(FFT))scipy.integrate:数值积分(numerical integration)scipy.interpolate:数值插值(numerical interpolation)scipy.linalg:线性代数方法scipy.optimize:函式数值优化(numerical optimization of function)scipy.sparse:稀疏矩阵储存(sparse matrix storage)和线性代数scipy.stats:统计分析方法(statisticals analysis)我们就来实际操作看看吧!在某些资料中间插值,并画出平滑的曲线:
from scipy import interpolate#选择0-10之间的8个点x = np.linspace(0, 10, 8)y = np.sin(x)#建立一个三次插值函式func = interpolate.interp1d(x, y, kind="cubic")#在1000个点的网格上进行插值运算x_interp = np.linspace(0, 10, 1000)y_interp = func(x_interp)#绘製成果plt.figure()   #新的图片plt.plot(x, y, "o")plt.plot(x_interp, y_interp)#我们看到的是点之间平滑的插值

■ 其他资料科学函式库

机器学习的函式库:Scikit-Learn图像处理、分析的工具:Scikit-Image统计建模的工具:Statsmodels针对天文学和天体物理学的工具:AstroPy神经影像学工具:NiPy

■ Refer to《Python 旋风之旅,[正体中文]Will保哥》的第16章


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章