Seite 1 von 1

Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 13:09
von Mogician
Hallo,

weiß hier einer, wie ich das Delta mit Python bilden kann, wenn ich Messdaten unterschiedlicher Zeiten miteinander vergleichen will?

Also zb Datenreihe_1 von 12:00 bis 12:59 und Datenreihe_2 von 13:00 bis 13:59?

Code: Alles auswählen

df['Delta_A-B']=df['TI111']-df['TI117']
Hier kommt natürlich quatsch raus, weil die Messdaten eben nicht die selbe Zeit haben.


Danke und Gruß

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 13:20
von kbr
Mogician hat geschrieben: Montag 4. Februar 2019, 13:09 Hier kommt natürlich quatsch raus, weil die Messdaten eben nicht die selbe Zeit haben.
Dann lautet die erste Frage nicht, wie irgendwas mit Python geht, sondern was Du aus den Daten ermitteln möchtest und welcher Rechenweg dafür erforderlich ist. Erst wenn das klar ist, kannst Du überlegen, ob und wie das mit Python umsetzbar sein könnte.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 13:25
von __blackjack__
@Mogician: Wenn die Messwerte zu unterschiedlichen Zeiten gehören, warum sind sie dann im gleichen `DataFrame` und was benutzt Du da als Index? Beziehungsweise wenn da nicht die Zeit als Index verwendet wird, warum kommt dann bei der Subtraktion der beiden Spalten Quatsch heraus?

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 14:03
von Mogician
Hier ist der Code zum Einlesen der Daten.

Code: Alles auswählen

import pandas as pd
import os
import codecs

# Default directory for KDE measurement files
folder = os.path.join('c:', os.sep, 'Users','black cat','OneDrive - Linde Group','APLWT')    
BLOCKSIZE = 1048576  # or some other, desired size in bytes
for file in os.listdir(folder):
    if file.endswith(".TXT") and file.replace('.TXT', '.utf8') not in os.listdir(folder):
        with codecs.open(os.path.join(folder, file), "r", "iso-8859-1") as sourceFile:
            with codecs.open(os.path.join(folder, file.replace('.TXT', '.utf8')), "w", "utf-8") as targetFile:
                while True:
                    contents = sourceFile.read(BLOCKSIZE)
                    if not contents:
                        break
                    targetFile.write(contents)
                    
        # Remove line number 14 (the one with the units after the tag names, as it irritates pd.read_csv)
        f = open(os.path.join(folder, file.replace('.TXT', '.utf8')),"r")
        lines = f.readlines()
        f.close()
        del(lines[13])
        f = open(os.path.join(folder, file.replace('.TXT', '.utf8')),"w")
        for line in lines:
            f.write(line)
        f.close()
        
    
# Read all utf8 logfiles
for file in os.listdir(folder):
    if file.endswith(".utf8"):
        df = pd.read_csv(os.path.join(folder, file),
                             sep='\t', encoding='utf-8', decimal='.', skiprows=12, index_col=False)

        # Create time series
        df['Datetime'] = df['Date']+' '+df['Time']
        df['Datetime'] = df['Datetime'].apply(
            lambda x: pd.to_datetime(x.split(',')[0], format='%d.%m.%Y %H:%M:%S'))
        df = df.set_index('Datetime')
        df = df.drop(columns=['Date', 'Time'])
        
        
   

# Resample to lower frequency
df=df.resample('5S').mean()

Und hier mal aus dem Code mit dem ich dann eben plotte:

Code: Alles auswählen

import matplotlib.pyplot as plt
import datetime as datetime

plt.figure()

df['TI111'].plot()
df['TI112'].plot()
df['TI113'].plot()
df['TI114'].plot()
df['TI115'].plot()
df['TI116'].plot()

plt.legend()
plt.xlabel('Time')
plt.ylabel('Temperature [°C]')


Ich möchte das Delta der Messwerte bilden, nur eben beispielweise Messwert_1 an der Stelle 12:00 minus Messwert_2 an der Stelle 13:00.

