做水电燃气异常预警工具,导入近12个月缴费数据,分析月均用量,当月用量超均值20%时,自动提醒排查浪费隐患。

14 阅读4分钟
  1. 实际应用场景描述

某物业公司或能源管理公司需要监控住户或商户的水、电、燃气使用情况,防止因为管道泄漏、设备故障或人为浪费造成资源损耗和额外费用。

传统做法是人工每月查看账单,发现异常时往往已经浪费了一段时间。

本工具的目标是自动化分析近 12 个月的缴费数据,计算月均用量,并在当月用量超过均值 20% 时自动发出预警,帮助管理人员及时排查隐患。

  1. 痛点分析
  • 人工检查效率低:大量用户数据无法逐一快速判断。
  • 异常发现滞后:等到账单出来才发现,浪费已发生。
  • 缺乏统一标准:不同用户用量差异大,需个性化阈值。
  • 数据格式不统一:不同供应商的账单格式可能不同,需要预处理。
  1. 核心逻辑

  2. 数据导入:读取近 12 个月的缴费数据(CSV/Excel)。

  3. 数据清洗:处理缺失值、异常值,统一单位。

  4. 按月聚合:计算每个用户每月的总用量。

  5. 计算月均值:对近 12 个月的数据求平均。

  6. 异常检测:当月用量 > 月均值 × 1.2 时,标记为异常。

  7. 输出结果:生成预警列表,并可导出为 CSV 或发送邮件/消息。

  8. 模块化 Python 代码

项目结构:

utility_anomaly_detector/ ├── data/ │ └── usage_data.csv ├── src/ │ ├── data_loader.py │ ├── data_cleaner.py │ ├── analyzer.py │ ├── alert_generator.py │ └── main.py ├── README.md └── requirements.txt

"requirements.txt"

pandas>=1.3.0 numpy>=1.21.0 openpyxl>=3.0.0

"src/data_loader.py"

import pandas as pd

def load_data(file_path): """ 加载 CSV 或 Excel 格式的用量数据 数据格式示例: user_id, month, water_usage, electricity_usage, gas_usage 001, 2024-01, 10, 200, 5 """ if file_path.endswith('.csv'): df = pd.read_csv(file_path) elif file_path.endswith(('.xls', '.xlsx')): df = pd.read_excel(file_path) else: raise ValueError("Unsupported file format") return df

"src/data_cleaner.py"

import numpy as np

def clean_data(df): """ 清洗数据:去除空值,确保用量为数值型 """ df = df.dropna(subset=['water_usage', 'electricity_usage', 'gas_usage']) for col in ['water_usage', 'electricity_usage', 'gas_usage']: df[col] = pd.to_numeric(df[col], errors='coerce') df = df.dropna() return df

"src/analyzer.py"

import pandas as pd

def calculate_monthly_avg(df): """ 计算每个用户每种能源的月平均用量 """ avg_df = df.groupby('user_id').agg({ 'water_usage': 'mean', 'electricity_usage': 'mean', 'gas_usage': 'mean' }).reset_index() return avg_df

def detect_anomalies(df, avg_df, threshold_ratio=1.2): """ 检测异常:当月用量 > 月均值 * threshold_ratio """ merged = df.merge(avg_df, on='user_id', suffixes=('', '_avg')) merged['water_alert'] = merged['water_usage'] > merged['water_usage_avg'] * threshold_ratio merged['electricity_alert'] = merged['electricity_usage'] > merged['electricity_usage_avg'] * threshold_ratio merged['gas_alert'] = merged['gas_usage'] > merged['gas_usage_avg'] * threshold_ratio return merged

"src/alert_generator.py"

def generate_alerts(anomalies_df): """ 生成预警信息 """ alerts = [] for _, row in anomalies_df.iterrows(): msg = f"User {row['user_id']} in {row['month']}: " if row['water_alert']: msg += f"Water usage {row['water_usage']} > avg {row['water_usage_avg']:.2f}. " if row['electricity_alert']: msg += f"Electricity usage {row['electricity_usage']} > avg {row['electricity_usage_avg']:.2f}. " if row['gas_alert']: msg += f"Gas usage {row['gas_usage']} > avg {row['gas_usage_avg']:.2f}. " if any([row['water_alert'], row['electricity_alert'], row['gas_alert']]): alerts.append(msg.strip()) return alerts

"src/main.py"

from data_loader import load_data from data_cleaner import clean_data from analyzer import calculate_monthly_avg, detect_anomalies from alert_generator import generate_alerts

def main(): # 1. 加载数据 df = load_data('../data/usage_data.csv')

# 2. 清洗数据
df_clean = clean_data(df)

# 3. 计算月均值
avg_df = calculate_monthly_avg(df_clean)

# 4. 检测异常
anomalies = detect_anomalies(df_clean, avg_df, threshold_ratio=1.2)

# 5. 生成预警
alerts = generate_alerts(anomalies)

# 6. 输出结果
print("=== Anomaly Alerts ===")
for alert in alerts:
    print(alert)

if name == "main": main()

  1. README.md

水电燃气异常预警工具

功能

  • 导入近 12 个月水电燃气缴费数据
  • 计算月均用量
  • 当月用量超均值 20% 时自动预警
  • 输出异常用户及类型

安装依赖

bash

pip install -r requirements.txt

数据格式

CSV 文件,包含列:

  • user_id
  • month (YYYY-MM)
  • water_usage
  • electricity_usage
  • gas_usage

运行

bash

python src/main.py

输出

控制台打印预警信息,可扩展为邮件/短信通知。

  1. 使用说明

  2. 将近 12 个月的数据整理成 "data/usage_data.csv"。

  3. 安装依赖: "pip install -r requirements.txt"。

  4. 运行 "python src/main.py"。

  5. 查看控制台输出的预警信息,针对异常用户进行排查。

  6. 总结

本工具通过Python + Pandas实现了水电燃气用量的异常检测,具有以下优点:

  • 自动化:减少人工检查时间。
  • 可扩展:可接入数据库、增加更多能源类型、支持实时数据流。
  • 易维护:模块化设计,便于后续优化。
  • 业务价值:提前发现浪费隐患,降低运营成本,提升资源利用率。

如果你需要,还可以增加邮件/微信推送功能,或者做成 Web 可视化仪表盘,让物业人员更直观地看到异常数据。

利用AI高效解决实际问题,如果你觉得这个工具好,欢迎关注我!