Programmieren für Ingenieure

Beispielprogramm Prozessdaten 2 - Daten auswerten

In dieser Lektion schauen wir uns zusammen den Code zum Prozessieren der Daten an.

Zuerst werden wir den Zeitraum festlegen, für den die Auswertung durchgeführt werden soll.
Vorerst stellen wir das Programm so ein, dass immer genau der Vortag ausgewertet wird.

import datetime

zeitraumStart = datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0) – datetime.timedelta(days=1)
zeitraumEnde = datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)


Anschließend werden wir die Daten aus der kopierten Datei einlesen.
Wenn wir in die .log Datei schauen, könne wir sehen, dass jede Zeile den Herstellungs-Zeitstempel der Solarzelle sowie deren Leistung und Qualitäts-Gruppe besteht.
Im Programm öffnen wir zuerst die Datei, lesen die Daten jeder Zelle aus und fügen sie zu einer Liste hinzu, wenn sie innerhalb des gewählten Zeitraums hergestellt wurden:

zellen = []

for zeile in open(r“.\ZuProzessieren\AnlagenLogfile.log“, „r“).readlines():
    zelle = zeile.strip().split(„;“)
    zeitstempel = datetime.datetime.strptime(zelle[0], „%Y-%m-%d %H:%M:%S“)

    if zeitstempel >= zeitraumStart and zeitstempel <= zeitraumEnde:
        zellen.append([zeitstempel, float(zelle[1]), zelle[2]])

 


Danach berechnen wir aus den Leistungsdaten der Zellen die für uns interessantesten Kennzahlen: Anzahl der Zellen, minimale, maximale und durchschnittliche Leistung sowie die Anzahl der Zellen mit A und B Qualität.
Außerdem berechnen wir die Anzahl an Solarzellen in einer Reihe von Leistungsklassen, um später ein Histogramm der Leistungsverteilung daraus erstellen zu können:

import statistics

leistungen = [zelle[1] for zelle in zellen]

durchsatz = len(zellen)
minLeistung = min(leistungen)
maxLeistung = max(leistungen)
durchschnittlicheLeistung = statistics.mean(leistungen)
anzahlGutzellen = 0
anzahlSchlechtzellen = 0
for zelle in zellen:
    if zelle[2] == „A“:
        anzahlGutzellen += 1
    else:
        anzahlSchlechtzellen += 1

leistungsklassen = [0.0, 4.7, 4.8, 4.9, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 9.0]

leistungsverteilung = {}
for leistungsklasse in leistungsklassen:
    leistungsverteilung[leistungsklasse] = 0

for leistung in leistungen:
    for leistungsklasse in leistungsklassen:
        if leistung <= leistungsklasse:
            leistungsverteilung[leistungsklasse] += 1
            break


Zuletzt werden wir die berechneten Kennzahlen noch in Excel eintragen und das Ergebnis der Auswertung abspeichern.
Dafür öffnen wir zuerst die Excel Vorlage, tragen anschließend die Kennzahlen in die dafür vorgesehenen Excel-Zellen ein und speichern die Datei abschließend unter einem neuen Namen:

import openpyxl

excelWorkbook = openpyxl.load_workbook(„Visualisierung.xlsx“)
excelWorksheet = excelWorkbook[„Anlage1“]

# eintragen
excelWorksheet.cell(row=4, column=2).value = zeitraumStart
excelWorksheet.cell(row=4, column=3).value = zeitraumEnde
excelWorksheet.cell(row=23, column=1).value = durchsatz
excelWorksheet.cell(row=23, column=2).value = anzahlGutzellen
excelWorksheet.cell(row=23, column=3).value = anzahlSchlechtzellen
excelWorksheet.cell(row=23, column=4).value = minLeistung
excelWorksheet.cell(row=23, column=5).value = maxLeistung
excelWorksheet.cell(row=23, column=6).value = durchschnittlicheLeistung

zeile = 26
for leistungsklasse, anzahl in leistungsverteilung.items():
    excelWorksheet.cell(row=zeile, column=2).value = anzahl
    zeile += 1

# speichern
excelWorkbook.save(f“{datetime.datetime.now().strftime(‚%Y%m%d_%H%M%S‘)}_Auswertung.xlsx“)


Und auch hier möchte ich dir empfehlen dir noch einmal 5 Minuten Zeit zu nehmen den Code gut zu dokumentieren, um das Verständnis zu erleichtern, sodass das fertige Programm am Ende wie folgt aussieht:

import datetime
import statistics
import openpyxl


### Zeitraum festlegen
zeitraumStart = datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0) – datetime.timedelta(days=1)
zeitraumEnde = datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)

