diagnosis.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import pandas as pd
  2. from .model import SystemModel
  3. class ModelDiag:
  4. def __init__(
  5. self,
  6. model: SystemModel,
  7. data : pd.DataFrame,
  8. c_var: list,
  9. d_var: list,
  10. ) -> None:
  11. self.model = model
  12. self.data = data.iloc[[0],:]
  13. self.c_var = c_var
  14. self.d_var = d_var
  15. def summary_diag(self):
  16. print('-'*20+'系统模型诊断'+'-'*20)
  17. with pd.option_context('display.max_rows', None,'display.max_columns', None,'display.width',500):
  18. derivate_c_info = self.diag_c_var_derivate()
  19. print('-'*20+'系统连续变量偏导'+'-'*20)
  20. print(derivate_c_info)
  21. def diag_c_var_derivate(self) -> pd.DataFrame:
  22. derivate_1 = self.model.predict_derivate_1(data=self.data,vars=self.c_var)
  23. derivate_2 = self.model.predict_derivate_2(data=self.data,vars=self.c_var)
  24. derivate_1 = process_derivate(derivate_1,'D1')
  25. derivate_2 = process_derivate(derivate_2,'D2')
  26. derivate = derivate_1.join(derivate_2).round(4)
  27. return derivate
  28. def diag_d_var_change(self) -> pd.DataFrame:
  29. ...
  30. def process_derivate(df:pd.DataFrame,D_name):
  31. df = (
  32. df
  33. .reset_index()
  34. .assign(__VAR__SAMPLE=lambda dt:dt.__VAR__SAMPLE.str.extract('__(.+)__'))
  35. .melt(id_vars='__VAR__SAMPLE',var_name='SYS_OUTPUT',value_name=D_name)
  36. .rename(columns={'__VAR__SAMPLE':'OPT_VAR'})
  37. .set_index(['SYS_OUTPUT','OPT_VAR'])
  38. )
  39. return df