Delta bilden bei unterschiedlicher Zeitachse

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

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ß
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14040
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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?
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

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
Benutzeravatar
__blackjack__
User
Beiträge: 14040
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

Danke, werde mich damit beschäftigen.

Hab jetzt erstmal als workaround die txt in Excel bearbeitet, auch wenns etwas stupide ist.
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sind denn die Anzahl der Messwerte innerhalb eines Zeitraumes gleich? Sonst kannst du die doch eh nicht vergleichen.
Benutzeravatar
__blackjack__
User
Beiträge: 14040
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Mogician: Was hast Du denn probiert? Das sollte einfach per `loc[anfang:ende]` oder eventuell ist auch die `between_time()`-Methode interessant.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

__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.
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

__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.
Benutzeravatar
__blackjack__
User
Beiträge: 14040
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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?
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

Doch die passen schon zusammen, wenn eine Messreihe etwas länger gelaufen ist, ist es egal, weil das Ende nicht interessant ist.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Warum suchst du dir dann nicht den Start raus, und nimmst dann einfach eine Feste Anzahl ab da?
Benutzeravatar
__blackjack__
User
Beiträge: 14040
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder die beiden Ausschnitte und dann die längere Zeitreihe auf die Länge der kürzeren beschränken.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Mogician
User
Beiträge: 29
Registriert: Samstag 3. November 2018, 21:40

__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.
Antworten