"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Temperaturdaten"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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.\n",
"\n",
"Die in dieser Aufgabe verwendeten Dateien finden Sie {download}`hier <./messdaten.zip>`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Aufgabenstellung"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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:\n",
" * das erste Element ist eine Liste mit allen Zeitstempeln\n",
" * die folgenden 12 Elemente sind Listen der Messwerte den 12 Messstellen \n",
"1. Berechnen Sie für jeden Zeitpunkt die Höchsttemperatur sowie die mittlere Temperatur.\n",
"1. Schreiben Sie die Ergebnisse in eine neue Datei. Nutzen sie f-Strings, um diese auf eine Nachkommastelle zu runden."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Lösungshinweise\n",
"\n",
"* Zum Einlesen der Dateien bietet sich das glob Module an.\n",
"* Skizzieren Sie die Datenstruktur selbst auf Papier, damit fällt die Programmierung einfacher. \n",
"\n",
"Sollten Sie nicht wissen, wie Sie an die Aufgabe herangehen sollen, folgen hier die Schritte zum erstellen der Liste:\n",
"1. Lesen sie zunächst nur die Daten von TC01 ein\n",
"2. Speichern Sie die Daten in zwei separaten Listen (Zeitschritt, Temperatur)\n",
"3. Plotten Sie die Daten\n",
"4. Erstellen Sie eine leere Liste\n",
"5. Hängen Sie dieser Liste die Listen \"Zeitschritt\" und \"Temperatur\" an\n",
" 1. Liste.append(Zeitschritt)\n",
" 2. Liste.append(Temperatur)\n",
"6. Erweitern Sie nun das Skript, um alle 12 Dateien der Temperaturdaten zu verarbeiten\n",
" 1. Nutzen Sie zum Einlesen das glob Modul oder f-Strings\n",
" 2. Schreiben Sie eine Schleife, welche Schritte 1 und 2 für jede Datei wiederholt\n",
" 3. Wiederholen Sie in der selben Schleife den Schritt 5.2 für die jeweilige Datei"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"loesung",
"hide-cell"
]
},
"source": [
"### Lösungsvorschlag I"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": [
"loesung",
"hide-cell"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Die maximalen Temperaturen sowie die mittleren Temperaturen wurden in \"TC_verarbeitet.csv\" gespeichert.\n"
]
}
],
"source": [
"# Auslesen und Ausgeben einer Datei\n",
"import glob\n",
"\n",
"# Erstelle Liste mit allen Dateien im Verzeichniss mit gegebenem Namen\n",
"datei_namen = glob.glob('TC??.csv')\n",
"daten = []\n",
"\n",
"# Laden der Zeitstempel\n",
"file = open(datei_namen[0], 'r')\n",
"daten.append([])\n",
"for line in file:\n",
" daten[0].append(line.split(',')[0])\n",
"\n",
"# Speichern aller Daten in einer Matrix\n",
"datei_nr = 1\n",
"for datei in datei_namen:\n",
" daten.append([])\n",
" file = open(datei, 'r')\n",
" for line in file:\n",
" daten[datei_nr].append(float(line.split(',')[1]))\n",
" datei_nr += 1\n",
"\n",
"# Berechnen von maximaler und mittlerer Temperatur\n",
"mittl_temp = []\n",
"max_temp = []\n",
"\n",
"# Schleife über alle Zeitschritte\n",
"for j in range(0, len(daten[0])):\n",
" mittl_temp.append(0)\n",
" max_temp.append(daten[1][j]) # benutze als Startwert eine der zu vergleichenden Temperaturen\n",
" \n",
" #Schleife über alle Messreihen\n",
" for i in range(1, len(daten)):\n",
" mittl_temp[j] += daten[i][j]\n",
" max_temp[j] = max(max_temp[j], daten[i][j]) \n",
" mittl_temp[j] /= len(daten) - 1\n",
" \n",
"# Speichern in einer neuen Datei\n",
"file = open('TC_verarbeitet.csv', 'w')\n",
"for i in range(0,len(mittl_temp)):\n",
" file.write(f'{daten[0][i]},{mittl_temp[i]:.1f},{max_temp[i]}\\n')\n",
"print('Die maximalen Temperaturen sowie die mittleren Temperaturen wurden in \"TC_verarbeitet.csv\" gespeichert.')\n",
"file.close()"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"loesung",
"hide-cell"
]
},
"source": [
"### Lösungsvorschlag II\n",
"\n",
"Der Unterschied zu Lösungsvorschlag I ist, dass hier die Reihnefolge der geschachtelten Schleifen, getauscht wurde."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": [
"loesung",
"hide-cell"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Die maximalen Temperaturen sowie die mittleren Temperaturen wurden in \"TC_verarbeitet_2.csv\" gespeichert.\n"
]
}
],
"source": [
"# Auslesen und Ausgeben einer Datei\n",
"import glob\n",
"\n",
"# Erstelle Liste mit allen Dateien im Verzeichniss mit gegebenem Namen\n",
"datei_namen = glob.glob('TC??.csv')\n",
"daten = []\n",
"\n",
"# Laden der Zeitstempel\n",
"file = open(datei_namen[0], 'r')\n",
"daten.append([])\n",
"for line in file:\n",
" daten[0].append(line.split(',')[0])\n",
"\n",
"# Speichern aller Daten in einer Matrix\n",
"datei_nr = 1\n",
"for datei in datei_namen:\n",
" daten.append([])\n",
" file = open(datei, 'r')\n",
" for line in file:\n",
" daten[datei_nr].append(float(line.split(',')[1]))\n",
" datei_nr += 1\n",
"\n",
"# Berechnen von maximaler und mittlerer Temperatur\n",
"# Iinitialisieren der Listen für die Ergebnisse\n",
"mittl_temp = []\n",
"max_temp = []\n",
"for j in range(0, len(daten[0])):\n",
" mittl_temp.append(daten[1][j]/(len(daten) - 1))\n",
" max_temp.append(daten[1][j])\n",
" \n",
"# Schleife über alle Messreihen\n",
"for i in range(2, len(daten)):\n",
" \n",
" # Schleife über alle Zeitschritte\n",
" for j in range(0, len(daten[0])):\n",
" mittl_temp[j] += daten[i][j]/(len(daten) - 1)\n",
" max_temp[j] = max(max_temp[j], daten[i][j]) \n",
" \n",
"# Speichern in einer neuen Datei\n",
"file = open('TC_verarbeitet_2.csv', 'w')\n",
"for i in range(0,len(mittl_temp)):\n",
" file.write(f'{daten[0][i]},{mittl_temp[i]:.1f},{max_temp[i]}\\n')\n",
"print('Die maximalen Temperaturen sowie die mittleren Temperaturen wurden in \"TC_verarbeitet_2.csv\" gespeichert.')\n",
"file.close()"
]
}
],
"metadata": {
"celltoolbar": "Tags",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}