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-02-13 20:11:22 +01:00
|
|
|
namen = ["Innentemperatur", "Gerätetemperatur 1", "Außentemperatur", "Gerätetemperatur 2", "Temperatur (Luft)", "Luftfeuchtigkeit", "Luftdruck\t", "Temperatur (Druck)", "Prozessor\t"]
|
2014-02-13 16:26:11 +01:00
|
|
|
format = "%Y/%m/%d %H:%M:%S"
|
2014-02-13 20:11:22 +01:00
|
|
|
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-11 18:11:24 +01:00
|
|
|
|
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 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:
|
2014-02-16 11:56:33 +01:00
|
|
|
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:
|
2014-02-16 11:56:33 +01:00
|
|
|
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:
|
2014-02-16 11:56:33 +01:00
|
|
|
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
|
|
|
|
2014-02-13 20:11:22 +01:00
|
|
|
def datum_offnen():
|
2014-02-13 16:26:11 +01:00
|
|
|
datei = open("datum.csv", "r")
|
2014-02-13 20:11:22 +01:00
|
|
|
global inhalt
|
2014-02-13 16:26:11 +01:00
|
|
|
inhalt = datei.readlines()
|
|
|
|
datei.close()
|
2014-02-13 20:11:22 +01:00
|
|
|
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
|
|
|
|
print("Der Messwert geht von Zeile " + str(start) + " bis Zeile " + str(stop) + " und über folgenden Zeitraum: " + str(bis - von))
|
|
|
|
return start,stop
|
2014-02-13 20:11:22 +01:00
|
|
|
|
|
|
|
def datumsfrage(frage):
|
|
|
|
while True:
|
2014-02-15 15:20:56 +01:00
|
|
|
eingabe_roh = input(frage)
|
2014-02-13 20:11:22 +01:00
|
|
|
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")
|
2014-02-13 20:11:22 +01:00
|
|
|
datum_offnen()
|
2014-02-21 16:53:30 +01:00
|
|
|
|
|
|
|
for spalte in liste:
|
|
|
|
i = 0
|
|
|
|
while i < 500:
|
|
|
|
if (spalte[i] != "") and (spalte[i+1] != "") and (spalte[i-1] != ""):
|
|
|
|
diff1 = spalte[i]-spalte[i+1]
|
|
|
|
diff2 = spalte[i]-spalte[i-1]
|
|
|
|
if ((diff1 < -10) or (diff1 > 10)) and ((diff2 < -10) or (diff2 > 10)):
|
|
|
|
print("in Spalte " + str(liste.index(spalte)+1) + " Zeile " + str(i+1) + " ist ein Ausreisser")
|
|
|
|
# else:
|
|
|
|
# print("Passt:" + str(i),str(diff1),str(diff2))
|
|
|
|
i+= 1
|
|
|
|
|
2014-02-13 20:11:22 +01:00
|
|
|
print("Bitte Datum im Format 'DD.MM.YY HH:MM:SS' eingeben")
|
|
|
|
print("Es sollte zwischen " + inhalt[1].rstrip() + " und " + inhalt[-1].rstrip() + " 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
|
2014-02-11 18:11:24 +01:00
|
|
|
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)]
|
2014-02-11 18:11:24 +01:00
|
|
|
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------")
|
2014-02-11 18:11:24 +01:00
|
|
|
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)
|
2014-02-13 20:11:22 +01:00
|
|
|
for name,minimum,maximum in minmaxausgabe:
|
2014-02-11 18:11:24 +01:00
|
|
|
print(name + ":\t" + str(minimum) + "\t" + str(maximum))
|
2014-02-11 16:38:01 +01:00
|
|
|
print("------Standardabweichung------")
|
2014-02-11 18:11:24 +01:00
|
|
|
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
|
2014-02-11 18:11:24 +01:00
|
|
|
standardabweichungen.append(abweichung)
|
|
|
|
stabausgabe = zip(namen,standardabweichungen)
|
|
|
|
for name,abweichung in stabausgabe:
|
|
|
|
print(name + ":\t%0.2f" % abweichung)
|