### Anlagendaten einlesen
zellen = []
# Log Datei öffnen
for zeile in open(r“.\ZuProzessieren\AnlagenLogfile.log“, „r“).readlines():
    zelle = zeile.strip().split(„;“)
    zeitstempel = datetime.datetime.strptime(zelle[0], „%Y-%m-%d %H:%M:%S“)
    # Solarzellen nach Zeit filtern
    if zeitstempel >= zeitraumStart and zeitstempel <= zeitraumEnde:
      zellen.append([zeitstempel, float(zelle[1]), zelle[2]])

### Daten verarbeiten
# neue Listen mit Leistungs Daten erstellen
leistungen = [zelle[1] for zelle in zellen]

# Kennzahlen auslesen
durchsatz = len(zellen)
minLeistung = min(leistungen)
maxLeistung = max(leistungen)
durchschnittlicheLeistung = statistics.mean(leistungen)
anzahlGutzellen = 0
anzahlSchlechtzellen = 0
for zelle in zellen:
    if zelle[2] == „A“:
      anzahlGutzellen += 1
    else:
      anzahlSchlechtzellen += 1

# Leistungsverteilung
leistungsklassen = [0.0, 4.7, 4.8, 4.9, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 9.0]

leistungsverteilung = {}
for leistungsklasse in leistungsklassen:
    leistungsverteilung[leistungsklasse] = 0

for leistung in leistungen:
    for leistungsklasse in leistungsklassen:
      if leistung <= leistungsklasse:
        leistungsverteilung[leistungsklasse] += 1
        break

### Daten eintragen und speichern
# Excel Vorlage öffnen
excelWorkbook = openpyxl.load_workbook(„Visualisierung.xlsx“)
excelWorksheet = excelWorkbook[„Anlage1“]

# eintragen
excelWorksheet.cell(row=4, column=2).value = zeitraumStart
excelWorksheet.cell(row=4, column=3).value = zeitraumEnde
excelWorksheet.cell(row=23, column=1).value = durchsatz
excelWorksheet.cell(row=23, column=2).value = anzahlGutzellen
excelWorksheet.cell(row=23, column=3).value = anzahlSchlechtzellen
excelWorksheet.cell(row=23, column=4).value = minLeistung
excelWorksheet.cell(row=23, column=5).value = maxLeistung
excelWorksheet.cell(row=23, column=6).value = durchschnittlicheLeistung

zeile = 26
for leistungsklasse, anzahl in leistungsverteilung.items():
    excelWorksheet.cell(row=zeile, column=2).value = anzahl
    zeile += 1

# speichern
excelWorkbook.save(f“{datetime.datetime.now().strftime(‚%Y%m%d_%H%M%S‘)}_Auswertung.xlsx“)

Diesen Code findest du auch in der .\BeispielprogrammProzessdaten\DatenProzessieren.py Datei.

Wie du schon erahnen kannst erfordert ein solches Programm natürlich Arbeit – viel mehr, als wenn du die gleiche Auswertung einmal manuell ausführen würdest.
Und nur weil dieses Video (oder andere Lektionen) vielleicht nur 14 Minuten und 59 Sekunden lang sind, solltest du nicht davon ausgehen eine “Prozessdaten Auswertung in weniger als 15 Minuten” entwickeln zu können.
Bei unserem Beispielprogramm kannst du dir aber sicher sein, dass deine Zeit in die Entwicklung gut investiert ist, wenn es zum Beispiel automatisch jede Nacht durchläuft, um die Produktionskennzahlen des Vortages automatisch aufzuarbeiten.

Als (sehr groben) Richtwert kannst du dir merken, dass es sich oft lohnt deine Zeit in die Automatisierung der Aufgabe zu investieren wenn sie mehr als 10 mal ausgeführt werden soll und vor allem aus sich häufig wiederholenden Abläufen besteht.
Mit der Zeit wirst du auch immer mehr Erfahrung sammeln und besser einschätzen können ob sich die Automatisierung einer aktuell noch manuell durchgeführten oder komplett neuen Aufgabe lohnt, oder die Umsetzung eventuell überhaupt erst möglich machen kann.

An dieser Stelle haben wir jetzt also einen voll funktionsfähigen Prototyp, der sich bei eventuellen Änderungswünschen noch schnell und einfach anpassen lässt.
In den nächsten Lektionen werden wir uns mit einigen äußerst hilfreichen Erweiterungen beschäftigen die zum einen leicht zu implementieren sind und dir gleichzeitig beim Einsatz deiner Programme in der Praxis viele Vorteile bringen werden.

Vielen Dank fürs Mitmachen, und ich freue mich schon sehr darauf dich gleich in der nächsten Lektion wiederzusehen =)

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.