WeldingSpotPerformance/utils/diagram_parser.py

55 lines
1.7 KiB
Python

import pandas as pd
import numpy as np
class DiagramParser:
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