You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.0 KiB
Python
95 lines
3.0 KiB
Python
import csv
|
|
import os
|
|
|
|
|
|
JAHRE = ["2017", "2018", "2019"]
|
|
PFAD = "Daten"
|
|
ENDUNG = ".csv"
|
|
|
|
|
|
class AusgabeManager:
|
|
def __init__(self):
|
|
self.ausgabe = ""
|
|
|
|
def inhalt_hinzufuegen(self, inhalt):
|
|
self.ausgabe = f"{self.ausgabe}\n{inhalt}"
|
|
|
|
def inhalt_anzeigen(self):
|
|
print(self.ausgabe)
|
|
|
|
def inhalt_schreiben(self, datei):
|
|
with open(datei, "w", encoding='utf-8') as file:
|
|
file.write(self.ausgabe)
|
|
|
|
|
|
def csv_auslesen(pfad):
|
|
daten = []
|
|
with open(pfad, encoding='utf-8') as csvfile:
|
|
reader = csv.DictReader(csvfile, delimiter=";")
|
|
for data in reader:
|
|
if data["Prüflingsnummer"]:
|
|
daten.append((data["Standortname"], data["Prüflingsnummer"], data["Bestanden"]))
|
|
return daten
|
|
|
|
|
|
def anzahl_geraete_bestimmen(daten, jahr, ausgabe):
|
|
"""Zählt die Anzahl der Geräte, wurden Geräte mehrfach gemessen, da Sie anfangs durchgefallen und somit
|
|
repariert werden mussten, wird das Gerät trotzdem nur einfach gezählt"""
|
|
geraete = []
|
|
for data in daten:
|
|
if not data[1] in geraete:
|
|
geraete.append(data[1])
|
|
|
|
ausgabe.inhalt_hinzufuegen(f"Vorhandene Geräte in {jahr}: {len(geraete)}")
|
|
|
|
|
|
def anzahl_durchgefuehrte_pruefungen_ermitteln(daten, jahr, ausgabe):
|
|
"""Zählt die Anzahl der durchgeführten Geräte, wurden Geräte mehrfach gemessen, da Sie anfangs durchgefallen und
|
|
somit repariert werden mussten, so wird dies als 2 Prüfungen gewertet. Einzelprüfschritte werden dennoch
|
|
zusammengefasst und als eine Prüfung gewertet"""
|
|
pruefungen = []
|
|
for data in daten:
|
|
pruefung = (data[1], data[2])
|
|
if pruefung not in pruefungen:
|
|
pruefungen.append(pruefung)
|
|
ausgabe.inhalt_hinzufuegen(f"Durchgeführte Prüfungen in {jahr}: {len(pruefungen)}")
|
|
|
|
|
|
def fehlerquote_bestimmen(daten, jahr, ausgabe):
|
|
"""Auswertung der Fehlerquote. Prüfungen nachdem das Gerät repariert worden ist werden nicht gewertet, da dies die
|
|
Fehlerquote verbessern würde"""
|
|
geraete = {}
|
|
for data in daten:
|
|
if not data[1] in geraete:
|
|
if data[2] == "ja":
|
|
geraete[data[1]] = True
|
|
elif data[2] == "nein":
|
|
geraete[data[1]] = False
|
|
else:
|
|
if data[2] == "nein":
|
|
geraete[data[1]] = False
|
|
gesamt = len(geraete)
|
|
fehler = 0
|
|
for status in geraete.values():
|
|
if not status:
|
|
fehler += 1
|
|
|
|
ausgabe.inhalt_hinzufuegen(f"Fehlerquote in {jahr}: {round(fehler / gesamt * 100, 2)}%")
|
|
|
|
|
|
def main():
|
|
ausgabe = AusgabeManager()
|
|
for jahr in JAHRE:
|
|
pfad = os.path.join(PFAD, f"{jahr}{ENDUNG}")
|
|
daten = csv_auslesen(pfad)
|
|
anzahl_geraete_bestimmen(daten, jahr, ausgabe)
|
|
anzahl_durchgefuehrte_pruefungen_ermitteln(daten, jahr, ausgabe)
|
|
fehlerquote_bestimmen(daten, jahr, ausgabe)
|
|
ausgabe.inhalt_hinzufuegen("\n")
|
|
ausgabe.inhalt_anzeigen()
|
|
ausgabe.inhalt_schreiben(os.path.join(PFAD, "ausgabe.txt"))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|