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 秒。她想做的分析很复杂:
- 画出 1740 cm⁻¹(聚酯 C=O)的化学成像;
- 用 PCA 分解出 3 个纯组分光谱;
- 对每个像素的谱图做曲线拟合,定量聚酯 / 聚酰胺比例;
- 把结果可视化叠加在样品光学照片上。
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]。
- GitHub:https://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]。
- GitHub:https://github.com/Quasars/or…
- 文档:https://orange-spectroscopy.r…
- Star 数:~140(截至 2024 年)
- License:GPL-3.0
- 首次发布:2016 年
- Python 版本:3.8+
图 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 — 加载数据
- 拖拽
Filewidget 到画布; - 双击,选择
nir_mixture.csv(200 个样品 × 700 波长 + 1 个目标值"protein"); - 输出连接到
Spectrawidget 查看谱图。
Step 2 — 预处理
- 拖拽
Preprocess Spectrawidget; - 串联操作:
Cut (1100-2500 nm)→Scatter Correction (SNV)→Derivative (SG, order=2, window=15); - 输出连接到
Spectrawidget 对比处理前后。
Step 3 — PCA 探索
- 拖拽
PCAwidget; - 设置 Components = 10;
- 输出连接到
Scatter Plot,画 PC1 vs PC2 散点图; - 着色按"protein"目标值,看是否有趋势。
Step 4 — PLS 建模
- 拖拽
PLSwidget; - 设置 Components = 10;
- 输入:预处理后的谱图 + 目标值"protein";
- 输出连接到
Predictionswidget 查看预测 vs 实际; - 用
Test & Scorewidget 做 10 折交叉验证,输出 R²、RMSE。
Step 5 — 模型应用
- 拖拽第二个
Filewidget 加载新样品; - 通过同一个
Preprocesswidget 处理(保持参数一致); - 连接到
PLSwidget(作为输入); Predictionswidget 输出预测结果。
整个流程 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]。
- GitHub:https://github.com/ktubhyam/s…
- Star 数:~50(截至 2024 年)
- License:MIT
- 首次发布:2021 年
- Python 版本:3.7+
图 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]。
- GitHub:https://github.com/GBeurier/n…
- Star 数:~80(截至 2024 年)
- License:MIT
- 首次发布:2019 年
- Python 版本:3.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 | 在线工具补充,中文友好 |
思考题
你有一张 64×64 FPA 显微红外成像数据(聚合物共混膜),需要完成:① 画出 1740 cm⁻¹ 化学成像;② PCA 分解 3 个纯组分;③ 对每像素做双峰拟合定量聚酯/聚酰胺比例。请用 HyperSpy 写出完整代码,并说明每步的物理意义。提示:1740 cm⁻¹ 是聚酯 C=O,1630 cm⁻¹ 是聚酰胺酰胺Ⅰ带,详见 ftir.fun 羰基官能团页。
用 Orange-Spectroscopy 搭建一个 NIR 蛋白质定量模型工作流。请画出 widget 连线图,并说明每个 widget 的作用。如果改用 Python 代码实现同样的流程,相比 Orange 有哪些优劣?
你有 50 个样品的红外谱图(小数据集),有人建议你用 NIRS4ALL 训练 CNN 模型。请说明为什么这可能不是好主意,并给出更合适的方案(提示:考虑样品数、模型复杂度、过拟合风险)。
比较 SpectraKit 与 spectrapepper(Ep 53)作为教学工具的优劣。如果你要给本科生上一堂"红外光谱 Python 处理入门"课,会选择哪款?为什么?
一个跨学科团队(化学家 + 计算机科学家 + 业务方)需要合作开发一个食品掺假检测模型。化学家不会编程,计算机科学家不熟悉化学。请设计一个协作工作流,让三方都能贡献自己的专长。提示:考虑用 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 许可。配图来自公开领域或已标注来源的网络资源,版权归原作者所有。


