1
0
Fork 0
This repository has been archived on 2024-06-28. You can view files and clone it, but cannot push or open issues or pull requests.
Umweltdatenmessung/Endauswertung/auswertung.py

152 lines
4.8 KiB
Python
Raw Normal View History

2014-02-02 14:35:07 +01:00
# -*- coding: utf-8 -*-
import csv
2014-02-10 14:29:03 +01:00
import math
2014-02-13 16:26:11 +01:00
from datetime import datetime # aus dem Modul datetime Datentyp datetime (Datum und Zeit) importieren
bis_roh = "2014/02/01 22:1:00"
2014-03-13 16:34:14 +01:00
namen = ["Innentemperatur", "Gerätetemperatur 1", "Außentemperatur", "Gerätetemperatur 2", "Temperatur (Luft)", "Luftfeuchtigkeit", "Luftdruck\t", "Temperatur (Druck)", "Prozessor\t","Qualität\t"]
2014-02-13 16:26:11 +01:00
format = "%Y/%m/%d %H:%M:%S"
eingabeformat = "%d.%m.%y %H:%M:%S"
2014-02-13 16:26:11 +01:00
von_roh = "2014/02/01 18:12:42"
2014-02-02 14:35:07 +01:00
def offnen(datei):
2014-02-11 18:48:10 +01:00
with open(datei) as filein:
2014-02-02 14:35:07 +01:00
reader =csv.reader(filein, quoting=csv.QUOTE_NONNUMERIC)
2014-02-11 18:30:53 +01:00
global liste # Liste außerhalb von Funtion nutzen
liste = list(zip(*reader)) # = [temp1,temp2,temp3,temp4,luft_temp,luft_feucht,druck,temp_druck,rasp]
2014-02-02 14:35:07 +01:00
def ausreisser(spalte):
zeilenanzahl = len(spalte) -1
i = 0
2014-03-13 16:34:14 +01:00
while i < zeilenanzahl:
if (spalte[i] != "") and (spalte[i+1] != "") and (spalte[i-1] != ""):
diff1 = spalte[i]-spalte[i+1]
diff2 = spalte[i]-spalte[i-1]
2014-03-13 16:34:14 +01:00
if ((diff1 < -schwankung) or (diff1 > schwankung)) and ((diff2 < -schwankung) or (diff2 > schwankung)):
print("in Spalte " + str(liste.index(spalte)+1) + " Zeile " + str(i+1) + " ist ein Ausreisser (" + str(spalte[i]) + ")")
2014-04-12 15:41:23 +02:00
ausreisserliste.append((liste.index(spalte),i))
# else:
# print("Passt:" + str(i),str(diff1),str(diff2))
i+= 1
2014-02-02 14:35:07 +01:00
def mittelwert(spalte):
2014-02-11 18:48:10 +01:00
summe = 0
2014-02-11 18:30:53 +01:00
anzahl = 0 # Anzahl der Messwerte
2014-02-02 14:35:07 +01:00
for wert in spalte:
if wert != "":
summe = summe + wert # zur bisherigen Summe addieren
anzahl += 1
2014-02-02 14:35:07 +01:00
mittelwert = summe / anzahl
return mittelwert
def minmax(spalte):
2014-02-11 18:30:53 +01:00
mini = spalte[0] #Minimum auf ersten Wert setzen
2014-02-02 14:35:07 +01:00
maxi = spalte[0]
for wert in spalte:
if wert != "":
if wert < mini:
mini = wert
if wert > maxi:
maxi = wert
2014-02-02 14:35:07 +01:00
return (mini,maxi)
2014-02-11 16:38:01 +01:00
def standardabweichung(spalte,mw):
n = 0
summe = 0
for wert in spalte:
if wert != "":
term = wert - mw
summe = summe + (term * term)
n += 1
2014-02-11 16:38:01 +01:00
stab = math.sqrt(summe / n)
return stab
2014-02-11 18:48:10 +01:00
def datum_offnen():
2014-02-13 16:26:11 +01:00
datei = open("datum.csv", "r")
global inhalt
2014-02-13 16:26:11 +01:00
inhalt = datei.readlines()
datei.close()
def datumsauswahl(von,bis):
2014-02-13 16:26:11 +01:00
start_gefunden = False
stop_gefunden = False
for datum in inhalt:
datum_py = datetime.strptime(datum.rstrip(), format)
if (datum_py > von) and (start_gefunden == False):
start = inhalt.index(datum)
start_gefunden = True
if (start_gefunden == True) and (datum_py > bis) and (stop_gefunden == False):
stop = inhalt.index(datum) - 1
stop_gefunden = True
break
2014-03-13 16:34:14 +01:00
if(stop_gefunden != True) or (start_gefunden != True):
print("Entweder ist der Endzeitpunkt vor dem Startzeitpunkt oder die beiden liegen zu nahe an den Grenzwerten.")
exit(1)
2014-02-13 16:26:11 +01:00
print("Der Messwert geht von Zeile " + str(start) + " bis Zeile " + str(stop) + " und über folgenden Zeitraum: " + str(bis - von))
return start,stop
def datumsfrage(frage):
while True:
eingabe_roh = input(frage)
try:
eingabe = datetime.strptime(eingabe_roh, eingabeformat)
except ValueError:
print("Bitte Datum im Format 'DD.MM.YY HH:MM:SS' eingeben")
else:
return eingabe
2014-02-02 14:35:07 +01:00
offnen("vorbereitet.csv")
datum_offnen()
2014-03-13 16:34:14 +01:00
spalten_nummer=0
2014-04-12 15:41:23 +02:00
ausreisserliste= []
for spalte in liste:
2014-03-13 16:34:14 +01:00
if (spalten_nummer == 9):
schwankung=1000
else:
schwankung = 10
ausreisser(spalte)
2014-03-13 16:34:14 +01:00
spalten_nummer += 1
print("Bitte Datum im Format 'DD.MM.YY HH:MM:SS' eingeben")
2014-03-13 16:34:14 +01:00
print("Es sollte zwischen " + datetime.strptime(inhalt[1].rstrip(),format).strftime(eingabeformat) + " und " + datetime.strptime(inhalt[-1].rstrip(),format).strftime(eingabeformat) + " liegen")
von = datumsfrage("von: ")
bis = datumsfrage("bis: ")
startstop = datumsauswahl(von,bis)
2014-02-13 16:26:11 +01:00
von = startstop[0]
bis = startstop[1]
liste_auswahl = []
for spalte in liste:
spalte_neu = spalte[von:bis]
liste_auswahl.append(spalte_neu)
liste = liste_auswahl
2014-02-10 14:29:03 +01:00
print("------Mittelwerte------")
2014-02-11 18:30:53 +01:00
mittelwerte = [] # leere Liste erstellen
for spalte in liste:
2014-02-11 18:30:53 +01:00
mw = mittelwert(spalte) #jeden MW ausrechnen ...
mittelwerte.append(mw) # ... und an die Liste anhängen
mittelausgabe = zip(namen,mittelwerte) # in Tupel umwandeln [(Innentemperatur, 25), (Außentemperatur,8)]
for name,mittelwert in mittelausgabe:
2014-02-11 18:30:53 +01:00
print(name + ":\t%0.2f" % mittelwert) # jedes Tupel ausgeben
2014-02-11 16:38:01 +01:00
2014-02-10 14:29:03 +01:00
print("------Minimum-Maximum------")
minima = []
maxima = []
for spalte in liste:
minumax = minmax(spalte)
mini = minumax[0]
maxi = minumax[1]
minima.append(mini)
maxima.append(maxi)
minmaxausgabe = zip(namen,minima,maxima)
for name,minimum,maximum in minmaxausgabe:
print(name + ":\t" + str(minimum) + "\t" + str(maximum))
2014-02-11 16:38:01 +01:00
print("------Standardabweichung------")
standardabweichungen=[]
for spalte in liste:
2014-02-11 18:30:53 +01:00
abweichung = standardabweichung(spalte,mittelwerte[liste.index(spalte)]) #Mittelwert über Stelle in Liste herausfinden
standardabweichungen.append(abweichung)
stabausgabe = zip(namen,standardabweichungen)
for name,abweichung in stabausgabe:
print(name + ":\t%0.2f" % abweichung)