2024-10-30 18:42:23 +03:00
|
|
|
import pandas as pd
|
|
|
|
|
import numpy as np
|
|
|
|
|
|
2024-11-01 16:43:12 +03:00
|
|
|
class DiagramParser:
|
2024-10-30 18:42:23 +03:00
|
|
|
def __init__(self, scaler = 1):
|
|
|
|
|
self.data = pd.DataFrame({})
|
|
|
|
|
self.scaler = scaler
|
|
|
|
|
|
|
|
|
|
def setData(self, path):
|
|
|
|
|
self.data = pd.read_csv(path)
|
|
|
|
|
|
|
|
|
|
def getBoolDict (self):
|
|
|
|
|
boolDict = {}
|
|
|
|
|
for signalName in self.data.columns:
|
|
|
|
|
if type (self.data[signalName].iloc[0]) == np.bool:
|
|
|
|
|
boolDict[signalName] = self._getBoolChanges(signalName)
|
|
|
|
|
return boolDict
|
|
|
|
|
|
|
|
|
|
def getFloatDict (self):
|
|
|
|
|
floatDict = {}
|
|
|
|
|
for signalName in self.data.columns:
|
|
|
|
|
if type (self.data[signalName].iloc[0]) == np.float64:
|
|
|
|
|
floatDict[signalName] = self._getFloatChanges(signalName)
|
|
|
|
|
return floatDict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _getBoolChanges(self, signalName):
|
|
|
|
|
timeCode = self.data['time']
|
|
|
|
|
signal_values = self.data[signalName]
|
|
|
|
|
changes = []
|
|
|
|
|
|
|
|
|
|
if len(signal_values) > 0:
|
|
|
|
|
changes.append([float(timeCode.iloc[0]), 'high' if bool(signal_values.iloc[0]) else 'low'])
|
|
|
|
|
|
|
|
|
|
for i in range(1, len(signal_values)):
|
|
|
|
|
if signal_values.iloc[i] != signal_values.iloc[i - 1]:
|
|
|
|
|
changes.append([float(timeCode.iloc[i])*self.scaler, 'high' if bool(signal_values.iloc[i]) else 'low'])
|
|
|
|
|
|
|
|
|
|
return changes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _getFloatChanges(self, signalName):
|
|
|
|
|
timeCode = self.data['time']
|
|
|
|
|
signal_values = self.data[signalName]
|
|
|
|
|
changes = []
|
|
|
|
|
|
|
|
|
|
if len(signal_values) > 0:
|
|
|
|
|
for i in range (len(signal_values)):
|
|
|
|
|
changes.append([float(timeCode.iloc[i]), float(signal_values.iloc[i])])
|
|
|
|
|
|
|
|
|
|
return changes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|