Treiberskript zur parametrischen Berechnung von Python-Skripten

Was ist das

Dies ist ein Treiberskript, das erstellt wurde, um den Fehler meiner Timer-Bibliothek zu messen. Es ist ein Treiber-Tool, mit dem ein bestimmtes Python-Skript unter verschiedenen Bedingungen berechnet werden kann. Ich wusste nicht, wie ich es ausdrücken sollte, aber ich stellte mir "WebDriver" vor und drückte es als Treiber aus. Es ist wie ein Treiberskript zum Ausführen eines Python-Skripts.

Treiberskript

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()

Wenn dies ausgeführt wird, wird "test" in "timer.py" für jeden in "interval_set" angegebenen Wert ausgeführt und das Ergebnis aufgezeichnet. Die erste Hälfte von timer.py wird nachgedruckt, ist aber wie folgt.

python


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: #Ich frage mich, ob es hier ist, um Korrekturen hinzuzufügen
            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" #Formatiertes String-Literal
        with open(filename, 'w') as f: #w ist neu
            f.write('seconds(sec),interval(sec),real(sec),error(msec)\n')
            f.close()
        for i in range(1000): #Einstellung der Messzeiten
            while self.timer(seconds, interval):
                pass
            else:
                print('Schleife'+str(case)+' '+str(i+1)+'Zeit'+'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)

In diesem Beispiel wird der Fehler etwa 1000 Mal pro 16 Intervallwerte gemessen. Es ist eine ziemliche Wartezeit, also ist es fast wie ein Training, um es einmal auszuführen.

Bei dieser Art von Arbeit kommen Computer ins Spiel.

Das Ergebnis wird in error_data1_Darwin.csv durch Ausführen von main.py aufgezeichnet. Ich laufe auf einem Mac, also ist es Darwin. Wenn Sie es mit Raspeye ausführen, ist es Linux.

$ python main.py

Visualisierung

Wenn Sie eine große Anzahl von Diagrammen nacheinander anzeigen, wird Ihr Herz gebrochen, sodass das folgende Skript verwendet wird, um sie grafisch darzustellen.

python


import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

num_figure = 9    #Anzahl der CSV-Dateien, die Sie zeichnen möchten

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-Datei lesen
    df_error = df['error(sec)']   #Spalte Fehler lesen
    df_param = df['interval(sec)'] #Spalte Intervall lesen
    df_sec = df['seconds(sec)'] #Lesen Sie die Spalte Sekunden
    
    ax = fig.add_subplot(5, 2, i)  #Es zeichnet in der Reihenfolge mit einer 5-Zeilen-2-Spalten-Anordnung.
    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)')  #Geben Sie dem Diagramm einen Titel
    ax.set_ylim(0,25) #Stellen Sie den Bereich der y-Achse ein
    ax.set_xlim(-0.001,0.011) #Stellen Sie den x-Achsenbereich ein

plt.tight_layout() #Passen Sie den Diagrammabstand an
plt.savefig('Error.png')
plt.show()

Das Diagramm wird in kürzester Zeit gezeichnet. Es wird nur durch Ändern der Anordnung des Diagramms neu gedruckt.

Error.png

Ich wäre Ihnen dankbar, wenn Sie einen Kommentar abgeben könnten, z. B. "Das ist besser."

Recommended Posts

Treiberskript zur parametrischen Berechnung von Python-Skripten
Einrückungsformatierung von Python-Skripten
Python-Skript für die ldapsearch base64-Dekodierung
AWS Layer Creation Script für Python
Vorlage zum Schreiben von Batch-Skripten in Python
[Python] Ein Skript, das für die Excel / CSV-Verarbeitung nützlich ist
2016-10-30 sonst für Python3> für:
Python [für mich]
Skript-Python-Datei
Python-Skript-Skelett
Python-Skript-Profilerstellung
Importieren Sie ein Python-Skript
Bildersammlung Python-Skript zum Erstellen von Datensätzen für maschinelles Lernen
Python-Skript für die Nicht-SSO-Authentifizierung der Hiroshima University Anmelden / Abmelden
Über Python für Schleife
Python-Grundlagen ② für Anweisung
Über Python für ~ (Bereich)
Python Lehrbuch für Anfänger
Refactoring-Tools, die mit Python verwendet werden können
DynamoDB Script Memo (Python)
Toolchain für Python für Android
Profilieren Sie schnell Python-Skripte
OpenCV für Python-Anfänger
Installieren Sie Python (für Windows)
[Python] für Anweisungsfehler
Wartung der Python-Umgebung für Projekte
[Für Anfänger] Skript innerhalb von 10 Zeilen (4. Verbindung von Python zu sqlite3)
Erstellen Sie ein Python-Skript für Wake on LAN (Wake on LAN über NAT [5])