1.11. Temperaturdaten

Diese Aufgabe stellt eine typische erste Anwendung aus dem Bereich der Datenanalyse dar. In unserem Fall haben Sie 12 Thermometer, die zeitlich synchron aber räumlich verteilt die Temperatur eines Stahlträgers messen, der an einer Stelle erhitzt wird. Jede Messreihe ist in einer eigenen Datei abgelegt und all diese Daten müssen geladen und sinnvoll in Variablen gespeichert werden, um damit arbeiten zu können.

Die in dieser Aufgabe verwendeten Dateien finden Sie hier.

Aufgabenstellung

  1. Schauen Sie sich die Messdaten in den Dateien TC01.csv - TC12.csv an. Speichern Sie die Daten aller Dateien in einer verschachtelten Liste. Das Konzept und der Zugriff auf die Elemente via zwei for-Schleifen ist in der Graphik unten dargestellt. Da die Messungen alle synchron durchgeführt wurden, könnte die Liste folgendermaßen aussehen:

  • das erste Element ist eine Liste mit allen Zeitstempeln

  • die folgenden 12 Elemente sind Listen der Messwerte den 12 Messstellen

  1. Berechnen Sie für jeden Zeitpunkt die Höchsttemperatur sowie die mittlere Temperatur.

  2. Schreiben Sie die Ergebnisse in eine neue Datei. Nutzen sie f-Strings, um diese auf eine Nachkommastelle zu runden.

Lösungshinweise

  • Zum Einlesen der Dateien bietet sich das glob Module an.

  • Skizzieren Sie die Datenstruktur selbst auf Papier, damit fällt die Programmierung einfacher.

Lösungsvorschlag I

# Auslesen und Ausgeben einer Datei
import glob

# Erstelle Liste mit allen Dateien im Verzeichniss mit gegebenem Namen
datei_namen = glob.glob('TC??.csv')
daten = []

# Laden der Zeitstempel
file = open(datei_namen[0], 'r')
daten.append([])
for line in file:
    daten[0].append(line.split(',')[0])

# Speichern aller Daten in einer Matrix
datei_nr = 1
for datei in datei_namen:
    daten.append([])
    file = open(datei, 'r')
    for line in file:
        daten[datei_nr].append(float(line.split(',')[1]))
    datei_nr += 1

# Berechnen von maximaler und mittlerer Temperatur
mittl_temp = []
max_temp = []

# Schleife über alle Zeitschritte
for j in range(0, len(daten[0])):
    mittl_temp.append(0)
    max_temp.append(daten[1][j])      # benutze als Startwert eine der zu vergleichenden Temperaturen
    
    #Schleife über alle Messreihen
    for i in range(1, len(daten)):
        mittl_temp[j] += daten[i][j]
        max_temp[j] = max(max_temp[j], daten[i][j])   
    mittl_temp[j] /= len(daten) - 1
    
# Speichern in einer neuen Datei
file = open('TC_verarbeitet.csv', 'w')
for i in range(0,len(mittl_temp)):
    file.write(f'{daten[0][i]},{mittl_temp[i]:.1f},{max_temp[i]}\n')
print('Die maximalen Temperaturen sowie die mittleren Temperaturen wurden in "TC_verarbeitet.csv" gespeichert.')
file.close()
Die maximalen Temperaturen sowie die mittleren Temperaturen wurden in "TC_verarbeitet.csv" gespeichert.

Lösungsvorschlag II

Der Unterschied zu Lösungsvorschlag I ist, dass hier die Reihnefolge der geschachtelten Schleifen, getauscht wurde.

# Auslesen und Ausgeben einer Datei
import glob

# Erstelle Liste mit allen Dateien im Verzeichniss mit gegebenem Namen
datei_namen = glob.glob('TC??.csv')
daten = []

# Laden der Zeitstempel
file = open(datei_namen[0], 'r')
daten.append([])
for line in file:
    daten[0].append(line.split(',')[0])

# Speichern aller Daten in einer Matrix
datei_nr = 1
for datei in datei_namen:
    daten.append([])
    file = open(datei, 'r')
    for line in file:
        daten[datei_nr].append(float(line.split(',')[1]))
    datei_nr += 1

# Berechnen von maximaler und mittlerer Temperatur
# Iinitialisieren der Listen für die Ergebnisse
mittl_temp = []
max_temp = []
for j in range(0, len(daten[0])):
    mittl_temp.append(daten[1][j]/(len(daten) - 1))
    max_temp.append(daten[1][j])
    
# Schleife über alle Messreihen
for i in range(2, len(daten)):
    
    # Schleife über alle Zeitschritte
    for j in range(0, len(daten[0])):
        mittl_temp[j] += daten[i][j]/(len(daten) - 1)
        max_temp[j] = max(max_temp[j], daten[i][j])   
    
# Speichern in einer neuen Datei
file = open('TC_verarbeitet_2.csv', 'w')
for i in range(0,len(mittl_temp)):
    file.write(f'{daten[0][i]},{mittl_temp[i]:.1f},{max_temp[i]}\n')
print('Die maximalen Temperaturen sowie die mittleren Temperaturen wurden in "TC_verarbeitet_2.csv" gespeichert.')
file.close()
Die maximalen Temperaturen sowie die mittleren Temperaturen wurden in "TC_verarbeitet_2.csv" gespeichert.