Python DOE水準表を作成してcsvファイルに出力する

'23/11/05更新:コードの可読性を向上させました。
 本記事では、Pythonで任意の数の組み合わせによるDOE(実験計画法)を作成する雛形コードを載せました。
 使用方法は、本コード中にある「param_dict」と名付けた辞書に、作成したい水準の各パラメータを設定するだけです。例えば、下記例では入力因子にLength, Weight, Young_modulus, CTE, Testerの5つを設定し、各々のパラメータ(媒介変数)数は、4, 2, 3, 3, 2個を設定した場合です。

# パラメータを辞書型で設定する。数はいくらでも良い。
param_dict = {
'Length1': (1, 2, 3, 4),
#'Length2': (2, 4, 6, 8),
'Weight': (10, 50),
'Young_modulus': (100, 150, 200),
'CTE':(8e-6, 17e-6, 20e-6),
'Tester':('A', 'B')
}

 上記の設定で本コードを実行すると、下図のような144水準(=4×2×3×3×2)の水準表をcsvファイルで作成することができます。

f:id:HK29:20200804230658p:plain

■本プログラム

from itertools import product
import pandas as pd
import datetime
now = datetime.datetime.now()
now = now.strftime("%y%m%d")

# 作成する水準表のファイル名
save_file_path = f"{now}_doe.csv"

# 入力パラメータを辞書で作成
input_params = {
    'Length1': (1, 2, 3, 4),
    #'Length2': (2, 4, 6, 8),
    'Weight': (10, 50),
    'Young_modulus': (100, 150, 200),
    'CTE':(8e-6, 17e-6, 20e-6),
    'Tester':('A', 'B')
}

# 総組み合わせを作成
combinations = list(product(*input_params.values()))

# pandasデータフレームにする
df = pd.DataFrame(combinations, columns=input_params.keys())

# 列をコピペ(Length2の因子がLength1と等しい値で良い場合)
#df['Length2'] = df['Length1']

# 列の並び替え
#df = df.loc[:, ('Length1', 'Length2', 'Weight', 'Young_modulus', 'CTE', 'Tester')]

# csvファイルに出力する
df.to_csv(save_file_path, sep=",", index=False, encoding="utf-8")

(参考)ExcelVBAで同様のことをしたい場合は下記リンクを参照ください。 

hk29.hatenablog.jp

(参考)Pythonにて乱数による水準表を作成したい場合は下記リンクを参照ください。

hk29.hatenablog.jp

以上

<広告>