SatvikSPandey/factory-energy-pipeline

GitHub: SatvikSPandey/factory-energy-pipeline

一个端到端的数据工程管道,利用机器学习实现工厂能源数据的异常检测与实时可视化。

Stars: 0 | Forks: 0

# ⚡ 工厂能源数据管道 一个端到端的数据工程管道,摄取工厂传感器和天气数据,将其转换为可用于分析的数据仓库,使用机器学习检测异常,并在实时仪表板上可视化洞察。 致力于展示面向工业 AI 岗位(Siemens、ABB、Honeywell)的资深数据工程技能。 --- ## 🔴 实时仪表板 👉 [factory-energy-pipeline-satvik.streamlit.app](https://factory-energy-pipeline-satvik.streamlit.app) --- ## 🏗️ 架构 ┌─────────────────────────────────────────────────────────────┐ │ 数据来源 │ │ [工厂传感器生成器] [Open-Meteo 天气 API] │ └──────────────┬──────────────────────────┬───────────────────┘ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Prefect 管道 │ │ 任务 1:摄取 → 任务 2:转换 → 任务 3:检测 │ │ (通过重试和日志编排) │ └──────────────────────────────┬──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Supabase PostgreSQL(云端) │ │ raw_sensor_data | raw_weather_data | fact_energy_hourly │ └──────────────────────────────┬──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Streamlit 仪表板(Streamlit Cloud) │ │ 实时图表 | 异常告警 | KPI | 天气叠加 │ └─────────────────────────────────────────────────────────────┘ --- ## 🧱 技术栈 | 层级 | 技术 | |---|---| | 语言 | Python 3.11 | | 管道编排 | Prefect 3.x | | 数据操作 | pandas | | 数据库 | PostgreSQL(Supabase 云) | | ORM / 数据库驱动 | SQLAlchemy + psycopg2 | | 天气 API | Open-Meteo(免费,无需密钥) | | 异常检测 | scikit-learn Isolation Forest | | 仪表板 | Streamlit + Plotly | | 部署 | Streamlit Cloud | | 版本控制 | GitHub | --- ## 📊 数据仓库 Schema ### 原始层(摄取后不再修改) - `raw_sensor_data` — 机器能耗、温度、生产单位、状态 - `raw_weather_data` — 来自 Open-Meteo 的环境温度与湿度 ### 维度表 - `dim_machines` — 机器参考数据(名称、类型、区域、额定容量) ### 事实表(分析就绪) - `fact_energy_hourly` — 清洗、连接、特征工程后的数据,包含异常标志 --- ## 🤖 机器学习:异常检测 使用 **Isolation Forest**(scikit-learn)——一种无监督算法,通过在随机决策树森林中快速隔离异常读数来检测异常。 使用的特征:`energy_kwh`、`temperature_c`、`rolling_24h_avg_kwh`、`efficiency_ratio` 污染率:5%(与传感器生成器中注入的异常率匹配) --- ## 📁 项目结构 ├── pipeline/ │ ├── ingest_sensors.py # 模拟并存储工厂传感器读数 │ ├── ingest_weather.py # 获取并存储来自 Open-Meteo 的实时天气 │ ├── transform.py # 清洗、连接、特征工程 │ ├── detect_anomalies.py # Isolation Forest 异常检测 │ └── flow.py # 预编排所有任务的 Prefect 流程 │ ├── dashboard/ │ └── app.py # Streamlit 仪表板 │ ├── db/ │ └── schema.sql # 表定义 │ ├── .env.example # 环境变量模板 ├── requirements.txt # Python 依赖 └── README.md --- ## 🚀 本地运行 ### 1. 克隆仓库 ``` git clone https://github.com/SatvikSPandey/factory-energy-pipeline.git cd factory-energy-pipeline ``` ### 2. 安装依赖 ``` pip install -r requirements.txt ``` ### 3. 设置环境变量 ``` cp .env.example .env \# Edit .env and add your Supabase connection string ``` ### 4. 运行管道 ``` python pipeline/flow.py ``` ### 5. 启动仪表板 ``` streamlit run dashboard/app.py ``` --- ## 🔑 环境变量 | 变量 | 描述 | |---|---| | `DATABASE_URL` | Supabase PostgreSQL 连接字符串(会话池 URI) | --- ## 📊 Power BI 仪表板 在同一个 Supabase PostgreSQL 数据集之上,使用 Power BI Desktop 构建了第二个仪表板,展示了与实时 Streamlit 仪表板并列的 BI 报告能力。 ![Power BI 仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a6dd0e8da5193403.png) **包含的可视化:** - 按机器随时间变化的能耗(折线图) - 总能耗 KPI 卡片(173.44 kWh) - 按机器的能耗(柱状图) - 机器状态分布(饼图 — 70% 运行中,20% 空闲,10% 故障) --- ## 👤 作者 **Satvik Pandey** — AI 工程师 | Python 开发者 | LLM 系统 [GitHub](https://github.com/SatvikSPandey) | [LinkedIn](https://www.linkedin.com/in/satvikpandey-433555365)
标签:ABB, Apex, ETW劫持, Honeywell, Kubernetes, PostgreSQL, Prefect, SEO: 实时能源仪表板, SEO: 工业数据管道, SEO: 工厂能源分析, Siemens, Streamlit, Supabase, 云数据平台, 仪表板, 传感器数据, 天气数据, 工业AI, 工业物联网, 工厂能源, 异常检测, 数据仓库, 数据工程, 数据摄取, 数据转换, 日志记录, 机器学习, 测试用例, 生产监控, 端到端管道, 能效分析, 能源管理, 访问控制, 逆向工具, 重试机制