中文 · English課程入口 Teaching portalSpectraView 教學頁GitHub 原始碼
Orange Data Mining × Spectroscopy

Orange 光譜 Widgets

五個開源 widgets,把光譜學帶進 Orange 視覺化工作流:貼上 IRUG / SOPRANO 網址直接看光譜、 算相似度、建光譜庫比對未知物、用 NNLS 拆解混合光譜成分、畫水光譜學 Aquagram——全程拖拉連線、免寫程式。

安裝 Install Widget 教學 真實數據 Demo 範例工作流
Overview

五個 Widgets,一條龍的光譜鑑定流程

安裝後 Orange 工具箱會多一個 Spectra 分類。輸出的資料表採 Orange-Spectroscopy 慣例 (每一欄=一個波數、每一列=一條光譜),可直接接 PCA、PLS、階層式分群等 Orange 原生流程。

Import Spectrum URL

貼上 IRUG 編號(如 4119)、IRUG/SOPRANO 頁面網址,或 JCAMP-DX / CSV 直接網址——下載、畫圖、輸出資料表,一鍵完成。可連抓多條累積成一組。

Spectra Similarity

兩組光譜的逐對相似度:Pearson correlation、cosine、光譜角 SAM、Euclidean 距離。自動對齊重疊波段再比較。

Spectral Library

把參考譜收進光譜庫、存成 .speclib 檔(與 SpectraView 桌面版完全互通),未知譜對庫搜尋、輸出排名命中表與最佳匹配。

Mixture Analysis

混合光譜 ≈ Σ cᵢ·參考譜ᵢ 的非負最小平方(NNLS)分解:回報每個成分的係數、百分比與擬合 R²,並疊出擬合曲線與殘差。

Aquagram(水光譜學)

Aquaphotomics 分析:在水的 12 個特徵吸收帶(WAMACs)取正規化吸光度,畫成 12 軸雷達圖,比較不同樣品/擾動下水的氫鍵結構差異。

Install

安裝

先搞清楚你的 Orange 是哪一種——這決定安裝方式:
桌面版 App(從 orangedatamining.com 下載的獨立程式,點圖示開)→ 走 方式 A
pip 版 Orange(自己 pip install orange3、用 python -m Orange.canvas 開)→ 走 方式 B
兩者的 Python 環境不同,裝錯環境 widgets 不會出現。

方式 A ── 桌面版 App(最推薦)

用 App 內建的 Add-ons 對話框,從 PyPI 依名稱安裝:

1

開 Add-ons

Orange 選單 Options ▸ Add-ons…

2

Add more… 輸入名稱

按右上 Add more…,輸入 orange-spectra不是 git 網址——這個框只吃 PyPI 名稱),打勾後按 OK

3

重啟 Orange

工具箱出現 Spectra 分類的 5 個 widgets。

找不到 orange-spectra代表尚未發佈到 PyPI。發佈方式見 PUBLISHING.md; 在那之前,桌面版可改用「命令列安裝進 App 環境」:找到 App 的 Python(如 …\Orange\python.exe)執行 python.exe -m pip install "git+https://github.com/Tai-ShengYeh/spectraview.git#subdirectory=orange-spectra"

方式 B ── pip 版 Orange

# 1) Orange 與 Qt 綁定(缺 PyQt5 會出現 "PyQt5 ... not available" 而開不了)
pip install orange3 PyQt5 PyQtWebEngine

# 2) orange-spectra widgets(直接從 GitHub 裝)
pip install "git+https://github.com/Tai-ShengYeh/spectraview.git#subdirectory=orange-spectra"

# 3) 啟動(用這個指令,不要點桌面 App 圖示——那是另一個環境)
python -m Orange.canvas
常見錯誤:
ImportError: PyQt5 … not available → 少裝 Qt,補 pip install PyQt5 PyQtWebEngine
▸ Add-ons 的 Add more… 貼 git 網址得到「packages were not found」→ 那個框只接受 PyPI 名稱,git 網址請走方式 B 的 pip install
裝一次就好,不用每次都裝。安裝是一次性的——裝完之後每次開 Orange, Spectra 分類的 5 個 widgets 都在,直接用。
只有要「更新」到新版時才需要重裝: pip install --upgrade --force-reinstall --no-deps "git+https://github.com/Tai-ShengYeh/spectraview.git#subdirectory=orange-spectra", 然後完全關掉 Orange 再重開
▸ 每個 widget 左上角都有 「ℹ 說明 How to use」盒子與 「📖 開啟線上教學」按鈕, 不會用時點一下就能學。
Widget guide

Widget 逐一教學

Import Spectrum URL — 從網址匯入光譜

