Skip to content

Instantly share code, notes, and snippets.

@Tiim
Last active February 13, 2018 20:00
Show Gist options
  • Save Tiim/f8e7fb62c8343e21b5011a7bdec3c0f0 to your computer and use it in GitHub Desktop.
Save Tiim/f8e7fb62c8343e21b5011a7bdec3c0f0 to your computer and use it in GitHub Desktop.
import csv
import datetime
import math
##TODO: Ändere die zeiten an denen du die mittelwerte berechnene willst
# Liste von allen zeiden von denen du das mittel willst
mittelZeiten = [{'hour': 13, 'min': 10},
{'hour': 16, 'min': 30}]
#TODO: Monate anpassen. Januar ist evtl 0?!
# Liste von relevanten Jahreszeiten
jahreszeiten = [{'name': 'fruehling', 'months': [3,4,5]},
{'name': 'sommer', 'months': [6,7,8]},
{'name': 'herbst', 'months': [9,10,11]},
{'name': 'winter', 'months': [12,1,2]}]
# Bereite die Datenstruktur vor um alle durchschnittswerte zu berechnen
mittel = []
for t in mittelZeiten:
tmp = {}
for j in jahreszeiten:
tmp['zeit'] = "{}:{}".format(t['hour'], t['min'])
tmp[j['name']] = {'total' : 0, 'count': 0}
mittel.append(tmp)
# mittel hat folgende struktur:
# [
# {
# 'zeit': '10:30',
# 'frühling: {
# 'total': 0, << summe aller werte welche zu dieser Zeit in dieser Jahreszeit gemessen wurde
# 'count': 0 << anzahl Messwerte zu dieser Zeit um diese Jahreszeit
# },
# 'sommer': {
# 'total': 0,
# 'count': 0
# }
# ... << Weitere jahreszeiten
# },
# ... << ein dictionary für jede zeit
# ]
# Die nächsten 2 zeilen printen die struktur von mittel vollständig aus und beenden danach das program
# print(mittel)
# exit()
## TODO output und inputfile namen
with open('test.txt', 'w') as outputfile:
with open('mittel.txt') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
# sollte klar sein
ts = row[0]
zeit = datetime.datetime.strptime(ts, '%Y-%m-%d %H:%M:%S')
gradient = float(row[2])
feuchte = float(row[3])
monat = zeit.strftime('%m')
m = zeit.month
#TODO gradient durch gewünsten wert ersetzen
wert = gradient
# Filtere NaN werte aus
if math.isnan(wert):
#print('nan found :(')
continue
# überprüfe ob die zeit der jetzigen zeile eine der gewünsten zeiten entspricht
for i in range(len(mittelZeiten)):
if zeit.minute == mittelZeiten[i]['min'] and zeit.hour == mittelZeiten[i]['hour']:
# finde die richtige Jahreszeit
for k in jahreszeiten:
if m in k['months']:
# Addiere den zu mittelnden wert zum total und erhöhe den counter um eins
mittel[i][k['name']]['total'] += wert
mittel[i][k['name']]['count'] += 1
# Loope durch jeden definierte zeit
for zeit in mittel:
# erstelle eine liste mit dem ersten element als Zeit
output = []
output += [zeit['zeit']]
#für jede jahreszeit
for jahreszeit in jahreszeiten:
# berechne das mittel mit der formel (total/anzahl)
obj = zeit[jahreszeit['name']]
# gebe -1 zurück falls anzahl gleich 0 ist damit wir nicht durch null teilen
if obj['count'] == 0:
output += ['-1']
else:
output += [repr(obj['total'] / obj['count'])]
# konvertiere die liste in einen string, mit komma getrennt
outputfile.write(', '.join(output) + '\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment