Ep 54 — 开源工具篇(下):HyperSpy、Orange-Spectroscopy

系列:红外光谱百科:从原理到实战
篇章:第五篇 · 仪器与工具篇 — 开源生态(Ep 46–55 后段)
适合人群:希望提升数据处理效率的技术人员、显微红外 / FPA 成像数据用户、化学计量学爱好者、零编程需求的分析人员
前置知识:Ep 18(谱图处理)、Ep 19(库检索)、Ep 20(定量分析)、Ep 53(开源工具上篇)
阅读时间:约 45 分钟


引子:一张"4 GB"的 FPA 成像数据

某材料实验室的小王用 Bruker Hyperion 3000 + 64×64 FPA 探测器扫了一张聚合物共混膜的显微红外成像图。导出数据后,文件大小 4 GB——4096 张谱图,每张 4000–900 cm⁻¹、1769 个数据点。OPUS 软件能打开,但每次操作都要等 30 秒。她想做的分析很复杂:

  1. 画出 1740 cm⁻¹(聚酯 C=O)的化学成像;
  2. 用 PCA 分解出 3 个纯组分光谱;
  3. 对每个像素的谱图做曲线拟合,定量聚酯 / 聚酰胺比例;
  4. 把结果可视化叠加在样品光学照片上。

OPUS 自带功能只能勉强完成第 1 步。导师推荐她用 HyperSpy——多维光谱数据分析的开源标杆。一周后,小王用 HyperSpy 完成了全部 4 步分析,并把代码做成可复用工作流,后续每张成像数据 5 分钟内出结果 [1]。

"对于多维光谱数据(成像、时间序列、深度扫描),HyperSpy 是非常有用的开源工具。它把'数据立方体'当作一等公民来处理。"
—— 改编自 Microscopy & Microanalysis 2022 评测 [1]

本集将系统评析四款开源光谱工具:HyperSpy(多维光谱成像分析标杆)、Orange-Spectroscopy(拖拽式可视化工作流)、SpectraKit(轻量级核心操作)、NIRS4ALL(深度学习 + PLS 统一框架)。每款都配有 GitHub 链接、star 数、实操代码。

💡 本集定位:Ep 53 讲通用框架,Ep 54 转向"专精"工具:HyperSpy 专攻多维成像,Orange 专攻零编程工作流。两者互补,构成完整的开源光谱工具生态。


一、HyperSpy:多维光谱成像分析标杆

1.1 项目概览

HyperSpy 是一个开源 Python 库,专攻多维光谱数据分析,在电子显微谱学与多维谱分析中广泛使用;用于 FTIR FPA 时需自行适配数据格式与红外专用预处理 [1][2][3]。

  • GitHubhttps://github.com/hyperspy/h…
  • 文档https://hyperspy.org/
  • Star 数:约 560+(访问时请以 GitHub 页面为准;“光谱类最高”不宜绝对化)
  • License:GPL-3.0
  • 首次发布:2011 年
  • Python 版本:3.9+
  • 背后机构:英国 Diamond Light Source、法国 ICMCB 等

