question: D3 Part 2 Q2

This commit is contained in:
DBras 2024-06-10 15:48:18 +02:00
parent e6c47bac4e
commit f5dfda57b7
1 changed files with 17 additions and 2 deletions

View File

@ -1,5 +1,6 @@
#!./venv/bin/python3 #!./venv/bin/python3
import pandas as pd import pandas as pd
import numpy as np
import json import json
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import os import os
@ -38,6 +39,15 @@ else:
################## Part 2 ###################################################### ################## Part 2 ######################################################
################################################################################ ################################################################################
def overshoot(df, T1, T2):
yT1, yT2 = df[T1], df[T2]
over = 1 / (yT1 - yT2) * np.max(yT2 - df)
return over
SETPOINT_UNIX = 1718013959.6977577
SETPOINT_TS = pd.to_datetime(SETPOINT_UNIX, unit='s')
WINDOW = pd.to_datetime(SETPOINT_UNIX+25, unit='s')
## The controller is reasonably fast at reacting to changes; the sum of in and ## The controller is reasonably fast at reacting to changes; the sum of in and
## out is at zero roughly 5-10 seconds after a change. ## out is at zero roughly 5-10 seconds after a change.
@ -45,7 +55,7 @@ else:
df = pd.DataFrame.from_records(data) df = pd.DataFrame.from_records(data)
df['time'] = pd.to_datetime(df['time'], unit='s') df['time'] = pd.to_datetime(df['time'], unit='s')
df_pivot = df.pivot_table(values='value', columns='unit', index='time') df_pivot = df.pivot_table(values='value', columns='unit', index='time')
df_resampled = df_pivot.resample('s').mean() df_resampled = df_pivot.resample('0.1s').mean()
df_resampled.interpolate(method='linear', inplace=True) df_resampled.interpolate(method='linear', inplace=True)
df_resampled = pd.DataFrame(df_resampled) df_resampled = pd.DataFrame(df_resampled)
@ -54,5 +64,10 @@ plt.ion() # Turn interactive mode on
plt.figure() plt.figure()
ax1, ax2 = plt.subplot(211), plt.subplot(212) ax1, ax2 = plt.subplot(211), plt.subplot(212)
df_resampled[[c for c in df_resampled.columns if '_p' in c]].plot(marker='.', ax=ax1, linewidth=3) df_resampled[[c for c in df_resampled.columns if '_p' in c]].plot(marker='.', ax=ax1, linewidth=3)
df_resampled['pcc_p'].plot(marker='.', ax=ax2, linewidth=3) ax2.plot(df_resampled['pcc_p'][SETPOINT_TS:WINDOW], marker='.', linewidth=3, label='pcc_p')
ax2.plot(df_resampled['dumpload_p'][SETPOINT_TS:WINDOW], marker='.', linewidth=3, label='dumpload')
plt.legend()
# print(overshoot(df_resampled['pcc_p'][SETPOINT_TS:WINDOW], SETPOINT_TS, WINDOW))
plt.show(block=True) plt.show(block=True)