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 报告能力。

**包含的可视化:**
- 按机器随时间变化的能耗(折线图)
- 总能耗 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, 工业物联网, 工厂能源, 异常检测, 数据仓库, 数据工程, 数据摄取, 数据转换, 日志记录, 机器学习, 测试用例, 生产监控, 端到端管道, 能效分析, 能源管理, 访问控制, 逆向工具, 重试机制