pandasによる引張試験機のデータ整理
こんにちは,のぶです.ベンチャーで基本的に受託案件の開発やってます.仕事に関することのアウトプットはできんので,基本的にニッチな技術系小ネタをつぶやいていきます.
題名の通り,今回は引張試験のときのデータを解析したいとき,pythonのpandasでいい感じにデータ分けたいな,という時のお話です.僕が大学院の時にひたすら物を引っ張っていた時に困ったことです.たくさんやられているので新規性は皆無です笑.でも,クリティカルな記事は見当たってないので困ってる人に刺さればなと思います.
今回使用した引張試験機はA&D社の卓上型引張試験機https://www.aandd.co.jp/products/electronic/sp-digital_caliper_other/sp-force_gauge/mct/
これでいろんなものを引っ張ったり押し付けたりできます.そして,その計測結果は付属ソフトでCSV形式で抽出できます.それはこんな感じで出てきます.
ん??試験回数・時間・移動量・荷重の4項目で,試験回数の項目が111111...22222...3333...と縦に続いていってる!そうです...そうなのです.個人的には,2回目以降の試行は横に並んで欲しいです.というのも,試験番号ごとにグラフや統計量を算出するため,ラベル選択の一発で区切ることができれば非常に楽だからです.ただ,縦に各試行の値が並んでいるため,スライスが一見しにくいように見えます.実際,pandasでは基本的に自分で作成したデータベースのラベルごとのスライスに関する記事が多く,そもそも実験機から吐き出された生データをいい感じに整理するにはちょっと考えないといけないことが多いのでは?と思います.
しかし,結論から言うと各試行ごとにデータを分けるのはめっちゃ簡単です.ただ,当時のpandas初心者の僕にとっては気づくのにとても時間がかかりました.ilocやらlocで頑張ったりそもそものCSVファイルを試験番号ごとにコピペしたりして分けたりと,今思えば超非効率なことをやってました.そしてしんどくなって気づいたのです.条件でデータ分けるメソッドあるんじゃね??と
ありました.こちらが参考サイトです.比較演算子でデータを抽出できちゃいます笑
ということで,試験回数ごとにデータを分けるにはこれでいけます.
def func(data, trial):
for i in range(0,trial):
data_array = data[data['試験回数'] == i+1]
data_array = data_array[data_array['荷重[N]'] > 0]
ついでに,荷重が0以下の時の区間は切るなどの処理も比較演算子でできちゃいます.たとえば3回試験を行い,各試行ごとにグラフを生成したいときはこのようにします.グラフはmatplotlibで生成します.
#encoding:utf-8
import pandas as pd
import matplotlib.pyplot as plt
def DataAnalysis(data,trial):
for i in range(0,trial):
data_array = data[data['試験回数'] == i+1]
data_array = data_array[data_array['荷重[N]'] > 0]
data_array = data_array[data_array['移動量[mm]'] > 1]
plt.plot(data_array['移動量[mm]'],data_array['荷重[N]'])
path = 'hoge'
filename = "fuga"
data = pd.read_csv(path + "/"+ filename + ".csv",encoding='SHIFT_JIS')
trial_num = 3
plt.figure(figsize=(8,7))
DataAnalysis(data,trial_num)
plt.xlabel("Displacement [mm]")
plt.ylabel("Tencil Force [N]")
plt.grid(which='major')
plt.savefig(path + '.png')
plt.show()
そしてこんなのができます.
めでたく各試行ごとの結果をスライスしてグラフ化できました.
え?データ処理は??
データ処理は先程のDataAnalysis関数に入れ込めば各試行ごとの統計量やら特徴量やらを抽出できますね♪
pandasを使えばラベル(index)ごとにスライスが簡単なので便利ですね.統計量もササッと出るので重宝しています.
以上,引張試験機のデータを整理する方法をご紹介しました.