どうも。こんにちは。
ケミカルエンジニアのこーしです。
本日は、化学プロセスのサンプルデータ入手方法について解説します。
データ解析を勉強する際、サンプルデータを用いることが多いです。
しかし、化学プロセスのような時系列のサンプルデータはなかなか見つかりません。
そこで本記事では、化学プロセスのサンプルデータの入手方法をまとめてみました。
データの前処理やモデル構築を勉強する際に、参考にしていただけたらと思います。
【追記】GitHubにコードとサンプルデータ(csv変換済み)をまとめておきました。
本記事の内容
・TEP(Tennessee Eastman Process)データ
①RData形式
②DATファイル
・脱ブタン塔データ
・酢酸ビニルモノマー(VAM)プラントデータ
・参考文献
この記事を書いた人
こーし(@mimikousi)
TEP(Tennessee Eastman Process)データ
上図は、Tennessee Eastman Process(TEP)のプロセスフローダイアグラム(PFD)です。
TEPは下記5つの主要機器からなるプロセスで、A,C,D,Eの4つの原料から化学反応によってG,Hの2つの製品を製造します。
- 反応器(Reactor)
- 凝縮器(Condenser)
- 精留塔(Stripper)
- 気液分離機(Vap/Liq Separator)
- コンプレッサ(Compressor)
データの内容
- TEPは52変数
12個の操作変数xmv(図の青字)、41個の観測変数xmeas(図の赤字)
※xmv12が省略されているので、データは52変数 - 3分周期の48時間データ(データ数n=960)
RData形式
まずは、RData形式のデータを取得してみましょう。
下記のリンクから、TEPデータをRData形式でダウンロードできます。
Additional Tennessee Eastman Process Simulation Data
ダウンロード手順
①「TEP_FaultFree_Testing.RData」と「TEP_Faulty_Testing.RData」にチェックを入れてダウンロードを押します。
②zip形式でダウンロードされるので、解凍しましょう。
ただし、解凍したファイルはRData形式なので、pythonでcsvファイルに変換します。
csvファイル化(RData→csv)
①rdataパッケージをpip installでインストールします。
コマンドプロンプト(Windows)かterminal(Mac)に以下のコードを入力します。
$ pip install rdata
※先頭の$は入力する必要はありません。
本記事では、先頭に$マークをつけることでpythonコードと異なることを示しています。
②rdataパッケージをインストールしたら、pythonでcsvファイルに変換します。
「sample_data.py」というファイルを作成し、以下のコードを入力しましょう。
import rdata
import pandas as pd
# RData 形式の読み込み
train_parsed = rdata.parser.parse_file('TEP_FaultFree_Testing.RData')
train_converted = rdata.conversion.convert(train_parsed)
test_parsed = rdata.parser.parse_file('TEP_Faulty_Testing.RData')
test_converted = rdata.conversion.convert(test_parsed)
# csv ファイルに変換
# 学習用データ
train_data = pd.DataFrame(train_converted ['fault_free_testing'])
train_data = train_data.iloc [0:960, 3:]
train_data.to_csv('normal_data.csv', index = False)
# パラメータチューニング用データ
tuning_data = pd.DataFrame(train_converted ['fault_free_testing'])
tuning_data = tuning_data.iloc [960:1920, 3:]
tuning_data.to_csv('tuning_data.csv', index = False)
# 異常データ
test_data = pd.DataFrame(test_converted ['faulty_testing'])
# 異常ごとに分割してcsv 形式で出力
for i in range(1, 21):
idv_data = test_data [test_data ['faultNumber'] == i]
idv_data = idv_data.iloc [0:960, 3:]
title_name = 'idv '+ str(i)+ '_data.csv'
idv_data.to_csv(title_name, index = False)
先ほどダウンロードした「TEP_FaultFree_Testing.RData」と「TEP_Faulty_Testing.RData」を「sample_data.py」と同じフォルダに置いてください。
TEPデータが格納された「normal_data.csv」と「tuning_data.csv」、また20個の異常データ「idv ○_data.csv」(○に数字が入る)が作成されます。
ちなみに、pythonの環境構築については下記の記事を参考にしてみてください。
VScodeがおすすめです。
-
-
【初心者向け】おすすめのpython環境構築方法
続きを見る
DATファイル
RData形式は、スモールデータ解析と機械学習で紹介されていた方法でした。
一方、化学のためのPythonによるデータ解析・機械学習入門では、DATファイルでTEPデータを入手する方法が紹介されています。
ダウンロード手順
①まず、GitHubのページにアクセスします。
②「code」ボタンを押すと「Download ZIP」が出てくるので、zipファイルをダウンロードしましょう。
③zipファイルを解凍すると下図のようにDATファイルが入手できます。
フォルダ名「tennessee-eastman-profBraatz-master」

