**Dies ist eine alte Version des Dokuments!**
Data Processing
Data Collection
Keine Batterie hält ewig - nun möchten wir wissen, wie lange unsere Batterie Strom liefert, und wieviel Energie wir praktisch nutzen konnten, bis sie leer ist. Aus der Physik wissen wir, dass $Spannung\cdot{}Strom$ die Leistung unserer Batterie (bzw. die Leistungsaufnahme der Leuchte) ergibt. Wenn wir die Leistung über die ganze Lebensdauer unseres Systems aufzeichnen, wissen wir, wieviel Arbeit die Batterie insgesamt geleistet hat.
TODO je nach verwendeter Sensortechnik unterscheidet sich dieser Block.
TODO: wollen wir wirklich Spannung & Strom messen, oder nur $U$, da $R$ bekannt ist?
Ziel
Schreibe Python-Code wie folgt. Falls die nötigen Python-Kenntnisse noch nicht vorhanden sind, folgst du den untenstehenden Tutorials.
- Datei
batterie.csv
im Schreibmodus öffnen. - Eine Schleife ausführen, die alle zehn Sekunden die Strom- und Spannungswerte ausliest.
- Für jede Lesung wird eine Zeile (en. record) in die Datei geschrieben im folgenden Format:
<timestamp>, <spannung>, <strom>
- also zum Beispiel (für eine Messung von $U = 1.37V$ und $I = 300mA$):
2024-06-13 14:08:37.375, 1.37, 0.3
Tutorials
Python: Datei Ein- und Ausgabe
Wie lesen wir Daten in einer Text-Datei?
# Opens a file for writing (and closes it again after the 'with'). with open('dateiname.csv', 'w') as outfile: for i in range(10): line = 'Zeile ' + str(i) + '\n' outfile.write(line)
Beachte:
- Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit
with
wird sichergestellt, dass die Datei nicht offen bleibt sondern nach dem Lesevorgang wieder geschlossen wird. - Die Datei (hier 'dateiname.csv') muss sich im gleichen Ordner befinden wie die Python-Datei.
'w'
bedeutet write, dass die Textdatei nur gelesen und nicht verändert wird.str()
verwandelt die Zahl in einen Text.'\n'
ist der ASCII-Code für einen Zeilenumbruch.
Aufgabe
Beschreibe eine Datei mit einigen Zeilen. Es ist ungünstig, mehr als einige zehntausend Zeilen zu schreiben…
Python: Schlafen
Wir wollen nur alle zehn Sekunden einen neuen Record schreiben, aber der Computer ist viel schneller. Zwischen den Messungen schlafen wir also:
import time duration = 5 print(f'Hello, I will sleep for {duration} seconds!') time.sleep(duration) print('Yawn, just woke up!')
Aufgabe
Führe den obigen Code aus. Ändere ihn so ab, dass der Schlaf nur noch $2.5s$ dauert!
Python: Zeitstempel formatieren
Zeitstempel können aus der datetime
Bibliothek geholt werden:
from datetime import datetime print(datetime.now())
Mit Python f-Strings können mehrere Argumente praktisch in einen String gepackt werden:
from datetime import datetime timestamp = datetime.now() planet = 'Alderaan' magnitude = 'great' print(f'At {timestamp}, there was a {magnitude} disturbance in the Force on planet {planet}!')
(Du weisst nicht, was mit Alderaan hier gemeint ist? → Star Wars schauen bis zur nächsten Lektion!)
CSV-Format
Unsere Log-Datei ist im Comma-Separated-Values Format gespeichert: Die Daten sind ganz ähnlich gespeichert wie in einer Tabelle und können auch mit Excel und Sheets geöffnet werden. Jede Zeile entspricht einer Zeile der Tabelle; die Spalten sind meist mit Kommas voneinander getrennt. Manchmal werden aber auch Semikolons oder ein Tabulator (\t
) als Trennzeichen verwendet.
Oft werden in der ersten Zeile die Namen der abgespeicherten Werte festgelegt:
Zeitstempel,Spannung,Strom 2024-06-13 14:08:37.375, 1.37, 0.301 2024-06-13 14:08:47.105, 1.35, 0.295 ...