PPMSでの比熱データの平均化

PPMSで比熱を測定する場合、温度1点で3回測定することが多いです。最初の1回目の精度が悪いためですが、1回目を捨てて2回目と3回目を平均化したいとき手作業でその処理をするのは面倒です。以下はその処理を連続で行うpythonのコードです。

# -*- coding: utf-8 -*-
#PPMSで比熱を測定する場合、温度1点で3回測定することが多いです。
#最初の1回目の精度が悪いため、1回目を捨てて2回目と3回目を平均化したいのですが、手作業でその処理をするのは面倒です。
#以下はその処理を連続で行うpythonのコードです。
#キーは25行目のコードです。たった1行で目的の処理をしており、可読性の高い美しいコードが楽に書けるのがpythonの魅力の一つです。
#dat dir中の全てのdatファイルを自動認識して変換されます、各人の状況に応じて数字やdirを変更して下さい
#共同利用者以外への利用責任はなく質問受付はしません。D2MatEのプロジェクト支援を受けて行われています。
import os
import pandas as pd

# set the file name path and get the file name
path = './dat'
cname = "T_K","HC_uJ/K","HCerr_uJ/K"
mass = 3.766/1000 # sample mass g
fw = 280.87 # formula weight g

# pick-up and average 2nd, 3rd data in the temperature group, and save csv file
for file in os.listdir(path):
    base, ext = os.path.splitext(file)
    if ext == '.dat':
        print(f'{base}',f'{ext}')
        rname = path + '/' + file
        wname = path + '/' + base + '.csv'
        df = pd.read_csv(rname, sep=",", skiprows=[i for i in range(15)], usecols=[7,9,10], dtype='float64', names=cname, encoding="Shift-JIS")
        dfav = df.groupby(df.index // 3).apply(lambda x: x.iloc[1:].mean())
        dfav['C/T_mJ/molK'] = dfav['HC_uJ/K'] / 1000 / (mass / fw) / dfav['T_K']
        dfav['T2_K2'] = dfav['T_K']**2
        dfav.to_csv(wname, sep=",",  index=False)

Leave a Reply

Your email address will not be published. Required fields are marked *

Previous article

ビアパーティ

Next article

XDSの回折点viewer