csvファイル化(DATファイル→csv)
続いて、DATファイルをpythonでcsvに変換しましょう。
「tennessee-eastman-profBraatz-master」フォルダと同じディレクトリ(フォルダ)に、「sample_data_dat.py」というファイルを作成し、以下のコードを入力しましょう。
import pandas as pd
#変数名のリストを作成します
columns = ['xmeas_1', 'xmeas_2', 'xmeas_3', 'xmeas_4', 'xmeas_5', 'xmeas_6',
'xmeas_7', 'xmeas_8', 'xmeas_9', 'xmeas_10', 'xmeas_11', 'xmeas_12',
'xmeas_13', 'xmeas_14', 'xmeas_15', 'xmeas_16', 'xmeas_17', 'xmeas_18',
'xmeas_19', 'xmeas_20', 'xmeas_21', 'xmeas_22', 'xmeas_23', 'xmeas_24',
'xmeas_25', 'xmeas_26', 'xmeas_27', 'xmeas_28', 'xmeas_29', 'xmeas_30',
'xmeas_31', 'xmeas_32', 'xmeas_33', 'xmeas_34', 'xmeas_35', 'xmeas_36',
'xmeas_37', 'xmeas_38', 'xmeas_39', 'xmeas_40', 'xmeas_41', 'xmv_1',
'xmv_2', 'xmv_3', 'xmv_4', 'xmv_5', 'xmv_6', 'xmv_7', 'xmv_8', 'xmv_9',
'xmv_10', 'xmv_11']
#異常なしデータ(d00_te.csv)と21個の異常データ(d〇_te.csv)をcsvファイルにします。※〇に数字が入ります。
for i in range(22):
df = pd.read_table(f'./tennessee-eastman-profBraatz-master/d{i:02}_te.dat', sep=' ', header=None ,engine='python')
df.columns = columns
title_name = f'd{i:02}_te.csv'
df.to_csv(title_name, index = False)
正常データ「d00_te.csv」と21個の異常データ「d○_te.csv」(○に数字が入る)が作成されます。
ちなみに、データの区切り(sep=' ')は、スペース2つ分としています。
データの区切りにスペースを使うと警告が出るため、engine='python'を引数に記載しています。
脱ブタン塔データ
上図が脱ブタン塔のプロセスフロー概略図です。
ナフサを脱ブタン塔に供給し、塔頂からLPガス(C3/C4)が得られます。
塔底にも一部ブタン(C4)が含有してしまうため、「塔底におけるブタン含有量」を目的変数(観測変数)yとしています。
| 変数名 | 詳細 | 日本語訳 |
|---|---|---|
| x1 | Top Temperature | 塔頂温度 |
| x2 | Top pressure | 塔頂圧力 |
| x3 | Reflux flow | 還流流量 |
| x4 | Flow to next process | 次プロセスへの流量 |
| x5 | 6th tray Temperature | 6段目温度 |
| x6 | Bottom Temperature1 | 塔底温度1 |
| x7 | Bottom Temperature2 | 塔底温度2 |
| y | Butane(C4) content in the debutanizer column bottom | 塔底におけるブタン含有量 |

プロセス詳細はこちらの論文を参照してください。
データの内容
- 脱ブタンプロセスは8変数
7個の操作変数(x1〜x7)と、1個の観測変数(y) - 6分周期(仮)の約10日間データ(データ数n=2394)
ダウンロード手順
脱ブタン塔のデータについては、下記書籍の付属データを使用します。
Soft Sensors for Monitoring and Control of Industrial Processes
①まず、書籍のサポートページにアクセスします。
②下図を参考に、ダウンロードボタンを押してzipファイルをダウンロードしましょう。
③zipファイルを解凍すると「9781846284793_material.zip」が出てくるので、もう一度解凍しましょう。
すると、脱ブタン塔のデータ「debutanizer_data.txt」が得られます(SRU_data.txtもあります)。
csvファイル化(テキストファイル→csv)
「sample_data_debu.py」というファイルを作成し、以下のコードを入力しましょう。
import pandas as pd
#変数名のリストを作成します
columns = ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'y']
#txtファイルをcsvファイルに変換します。
df = pd.read_table('debutanizer_data.txt', skiprows=2, sep=' ',header=None, engine='python')
df.columns = columns
df.to_csv('debutanizer_data.csv', index=False)
脱ブタン塔データ「debutanizer_data.csv」が作成されます。
ちなみに、データの区切り(sep=' ')は、スペース2つ分としています。
データの区切りにスペースを使うと警告が出るため、engine='python'を引数に記載しています。
酢酸ビニルモノマー(VAM)プラントデータ
ごちきかで紹介されている酢酸ビニルモノマー(VAM)プラントデータ(シミュレーション)です。
下記の記事から、csvファイルがダウンロードできます。
データの説明については、プロセス制御とデータ分析のページに記載があります。
酢酸ビニルモノマーのシミュレーションデータに関する論文はコチラです。
データの中身をより詳しく知りたくなったら、参考にしてみてください。
参考文献
本記事では、下記2冊を参考にさせてもらいました。
化学プロセスのデータ解析を勉強するなら、欠かせない2冊だと思います!
記事冒頭にも書きましたが、GitHubにpythonコードとサンプルデータ(csv変換済み)をまとめておきました。




