Python 스크립트를 파라 메트릭으로 계산하기위한 드라이버 스크립트

이것은 무엇입니까?



자체 제작된 Timer 라이브러리의 오차를 측정하기 위해 작성한 드라이버 스크립트입니다.
있다 python 스크립트를, 다른 조건으로 계산시키기 위한 드라이버 툴입니다. 어떻게 표현할 수 있는지 몰랐지만 WebDriver 를 이미지하여 드라이버라고 표현했습니다.Python 스크립트를 드라이브하기 위한 드라이버 스크립트라는 느낌입니다.

드라이버 스크립트



파이썬
from timer import Timer

def main():
    seconds = 5
    interval_set = [0.01,0.025,0.05,0.1,0.15,0.2,0.25,0.5,0.75,1,2,2.5,3,3.5,4,4.5]

    num = len(interval_set) + 1

    for case in range(1,num):
        interval = interval_set[case-1]
        timer = Timer(seconds, interval)
        timer.test(seconds, interval, case)

if __name__ == '__main__':
    main()

이것을 실행하면 timer.py 에 있는 testinterval_set 에 지정된 값마다 실행하여 결과를 기록합니다.timer.py 의 전반 부분은 재게재가 됩니다만, 다음과 같습니다.

파이썬
import time
import csv
import platform

class Timer:
    def __init__(self, seconds, interval):
        self.interval = interval
        self.seconds = seconds
        self.n = int((seconds - (seconds % interval))/interval)

    def timer(self, seconds,interval):
        time_start = time.perf_counter()
        time.sleep(self.interval*self.n)
        time_stop = time.perf_counter()
        self.remain = seconds - (time_stop - time_start)
        if self.remain > 0: # 補正を入れるとするとココかな
            time.sleep(self.remain)
        else:
            pass
        self.real = time.perf_counter() - time_start
        self.error = self.real - seconds
        return False

    def test(self,seconds, interval, case):
        filename = f"./error_data{case}"+"_"+str(platform.system())+".csv" # フォーマット済み文字列リテラル
        with open(filename, 'w') as f: # wは新規作成
            f.write('seconds(sec),interval(sec),real(sec),error(msec)\n')
            f.close()
        for i in range(1000): # 計測回の設定
            while self.timer(seconds, interval):
                pass
            else:
                print('ループ'+str(case)+' '+str(i+1)+'回目 '+'interval=' + str(interval) + 'sec Error:'+str(self.error*1000)+'msec')
                save_data = [self.seconds,self.interval,self.real, self.error*1000]
                with open(filename, 'a', newline='') as f:
                    writer = csv.writer(f, lineterminator='\r\n')
                    writer.writerow(save_data)

이 예에서는 16의 interval 값마다 1000회 정도 오차를 측정하고 있습니다.
꽤 대기 시간이므로 한 번씩 실행하는 것은 수행에 가깝네요.

이런 일이야말로 컴퓨터의 차례입니다.

main.py를 실행하면 error_data1_Darwin.csv에 결과가 기록됩니다.
Mac에서 실행 중이므로 Darwin입니다. 라즈파이에서 실행하면 Linux가됩니다.
$ python main.py

시각화



대량의 그래프를 일일이 표시하고 있으면 마음이 부러질 것 같아지므로, 이하의 스크립트로 그래프화하고 있습니다.

파이썬
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

num_figure = 9    # 描画したいcsvファイルの数

fig = plt.figure(figsize=(10.0, 15.0))


for i in range(1, num_figure+1):
    df = pd.read_csv('./data/error_data{}_Darwin.csv'.format(i))    # csvファイル読み込み
    df_error = df['error(sec)']   # Error列の読み込み
    df_param = df['interval(sec)'] # Interval列の読み込み
    df_sec = df['seconds(sec)'] # Seconds列の読み込み

    ax = fig.add_subplot(5, 2, i)  # 5行2列の配置で順に描画してくれます。
    sns.distplot(df_error, kde=False, rug=False, bins=100) 
#    plt.hist(df_error,bins=100, alpha=0.4, histtype='stepfilled', color='g')
    ax.set_title("Case{}".format(i)+' ('+str(df_sec[1])+'sec Timer, Int.='+str(df_param[1])+'sec)')  # グラフにタイトルをつける
    ax.set_ylim(0,25) # y軸の範囲を設定
    ax.set_xlim(-0.001,0.011) # x軸の範囲を設定

plt.tight_layout() # グラフの間隔を調整
plt.savefig('Error.png')
plt.show()

순식간에 그래프가 그려집니다.
그래프의 배열 방법을 바꾼 것만으로, 재게재가 됩니다.



「이러면 더 좋다」등, 코멘트 받을 수 있으면 기쁘게 생각합니다.

좋은 웹페이지 즐겨찾기