directed_show.py 5.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """
  2. 指定两组数据标签,绘制相关系数热力图,用于定向分析
  3. """
  4. import sys
  5. sys.path.append("..")
  6. from temp import config_analysis
  7. from temp.utils_analysis import create_custom_heatmap, set_chinese_font, cross_corr
  8. from Database.database_ import Database, DatabaseParam
  9. import json
  10. import matplotlib.pyplot as plt
  11. from datetime import datetime
  12. time_now = datetime.now().strftime('%H:%M:%S')
  13. #series_a_name = ['管廊间温度1','加药间温度1','膜车间温度1','泵房温度1'] # 需要修改, 列标签
  14. #series_b_name = ['RO1 1段酸洗记次数','RO1 1段J洗记次数', 'RO1 1段FY洗记次数', 'RO1 2段FY洗记次数', '1#超滤反洗水泵运行时间', '段间泵A温度', '反渗透高压泵A温度', '反渗透冲洗水泵A温度','反渗透外供水泵A温度','超滤反洗水泵A温度','超滤供水泵A温度','超滤总进水浊度','超滤反洗泵A 累计电量'] # 需要修改, 行标签
  15. #series_a_name = ['UF1跨膜压差','UF2跨膜压差', 'UF3跨膜压差', 'UF4跨膜压差','超滤总产水PH', 'RO1产水电导','RO2产水电导','RO3产水电导','RO4产水电导','反渗透总产水电导','RO1一段浓水压力','RO2一段浓水压力','RO3一段浓水压力','RO4一段浓水压力','RO1一段进水压力','RO2一段进水压力','RO3一段进水压力','RO4一段进水压力']
  16. #series_b_name = ['超滤总进水压力','超滤总产水压力','超滤总进水浊度', '反渗透总进水温度','反渗透总进水电导','超滤总产水PH','反渗透总进水PH','外供水-PH','1#阻垢剂加药泵(RO)运行频率','2#阻垢剂加药泵(RO)运行频率','3#阻垢剂加药泵(RO)运行频率', '4#阻垢剂加药泵(RO)运行频率','1#反渗透阻垢剂流量','2#反渗透阻垢剂流量','3#反渗透阻垢剂流量','4#反渗透阻垢剂流量','还原剂流量','还原剂药箱1液位','还原剂药箱2液位','盐酸药箱液位','RO1一段浓水压力','RO2一段浓水压力','RO3一段浓水压力','RO4一段浓水压力','RO1一段进水压力','RO2一段进水压力','RO3一段进水压力','RO4一段进水压力']
  17. series_a_name = ['超滤总进水压力','RO1产水电导','RO2产水电导','RO3产水电导','RO4产水电导','超滤总产水PH','反渗透总产水电导']
  18. series_b_name = ['RO1一段浓水压力','RO2一段浓水压力','RO3一段浓水压力','RO4一段浓水压力','RO1一段进水压力','RO2一段进水压力','RO3一段进水压力','RO4一段进水压力','超滤总进水压力','反渗透总进水温度']
  19. #series_a_name = ['RO1产水电导','RO2产水电导','RO3产水电导','RO4产水电导']
  20. #series_b_name = ['1#阻垢剂加药泵(RO)运行频率','2#阻垢剂加药泵(RO)运行频率','3#阻垢剂加药泵(RO)运行频率', '4#阻垢剂加药泵(RO)运行频率','1#反渗透阻垢剂流量','2#反渗透阻垢剂流量','3#反渗透阻垢剂流量','4#反渗透阻垢剂流量']
  21. db_param = DatabaseParam(
  22. db_host='192.168.50.4',
  23. db_user='root',
  24. db_password='*B-@p2b+97D5xAF1e6',
  25. db_name='ws_data',
  26. db_port=4000)
  27. # 检查字段
  28. with open('../GetItem/92_all_items_name_code_transfer.json', 'r', encoding='utf-8') as f: # 总字段加载文件
  29. name_code_transfer = json.load(f)
  30. print(f'加载name与code映射字典,共{name_code_transfer.get('len')}条')
  31. name_2_code = name_code_transfer.get('name_2_code')
  32. code_2_name = name_code_transfer.get('code_2_name')
  33. del name_code_transfer
  34. for name in series_a_name:
  35. if name not in name_2_code.keys():
  36. raise IOError(f'指定字段{name}不存在', '输入A序列:',series_a_name)
  37. for name in series_b_name:
  38. if name not in name_2_code.keys():
  39. raise IOError(f'指定字段{name}不存在', '输入B序列:',series_b_name)
  40. # 设置中文字体
  41. set_chinese_font()
  42. # 按组计算
  43. with Database(db_param) as db:
  44. series_a_code = [name_2_code.get(i) for i in series_a_name]
  45. series_b_code = [name_2_code.get(i) for i in series_b_name]
  46. group_df = db.query_sql_time_series_group2data_frame(
  47. code_name_dict=code_2_name,
  48. project_id=config_analysis.PROJECT_ID,
  49. sheet_name=config_analysis.DB_SHEET_NAME,
  50. data_codes=series_a_code + series_b_code,
  51. start_year=config_analysis.CHECK_YEAR_START,
  52. end_year=config_analysis.CHECK_YEAR_END,
  53. start_month=config_analysis.CHECK_MONTH_START,
  54. end_month=config_analysis.CHECK_MONTH_END,
  55. start_day=config_analysis.CHECK_DAY_START,
  56. end_day=config_analysis.CHECK_DAY_END)
  57. # 剔除不存在的字段
  58. series_a_code = [i for i in series_a_code if i in group_df.columns.tolist()]
  59. series_b_code = [i for i in series_b_code if i in group_df.columns.tolist()]
  60. corr = cross_corr(series_a_code, series_b_code, group_df, code_2_name)
  61. create_custom_heatmap(corr_matrix=corr, title=f'中荷水厂数据相关系数热力图 ' + time_now)
  62. # 绘制曲线
  63. for code in series_a_code+series_b_code:
  64. plt.figure(figsize=(12, 6))
  65. # 原始数据
  66. plt.plot(group_df['time'], group_df[code], 'b-', alpha=0.3, label='原始数据')
  67. plt.title(f'{code_2_name.get(code)} 时间序列')
  68. plt.xlabel('时间')
  69. plt.ylabel(code_2_name.get(code))
  70. plt.legend()
  71. plt.grid(True)
  72. plt.xticks(rotation=45) # 旋转x轴标签以便阅读
  73. plt.savefig(f'{code_2_name.get(code)}.png', bbox_inches='tight', dpi=300)
  74. plt.close()
  75. print(f"已保存 {code_2_name.get(code)} 的曲线图到 {code_2_name.get(code)}.png")