Script de pilote pour le calcul paramétrique des scripts Python

Qu'est-ce que c'est

Il s'agit d'un script de pilote créé pour mesurer l'erreur de ma bibliothèque Timer. C'est un outil pilote pour faire calculer un certain script python dans différentes conditions. Je ne savais pas comment l'exprimer, mais j'ai imaginé «WebDriver» et je l'ai exprimé comme un pilote. C'est comme un script de pilote pour piloter un script Python.

Script de pilote

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

Quand ceci est exécuté, test dans timer.py est exécuté pour chaque valeur spécifiée dans ʻinterval_set` et le résultat est enregistré. La première moitié de «timer.py» est réimprimée, mais c'est comme suit.

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: #Si vous ajoutez une correction, c'est ici
            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" #Chaîne littérale formatée
        with open(filename, 'w') as f: #w est nouveau
            f.write('seconds(sec),interval(sec),real(sec),error(msec)\n')
            f.close()
        for i in range(1000): #Réglage des temps de mesure
            while self.timer(seconds, interval):
                pass
            else:
                print('boucle'+str(case)+' '+str(i+1)+'Temps'+'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)

Dans cet exemple, l'erreur est mesurée environ 1000 fois toutes les 16 valeurs d'intervalle. C'est assez long, c'est donc presque comme s'entraîner pour l'exécuter une fois.

C'est dans ce genre de travail que les ordinateurs entrent en jeu.

En exécutant main.py, le résultat sera enregistré dans ʻerror_data1_Darwin.csv`. Je tourne sur un Mac, donc c'est Darwin. Si vous l'exécutez avec Raspeye, ce sera Linux.

$ python main.py

Visualisation

Si vous affichez un grand nombre de graphiques un par un, votre cœur sera brisé, le script suivant est donc utilisé pour les représenter.

python


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

num_figure = 9    #Nombre de fichiers csv que vous souhaitez dessiner

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))    #Lire le fichier csv
    df_error = df['error(sec)']   #Lire la colonne Erreur
    df_param = df['interval(sec)'] #Lire la colonne Intervalle
    df_sec = df['seconds(sec)'] #Lire la colonne Secondes
    
    ax = fig.add_subplot(5, 2, i)  #Il dessine dans l'ordre avec un arrangement de 5 lignes 2 colonnes.
    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)')  #Donnez un titre au graphique
    ax.set_ylim(0,25) #Définir la plage de l'axe y
    ax.set_xlim(-0.001,0.011) #Définir la plage de l'axe x

plt.tight_layout() #Ajuster l'espacement du graphique
plt.savefig('Error.png')
plt.show()

Le graphique sera dessiné en un rien de temps. Il sera réimprimé simplement en modifiant la disposition du graphique.

Error.png

Je vous serais reconnaissant si vous pouviez commenter, comme "C'est mieux".

Recommended Posts

Script de pilote pour le calcul paramétrique des scripts Python
Mise en retrait des scripts python
Script Python pour le décodage ldapsearch base64
Script de création de couche AWS pour python
Modèle pour l'écriture de scripts batch en python
[Python] Un script utile pour le traitement Excel / csv
30/10/2016 else pour Python3> pour:
python [pour moi]
Fichier python de script
squelette de script python
Profilage de script Python
Importer un script python
Script Python de collection d'images pour créer des ensembles de données pour l'apprentissage automatique
Script Python pour la connexion / déconnexion d'authentification non SSO de l'Université d'Hiroshima
À propos de Python for loop
Bases de Python ② pour déclaration
À propos de Python, pour ~ (plage)
Manuel python pour les débutants
Refactoring des outils utilisables avec Python
Mémo de script DynamoDB (Python)
Toolchain pour Python pour Android
Profilage rapide des scripts Python
OpenCV pour les débutants en Python
Installez Python (pour Windows)
[Python] pour une erreur d'instruction
Maintenance de l'environnement Python pour les projets
[Pour les débutants] Script dans 10 lignes (4. Connexion de python à sqlite3)
Créer un script Python pour Wake on LAN (Wake on LAN over NAT [5])