Python を用いたケモメトリクス演習講習会受講報告書
1. はじめに
1.1 講習会の概略
講習会の目的は、「分光装置等から得られるデータセットを Python で解析処理、可視化する手法を実際に演習で取得する。
」です。
成分分析を行うためには、取得した複雑なスペクトルデータを解析し検量線を作成します。よく使われる解析が「多変量解析」です。この分野をケモメトリクス（計量化学）と呼びます。多変量解析は計算が複雑になるため、一般的には専用のソフトウエアを使用して行いますが、今回は、Python で取り組む講習会です。
講師(田中成昭先生)の著作である「Python で始める機器分析データの解析とケモメトリクス」で進められました。内容を大目次で紹介すると、
１

機器分析の世界 / 2 Python の基礎 / ３ 統計の基礎

４

データの前処理と可視化 / ５ ケモメトリクスの基礎

６

次元削減 / ７ クラスタリング / ８ 回帰

９クラス分類 / 10 フィッティング /11 2 次元相関分光法です。

今回は、１から４までの講習で、残りは次回に開催されるようです。

1.2 データ解析の考え方
機器分析の腕前と共に、データ解析の腕前も同等にして欲しいとのことです。
機器分析とデータ解析は、右の図で解説されました。
データ解析による前処理、とは、ベースライン補正、検量線作成、等であり、今回、講習した内容です。
データ解析関連のソフトについては、・Excel・Origin/Igor (グラフ作成ソフト)
・GRAMS (分光分析ソフト) 古い？
1

・Unscrambler/Pirouette

ケモメトリクス専用ソフト（100 万円程度）

・Python / R (無料)・MATLAB （100 万円程度）

が挙げられます。

費用負担が難しい環境では、無料でできる Python / R が、有効と考えられ、Python と R との比較では、Python は書籍、WEB での情報量に優れているという利点があります。

2. 講習会の内容
2.1

Python によるケモメトリクスで使用するライブラリィ

numpy

行列を扱う 計算が早いpandas

エクセルのような整理ができる

matplotlib

グラフ作成ソフト

scipy

科学技術計算scikit-learn

機械学習

２.2 データの概略
実測したデータではなく、関数で作成したガウスピーク波形で説明します。
縦軸が吸光度、横軸は波長と見てください。右がデータファイル構造です。
1 本のスペクトルですので、1 次配列（ベクトル）として扱います。

波
長

吸光度

2次に、濃度変化させた（11 種）複数のスペクトルが以下です。2 次元配列と呼ばれます。
縦軸が吸光度、横軸は波長で、凡例としてあるのが、濃度です。
今回、配慮すべきは、装置から排出されるデータと、機械学習に使用するデータと、プロットに使用するデータの間で、ｘ軸、ｙ軸が、異なります。
装置から排出されるデータと、プロット用のデータは以下となります。
濃度波
長
吸光度

プロット時のｘ軸は、データの１列目になるので、波長を横軸にするなら、上の右側のデータ構成になります。
一方 機械学習には、以下のデータ構造となります。
波長(説明変数)この構造で、濃度を data.index
波長を data.columns 吸光度をdata.values とします。
（機械学習のアルゴリズムとのことです）

濃度（サンプル）

吸光度

両データ構造の変換については、行列を転置する必要があります。（ .T を追加します）

3

２.3 講習で学んだ事
今回は、データの前処理関連ですが、学んだ事は以下です。
（コードは記載していませんが、提供は可能です）
２.３.1 前処理１ (補完、ステップ、範囲指定、ベースライン補正、最大値、ピーク値)
元データ（PVA の温度依存赤外スペクトル）周波数と温度とスペクトル値

データ表

4

補完 → 周波数の数字を、１例ですが、800.3 から 801.0 に補完します。
（装置間の違いの補完に利用可）補完は、線形補完、2 次/3 次スプライン補完の方法があります。

ステップ → 温度の表示を 1 個飛ばしにします。

ステップ → 周波数の表示を 1 個飛ばしにします。

5

横軸の範囲指定 → 2000 から 3800 の範囲にします。

ベースライン補正（1 点で）→ 2000 のところで、補正します。

6

ベースライン補正（2 点で）→ 2000,3800 のところで、線分により、補正します。

横軸の範囲指定 → 3000 から 3700 の範囲にします。

7

最大値検出 → 値の特定も可能です。

ピーク値検出 → 値の特定も可能です。ピーク検出の閾値を 0.5 にしています。

8

２.３.２ 前処理２(センタリング、スケーリング、SNV,MSC, Savitzky-Golay フィルター)機械学習に適したデータ（特徴量が明確）に変換する方法の説明です。
元データ（トウモロコシの近赤外スペクトル）周波数と異なるサンプルとスペクトル値データ表

9センタリング（平均値から差分の値）処理

スケーリング（標準偏差で割る）処理

オートスケーリング（センタリングして、標準偏差で割る）処理10

Standard Normal Variate(SNV) 処理 → 各サンプルで平均を０、標準偏差を１にする。
拡散反射スペクトルのように、散乱の影響でベースラインと信号強度のどちらも変化してしまうときに有効なベースライン補正。

Multiplicative Scatter Correction (MSC)→ SNV と同様に散乱の影響でベースラインと信号強度のどちらも変化してしまう拡散反射スペクトルのベースライン補正に用いられる。

11

Savitzky-Golay フィルター →window : 窓幅、polynom : 多項式の次数、order : 微分の次数 を設定して作成します。
window = 3 polynom =2 order =0 で作成

window = 10 polynom =2 order =0 で作成 (曲線は滑になる)

window = 3 polynom =2 order =1 で作成 (分かりにくくなる)

12

Savitzky-Golay フィルターによる 2 次微分という方法があります。
→０次微分と１時微分を２回繰り返します。見えやすくなりました。

今回の研修は、ここまででした。
データの前処理ができたので、次から、回帰、クラス分類等も進むとのことです。
ケモメトリクスに限らず、機械学習は、モデルの構築は標準化されているので、計算の開始は容易ですが、データの前処理を適切にしないと、うまくいかないですし、説明変数の選択も大きい要因となります。
次回の研修を楽しみにしています。

Savitzky-Golay フィルターについて、平滑化は理解できそうですが、2 次微分については、丁寧な説明がないように思います。
最後のページで、スペクトルの微分について、補足しました。

13スペクトルの微分実データではなく、ガウスピーク波形でのスペクトルの疑似としています。
・ピークの分離を微分で行います。
右図において、青の破線と橙色の破線のスペクトルがあるとして、近接しているので、合計されて、緑色の実線で表示された例です。
青破線は、中心が 480 で半値全幅は50 です。
橙破線は中心が 520 で半値全幅は50 です
右が１次微分した例です。

さらに、２次微分します。
480 と 520 のピークが見えてきます。
450 と 550 の付近に、正の信号があらわれますが、元データにはないピークです。
解説本は、正の信号には注意せよとのことでした。

14

・ベースライン補正を微分で行います。
中心が 480 で半値全幅は 50 のガウス
ピーク波形に、橙線破線のベースラインを加えて、右上がりのスペクトルを作成しました。
ベースラインは、y = 0.0005x という1 次関数です。
（ベースラインは直線という前提です）

右図は、1 次微分したものです。
ベースラインは、微分して、y = 0.0005 という定数になります。

右図は、2 次微分したものです。
定数の微分ですので、０になり、ベースライン補正しています。
また、元データは、1 個のピークですので、2 次微分すると、マイナス方向にピークが見えます。

15