このページではPythonコードのサンプルを紹介します。サンプルを試す簡単な方法は以下の通りです。
サンプルには、あらかじめPythonパッケージのインストールが必要なものもあります。パッケージをインストールするコマンドを使用してから、コードビルダでPython IDEにサンプルコードをコピーして実行してください。
new_sheetなどの関数は、project.pyを参照してください。
from_listは、worksheetを参照してください。
import originpro as op data=[x/10.for x in range(50)] wks=op.new_sheet() wks.from_list('A',data, 'time', 'sec',axis='N') data1=[x*1.5 for x in range(50)] wks.from_list('B', data1, axis='X') wks.cols=3 wks.from_list(2, [sum(i) for i in zip(data, data1)], comments = 'A+B')
import originpro as op f=op.path('e')+r'Samples\Curve Fitting\Enzyme.dat' #ワークシートがアクティブであると仮定 wks=op.find_sheet() wks.from_file(f) print(wks.shape)
DataFrameでは、列名と、カテゴリ列や日時といった列データフォーマットの両方を使用できます。originproは、from_dfとto_dfを呼び出すだけです。
以下のサンプルを試す前に、必ずpandasをインストールしてください。このモジュールをインストールするには、スクリプトウィンドウを開き(Shift+Alt+3)、以下を入力してEnterキーを押します。
pip install pandas
インストール済みか確認してからインストールするには以下を実行します。
pip -chk pandas
import originpro as op import pandas as pd df = pd.DataFrame({ 'Date': ['10/25/2018','02/21/2019','04/01/2020'], 'Gender':['Male','Male','Female'], 'Score': [75.5, 86.7, 91], }) df['Date'] = pd.to_datetime(df['Date']) df['Gender']= pd.Categorical(df['Gender']) wks=op.new_sheet() wks.from_df(df) #このようにしてブック作成と第一シートを取得可能 wks2=op.new_book('w', 'Copy using DF')[0] #日付などの列フォーマットは自動的に処理 df1=wks.to_df() wks2.from_df(df1)
このサンプルでは、sklearnパッケージを使って、複数列のデータセットをTrainとTestという2つのデータセットに分割します。パッケージの有無をチェックしてインストールするには、スクリプトウィンドウを開き(Shift+Alt+3)、以下を入力してEnterキーを押します
pip -chk pandas sklearn
サンプルデータセットの一つをインポートし、訓練データとテストデータセットにランダムに分割するサンプルです。
import numpy as np import pandas as pd import originpro as op from sklearn.model_selection import train_test_split # データをインポートして独立データと従属データをそれぞれXとyに取得 respectively ws=op.new_sheet() ws.from_file(fname=op.path('e')+r"Samples\Statistics\Fisher's Iris Data.dat", keep_DC=False) X = ws.to_df(c1=0, numcols=4) # 最初の4列をXとして取得 y = ws.to_df(c1=4, numcols=1) #最後の列をYとして取得 # データセットを訓練およびテストデータセットに分割 # 訓練データセットは70%のサンプルを含み、テストデータセット30%のサンプルを含む # 分割前にデータをシャッフル X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=True, random_state=1) # 分割したデータセット用にワークブックを作成 wks = op.new_sheet('w', 'Split') Num = X_train.columns.shape[0] wks.from_list(Num, y_train.iloc[:, 0].tolist(), comments='Train', lname=y_train.columns[0]) wks.from_list(Num*2+1, y_test.iloc[:, 0].tolist(), comments='Test', lname=y_train.columns[0]) for idx in range(Num): wks.from_list(idx, X_train.iloc[:, idx].tolist(), comments='Train', lname=X_train.columns[idx]) wks.from_list(Num+1+idx, X_test.iloc[:, idx].tolist(), comments='Test', lname=X_train.columns[idx])
Originの行列シートは、同じ形状の2D配列である複数の行列オブジェクトを保持できるので、行列シートは3D配列を保持できます。このセクションでは、OriginのMatrixSheetとNumPy配列間のデータ転送に焦点を当てます。 詳細は、matrix.pyを参照してください。
このサンプルではNumPyを使用します。NumPyはPandasに含まれており、遅かれ早かれ必要になるPandasをインストールするのが最善です。パッケージの有無をチェックしてインストールするには、スクリプトウィンドウを開き(Shift+Alt+3)、以下を入力してEnterキーを押します。
pip -chk pandas
これは、Originの行列とNumpy配列間の基本的なデータ転送を示すサンプルです。
#3つの行列シートを作成してm3 = m1*m2とする import numpy as np import originpro as op #整数の行列データ aa = np.array([ [1, 2, 3], [4, 5, 6] ]) bb = np.array([ [10,11], [20,21], [30,31] ]) #新しい非表示行列ブックを作製して行列シートを取得 ma=op.new_sheet('m') #行列シートは3D配列を保持でき、形状とデータ型は自動的に設定される ma.from_np(aa) #同じブックの他のシート mb = ma.get_book().add_sheet() mb.from_np(bb) #結果を3番目のシートに出力 mc = ma.get_book().add_sheet('Dot Product') #numpyを使用して実際の計算を行う #ここでは各シートに1つの行列オブジェクトしかないため2D配列として取得 cc = np.dot(ma.to_np2d(), mb.to_np2d()) mc.from_np(cc)
スクリプトウィンドウで以下を実行して、openCV (cv2)をインストールします。
pip install opencv-python
このサンプルでは、tif画像を3D numpy配列にインポートしてからOriginの行列ブックに渡す方法を示します。
import originpro as op import numpy as np import cv2 # 複数のTIF画像を配列にインポート # 全画像は同じサイズであると仮定 ImArray = np.array([]) for idx in range(7): fname = op.path('e') + f'Samples\\Image Processing and Analysis\\myocyte{idx+1}.tif' array = np.array(cv2.imread(fname, cv2.IMREAD_UNCHANGED)) ImArray = np.dstack((ImArray, array)) if ImArray.size else array # この3D配列をOriginの行列シートに置く ms = op.new_sheet('m') ms.from_np(arr=ImArray, dstack=True) ms.show_slider(True) ms.show_image(True)
Originは複雑なグラフを作図できます。したがって、グラフ機能を最大限に活用するには、すでにグラフが作成されているプロジェクトを準備し、データを入れ替えるのが最善の方法です。Pythonコードが添付されたサンプルプロジェクトのページにいくつかサンプルを用意しています。
以下のサンプルでは、originproパッケージでプロット作成やシンプルなカスタマイズを実行する基本的な方法を示します。
このサンプルでは、いくつかのPythonパッケージが必要です。パッケージの有無をチェックしてインストールするには、スクリプトウィンドウを開き(Shift+Alt+3)、以下を入力してEnterキーを押します。
pip -chk scipy numpy
以下のサンプルでは、サンプルの信号データを作成し、このパッケージを使ってピリオドグラムパワースペクトル密度プロットを作成します。
import numpy as np from scipy import signal import originpro as op fs = 10e3 N = 1e5 amp = 2*np.sqrt(2) freq = 1234.0 noise_power = 0.001 * fs / 2 time = np.arange(N) / fs x = amp*np.sin(2*np.pi*freq*time) x += np.random.normal(scale=np.sqrt(noise_power), size=time.shape) f, Pxx_den = signal.periodogram(x, fs) wks = op.new_sheet(type='w', lname='Periodogram Power Spectral') wks.from_list(0, f, lname='Freq', units='Hz') wks.from_list(1, Pxx_den, lname='PSD', units='V\+(2)/Hz') graph = op.new_graph(template='line') graph[0].yscale = 2 #対数スケール graph[0].set_xlim(begin=0, end=5000, step=1000) graph[0].set_ylim(1e-7, 1e2, 2) #対数スケールのstep=2 graph[0].label('legend').remove() graph.set_int('aa', 1)#LTではpage.aa、アンチエイリアス -> On plot = graph[0].add_plot(wks, coly=1, colx=0, type='line') plot.color = '#167BB2'
サンプルプロジェクトのグラフから画像を作成します。このサンプルを実行すると、my_py_test.pngという名前のファイルが置き換えられることに注意してください。
save_figについての詳細は、graph.pyを参照してください。
import originpro as op #ラーニングセンターフォルダから op.open(op.path('c')+ r'\Graphing\Trellis Plots - Box Charts.opju') gg=op.find_graph(0) f='' if gg: f=gg.save_fig(op.path()+'my_py_test.png',width=500) import os if len(f): os.startfile(f)
出版物のグラフといった画像からすべての色を取得します。各色のRGB値がワークシートに出力されます。この例では、Pythonパッケージのextcolorsを事前にインストールする必要があります。
import extcolors import numpy as np import originpro as op file_path = op.file_dialog('*.png;*.jpg;*.bmp','Select an Image') if len(file_path) ==0: raise ValueError('user cancel') colors, pixel_count = extcolors.extract_from_path(file_path) colors = np.array(colors) #rgb = colors[:,0] rgb,pixel = map(list, zip(*colors)) #print(rgb) r = [] g = [] b = [] for row in rgb: r.append(row[0]) g.append(row[1]) b.append(row[2]) #色を出力 wks = op.new_sheet() wks.from_list(0, r) wks.from_list(1, g) wks.from_list(2, b)
関連情報: