| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- """
- 指定两组数据标签,绘制相关系数热力图,用于定向分析
- """
- import sys
- sys.path.append("..")
- from temp import config_analysis
- from temp.utils_analysis import create_custom_heatmap, set_chinese_font, cross_corr
- from Database.database_ import Database, DatabaseParam
- import json
- import matplotlib.pyplot as plt
- from datetime import datetime
- time_now = datetime.now().strftime('%H:%M:%S')
- #series_a_name = ['管廊间温度1','加药间温度1','膜车间温度1','泵房温度1'] # 需要修改, 列标签
- #series_b_name = ['RO1 1段酸洗记次数','RO1 1段J洗记次数', 'RO1 1段FY洗记次数', 'RO1 2段FY洗记次数', '1#超滤反洗水泵运行时间', '段间泵A温度', '反渗透高压泵A温度', '反渗透冲洗水泵A温度','反渗透外供水泵A温度','超滤反洗水泵A温度','超滤供水泵A温度','超滤总进水浊度','超滤反洗泵A 累计电量'] # 需要修改, 行标签
- #series_a_name = ['UF1跨膜压差','UF2跨膜压差', 'UF3跨膜压差', 'UF4跨膜压差','超滤总产水PH', 'RO1产水电导','RO2产水电导','RO3产水电导','RO4产水电导','反渗透总产水电导','RO1一段浓水压力','RO2一段浓水压力','RO3一段浓水压力','RO4一段浓水压力','RO1一段进水压力','RO2一段进水压力','RO3一段进水压力','RO4一段进水压力']
- #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一段进水压力']
- series_a_name = ['超滤总进水压力','RO1产水电导','RO2产水电导','RO3产水电导','RO4产水电导','超滤总产水PH','反渗透总产水电导']
- series_b_name = ['RO1一段浓水压力','RO2一段浓水压力','RO3一段浓水压力','RO4一段浓水压力','RO1一段进水压力','RO2一段进水压力','RO3一段进水压力','RO4一段进水压力','超滤总进水压力','反渗透总进水温度']
- #series_a_name = ['RO1产水电导','RO2产水电导','RO3产水电导','RO4产水电导']
- #series_b_name = ['1#阻垢剂加药泵(RO)运行频率','2#阻垢剂加药泵(RO)运行频率','3#阻垢剂加药泵(RO)运行频率', '4#阻垢剂加药泵(RO)运行频率','1#反渗透阻垢剂流量','2#反渗透阻垢剂流量','3#反渗透阻垢剂流量','4#反渗透阻垢剂流量']
- db_param = DatabaseParam(
- db_host='192.168.50.4',
- db_user='root',
- db_password='*B-@p2b+97D5xAF1e6',
- db_name='ws_data',
- db_port=4000)
- # 检查字段
- with open('../GetItem/92_all_items_name_code_transfer.json', 'r', encoding='utf-8') as f: # 总字段加载文件
- name_code_transfer = json.load(f)
- print(f'加载name与code映射字典,共{name_code_transfer.get('len')}条')
- name_2_code = name_code_transfer.get('name_2_code')
- code_2_name = name_code_transfer.get('code_2_name')
- del name_code_transfer
- for name in series_a_name:
- if name not in name_2_code.keys():
- raise IOError(f'指定字段{name}不存在', '输入A序列:',series_a_name)
- for name in series_b_name:
- if name not in name_2_code.keys():
- raise IOError(f'指定字段{name}不存在', '输入B序列:',series_b_name)
- # 设置中文字体
- set_chinese_font()
- # 按组计算
- with Database(db_param) as db:
- series_a_code = [name_2_code.get(i) for i in series_a_name]
- series_b_code = [name_2_code.get(i) for i in series_b_name]
- group_df = db.query_sql_time_series_group2data_frame(
- code_name_dict=code_2_name,
- project_id=config_analysis.PROJECT_ID,
- sheet_name=config_analysis.DB_SHEET_NAME,
- data_codes=series_a_code + series_b_code,
- start_year=config_analysis.CHECK_YEAR_START,
- end_year=config_analysis.CHECK_YEAR_END,
- start_month=config_analysis.CHECK_MONTH_START,
- end_month=config_analysis.CHECK_MONTH_END,
- start_day=config_analysis.CHECK_DAY_START,
- end_day=config_analysis.CHECK_DAY_END)
- # 剔除不存在的字段
- series_a_code = [i for i in series_a_code if i in group_df.columns.tolist()]
- series_b_code = [i for i in series_b_code if i in group_df.columns.tolist()]
- corr = cross_corr(series_a_code, series_b_code, group_df, code_2_name)
- create_custom_heatmap(corr_matrix=corr, title=f'中荷水厂数据相关系数热力图 ' + time_now)
- # 绘制曲线
- for code in series_a_code+series_b_code:
- plt.figure(figsize=(12, 6))
- # 原始数据
- plt.plot(group_df['time'], group_df[code], 'b-', alpha=0.3, label='原始数据')
- plt.title(f'{code_2_name.get(code)} 时间序列')
- plt.xlabel('时间')
- plt.ylabel(code_2_name.get(code))
- plt.legend()
- plt.grid(True)
- plt.xticks(rotation=45) # 旋转x轴标签以便阅读
- plt.savefig(f'{code_2_name.get(code)}.png', bbox_inches='tight', dpi=300)
- plt.close()
- print(f"已保存 {code_2_name.get(code)} 的曲线图到 {code_2_name.get(code)}.png")
|