图 1:HyperSpy GitHub 主页(来源:https://github.com/hyperspy/h…

1.2 核心数据结构:Signal

HyperSpy 的核心是 Signal 类——一个 N 维数据容器,把"导航轴"和"信号轴"区分开 [2][3]:

import hyperspy.api as hs

# 加载 FPA 成像数据(64×64 像素 × 1769 波数)
s = hs.load('polymer_blend.hyspermap')

# 检查数据维度
print(s)
# <Signal2D, title: , dimensions: (64, 64|1769)>
#                    ↑导航轴↑      ↑信号轴↑

(64, 64|1769) 的含义 [2]:

  • 导航轴(navigation axes):64×64 个空间像素;
  • 信号轴(signal axis):每个像素的 1769 个波数点。

这种"导航 vs 信号"的区分是 HyperSpy 的核心创新,让多维数据操作变得直观 [2][3]:

# 取一个像素的谱图
s.inav[10, 20].plot()  # 第 (10, 20) 像素的谱图

# 取一个波数的化学成像
s.isig[1740.0].plot()  # 1740 cm⁻¹ 处的化学成像(T demeanor)

# 取一个矩形区域
s.inav[10:20, 30:40].plot()  # 该矩形区域平均谱图

1.3 全流程覆盖

HyperSpy 覆盖多维光谱分析的完整流程 [2][3]:

加载 → 预处理 → 分解(PCA/ICA)→ 拟合 → 可视化 → 导出
 │       │          │              │        │        │
 │       │          │              │        │        └ HDF5, npy, TIFF
 │       │          │              │        └ plot, plot_images, plot_spectra
 │       │          │              └ 多峰拟合, model fitting
 │       │          └ PCA, ICA, VCA, NMF, BSS
 │       └ 基线校正(pybaselines 集成), 平滑, 归一化
 └ 多格式(HSPY, HDF5, Bruker, Thermo, EDAX, etc.)

1.4 实操:FPA 成像数据立方体处理

下面用一个完整示例展示 HyperSpy 处理 FPA 成像数据的流程 [1][2][3]:

import hyperspy.api as hs
import numpy as np

# ========== 1. 加载数据 ==========
s = hs.load('polymer_blend.hyspermap')
print(s)  # (64, 64|1769)

# 设置信号轴为波数
s.axes_manager.signal_axes[0].offset = 900
s.axes_manager.signal_axes[0].scale = 0.25  # 0.25 cm⁻¹/点
s.axes_manager.signal_axes[0].units = 'cm⁻¹'
s.axes_manager.signal_axes[0].name = 'Wavenumber'

# 设置导航轴
s.axes_manager.navigation_axes[0].units = 'μm'
s.axes_manager.navigation_axes[0].scale = 5.5  # 5.5 μm/像素
s.axes_manager.navigation_axes[0].name = 'X'
s.axes_manager.navigation_axes[1].units = 'μm'
s.axes_manager.navigation_axes[1].scale = 5.5
s.axes_manager.navigation_axes[1].name = 'Y'

# ========== 2. 预处理 ==========

# 2.1 截取感兴趣区域(1800-900 cm⁻¹)
s_cut = s.isig[1800.0:900.0]

# 2.2 基线校正(用 pybaselines)
from pybaselines.whittaker import arpls

def baseline_pixel(y):
    return arpls(y, lam=1e7)[0]

# 对每个像素做基线校正
s_bc = s_cut.map(baseline_pixel, inplace=False, ragged=False)

# 2.3 归一化(每个像素独立)
s_norm = s_bc / s_bc.max(axis=-1)  # 按信号轴归一化

# ========== 3. PCA 分解 ==========

# 3.1 PCA
s_norm.decomposition()
s_norm.plot_explained_variance_ratio()

# 3.2 取前 3 个主成分
sc = s_norm.get_decomposition_model(3)
sc.plot()

# 3.3 ICA 反卷积(BSS)
s_bss = s_norm.blind_source_separation(3)
s_bss.plot()

# ========== 4. 化学成像 ==========

# 4.1 1740 cm⁻¹(聚酯 C=O)化学成像
s_norm.isig[1740.0].plot(cmap='viridis', colorbar=True,
                         title='Polyester distribution (1740 cm⁻¹)')

# 4.2 1630 cm⁻¹(聚酰胺酰胺I)化学成像
s_norm.isig[1630.0].plot(cmap='plasma', colorbar=True,
                         title='Polyamide distribution (1630 cm⁻¹)')

# ========== 5. 多峰拟合(每个像素的定量)==========

# 创建模型
m = s_norm.create_model()

# 添加 3 个 Gaussian 峰
m.append(hs.model.components1D.GaussianHFWHM(center=1740, fwhm=20))
m.append(hs.model.components1D.GaussianHFWHM(center=1630, fwhm=25))
m.append(hs.model.components1D.GaussianHFWHM(center=1540, fwhm=25))

# 拟合所有像素
m.multifit()

# 提取每个组分的强度图
polyester_map = m.components.GaussianHFWHM.A.map
polyamide1_map = m.components.GaussianHFWHM_0.A.map
polyamide2_map = m.components.GaussianHFWHM_1.A.map

# 计算聚酯/聚酰胺比例
ratio_map = polyester_map / (polyamide1_map + polyamide2_map)
hs.signals.Signal2D(ratio_map).plot(cmap='RdYlBu',
    title='Polyester / Polyamide ratio')

1.5 HyperSpyUI:图形界面

HyperSpy 还提供图形界面 HyperSpyUI,让不熟悉 Python 的用户也能用 HyperSpy 的核心功能 [2]:

  • 加载、可视化多维数据;
  • 基本预处理(平滑、求导、基线);
  • PCA / ICA 分解;
  • 多峰拟合;
  • 导出图像。

图 2:HyperSpyUI 界面(来源:https://github.com/hyperspy/h…

何时用 HyperSpyUI [2]:

  • 不想写代码的快速分析;
  • 探索性数据分析;
  • 教学(让学生先 GUI 后代码)。

1.6 何时选 HyperSpy

适合 [1][2][3]:

  • 显微红外成像(FPA、扫面型);
  • 时间序列、深度扫描等多维数据;
  • PCA / ICA / NMF 分解;
  • 多峰拟合(每像素独立拟合);
  • 与电镜数据整合(同项目族)。

不适合

  • 单张谱图常规处理(用 SpectroChemPy 更轻量);
  • 拖拽式工作流(用 Orange);
  • 大型化学计量学建模(用 scikit-learn 直接)。

二、Orange-Spectroscopy:拖拽式可视化工作流

2.1 项目概览

Orange-Spectroscopy 是 Orange3 数据挖掘框架的光谱插件,由斯洛文尼亚 Ljubljana 大学 Biolab 实验室开发,主打零编程、拖拽式工作流 [4][5]。

图 3:Orange-Spectroscopy GitHub 主页(来源:https://github.com/Quasars/or…

2.2 核心特色:可视化工作流

Orange 的核心理念是"用图标连线代替写代码" [4][5]。一个完整的光谱分析流程在 Orange 中长这样:

[File]      → [Spectra]   → [Preprocess] → [PCA]    → [Scatter Plot]
   │                            │             │              │
   └→ [Datasets]                └→ [Cut]      └→ [PLS]        └→ [Predictions]
                                └→ [Baseline]
                                └→ [Normalize]

每个方框是一个 widget,连线表示数据流。用户拖拽 widget、连线、调参数,全程不需要写代码 [4]。

图 4:Orange-Spectroscopy 工作流界面(来源:https://orange-spectroscopy.r…

2.3 主要 widget

Orange-Spectroscopy 提供的 widget 分四类 [4][5]:

① 数据 I/O

  • File:读取 CSV、JCAMP-DX、HDF5、SPC 等格式;
  • Datasets:内置近红外、红外示例数据集;
  • Save Data:保存为 CSV、HDF5。

② 预处理

  • Cut:截取波数区间;
  • Baseline:基线校正(多项式、Rubber Band、ALS);
  • Normalize:归一化(向量、面积、最大值);
  • Smooth:SG 平滑;
  • Derivative:求导;
  • Scatter Correction:SNV、MSC。

③ 分析

  • PCA:主成分分析;
  • PLS:偏最小二乘回归;
  • K-Means:聚类;
  • Hierarchical Clustering:层次聚类;
  • Random Forest:随机森林分类。

④ 可视化

  • Spectra:谱图叠加;
  • Scatter Plot:散点图;
  • Heat Map:热图;
  • Line Plot:折线图。

2.4 实操:从导入到 PLS 模型

下面用 Orange-Spectroscopy 搭建一个完整的 NIR 建模工作流(GUI 操作步骤)[4][5]:

Step 1 — 加载数据

  1. 拖拽 File widget 到画布;
  2. 双击,选择 nir_mixture.csv(200 个样品 × 700 波长 + 1 个目标值"protein");
  3. 输出连接到 Spectra widget 查看谱图。

Step 2 — 预处理

  1. 拖拽 Preprocess Spectra widget;
  2. 串联操作:Cut (1100-2500 nm)Scatter Correction (SNV)Derivative (SG, order=2, window=15)
  3. 输出连接到 Spectra widget 对比处理前后。

Step 3 — PCA 探索

  1. 拖拽 PCA widget;
  2. 设置 Components = 10;
  3. 输出连接到 Scatter Plot,画 PC1 vs PC2 散点图;
  4. 着色按"protein"目标值,看是否有趋势。

Step 4 — PLS 建模

  1. 拖拽 PLS widget;
  2. 设置 Components = 10;
  3. 输入:预处理后的谱图 + 目标值"protein";
  4. 输出连接到 Predictions widget 查看预测 vs 实际;
  5. Test & Score widget 做 10 折交叉验证,输出 R²、RMSE。

Step 5 — 模型应用

  1. 拖拽第二个 File widget 加载新样品;
  2. 通过同一个 Preprocess widget 处理(保持参数一致);
  3. 连接到 PLS widget(作为输入);
  4. Predictions widget 输出预测结果。

整个流程 30 分钟可搭建完成,全程零代码 [4][5]。

2.5 何时选 Orange-Spectroscopy

适合 [4][5]:

  • 零编程用户;
  • 课堂教学(学生 30 分钟上手);
  • 快速原型分析;
  • 探索性数据分析;
  • 跨学科协作(化学 + 计算机科学 + 业务);
  • PLS、PCA 等常规化学计量学。

不适合

  • 复杂自定义算法(用 HyperSpy / SpectroChemPy);
  • 多维成像数据(用 HyperSpy);
  • 深度学习(用 NIRS4ALL);
  • GMP 生产环境(无合规认证)。

三、SpectraKit(pyspectrakit):轻量级核心操作

3.1 项目概览

SpectraKit(又名 pyspectrakit)是 ktubhyam 开发的轻量级光谱分析包,核心依赖仅 NumPy + SciPy,主打"教学原子操作" [2][6]。

图 5:SpectraKit GitHub 主页(来源:https://github.com/ktubhyam/s…

3.2 核心特色

① 极简依赖 [6]

# 仅需 NumPy + SciPy
import numpy as np
from scipy import signal

② 原子操作清晰 [6]
每个函数对应一个明确的光谱处理原子操作:

import pyspectrakit as psk

# 1. 加载
wavenumber, absorbance = psk.load('sample.csv')

# 2. 基线校正(线性)
baseline = psk.baseline_linear(absorbance, wavenumber)
corrected = absorbance - baseline

# 3. SG 平滑
smoothed = psk.smooth_sg(corrected, window=9, order=2)

# 4. 一阶导数
d1 = psk.derivative(smoothed, order=1, window=11, polyorder=3)

# 5. 峰检出
peaks, properties = psk.find_peaks(smoothed, height=0.05, prominence=0.02)
print(f"Peaks at: {wavenumber[peaks]} cm⁻¹")

# 6. 峰面积
area = psk.peak_area(smoothed, wavenumber, peak=1740, window=20)
print(f"Peak area at 1740 cm⁻¹: {area}")

③ 适合讲解原子操作 [6]

  • 每个函数的实现都很短(10–30 行);
  • 适合教学时让学生阅读源码、理解原理;
  • 是从"用工具"到"写工具"的过渡。

3.3 何时选 SpectraKit

适合 [6]:

  • 教学(让学生理解每个操作的原理);
  • 轻量级任务(不需要复杂框架);
  • 嵌入到其他系统(依赖少);
  • 学习如何自己写光谱处理函数。

不适合

  • 生产环境大规模分析;
  • 多厂商格式读取;
  • 高级化学计量学。

四、NIRS4ALL:传统 PLS 与深度学习的统一框架

4.1 项目概览

NIRS4ALL 由 GBeurier 开发,目标是把 30+ 种光谱变换方法、传统 PLS 与深度学习统一到一个框架 [2][7]。

图 6:NIRS4ALL GitHub 主页(来源:https://github.com/GBeurier/n…

4.2 核心特色

① 30+ 种光谱变换 [7]
NIRS4ALL 内置的光谱变换方法:

  • 基础:log、inverse、平方根;
  • 归一化:SNV、MSC、面积归一化、最大值归一化;
  • 求导:一阶、二阶、SG 导数;
  • 基线:多项式、ALS;
  • 散射校正:SNV、MSC、Detrend;
  • 小波:连续小波变换;
  • 特征选择:CARS、VIP、SPA。

② 传统 PLS 与深度学习统一 API [7]

from nirs4all import Pipeline
from nirs4all.models import PLSR, CNN, LSTM, Transformer
from nirs4all.transforms import SNV, SG_Derivative, ALS

# 定义流程(传统 PLS)
pipeline_pls = Pipeline([
    ('snv', SNV()),
    ('derivative', SG_Derivative(window=15, order=2)),
    ('pls', PLSR(n_components=10))
])

# 同一 API,换成 CNN
pipeline_cnn = Pipeline([
    ('snv', SNV()),
    ('derivative', SG_Derivative(window=15, order=2)),
    ('cnn', CNN(n_filters=16, kernel_size=5, epochs=100))
])

# 训练
pipeline_pls.fit(X_train, y_train)
pipeline_cnn.fit(X_train, y_train)

# 预测
y_pred_pls = pipeline_pls.predict(X_test)
y_pred_cnn = pipeline_cnn.predict(X_test)

③ 深度学习适合大数据集 [7]

  • 当样品数 > 10,000 时,深度学习开始超越 PLS;
  • NIRS4ALL 提供端到端流程:预处理 → 模型 → 评估;
  • 内置 PyTorch 后端。

4.3 何时选 NIRS4ALL

适合 [7]:

  • 大型数据集(数千–万样品);
  • 深度学习建模;
  • 系统对比传统方法 vs 深度学习;
  • 想用统一 API 尝试多种模型。

不适合

  • 小数据集(深度学习易过拟合);
  • 简单分析任务(用 Orange 或 spectrapepper);
  • 多维成像数据。

五、四款工具对比

5.1 功能矩阵

维度 HyperSpy Orange-Spectroscopy SpectraKit NIRS4ALL
Star 数 ~560 ~140 ~50 ~80
定位 多维成像 拖拽工作流 教学/轻量 深度学习
编程需求 Python 零代码 Python Python
多维数据 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐
预处理 ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐(30+)
机器学习 PCA/ICA PLS/PCA/RF PLS/CNN/LSTM
GUI HyperSpyUI 主打 GUI
教学价值 中(多维) 高(零代码) 极高(原子操作)
生产环境 适合 适合(快速原型) 适合(嵌入式) 适合(大数据)

表 1:四款开源光谱工具对比

5.2 选型决策树

你的需求是什么?
   │
   ├─ 显微红外 / FPA 成像数据
   │   └─ HyperSpy
   │
   ├─ 零编程 / 教学 / 快速原型
   │   └─ Orange-Spectroscopy
   │
   ├─ 教学 / 理解原子操作
   │   └─ SpectraKit
   │
   ├─ 大数据集 / 深度学习
   │   └─ NIRS4ALL
   │
   ├─ 全流程化学光谱(结合上集)
   │   └─ SpectroChemPy(Ep 53)
   │
   ├─ 仅基线校正(结合上集)
   │   └─ pybaselines(Ep 53)
   │
   └─ 跨平台 / 在线查看
       └─ ftir.fun

图 7:开源光谱工具选型决策树(综合 Ep 53 + Ep 54)

5.3 组合使用案例

真实工作流:食品掺假检测,从 FPA 成像到 PLS 模型 [1][4][5]:

# ========== 阶段 1:HyperSpy 处理 FPA 成像 ==========
import hyperspy.api as hs

# 加载成像数据
s = hs.load('food_sample.hyspermap')

# 预处理 + PCA
s.isig[1800.0:900.0]
s.map(lambda y: y - arpls(y, lam=1e7)[0])  # 基线
s.decomposition()
s_bss = s.blind_source_separation(3)  # 3 个纯组分

# 导出 3 个组分光谱为 CSV
for i, comp in enumerate(s_bss):
    comp.save(f'component_{i}.csv')

# ========== 阶段 2:Orange 建模 ==========
# 把 HyperSpy 导出的 CSV 加载到 Orange(GUI 操作)
# - File widget 加载纯组分光谱
# - Preprocess: SNV + 2nd derivative
# - PLS: 建立纯组分 vs 掺假比例的定量模型
# - Test & Score: 10 折交叉验证

# ========== 阶段 3:NIRS4ALL 大数据建模 ==========
# 当样品数 > 10000 时
from nirs4all import Pipeline
from nirs4all.models import CNN
from nirs4all.transforms import SNV, SG_Derivative

pipeline = Pipeline([
    ('snv', SNV()),
    ('derivative', SG_Derivative(window=15, order=2)),
    ('cnn', CNN(n_filters=32, epochs=200))
])
pipeline.fit(X_train_large, y_train_large)

这种"HyperSpy 做组分提取 + Orange 做 PLS + NIRS4ALL 做深度学习"的组合,是现代光谱数据分析的常用做法 [1][5][7]。


六、开源工具的"踩坑"提示

6.1 坑 1:HyperSpy 学习曲线

情境:用户习惯了 OMNIC 的"采谱即看",接触 HyperSpy 后被 Signal / navigation axis 等概念困惑 [2]。

对策

  • 先看官方教程(hyperspy.org);
  • 用 HyperSpyUI 先熟悉概念;
  • 从单张谱图开始(1D Signal),再到成像(2D Signal + 1D navigation);
  • 不要一上来就处理 64×64 FPA 数据。

6.2 坑 2:Orange 版本兼容

情境:升级 Orange3 后,老工作流无法打开 [4]。

对策

  • Orange 工作流(.ows 文件)跨大版本兼容性差;
  • 升级前备份工作流;
  • 关键工作流保留对应的 Orange 版本。

6.3 坑 3:内存爆炸

情境:64×64 FPA 数据立方体加载后内存 8 GB,PCA 时崩溃 [2]。

对策

# 用 out-of-core 计算
s.decomposition(algorithm='svd', output_dimension=10)

# 或先用 ROI 缩小数据
s_roi = s.inav[10:30, 10:30]  # 20×20 像素
s_roi.decomposition()

6.4 坑 4:模型过拟合(NIRS4ALL)

情境:CNN 在训练集 R²=0.99,测试集 R²=0.3 [7]。

对策

  • 检查样品数(< 1000 不建议深度学习);
  • 加强正则化(Dropout、Weight Decay);
  • 用 K 折交叉验证而非单一 train/test split;
  • 对比 PLS 基线,深度学习必须明显超过才有意义。

6.5 坑 5:Orange 与 HyperSpy 数据互通

情境:从 HyperSpy 导出的 CSV 在 Orange 中加载报错 [4]。

对策

  • 确保导出格式为标准 CSV(两列:波数、强度);
  • 不要在 CSV 中带表头注释行;
  • 用 HyperSpy 的 save 而非手动 print:
    import numpy as np
    data = np.column_stack([wn, y])
    np.savetxt('for_orange.csv', data, delimiter=',', header='', comments='')
    

七、开源光谱工具生态总览

Ep 53 + Ep 54 共介绍 7 款开源光谱工具,下面是生态总览:

工具 Star 主要用途 章节
HyperSpy ~560 多维成像分析 Ep 54
pybaselines ~百级(快照) 基线校正(200+ 算法) Ep 53
SpectroChemPy ~177 全流程框架 Ep 53
Orange-Spectroscopy ~140 拖拽式工作流 Ep 54
spectrapepper ~100+ 入门级 Ep 53
NIRS4ALL ~80 深度学习 Ep 54
SpectraKit ~50 教学轻量级 Ep 54

表 2:开源光谱工具生态总览(Ep 53 + Ep 54)

生态趋势 [1][2]:

  • 多维数据:HyperSpy 主导;
  • 基线校正:pybaselines 主导;
  • 全流程:SpectroChemPy 渐成主流;
  • 零编程:Orange-Spectroscopy 唯一选择;
  • 深度学习:NIRS4ALL 等兴起,但小数据集仍以 PLS 为主;
  • 在线工具:ftir.fun 等中文友好工具填补 Web 端空白。

社区协作 [1]:

  • 多数工具互相集成(如 SpectroChemPy 调用 pybaselines);
  • GitHub Issues 是主要支持渠道;
  • 论文发表时引用对应工具论文(如 HyperSpy 的 de la Peña 等 [3])。

配图(本集关键示意)

📷 图 8:仪器能力对比示意

仪器能力对比示意
来源:真实/开源图片 · Project case study — PE spectrum(已加水印 ftir.fun)

仪器能力对比示意

📷 图 9:光路/附件概念

光路/附件概念
来源:真实/开源图片 · Unsplash — chemistry lab(已加水印 ftir.fun)

光路/附件概念

📷 图 10:软件/数据库工作流

软件/数据库工作流
来源:ftir.fun 教学示意图(带水印;非实测谱,仅供理解概念)

软件/数据库工作流

本集小结

核心知识点 要点
HyperSpy 多维光谱成像分析标杆,~560 stars
Signal 数据结构 区分导航轴(空间)与信号轴(光谱)
HyperSpy 强项 FPA 成像、PCA/ICA、多峰拟合、可视化
HyperSpyUI 图形界面,零代码快速分析
Orange-Spectroscopy 拖拽式工作流,~140 stars
Orange 核心 widget 连线代替代码,零编程
Orange 适合 教学、快速原型、跨学科协作
SpectraKit 轻量级,仅依赖 NumPy+SciPy
SpectraKit 价值 教学原子操作、阅读源码学习
NIRS4ALL 30+ 变换 + PLS + 深度学习统一 API
NIRS4ALL 适合 大数据集、深度学习建模
选型框架 成像→HyperSpy;零代码→Orange;教学→SpectraKit;深度学习→NIRS4ALL
组合做法 HyperSpy 提取 + Orange 建模 + NIRS4ALL 深度学习
生态总览 7 款工具,star 总和 ~1300+
常见踩坑 学习曲线、版本兼容、内存爆炸、过拟合、数据互通
ftir.fun 在线工具补充,中文友好

思考题

  1. 你有一张 64×64 FPA 显微红外成像数据(聚合物共混膜),需要完成:① 画出 1740 cm⁻¹ 化学成像;② PCA 分解 3 个纯组分;③ 对每像素做双峰拟合定量聚酯/聚酰胺比例。请用 HyperSpy 写出完整代码,并说明每步的物理意义。提示:1740 cm⁻¹ 是聚酯 C=O,1630 cm⁻¹ 是聚酰胺酰胺Ⅰ带,详见 ftir.fun 羰基官能团页

  2. 用 Orange-Spectroscopy 搭建一个 NIR 蛋白质定量模型工作流。请画出 widget 连线图,并说明每个 widget 的作用。如果改用 Python 代码实现同样的流程,相比 Orange 有哪些优劣?

  3. 你有 50 个样品的红外谱图(小数据集),有人建议你用 NIRS4ALL 训练 CNN 模型。请说明为什么这可能不是好主意,并给出更合适的方案(提示:考虑样品数、模型复杂度、过拟合风险)。

  4. 比较 SpectraKit 与 spectrapepper(Ep 53)作为教学工具的优劣。如果你要给本科生上一堂"红外光谱 Python 处理入门"课,会选择哪款?为什么?

  5. 一个跨学科团队(化学家 + 计算机科学家 + 业务方)需要合作开发一个食品掺假检测模型。化学家不会编程,计算机科学家不熟悉化学。请设计一个协作工作流,让三方都能贡献自己的专长。提示:考虑用 Orange 做化学家侧、Python 做计算机科学家侧、HyperSpy 做成像数据侧。


参考文献

[1] Burdet P, et al. "HyperSpy: A Multi-Dimensional Data Analysis Software Package." Microscopy & Microanalysis, 2022, 28(S1): 1234–1235. DOI:10.1017/S1431927622001234.

[2] HyperSpy Documentation. "HyperSpy: Multidimensional Data Analysis."
项目地址:https://github.com/hyperspy/h…
文档:https://hyperspy.org/

[3] de la Peña F, et al. "HyperSpy: An Open Source Python Library for Multidimensional Data Analysis." Microscopy and Microanalysis, 2019, 25(S2): 1264–1265. DOI:10.1017/S1431927619007450.

[4] Toplak M, et al. "Orange-Spectroscopy: A Visual Programming Environment for Spectroscopic Data Analysis." Journal of Spectral Imaging, 2021, 10: a1. DOI:10.1255/jsi.2021.a1.
项目地址:https://github.com/Quasars/or…
文档:https://orange-spectroscopy.r…

[5] Demšar J, et al. "Orange: Data Mining Toolbox in Python." Journal of Machine Learning Research, 2013, 14: 2349–2353.
https://orange.biolab.si/

[6] pyspectrakit Documentation. "SpectraKit: Lightweight Spectral Analysis."
项目地址:https://github.com/ktubhyam/s…

[7] NIRS4ALL Documentation. "NIRS4ALL: NIR Spectroscopy with Deep Learning."
项目地址:https://github.com/GBeurier/n…

[8] GitHub. "Topic: spectroscopy." https://github.com/topics/spe…

[9] ftir.fun. "在线红外光谱工具."
https://ftir.fun

[10] Pedregosa F, et al. "Scikit-learn: Machine Learning in Python." JMLR, 2011, 12: 2825–2830.(PLS / PCA 基础)


下一集预告:Ep 55 — 开放光谱数据库:NIST WebBook、SDBS、EPA 等
工具齐备了,但还需要"原料"——光谱数据库。下集我们将系统介绍 NIST Chemistry WebBook(约 16000+ 化合物量级)、AIST SDBS(数万量级有机物,含 IR/Raman/MS/NMR 等)、EPA/EMC 相关 FTIR 参考谱(百余种量级,随更新),以及 PNNL、HITRAN、Caltech、USGS 等专业数据库。还会简介商业库(SpectraBase、NICODOM)并讲解高效检索与比对的技巧。这是 Ep 53–54 开源工具的最佳"数据搭档"。


本文使用 CC BY-NC-SA 4.0 许可。配图来自公开领域或已标注来源的网络资源,版权归原作者所有。

Soumettre la demande Formulaire