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 "
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
2014-02-25 15:02:59 +01:00
def ausreisser ( spalte ) :
zeilenanzahl = len ( spalte ) - 1
i = 0
2014-03-13 16:34:14 +01:00
2014-02-25 15:02:59 +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 ) ) :
2014-02-25 15:02:59 +01:00
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 ) )
2014-02-25 15:02:59 +01:00
# 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 :
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
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
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-03-13 16:34:14 +01:00
spalten_nummer = 0
2014-04-12 15:41:23 +02:00
ausreisserliste = [ ]
2014-02-21 16:53:30 +01:00
for spalte in liste :
2014-03-13 16:34:14 +01:00
if ( spalten_nummer == 9 ) :
schwankung = 1000
else :
schwankung = 10
2014-02-25 15:02:59 +01:00
ausreisser ( spalte )
2014-03-13 16:34:14 +01:00
spalten_nummer + = 1
2014-02-13 20:11:22 +01:00
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 " )
2014-02-13 20:11:22 +01:00
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 )