列値の設定ダイアログでPythonを使用

各列の値を数式や関数、スクリプトで指定する際に使用する「列値の設定」ダイアログですが、今までは使用できるスクリプトはOrigin独自のスクリプトであるLabTalkのみでした。しかし、バージョン2021以降では「列値の設定」ダイアログに「Python関数」項目が追加され、ここにPythonのコードを記述して呼び出すことや、.pyファイルに記述した関数を呼び出すことが可能になりました。

ここでは例として、

  • スムージングを行うコードを「列値の設定」の「Python関数」に直接記述する方法(scipyのSavitzky-Golayフィルタを利用するコードを作成)
  • .pyファイルにコードを記述し「列値の設定」で関数を呼び出す方法(numpyのabsメソッドを使ってデータの絶対値を取得する関数を作成)

をご紹介します。

列値の設定でPythonを使う

「Python関数」に記述

ここでは「列値の設定」ダイアログにてscipyパッケージでスムージングを実行し、結果を列に出力してみます。

事前準備

ここで作成する関数ではPythonパッケージの「numpy」「scipy」を使用しますのであらかじめインストールしてください。パッケージインストール後はOriginを再起動してください。パッケージが認識されずエラーになることがあります。
詳しいインストール方法については下記ページをご覧ください。

インストールされているパッケージの確認方法はこちらをご覧ください。

作成手順

  1. まず、スムージングする元データをインポートします。空のワークシートがある状態で、メニューの データ:ファイルからインポート:ASCIIファイル を選択し、Originのサンプルフォルダ内のさらに"Signal Processing"フォルダにある"Signal with High Frequency Noise.dat"を選択してインポートします。
  2. サンプルフォルダの場所はメニューの ヘルプ:フォルダを開く:サンプルフォルダ で確認できます。デフォルトでは"C:\Program Files\OriginLab\Origin2022b\Samples"です。

  3. 新しい列C列を追加し、さらにこのC列を選択して右クリックし、「列値の設定」を選択します。
  4. 列値の設定ダイアログを開く
  5. 開いた「列値の設定」ダイアログにて、下部の「Python関数」タブを開き下記コードを入力します。
  6. import numpy as np
    from scipy import signal
    
    def smooth(y, npts, norder):
        #データの入出力形式をdocstringで指定
        """
        F:Fii
        """
        #Savitzky-Golayフィルタで平滑化
        y=signal.savgol_filter(np.array(y), npts, norder)
        return y
  7. さらに"Col(C)="の上部テキストボックスに下記コードを入力して「適用」すると結果がC列に出力されます。
  8. py.smooth(B,51,2)
    Pythonで関数を記述

補足

手順3のコード内で使用しているdocstringはOrigin内で使用できる入出力の型を指定するコードです。":"の左側が出力、右側が入力の型を指定しています。どの文字でどの型が指定できるかについては下記の対応表をご覧ください。

文字
f float型
F リストのfloat型
s str型
S リストのstr型
i int型

.pyファイルに関数を記述して呼び出す

「列値の設定」ダイアログに直接関数を記述するのではなく、ユーザファイルフォルダにあるlabtalk.pyファイルに関数を記述して「列値の設定」で呼び出すこともできます。

事前準備

ここで作成する関数ではPythonパッケージの「numpy」を使用しますのであらかじめインストールしてください。パッケージインストール後はOriginを再起動してください。パッケージが認識されずエラーになることがあります。
詳しいインストール方法については下記ページをご覧ください。

インストールされているパッケージの確認方法はこちらをご覧ください。

作成手順

ここではワークシートに入っているデータをPythonでソートしてみます。

  1. まず、labtalk.pyファイルを編集するためにコードビルダーを開きます。コードビルダーは上部ツールバー(アイコン群)にある黄色い歯車のボタンか、メニューの 表示:コードビルダー から開くことができます。
  2. コードビルダを開く
  3. コードビルダーにてメニューの ファイル:開く を選択し ユーザファイルフォルダにあるlabtalk.pyを開きます。
    ユーザファイルフォルダの場所はOriginメニューの ヘルプ:フォルダを開く:ユーザファイルフォルダで確認できます。
  4. labtalk.pyを開く
  5. 開いたファイルに下記のコードを入力し、Ctrl+S や ファイル:保存 で保存します。
  6. import numpy as np
    def get_absolutevalue(a:list)->list:
        #numpyの配列にして各要素の絶対値を返す
        aa = np.array(a)
        aa = np.abs(aa)
        return aa
    labtalk.pyにコードを入力
  7. 空のワークシートがある状態でA列を選択してさらに右クリックし、列値の一律設定:正規乱数 を選択して、データを生成します。
  8. 正規乱数を使ってデータを作成
  9. B列を選択して右クリックし「列値の設定」ダイアログを開きます。"col(B)="となっている上部のテキストボックスに"py.get_absolutevalue(A)"と記述し「OK」でダイアログを閉じるとA列の絶対値を取ったデータがB列に生成されます。
  10. py.get_absolutevalue(A)
    列値の設定で関数を参照するコードを入力して適用

補足1

列値の設定の上部テキストへ入力するコードはワークシートのヘッダ行"f(X)="に記述することもできます。

f(X)=行への入力も可能です

補足2

labtalk.pyではなくほかの.pyファイルにコードを記述して参照することもできます。例えば、ユーザファイルフォルダに作成したmyfunc.pyにある関数testを参照したい場合には、

py.myfunc.test(col(A))

のように参照します。

ほかのフォルダの.pyファイルを参照したい場合には"Python.LTwf$"でファイルを指定します。例えば

Python.LTwd$="D:\Python";
Python.LTwf$=MyFunctions.py;
col(B)=py.sort(col(A));   // D:\PytyhonフォルダにあるMyFunctions.pyからsort関数を呼び出す

のように参照します。

"originpro"パッケージに導入されているクラスの一覧やリファレンスは下記リンクから確認できます。

Python連載企画一覧ページ

次回の連載はこちら

page_top_icon