輸出:Spectra(Table,每列一條光譜)
  1. 在輸入框貼上來源,按 Fetch & add
    • IRUG 編號:4119(=http://www.irug.org/jcamp-details?id=4119,PB15 酞菁藍 Raman 譜)
    • SOPRANO 頁面網址(比利時 KIK-IRPA 顏料 Raman 資料庫)
    • JCAMP-DX(AFFN)或兩欄 CSV 的直接網址
  2. 右側即時畫出光譜(IR/Raman 慣例:波數由高至低)。
  3. 重複 Fetch 可累積多條光譜;清單可移除單條或全部清空。多條光譜會自動重採樣到共同波段。
原理:IRUG 網頁沒有下載檔——光譜其實藏在頁面互動圖(jqPlot)的 <script> 裡("波數:強度" 配對);SOPRANO 則藏在 Dygraph 的資料陣列。widget 直接解析網頁原始碼還原數據。

Spectra Similarity — 光譜相似度

輸入:Data(待比對光譜)、References(參考光譜,可省略) 輸出:Scores(逐對分數表)
  1. 接上 Data 與 References:輸出 Data × References 每一對的四個指標。
  2. 只接 Data:改為 Data 內部兩兩互比(適合看一批樣品彼此像不像)。
  3. 排序依據可選 correlation / cosine(越大越像)或 SAM / Euclidean(越小越像)。
指標意義特性
correlationPearson 相關係數對位移與縮放都不敏感,鑑定最常用
cosine向量夾角餘弦對縮放不敏感
SAM光譜角(弧度)遙測/高光譜常用,越小越像
euclid單位化後歐氏距離直觀的「形狀差多少」

Spectral Library — 光譜庫建立與比對

輸入:Spectra(要入庫的參考譜)、Query(未知譜) 輸出:Hits(排名表)、Best Match(最佳匹配譜)、Library(整個庫)
  1. 把參考譜接到 Spectra 輸入,按 Add input spectra to library 入庫。
  2. Save… 存成 .speclibLoad… 載入既有庫——檔案格式與 SpectraView 桌面版相同,例如可直接載入 repo 附的 examples/sugars_nir.speclib(9 種糖類 NIR 庫)。
  3. 未知譜接 Query:Hits 輸出每個 query 對每筆庫藏的排名與四個相似度指標,接 Data Table widget 即可檢視。
  4. Library 輸出把整個庫變成資料表——可以直接接 Mixture Analysis 當參考譜,或接 Spectra 檢視。

Mixture Analysis — 混合光譜成分分析

輸入:Mixture(混合譜,取第一列)、References(純物質參考譜) 輸出:Composition(成分係數/比例)、Fit(擬合譜+殘差)
  1. 混合譜接 Mixture、一組純物質參考譜接 References
  2. 用非負最小平方(NNLS)解 mixture ≈ Σ cᵢ·refᵢ (+ offset);係數強制 ≥ 0,符合物理意義。
  3. widget 內直接顯示成分表(係數、百分比)與 R²;圖上疊出混合譜、擬合線與殘差。
  4. Composition 輸出接 Data TableBar Plot 畫成分比例;Fit 輸出含 mixture / NNLS fit / residual 三列。
教學重點:殘差若仍有明顯峰形,代表庫裡少了某個成分——這正是「參考譜不完整」的視覺證據。

Aquagram — 水光譜學(aquaphotomics)雷達圖

輸入:Data(NIR 光譜,需涵蓋約 1300–1600 nm 的水吸收區) 輸出:Aquagram Coordinates(每列一條光譜、12 個 WAMACs 欄)

Aquaphotomics(Tsenkova)用水在近紅外的 12 個特徵吸收帶(WAMACs,water matrix coordinates,約 1336–1522 nm)當「水的指紋」,把樣品在這 12 個座標的正規化吸光度畫成雷達圖,比較不同狀態(溫度、濃度、品種…擾動)下水的氫鍵結構變化。做法參考 NIRPY Research 的 aquagram 教學

  1. 接上 NIR 光譜(可先用 Import Spectrum URL / File 載入,或接 Orange-Spectroscopy 的前處理)。
  2. 選正規化方式:
    • raw:直接取 12 個波段的吸光度。
    • snv:先對每條光譜做 SNV(標準常態變量),再取值。
    • aquagram(預設,經典正規化):SNV 後,對整組樣品在每個波段做標準化 (值−均值)/標準差——0 就是這組的平均水譜,往外 = 該波段吸光度高於平均、往內 = 低於平均。
  3. 右側即時畫出 12 軸雷達圖,每條光譜一條線;WAMACs 波段可在輸入框自訂(預設標準 12 帶)。
  4. Aquagram Coordinates 輸出是 n×12 的資料表,可再接 PCA、分群或 Data Table 做量化比較。
波段說明:預設 12 WAMACs(nm)=1342, 1364, 1372, 1382, 1398, 1410, 1438, 1444, 1464, 1474, 1492, 1516;分別對應水的不同氫鍵物種(自由水 OH、S₀–S₄ 水簇、水合等)。若光譜單位不是 nm 或未涵蓋此區,widget 會提示波段落在範圍外。
Live demo · 真實數據跑出結果

用內建範例資料實際跑一遍

下面所有圖與數字都是用 repo 內的真實範例資料examples/sugars_nir.speclib ——9 種糖類/添加物的 NIR 光譜、3 個未知樣品)與真實玉米 NIR,實際用這些 widgets 的演算法跑出來的, 不是示意圖。你在自己電腦照做會得到一樣的結果。

① Import Spectrum URL → 一次載入一組光譜