Im Moment bezieht Python eben immer alles auf die selbe Uhrzeit, also Messwert_1 minus Messwert_2 an der Stelle 12:00.

Ich weiß eben nicht, wie ich gezielt eine bestimmte Uhrzeit ansprechen kann.

Bild

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 14:57
von __blackjack__
@Mogician: Die Zeitpunkte sind ja als Index vorhanden, darüber kannst Du dann auch bestimmte Zeiträume selektieren. Und dann musst Du die Indizes aber verwerfen, also beispielsweise durch einfache Range-Indizes ersetzen, damit die bei beiden selektierten Ausschnitten der Zeitreihen gleich sind. Oder Du verschiebst einen der beiden Indizes so das es passt.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 15:25
von Mogician
Danke, werde mich damit beschäftigen.

Hab jetzt erstmal als workaround die txt in Excel bearbeitet, auch wenns etwas stupide ist.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 17:28
von Mogician
Also mit dem workaround bin ich nicht zufrieden.

Wie kann ich denn die Zeiträume selektieren? Alles was ich bis jetzt probiert habe, hat nicht funktioniert.

Und am liebsten würde ich die Zeiträume fest vorgeben, da die Messreihen nicht genau gleich lang sind.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 17:39
von __deets__
Sind denn die Anzahl der Messwerte innerhalb eines Zeitraumes gleich? Sonst kannst du die doch eh nicht vergleichen.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 17:52
von __blackjack__
@Mogician: Was hast Du denn probiert? Das sollte einfach per `loc[anfang:ende]` oder eventuell ist auch die `between_time()`-Methode interessant.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 19:39
von Mogician
__deets__ hat geschrieben: Montag 4. Februar 2019, 17:39 Sind denn die Anzahl der Messwerte innerhalb eines Zeitraumes gleich? Sonst kannst du die doch eh nicht vergleichen.
Nein, da müsste ich ein passendes Zeitintervall eingeben.
Also zb von 13:00 bis 13:57.
Ich wundere mich bloß dass das so schwer ist.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 19:40
von Mogician
__blackjack__ hat geschrieben: Montag 4. Februar 2019, 17:52 @Mogician: Was hast Du denn probiert? Das sollte einfach per `loc[anfang:ende]` oder eventuell ist auch die `between_time()`-Methode interessant.
Ok dann muss ich später mal danach Googlen.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 20:39
von __blackjack__
@Mogician: Ähm was willst Du denn dann voneinander abziehen wie die Werte gar nicht zusammenpassen/gehören und nicht einmal die gleiche Anzahl haben? Was soll denn da dann sinnvolles bei heraus kommen?

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 22:15
von Mogician
Doch die passen schon zusammen, wenn eine Messreihe etwas länger gelaufen ist, ist es egal, weil das Ende nicht interessant ist.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 22:35
von __deets__
Warum suchst du dir dann nicht den Start raus, und nimmst dann einfach eine Feste Anzahl ab da?

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Montag 4. Februar 2019, 22:38
von __blackjack__
Oder die beiden Ausschnitte und dann die längere Zeitreihe auf die Länge der kürzeren beschränken.

Re: Delta bilden bei unterschiedlicher Zeitachse

Verfasst: Dienstag 5. Februar 2019, 00:22
von Mogician
__blackjack__ hat geschrieben: Montag 4. Februar 2019, 22:38 Oder die beiden Ausschnitte und dann die längere Zeitreihe auf die Länge der kürzeren beschränken.
So möchte ich es ja machen bzw hab das so in Excel gemacht, dann als txt und dann eben wieder bei python/spyder rein, aber es wäre schöner das direkt in python zu machen. Ich weiß aber eben nicht wie ich eine bestimmte Zeit rausgreifen kann.
Bisher plotte ich ja im Prinzip alles und schränke das über x_lim, oder wie es heißt, ein.

Eine bestimmte Anzahl an Datenpunkten ginge auch.

Aber ich muss halt quasi einen Messpunkt A um eine bestimmte Zeit von einem Messpunkt B zu einem anderen Zeitpunkt abziehen.