2.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.

Sollten Sie nicht wissen, wie Sie an die Aufgabe herangehen sollen, folgen hier die Schritte zum erstellen der Liste:

  1. Lesen sie zunächst nur die Daten von TC01 ein

  2. Speichern Sie die Daten in zwei separaten Listen (Zeitschritt, Temperatur)

  3. Plotten Sie die Daten

  4. Erstellen Sie eine leere Liste

  5. Hängen Sie dieser Liste die Listen “Zeitschritt” und “Temperatur” an

    1. Liste.append(Zeitschritt)

    2. Liste.append(Temperatur)

  6. Erweitern Sie nun das Skript, um alle 12 Dateien der Temperaturdaten zu verarbeiten

    1. Nutzen Sie zum Einlesen das glob Modul oder f-Strings

    2. Schreiben Sie eine Schleife, welche Schritte 1 und 2 für jede Datei wiederholt

    3. Wiederholen Sie in der selben Schleife den Schritt 5.2 für die jeweilige Datei

Lösungsvorschlag I#

Hide code cell content
# 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.

Hide code cell content
# 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.