把 9 條糖類 NIR 參考譜載進來、疊在同一張圖(每列一條光譜的 Table)。

9 sugar NIR spectra

② Spectra Similarity → 9×9 相關係數熱圖

對 9 條糖譜兩兩算 correlation。化學上合理:蔗糖 vs 果糖 ≈ 0.99(蔗糖=葡萄糖+果糖), 糖類 vs 咖啡因 ≈ 0.71 明顯拉開。

correlation heatmap

③ Spectral Library → 未知糖比對排名

unknown_glucose.csv 對 9 種糖的庫搜尋,第一名正確命中 glucose(correlation = 1.0000)

library search ranking
排名命中correlation
1glucose1.0000
2sucrose0.9562
3fructose0.9533
9caffeine0.7078

④ Mixture Analysis → NNLS 拆解混合譜

65% glucose + 35% sucrose 混成一條譜餵進去,NNLS 準確還原比例 (glucose 65.0%、sucrose 35.0%、其餘成分 ≈ 0),R² = 1.0000

NNLS mixture fit
成分NNLS 係數比例真值
glucose0.65065.0%65%
sucrose0.35035.0%35%
其他 7 種≈ 0≈ 0%0%

⑤ Aquagram → 真實玉米 NIR 水光譜雷達圖

用真實玉米近紅外光譜,在 12 個 WAMACs 取正規化吸光度畫成 aquagram(雷達圖)。

real corn NIR aquagram
Example workflows

三個課堂範例工作流

① 看譜:貼網址 → 光譜 → 資料表

Import Spectrum URL輸入 4119(IRUG PB15)
Spectra
Data Table檢視數據

最短路徑:一個 widget 就能「貼上網址看光譜」;再接 Orange-Spectroscopy 的 Spectra widget 或 Line Plot 可另行檢視。

② 鑑定:建庫 → 未知譜比對

Import Spectrum URL抓多條參考譜
Spectra
Spectral Library入庫 → Save .speclib
Hits
Data Table排名結果
File / Import URL未知樣品譜
Query

未知譜從第二個來源(File widget 讀 CSV,或再開一個 Import URL)接到 Library 的 Query.speclib 檔和 SpectraView 桌面版、教學範例庫完全互通。

③ 定量:混合譜成分分析

Import Spectrum URL混合樣品譜
Mixture
Mixture AnalysisNNLS 分解
Composition
Bar Plot成分比例圖
Spectral LibraryLibrary 輸出當參考譜
References

參考譜可以來自光譜庫的 Library 輸出——「建庫」與「拆混合物」自然銜接成一條流程。

Integration

與 SpectraView、Orange-Spectroscopy 的整合

互通點說明
.speclib 光譜庫Orange 裡存的庫,SpectraView 桌面版直接 Library ▸ Load library… 開啟;反之亦然(如 examples/sugars_nir.speclib)。
資料表格式欄名=波數、每列一條光譜——與 Orange-Spectroscopy 及 SpectraView 的「合併匯出 X-matrix」相同,匯出 CSV 可雙向載入。
演算法相似度四指標與 NNLS 的定義和 SpectraView 完全一致,桌面版與 Orange 版結果可互相驗證。
下游分析Spectra 輸出可直接接 Orange 的 PCA、PLS(化學計量學)、距離矩陣、階層式分群等 widgets。
FAQ

常見問題

要每次用都重新 pip 安裝嗎?

不用。安裝是一次性的——裝完之後每次開 Orange,Spectra 分類的 5 個 widgets 都在,直接用。 只有要更新到新版時才重裝(pip install --upgrade --force-reinstall --no-deps …), 且重裝後要完全關掉 Orange 再重開才會生效。桌面版 App 若日後上了 PyPI,用 Add-ons 對話框安裝更會自動記住、可線上更新。

不會用某個 widget,怎麼學?

每個 widget 左上角都有 「ℹ 說明 How to use」盒子(簡短中英說明)和 「📖 開啟線上教學」按鈕, 點按鈕就會開這頁對應段落。也可先看上面的 真實數據 Demo 看每個 widget 實際跑出什麼。

抓 IRUG 失敗(連線錯誤)怎麼辦?

先確認瀏覽器打得開該頁;校內網路有時擋外部站台。仍失敗時,可在瀏覽器用 SpectraView 桌面版的 File ▸ Import from URL / IRUG… 匯入後存成 CSV,再用 Orange 的 File widget 載入。

JCAMP-DX 檔抓下來是亂碼/解析失敗?

URL 匯入支援 AFFN(純數字)JCAMP;壓縮格式(SQZ/DIF/DUP)請用 SpectraView 開啟(它有完整解碼器)後匯出 CSV。

兩條光譜波段不同能比較嗎?

可以。相似度與 NNLS 都會先取重疊波段、內插到共同格點再計算;完全沒有重疊才會回報錯誤。

可以先做基線校正/平滑再比對嗎?

建議可以:接 Orange-Spectroscopy 的 Preprocess Spectra widget(含基線、SNV、Savitzky-Golay 等)在比對之前處理;或先在 SpectraView 做 airPLS 再匯出。