kawaiipeace commited on
Commit
d4d1ca8
·
1 Parent(s): a50dc6d

Initialization

Browse files
.DS_Store ADDED
Binary file (8.2 kB). View file
 
.env.example ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ ## Copy this file to .env and set your Hugging Face token
2
+ HF_TOKEN=
.gitignore ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ .env
2
+ outputs/
3
+ __pycache__/
4
+ scripts/__pycache__
5
+ .venv/
6
+ .python-version
7
+ README.md
README.md CHANGED
@@ -1,14 +1,190 @@
1
- ---
2
- title: AI OMS Analyze
3
- emoji: 🔥
4
- colorFrom: red
5
- colorTo: purple
6
- sdk: gradio
7
- sdk_version: 5.47.0
8
- app_file: app.py
9
- pinned: false
10
- license: apache-2.0
11
- short_description: วิเคราะห์ระบบไฟฟ้าขัดข้องและบำรุงรักษาโดย AI
12
- ---
13
-
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # OMS Analyze — Prototype
2
+
3
+ โปรเจกต์นี้เป็นแอปพลิเคชันต้นแบบสำหรับวิเคราะห์ข้อมูลการดับไฟฟ้า (OMS - Outage Management System) โดยใช้ AI และ Machine Learning เพื่อสรุป สืบหาความผิดปกติ พยากรณ์ และจำแนกสาเหตุ
4
+
5
+ แอปสร้างด้วย Gradio สำหรับใช้งานผ่านเว็บเบราว์เซอร์ และรองรับการอัปโหลดไฟล์ CSV เพื่อวิเคราะห์
6
+
7
+ ## การติดตั้งและรัน
8
+
9
+ ### ข้อกำหนด
10
+ - Python 3.12.9
11
+ - ติดตั้งแพ็คเกจจาก `requirements.txt`:
12
+ ```
13
+ pip install -r requirements.txt
14
+ ```
15
+
16
+ ### การตั้งค่าสภาพแวดล้อมด้วย pyenv (แนะนำ)
17
+
18
+ ตัวอย่างคำสั่งที่ผมใช้เพื่อเตรียม environment บน macOS (แนะนำใช้ pyenv เพื่อจัดการเวอร์ชัน Python):
19
+
20
+ ```
21
+ cd /Users/peace/Documents/projects/huggingface/AI-OMS-Analyze
22
+ pyenv install 3.12.9
23
+ pyenv local 3.12.9
24
+ /Users/$(whoami)/.pyenv/versions/3.12.9/bin/python -m venv .venv
25
+ source .venv/bin/activate
26
+ python -m pip install --upgrade pip setuptools wheel
27
+ python -m pip install -r requirements.txt
28
+ ```
29
+
30
+ หมายเหตุ:
31
+ - ผมคอมเมนต์ `prophet` ใน `requirements.txt` เพราะการติดตั้งจะพยายามคอมไพล์ CmdStan (C++ build) ซึ่งใช้เวลานานและมักต้องการเครื่องมือเพิ่มเติม (Xcode command line tools). ถ้าต้องการติดตั้ง `prophet` ให้ uncomment แล้วเตรียมเครื่องมือ build.
32
+ - ผมอัปเดต `fsspec` และ `openai` เป็นเวอร์ชันที่มีอยู่ใน PyPI เพื่อให้ pip หาแพ็กเกจเจอได้
33
+
34
+ - สำหรับการใช้ Hugging Face Router (สำหรับ LLM ใน Summarization และ Classification): ตั้งค่า `HF_TOKEN` ในไฟล์ `.env` (ดู `.env.example`)
35
+
36
+ ### Windows (ใช้ pyenv-win)
37
+
38
+ ถ้าคุณใช้ Windows ผมแนะนำติดตั้ง `pyenv-win` เพื่อจัดการเวอร์ชัน Python (หรือใช้ Python ที่ติดตั้งผ่าน Chocolatey / Microsoft Store แล้วสร้าง venv ตามปกติ)
39
+
40
+ 1) ติดตั้ง pyenv-win (PowerShell - Run as Administrator แนะนำ)
41
+
42
+ ```
43
+ # ผ่าน PowerShell (Admin)
44
+ Invoke-WebRequest -UseBasicParsing -Uri "https://pyenv.run" -OutFile "pyenv-win-install.ps1"
45
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
46
+ .\n+\pyenv-win-install.ps1
47
+
48
+ # หรือ ติดตั้งด้วย Scoop (ถ้ามี scoop)
49
+ scoop install pyenv
50
+
51
+ แอปแบ่งเป็นแท็บหลัก (UI) ดังนี้ — คำอธิบายสรุปการใช้งานและไฟล์ผลลัพธ์ที่ระบบจะสร้างในโฟลเดอร์ `outputs/`:
52
+
53
+ ### 1. Upload & Preview
54
+ - วัตถุประสงค์: อัปโหลดไฟล์ CSV และตรวจสอบตัวอย่างข้อมูล
55
+ - วิธีใช้:
56
+ 1. คลิก "Upload CSV" แล้วเลือกไฟล์ (ตัวอย่าง: `data/data_1.csv`, `data/data_3.csv`)
57
+ 2. ดูตัวอย่าง 10 แถวแรกและตรวจสอบชนิดของคอลัมน์
58
+ - ผลลัพธ์: preview เท่านั้น — การรันฟังก์ชันวิเคราะห์จะสร้างผลลัพธ์ลงใน `outputs/`
59
+
60
+ ### 2. Summarization
61
+ - วัตถุประสงค์: สร้างสรุปภาษาธรรมชาติสำหรับแต่ละเหตุการณ์หรือชุดข้อมูล
62
+ - วิธีใช้:
63
+ 1. อัปโหลดไฟล์ CSV
64
+ 2. ระบุแถวที่ต้องการสรุป (เว้นว่าง = ทั้งหมด; ห���ือระบุ index เช่น `0,1,2`)
65
+ 3. ถ้าต้องการใช้ LLM ให้เปิด "Use Hugging Face Router" และตั้ง `HF_TOKEN` ใน `.env`
66
+ 4. เลือกระดับรายละเอียด (brief / medium / detailed) แล้วคลิก "Generate Summaries"
67
+ - ผลลัพธ์: ไฟล์ `outputs/summaries_from_ui.csv` (UI run) หรือ `outputs/summaries.csv` (batch export)
68
+
69
+ ### 3. Anomaly Detection
70
+ - วัตถุประสงค์: ตรวจหาเหตุการณ์ผิดปกติด้วย ML (IsolationForest, LOF)
71
+ - วิธีใช้:
72
+ 1. อัปโหลดไฟล์ CSV
73
+ 2. เลือก algorithm: `both` (IsolationForest + LOF), `iso`, หรือ `lof`
74
+ 3. ปรับค่า contamination (0.01–0.2, default 0.05)
75
+ 4. คลิก "Run Anomaly Detection"
76
+ - ผลลัพธ์: `outputs/anomalies_from_ui.csv` (UI run) หรือ `outputs/anomalies.csv` (batch). รายการ suspects จะถูกบันทึกเป็น `outputs/ntl_suspects.csv` ถ้ามีการตรวจจับ
77
+
78
+ ### 4. Forecasting
79
+ - วัตถุประสงค์: พยากรณ์จำนวนเหตุการณ์หรือ downtime ในอนาคต
80
+ - วิธีใช้:
81
+ 1. อัปโหลดไฟล์ CSV
82
+ 2. เลือก metric: `count` หรือ `downtime_minutes`
83
+ 3. ตั้ง horizon (7–90 วัน, default 14)
84
+ 4. คลิก "Run Forecast"
85
+ - ผลลัพธ์: `outputs/forecast_count_from_ui.csv`, `outputs/forecast_downtime_minutes_from_ui.csv` (UI run) หรือ batch outputs `outputs/forecast_count.csv`, `outputs/forecast_downtime_minutes.csv`
86
+ (หากต้องการความแม่นยำมากขึ้น ให้ติดตั้ง `prophet==1.1.7`)
87
+
88
+ ### 5. Classification
89
+ - วัตถุประสงค์: จำแนกสาเหตุของเหตุการณ์ (root-cause classification)
90
+ - วิธีใช้:
91
+ 1. อัปโหลดไฟล์ CSV
92
+ 2. (Optional) เปิด "Run weak-labeling using HF" เพื่อให้ LLM สร้าง weak labels (`HF_TOKEN` ต้องถูกตั้ง)
93
+ 3. (Optional) เลือก "Run GridSearch" สำหรับ tuning
94
+ 4. คลิก "Train Classifier"
95
+ - ผลลัพธ์: โมเดลและผลลัพธ์จะถูกบันทึกลง `outputs/`, ตัวอย่างไฟล์:
96
+ - `outputs/rf_cause_pipeline.joblib`
97
+ - `outputs/predictions_cause.csv`
98
+ - ถ้ามีหลายโมเดล: `outputs/predictions_gb_CauseType.csv`, `outputs/predictions_mlp_CauseType.csv`, `outputs/predictions_rf_CauseType.csv`
99
+
100
+ python -m pip install --upgrade pip setuptools wheel
101
+ python -m pip install -r requirements.txt
102
+ ```
103
+
104
+ หมายเหตุ สำหรับ Windows:
105
+ - บางแพ็กเกจ (เช่น `geopandas`, `fiona`, `pyproj`, `shapely`) มี native dependencies (GDAL, PROJ) — การใช้ Miniforge/Conda จะทำให้ง่ายกว่า (conda-forge)
106
+ - `prophet` มักจะต้องการการติดตั้ง CmdStan/cmdstanpy ล่วงหน้า และอาจจะซับซ้อนบน Windows — พิจารณาใช้ WSL2 หรือ conda สำหรับงานนี้
107
+
108
+
109
+ ### รันแอป
110
+ ```
111
+ python app.py
112
+ ```
113
+ แอปจะรันที่ `http://127.0.0.1:7860` (หรือปรับ port ด้วย `--server.port PORT`)
114
+
115
+ ### โครงสร้างไฟล์
116
+ - `data/data.csv`: ไฟล์ข้อมูลตัวอย่าง
117
+ - `scripts/`: โมดูล Python สำหรับแต่ละฟีเจอร์
118
+ - `outputs/`: ไฟล์ผลลัพธ์จากการวิเคราะห์
119
+ - `app.py`: แอป Gradio หลัก
120
+
121
+ ## คู่มือการใช้งาน
122
+
123
+ แอปแบ่งเป็นแท็บต่างๆ ดังนี้:
124
+
125
+ ### 1. Upload & Preview
126
+ - **วัตถุประสงค์**: อัปโหลดไฟล์ CSV และดูตัวอย่างข้อมูล
127
+ - **วิธีใช้**:
128
+ 1. คลิก "Upload CSV" เลือกไฟล์ CSV (เช่น `data/data.csv`)
129
+ 2. แสดงตัวอย่าง 10 แถวแรกในตาราง HTML
130
+ - **หมายเหตุ**: ใช้สำหรับตรวจสอบข้อมูลก่อนวิเคราะห์
131
+
132
+ ### 2. Summarization
133
+ - **วัตถุประสงค์**: สร้างสรุปภาษาธรรมชาติสำหรับเหตุการณ์ดับไฟฟ้า
134
+ - **วิธีใช้**:
135
+ 1. อัปโหลดไฟล์ CSV
136
+ 2. เลือกแถวที่ต้องการสรุป (เว้นว่าง = ทั้งหมด, หรือใส่ index เช่น `0,1,2`)
137
+ 3. เลือก "Use Hugging Face Router" ถ้ามี `HF_TOKEN` (ใช้ LLM สำหรับสรุปละเอียด)
138
+ 4. เลือก verbosity: brief/medium/detailed
139
+ 5. คลิก "Generate Summaries"
140
+ 6. ดูผลสรุปในตาราง และ download ไฟล์ `summaries_from_ui.csv`
141
+ - **ฟีเจอร์**: รองรับ fallback เป็น rule-based summary ถ้าไม่มี HF token
142
+ - **ผลลัพธ์**: CSV กับคอลัมน์ EventNumber, OutageDateTime, Summary
143
+
144
+ ### 3. Anomaly Detection
145
+ - **วัตถุประสงค์**: ตรวจหาเหตุการณ์ผิดปกติโดยใช้ Machine Learning
146
+ - **วิธีใช้**:
147
+ 1. อัปโหลดไฟล์ CSV
148
+ 2. เลือก algorithm: both (IsolationForest + LOF), iso, หรือ lof
149
+ 3. ปรับ contamination (0.01-0.2, ค่าเริ่มต้น 0.05)
150
+ 4. คลิก "Run Anomaly Detection"
151
+ 5. ดูผลในตาราง (รวมคอลัมน์ anomaly flags และ explanations)
152
+ 6. Download ไฟล์ `anomalies_from_ui.csv`
153
+ - **ฟีเจอร์**: Feature engineering (duration, load, affected customers, etc.), z-score explanations
154
+ - **ผลลัพธ์**: CSV กับคอลัมน์ anomaly scores และ textual explanations
155
+
156
+ ### 4. Forecasting
157
+ - **วัตถุประสงค์**: พยากรณ์จำนวนเหตุการณ์หรือ downtime ในอนาคต
158
+ - **วิธีใช้**:
159
+ 1. อัปโหลดไฟล์ CSV
160
+ 2. เลือก metric: count (จำนวนเหตุการณ์) หรือ downtime_minutes
161
+ 3. ปรับ horizon (7-90 วัน, ค่าเริ่มต้น 14)
162
+ 4. คลิก "Run Forecast"
163
+ 5. ดูผลในตาราง (แสดง actual ล่าสุด + forecast)
164
+ 6. Download ไฟล์ `forecast_{metric}_from_ui.csv`
165
+ - **ฟีเจอร์**: ใช้ Prophet ถ้าติดตั้งได้, มิฉะนั้นใช้ naive forecast
166
+ - **ผลลัพธ์**: CSV กับคอลัมน์ date และ predicted values
167
+
168
+ ### 5. Classification
169
+ - **วัตถุประสงค์**: จัดประเภทสาเหตุของเหตุการณ์ (Root-Cause Classification)
170
+ - **วิธีใช้**:
171
+ 1. อัปโหลดไฟล์ CSV
172
+ 2. เลือก "Run weak-labeling using HF" ถ้าต้องการใช้ LLM เสริม labels (ต้องมี HF_TOKEN)
173
+ 3. เลือก "Run GridSearch" สำหรับ hyperparameter tuning (ช้ากว่า)
174
+ 4. คลิก "Train Classifier"
175
+ 5. ดู classification report ใน textbox
176
+ 6. Download โมเดล `rf_cause_pipeline.joblib` และ predictions `predictions_cause.csv`
177
+ - **ฟีเจอร์**: Feature engineering, RandomForest pipeline, optional GridSearchCV, weak-labeling ด้วย HF Router
178
+ - **ผลลัพธ์**: โมเดล trained และ predictions CSV
179
+
180
+ ## หมายเหตุ
181
+ - เป็น prototype: ฟีเจอร์อาจไม่สมบูรณ์หรือปรับปรุงได้
182
+ - สำหรับ deployment บน Hugging Face Spaces: อัปโหลดโค้ดและตั้งค่า HF_TOKEN ใน Secrets
183
+ - ข้อมูลตัวอย่าง: `data/data.csv` มีคอลัมน์เช่น EventNumber, OutageDateTime, CauseType, etc.
184
+ - ถ้ามีปัญหา: ตรวจสอบ console สำหรับ errors และ ensure Python environment ถูกต้อง
185
+
186
+ ## การพัฒนาเพิ่มเติม
187
+ - เพิ่ม interactive maps สำหรับ anomalies
188
+ - SHAP explanations สำหรับ models
189
+ - Human-in-the-loop สำหรับ weak labels
190
+ - Alerting และ real-time processing
app.py ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ from pathlib import Path
4
+ from scripts.summarize import summarize_events
5
+ from scripts.data_cleansing import cleanse_data
6
+ from dotenv import load_dotenv
7
+ import os
8
+ import numpy as np
9
+ import joblib
10
+
11
+ ROOT = Path(__file__).resolve().parents[0]
12
+ load_dotenv(ROOT / '.env')
13
+
14
+
15
+ def preview_csv(file_obj):
16
+ try:
17
+ df = pd.read_csv(file_obj.name, dtype=str)
18
+ return df.head(10).to_html(index=False)
19
+ except Exception as e:
20
+ return f"Error reading file: {e}"
21
+
22
+
23
+ def parse_row_selection(df, rows_text: str):
24
+ if not rows_text:
25
+ return df
26
+ idx = []
27
+ for token in rows_text.split(','):
28
+ token = token.strip()
29
+ if token.isdigit():
30
+ idx.append(int(token))
31
+ return df.iloc[idx]
32
+
33
+
34
+ with gr.Blocks() as demo:
35
+ gr.Markdown("# OMS Analyze — Prototype")
36
+ with gr.Tabs():
37
+ # Upload & Preview tab
38
+ with gr.TabItem('Upload & Preview'):
39
+ gr.Markdown("**อัปโหลด & แสดงตัวอย่าง**: อัปโหลดไฟล์ CSV เพื่อแสดงตัวอย่างข้อมูล ใช้ algorithm ทำความสะอาดข้อมูล (ลบข้อมูลซ้ำ, จัดการค่าที่หายไป) และเปรียบเทียบข้อมูลเดิมกับข้อมูลที่ทำความสะอาด ดาวน์โหลด CSV ที่ทำความสะอาดแล้ว")
40
+ csv_up = gr.File(label='Upload CSV (data.csv)')
41
+ with gr.Row():
42
+ remove_dup = gr.Checkbox(label='Remove Duplicates', value=False)
43
+ missing_handling = gr.Radio(choices=['drop','impute_mean','impute_median','impute_mode'], value='drop', label='Missing Values Handling')
44
+ apply_clean = gr.Button('Apply Cleansing')
45
+ with gr.Tabs():
46
+ with gr.TabItem('Original Data'):
47
+ original_preview = gr.Dataframe(label='Original Data Preview')
48
+ with gr.TabItem('Cleansed Data'):
49
+ cleansed_preview = gr.Dataframe(label='Cleansed Data Preview')
50
+ download_cleansed = gr.File(label='Download Cleansed CSV')
51
+ clean_status = gr.Textbox(label='Cleansing Status', interactive=False)
52
+
53
+ def initial_preview(file):
54
+ if file is None:
55
+ return pd.DataFrame(), pd.DataFrame(), "Upload a file"
56
+ df = pd.read_csv(file.name, dtype=str)
57
+ return df.head(100), pd.DataFrame(), "File uploaded, apply cleansing if needed"
58
+
59
+ def apply_cleansing(file, remove_duplicates, missing_strategy):
60
+ if file is None:
61
+ return pd.DataFrame(), "No file", None
62
+ try:
63
+ df = pd.read_csv(file.name, dtype=str)
64
+ df_clean, orig_shape, clean_shape = cleanse_data(df, remove_duplicates, missing_strategy)
65
+ status = f"Original: {orig_shape[0]} rows, {orig_shape[1]} cols → Cleaned: {clean_shape[0]} rows, {clean_shape[1]} cols"
66
+ # Save cleansed data for download
67
+ out_file = ROOT / 'outputs' / 'cleansed_data.csv'
68
+ out_file.parent.mkdir(exist_ok=True)
69
+ df_clean.to_csv(out_file, index=False, encoding='utf-8-sig')
70
+ return df_clean.head(100), status, str(out_file)
71
+ except Exception as e:
72
+ return pd.DataFrame(), f"Error: {e}", None
73
+
74
+ csv_up.change(fn=initial_preview, inputs=csv_up, outputs=[original_preview, cleansed_preview, clean_status])
75
+ apply_clean.click(fn=apply_cleansing, inputs=[csv_up, remove_dup, missing_handling], outputs=[cleansed_preview, clean_status, download_cleansed])
76
+
77
+ # Summarization tab
78
+ with gr.TabItem('Summarization'):
79
+ gr.Markdown("**สรุปเหตุการณ์**: สร้างสรุปข้อความสำหรับเหตุการณ์ไฟฟ้าล้ม เลือกแถวเฉพาะ, ระดับรายละเอียด และเลือกใช้ AI (Hugging Face) เพื่อเพิ่มความละเอียด ดาวน์โหลด CSV สรุป")
80
+ csv_in = gr.File(label='Upload CSV (data.csv)')
81
+ with gr.Row():
82
+ rows = gr.Textbox(label='Rows (comma-separated indexes) or empty = all', placeholder='e.g. 0,1,2')
83
+ use_hf = gr.Checkbox(label='Use Generative AI', value=False)
84
+ verbosity = gr.Radio(choices=['analyze','recommend'], value='analyze', label='Summary Type', interactive=True)
85
+ run_btn = gr.Button('Generate Summaries', interactive=True)
86
+ with gr.Row():
87
+ model_selector = gr.Dropdown(
88
+ choices=[
89
+ 'meta-llama/Llama-3.1-8B-Instruct:novita',
90
+ 'meta-llama/Llama-4-Scout-17B-16E-Instruct:novita',
91
+ 'Qwen/Qwen3-VL-235B-A22B-Instruct:novita',
92
+ 'deepseek-ai/DeepSeek-R1:novita'
93
+ ],
94
+ value='meta-llama/Llama-3.1-8B-Instruct:novita',
95
+ label='GenAI Model',
96
+ interactive=True,
97
+ visible=False
98
+ )
99
+ out = gr.Dataframe(headers=['EventNumber','OutageDateTime','Summary'])
100
+ status = gr.Textbox(label='Status', interactive=False)
101
+ download = gr.File(label='Download summaries')
102
+
103
+ def run_summarize(file, rows_text, use_hf_flag, verbosity_level):
104
+ print(f"Debug: file={file}, rows_text={rows_text}, use_hf_flag={use_hf_flag}, verbosity_level={verbosity_level}")
105
+ if file is None:
106
+ return pd.DataFrame([], columns=['EventNumber','OutageDateTime','Summary']), 'No file provided', None
107
+ df = pd.read_csv(file.name, dtype=str)
108
+ df_sel = parse_row_selection(df, rows_text)
109
+ model = 'meta-llama/Llama-3.1-8B-Instruct:novita' # default
110
+ res = summarize_events(df_sel, use_hf=use_hf_flag, verbosity=verbosity_level, model=model)
111
+ out_df = pd.DataFrame(res)
112
+ out_file = ROOT / 'outputs' / 'summaries_from_ui.csv'
113
+ out_file.parent.mkdir(exist_ok=True)
114
+ out_df.to_csv(out_file, index=False, encoding='utf-8-sig')
115
+ status_text = f"Summaries generated: {len(out_df)} rows. HF used: {use_hf_flag}"
116
+ return out_df, status_text, str(out_file)
117
+
118
+ def update_model_visibility(use_hf_flag):
119
+ return gr.update(visible=use_hf_flag, interactive=use_hf_flag)
120
+
121
+ use_hf.change(fn=update_model_visibility, inputs=use_hf, outputs=model_selector)
122
+
123
+ run_btn.click(fn=run_summarize, inputs=[csv_in, rows, use_hf, verbosity], outputs=[out, status, download])
124
+ with gr.TabItem('Anomaly Detection'):
125
+ gr.Markdown("**ตรวจจับความผิดปกติ**: ตรวจจับเหตุการณ์ไฟฟ้าล้มที่ผิดปกติโดยใช้ algorithm การเรียนรู้ของเครื่อง (Isolation Forest, Local Outlier Factor, Autoencoder) ตั้งระดับการปนเปื้อนและดาวน์โหลดผลลัพธ์พร้อมธงความผิดปกติ")
126
+ csv_in_anom = gr.File(label='Upload CSV for Anomaly')
127
+ with gr.Row():
128
+ alg = gr.Radio(choices=['both','iso','lof','autoencoder'], value='both', label='Algorithm')
129
+ contamination = gr.Slider(minimum=0.01, maximum=0.2, value=0.05, step=0.01, label='Contamination')
130
+ run_anom = gr.Button('Run Anomaly Detection')
131
+ anom_out = gr.Dataframe()
132
+ anom_status = gr.Textbox(label='Anomaly Status', interactive=False)
133
+ anom_download = gr.File(label='Download anomalies CSV')
134
+
135
+ def run_anomaly_ui(file, algorithm, contamination):
136
+ if file is None:
137
+ return pd.DataFrame(), 'No file provided', None
138
+ from scripts.anomaly import detect_anomalies
139
+ df = pd.read_csv(file.name, dtype=str)
140
+ res = detect_anomalies(df, contamination=contamination, algorithm=algorithm)
141
+ out_file = ROOT / 'outputs' / 'anomalies_from_ui.csv'
142
+ out_file.parent.mkdir(exist_ok=True)
143
+ res.to_csv(out_file, index=False, encoding='utf-8-sig')
144
+ status = f"Anomaly detection done. Rows: {len(res)}. Flags: {res['final_flag'].sum()}"
145
+ return res, status, str(out_file)
146
+
147
+ run_anom.click(fn=run_anomaly_ui, inputs=[csv_in_anom, alg, contamination], outputs=[anom_out, anom_status, anom_download])
148
+
149
+ # Forecasting tab
150
+ with gr.TabItem('Forecasting'):
151
+ gr.Markdown("**พยากรณ์**: พยากรณ์จำนวนเหตุการณ์หรือเวลาหยุดทำงานในอนาคตโดยใช้การวิเคราะห์อนุกรมเวลา (Prophet) เลือกเมตริกและช่วงพยากรณ์ ดาวน์โหลด CSV พยากรณ์")
152
+ csv_in_fc = gr.File(label='Upload CSV for Forecast')
153
+ with gr.Row():
154
+ metric_fc = gr.Radio(choices=['count','downtime_minutes'], value='count', label='Metric')
155
+ horizon = gr.Slider(minimum=7, maximum=90, value=14, step=1, label='Horizon (days)')
156
+ run_fc = gr.Button('Run Forecast')
157
+ fc_out = gr.Dataframe()
158
+ fc_status = gr.Textbox(label='Forecast Status', interactive=False)
159
+ fc_download = gr.File(label='Download forecast CSV')
160
+
161
+ def run_forecast_ui(file, metric, horizon_days):
162
+ if file is None:
163
+ return pd.DataFrame(), 'No file provided', None
164
+ from scripts.forecast import prepare_timeseries, run_forecast
165
+ df = pd.read_csv(file.name, dtype=str)
166
+ ts, fcst = run_forecast(df, metric=metric, periods=int(horizon_days))
167
+ out_file = ROOT / 'outputs' / f'forecast_{metric}_from_ui.csv'
168
+ out_file.parent.mkdir(exist_ok=True)
169
+ fcst.to_csv(out_file, index=False, encoding='utf-8-sig')
170
+ status = f"Forecast produced: {len(fcst)} rows (horizon {horizon_days} days)."
171
+ display_df = pd.concat([ts.tail(30).rename(columns={'y':'actual'}).set_index('ds'), fcst.set_index('ds')], axis=1).reset_index()
172
+ return display_df, status, str(out_file)
173
+
174
+ run_fc.click(fn=run_forecast_ui, inputs=[csv_in_fc, metric_fc, horizon], outputs=[fc_out, fc_status, fc_download])
175
+
176
+ # Classification tab
177
+ with gr.TabItem('Classification'):
178
+ gr.Markdown("**จำแนกประเภท**: ฝึกโมเดลการเรียนรู้ของเครื่องเพื่อจำแนกสาเหตุของไฟฟ้าล้ม เลือกประเภทโมเดล (Random Forest, Gradient Boosting, MLP), เปิดใช้งาน weak labeling หรือ grid search ดาวน์โหลดโมเดลที่ฝึกแล้วและการทำนาย")
179
+ csv_in_cls = gr.File(label='Upload CSV for Classification')
180
+ with gr.Row():
181
+ label_col = gr.Dropdown(choices=['CauseType','SubCauseType'], value='CauseType', label='Target Column')
182
+ do_weak = gr.Checkbox(label='Run weak-labeling using HF (requires HF_TOKEN)', value=False)
183
+ model_type = gr.Radio(choices=['rf','gb','mlp'], value='rf', label='Model Type')
184
+ run_cls = gr.Button('Train Classifier')
185
+ def update_hyperparams_visibility(model_choice):
186
+ rf_visible = model_choice == 'rf'
187
+ gb_visible = model_choice == 'gb'
188
+ mlp_visible = model_choice == 'mlp'
189
+ return [
190
+ gr.update(visible=rf_visible),
191
+ gr.update(visible=rf_visible),
192
+ gr.update(visible=rf_visible),
193
+ gr.update(visible=rf_visible),
194
+ gr.update(visible=gb_visible),
195
+ gr.update(visible=gb_visible),
196
+ gr.update(visible=gb_visible),
197
+ gr.update(visible=mlp_visible),
198
+ gr.update(visible=mlp_visible),
199
+ gr.update(visible=mlp_visible),
200
+ ]
201
+
202
+ with gr.Accordion("Hyperparameters (Advanced)", open=False):
203
+ gr.Markdown("Adjust hyperparameters for the selected model. Defaults are set for good performance.")
204
+ rf_n_estimators = gr.Slider(minimum=50, maximum=500, value=100, step=10, label="RF: n_estimators", visible=True)
205
+ rf_max_depth = gr.Slider(minimum=5, maximum=50, value=10, step=1, label="RF: max_depth", visible=True)
206
+ rf_min_samples_split = gr.Slider(minimum=2, maximum=10, value=2, step=1, label="RF: min_samples_split", visible=True)
207
+ rf_min_samples_leaf = gr.Slider(minimum=1, maximum=5, value=1, step=1, label="RF: min_samples_leaf", visible=True)
208
+ gb_n_estimators = gr.Slider(minimum=50, maximum=500, value=100, step=10, label="GB: n_estimators", visible=False)
209
+ gb_max_depth = gr.Slider(minimum=3, maximum=20, value=3, step=1, label="GB: max_depth", visible=False)
210
+ gb_learning_rate = gr.Slider(minimum=0.01, maximum=0.3, value=0.1, step=0.01, label="GB: learning_rate", visible=False)
211
+ mlp_hidden_layer_sizes = gr.Textbox(value="(100,)", label="MLP: hidden_layer_sizes (tuple)", visible=False)
212
+ mlp_alpha = gr.Slider(minimum=0.0001, maximum=0.01, value=0.0001, step=0.0001, label="MLP: alpha", visible=False)
213
+ mlp_max_iter = gr.Slider(minimum=100, maximum=4000, value=500, step=50, label="MLP: max_iter", visible=False)
214
+
215
+ model_type.change(fn=update_hyperparams_visibility, inputs=model_type, outputs=[rf_n_estimators, rf_max_depth, rf_min_samples_split, rf_min_samples_leaf, gb_n_estimators, gb_max_depth, gb_learning_rate, mlp_hidden_layer_sizes, mlp_alpha, mlp_max_iter])
216
+
217
+ cls_out = gr.Textbox(label='Classification Report')
218
+ model_path_state = gr.State()
219
+ cls_download_model = gr.File(label='Download saved model')
220
+ cls_download_preds = gr.File(label='Download predictions CSV')
221
+
222
+ # Test section
223
+ gr.Markdown("---")
224
+ gr.Markdown("**ทดสอบโมเดล**: อัปโหลดไฟล์ CSV ใหม่เพื่อทดสอบโมเดลที่ฝึกแล้ว")
225
+ test_csv = gr.File(label='Upload CSV for Testing')
226
+ run_test = gr.Button('Test Model')
227
+ test_out = gr.Dataframe(label='Test Predictions')
228
+ test_status = gr.Textbox(label='Test Status', interactive=False)
229
+ test_download = gr.File(label='Download Test Predictions')
230
+
231
+ def run_classify_ui(file, label_col_choice, use_weak, model_choice, rf_n_est, rf_max_d, rf_min_ss, rf_min_sl, gb_n_est, gb_max_d, gb_lr, mlp_hls, mlp_a, mlp_mi):
232
+ if file is None:
233
+ return 'No file provided', None, None, None
234
+ from scripts.classify import train_classifier
235
+ df = pd.read_csv(file.name, dtype=str)
236
+ try:
237
+ hyperparams = {}
238
+ if model_choice == 'rf':
239
+ hyperparams = {'n_estimators': int(rf_n_est), 'max_depth': int(rf_max_d), 'min_samples_split': int(rf_min_ss), 'min_samples_leaf': int(rf_min_sl)}
240
+ elif model_choice == 'gb':
241
+ hyperparams = {'n_estimators': int(gb_n_est), 'max_depth': int(gb_max_d), 'learning_rate': gb_lr}
242
+ elif model_choice == 'mlp':
243
+ import ast
244
+ hyperparams = {'hidden_layer_sizes': ast.literal_eval(mlp_hls), 'alpha': mlp_a, 'max_iter': int(mlp_mi)}
245
+ res = train_classifier(df, label_col=label_col_choice, model_type=model_choice, hyperparams=hyperparams)
246
+ report = res.get('report','')
247
+ model_file = res.get('model_file')
248
+ preds_file = res.get('predictions_file')
249
+ # ensure returned file paths are strings for Gradio
250
+ return report, model_file, preds_file, model_file
251
+ except Exception as e:
252
+ return f'Training failed: {e}', None, None, None
253
+
254
+ def run_test_ui(test_file, model_path):
255
+ if test_file is None:
256
+ return pd.DataFrame(), 'No test file provided', None
257
+ if model_path is None:
258
+ return pd.DataFrame(), 'No trained model available. Please train a model first.', None
259
+ try:
260
+ from scripts.classify import parse_and_features
261
+ # Load model
262
+ model_data = joblib.load(model_path)
263
+ pipeline = model_data['pipeline']
264
+ le = model_data['label_encoder']
265
+
266
+ # Load and preprocess test data
267
+ df_test = pd.read_csv(test_file.name, dtype=str)
268
+ df_test = parse_and_features(df_test)
269
+
270
+ # Define features (same as training)
271
+ feature_cols = ['duration_min','Load(MW)_num','Capacity(kVA)_num','AffectedCustomer_num','hour','weekday','device_freq','OpDeviceType','Owner','Weather','EventType']
272
+ X_test = df_test[feature_cols]
273
+
274
+ # Predict
275
+ y_pred_encoded = pipeline.predict(X_test)
276
+ y_pred = le.inverse_transform(y_pred_encoded)
277
+
278
+ # Create output df
279
+ pred_df = df_test.copy()
280
+ pred_df['Predicted_CauseType'] = y_pred
281
+
282
+ # Save predictions
283
+ out_file = ROOT / 'outputs' / 'test_predictions.csv'
284
+ out_file.parent.mkdir(exist_ok=True)
285
+ pred_df.to_csv(out_file, index=False, encoding='utf-8-sig')
286
+
287
+ status = f"Test completed. Predictions for {len(pred_df)} rows."
288
+ return pred_df.head(100), status, str(out_file)
289
+ except Exception as e:
290
+ return pd.DataFrame(), f'Test failed: {e}', None
291
+
292
+ run_cls.click(fn=run_classify_ui, inputs=[csv_in_cls, label_col, do_weak, model_type, rf_n_estimators, rf_max_depth, rf_min_samples_split, rf_min_samples_leaf, gb_n_estimators, gb_max_depth, gb_learning_rate, mlp_hidden_layer_sizes, mlp_alpha, mlp_max_iter], outputs=[cls_out, cls_download_model, cls_download_preds, model_path_state])
293
+ run_test.click(fn=run_test_ui, inputs=[test_csv, model_path_state], outputs=[test_out, test_status, test_download])
294
+
295
+ # Label Suggestion tab
296
+ with gr.TabItem('Label Suggestion'):
297
+ gr.Markdown("**แนะนำป้ายกำกับ**: แนะนำป้ายกำกับสาเหตุที่เป็นไปได้สำหรับเหตุการณ์ไฟฟ้าล้มที่ไม่รู้สาเหตุ โดยอิงจากความคล้ายกับสาเหตุที่รู้จัก ตั้งจำนวนคำแนะนำสูงสุด ดาวน์��หลด CSV คำแนะนำ")
298
+ csv_in_ls = gr.File(label='Upload CSV (defaults to data/data_3.csv)')
299
+ with gr.Row():
300
+ top_k = gr.Slider(minimum=1, maximum=5, value=1, step=1, label='Top K suggestions')
301
+ run_ls = gr.Button('Run Label Suggestion')
302
+ ls_out = gr.Dataframe()
303
+ ls_status = gr.Textbox(label='Label Suggestion Status', interactive=False)
304
+ ls_download = gr.File(label='Download label suggestions')
305
+
306
+ def run_label_suggestion(file, top_k_suggest):
307
+ # delegate to scripts.label_suggestion
308
+ from scripts.label_suggestion import suggest_labels_to_file
309
+ if file is None:
310
+ default = ROOT / 'data' / 'data_3.csv'
311
+ if not default.exists():
312
+ return pd.DataFrame(), 'No file provided and default data/data_3.csv not found', None
313
+ df = pd.read_csv(default, dtype=str)
314
+ else:
315
+ df = pd.read_csv(file.name, dtype=str)
316
+
317
+ out_file = ROOT / 'outputs' / 'label_suggestions.csv'
318
+ out_df = suggest_labels_to_file(df, out_path=str(out_file), top_k=int(top_k_suggest))
319
+ status = f"Label suggestion done. Unknown rows processed: {len(out_df)}. Output: {out_file}"
320
+ return out_df, status, str(out_file) if len(out_df)>0 else None
321
+
322
+ run_ls.click(fn=run_label_suggestion, inputs=[csv_in_ls, top_k], outputs=[ls_out, ls_status, ls_download])
323
+
324
+ if __name__ == '__main__':
325
+ demo.launch()
data/.DS_Store ADDED
Binary file (6.15 kB). View file
 
data/data_1.csv ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Number,EventNumber,OutageDateTime,CountOfRestoStep,FirstRestoDateTime,LastRestoDateTime,FirstStepDuration,LastStepDuration,EventType,SubstationID,Feeder,OpDeviceID,OpDeviceGIStag,OpDeviceXYcoord,OpDeviceType,OpDeviceStatus,OpDevicePhase,OpVolt,OpVolt1,OpVolt2,OpDeviceSysType,Owner,FaultSysType,KnowUnknowCause,Weather,CauseType,SubCauseType,FaultDeviceType,FaultDevice,FaultDeviceCondition,Parts,DamagedParts,Manufacturer,RelayType,Relation,RelayPhase,RelayStatus,Detail,FaultDetail,SiteDetail,OpDeviceAreaID,OpDeviceSiteID,EventSiteID,AffectedAreaID,AffectedSiteID,Industrial,AffectedCustomer1,AffectedCustomer2,AffectedCustomer3,AffectedCustomer4,AffectedCustomer5,AffectedCustomer,AllStepCusXTime1,AllStepCusXTime2,AllStepCusXTime3,AllStepCusXTime4,AllStepCusXTime5,AllStepCusXTime,Capacity(kVA),Load(MW),CorrectionDetail,WorkOrderID,CreateEventDateTime,CloseEventDateTime
2
+ 1,5522625735,10-01-2025 10:28:00,1,10-01-2025 10:33:00,10-01-2025 10:33:00,5,5,แผนดับไฟ,KWB,KWB07,59-019156,32XFHA001805499,"702290.194109,1516163.221549",Three Phase Transformer,Operate,ABC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,บำรุงรักษาตามวาระ,บำรุงรักษาตามวาระอื่นๆ,หม้อแปลงจำหน่าย,,,หม้อแปลงจำหน่าย,,,,,,,,,บำรุงรักษาหม้อแปลง,C2_P,H23101,H23101,C2_P,H23101,,,,,,30,30,,,,,150,150,160,0.014288043,,1007429318,21-05-2024 21:46:02,10-01-2025 10:32:38
3
+ 2,5523583596,10-01-2025 10:33:00,1,10-01-2025 10:38:00,10-01-2025 10:38:00,5,5,แผนดับไฟ,KWB,KWB07,51-006725,32XFHA000029380,"702729.380109,1516737.858549",Three Phase Transformer,Operate,ABC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,บำรุงรักษาตามวาระ,บำรุงรักษาตามวาระอื่นๆ,หม้อแปลงจำหน่าย,,,หม้อแปลงจำหน่าย,,,,,,,,,บำรุงรักษาหม้อแปลง,C2_P,H23101,H23101,C2_P,H23101,,,,,,34,34,,,,,170,170,100,0.018150423,,1007430088,22-05-2024 08:37:11,10-01-2025 10:34:40
4
+ 3,5523761535,10-01-2025 10:35:00,1,10-01-2025 10:40:00,10-01-2025 10:40:00,5,5,แผนดับไฟ,KWB,KWB07,24-016273,3224XF000001242,"711060.735109,1525056.524549",Three Phase Transformer,Operate,ABC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,บำรุงรักษาตามวาระ,บำรุงรักษาตามวาระอื่นๆ,หม้อแปลงจำหน่าย,,,หม้อแปลงจำหน่าย,,,,,,,,,บำรุงรักษาหม้อแปลง,C2_P,H23101,H23101,C2_P,H23101,,,,,,85,85,,,,,425,425,250,0.06943619,,1007430461,22-05-2024 10:48:52,10-01-2025 10:36:02
5
+ 4,5579114474,10-01-2025 11:05:00,1,10-01-2025 11:10:00,10-01-2025 11:10:00,5,5,แผนดับไฟ,KWB,KWB10,KWB10F-02,32SWHA001430130,"714702.043109,1524010.689549",Drop out Fuse,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ทดสอบระบบการจ่ายไฟ,ทดสอบอื่นๆ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,.,C2_P,H23101,H23101,C2_P,H23101,,,,,,64,64,,,,,320,320,120,0.07338668,,1007885616,13-06-2024 15:19:37,10-01-2025 11:07:05
6
+ 5,5610738244,09-01-2025 15:48:00,1,09-01-2025 15:48:00,09-01-2025 15:48:00,0,0,แผนดับไฟ,-,-,NKP04YB-01,32CHHA000001746,"731293.435109,1418702.857549",Circuit Breaker_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,มาบตาพุด,C2_P,H14101,H14101,C2_P,H14101,,,,,,,0,,,,,,0,0,0,,1007521312,27-06-2024 10:31:59,09-01-2025 15:49:05
7
+ 6,5632771392,09-01-2025 14:55:00,1,09-01-2025 15:00:00,09-01-2025 15:00:00,5,5,แผนดับไฟ,GUU,GUU04,GUU04R-02,32RCHA000003846,"832182.213109,1432428.503549",Recloser,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับป���ุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,เขาคิชฌกูฏ,C2_P,H03108,H03108,C2_P,H03108,,,,,2559,,2559,,,,12795,,12795,6480,0.74881445,,,08-07-2024 14:32:42,09-01-2025 15:00:36
8
+ 8,5696187479,09-01-2025 15:42:00,1,09-01-2025 15:43:00,09-01-2025 15:43:00,1,1,แผนดับไฟ,BAP,BAP04,BAP04VS-103,32SWHA001424800,"712262.272109,1531181.496549",Gas Switch ,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,บางน้ำเปรี้ยว,C2_P,H23201,H23201,C2_P,H23201,,,,,859,1756,2615,,,,859,1756,2615,15715,2.8329294,,,06-08-2024 13:38:32,09-01-2025 15:43:29
9
+ 9,5696187479,09-01-2025 15:42:00,1,09-01-2025 15:43:00,09-01-2025 15:43:00,1,1,แผนดับไฟ,BAP,BAP04,BAP04VS-103,32SWHA001424800,"712262.272109,1531181.496549",Gas Switch ,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,บางน้ำเปรี้ยว,C2_P,H23201,H23201,C2_P,H23202,,,,,817,1420,2237,,,,817,1420,2237,9485,2.8329294,,,06-08-2024 13:38:32,09-01-2025 15:43:29
10
+ 10,5702510021,09-01-2025 15:41:00,1,09-01-2025 15:41:00,09-01-2025 15:41:00,0,0,แผนดับไฟ,MBA,MBA05,RAB10S-10,32SWHA001411561,"737096.562109,1415463.974549",Gas Switch ,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,มาบตาพุด,C2_P,H14101,H14101,C2_P,H14101,,,,,622,,622,,,,0,,0,14615,2.6354336,,,08-08-2024 10:00:34,09-01-2025 15:42:20
11
+ 11,5702510021,09-01-2025 15:41:00,1,09-01-2025 15:41:00,09-01-2025 15:41:00,0,0,แผนดับไฟ,MBA,MBA05,RAB10S-10,32SWHA001411561,"737096.562109,1415463.974549",Gas Switch ,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,มาบตาพุด,C2_P,H14101,H14101,C2_P,H14201,,,,,725,,725,,,,0,,0,8580,2.6354336,,,08-08-2024 10:00:34,09-01-2025 15:42:20
12
+ 12,5728292708,09-01-2025 15:10:00,1,09-01-2025 15:10:00,09-01-2025 15:10:00,0,0,แผนดับไฟ,KZA,KZA05,KZA05VS-102,32SWHA000002670,"865079.515109,1340225.456549",Gas Switch ,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,เกาะช้าง,C2_P,H04401,H04401,C2_P,H04401,,,,,286,,286,,,,0,,0,1190,0.14538371,,1007632768,18-08-2024 00:01:08,09-01-2025 15:11:30
13
+ 14,5816619933,09-01-2025 15:16:00,1,09-01-2025 15:16:00,09-01-2025 15:16:00,0,0,แผนดับไฟ,-,-,APB104YB-01,32CHHA000000693,"709219.130109,1451836.395549",Circuit Breaker_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,แหลมฉบัง,C2_P,H22101,H22101,C2_P,H22101,,,,,,,0,,,,,,0,0,0,,,23-09-2024 10:24:39,09-01-2025 15:17:28
14
+ 15,5817699872,09-01-2025 15:39:00,1,09-01-2025 15:39:00,09-01-2025 15:39:00,0,0,แผนดับไฟ,BAP,BAP10,BAP10VS-104,32SWHA001427942,"712177.793109,1530996.977549",Disconnecting Switch,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,บางน้ำเปรี้ยว,C2_P,H23201,H23201,C2_P,H23101,,,,,,,0,,,,,,0,0,1.0513221,,,23-09-2024 20:22:08,09-01-2025 15:40:02
15
+ 16,5817699872,09-01-2025 15:39:00,1,09-01-2025 15:39:00,09-01-2025 15:39:00,0,0,แผนดับไฟ,BAP,BAP10,BAP10VS-104,32SWHA001427942,"712177.793109,1530996.977549",Disconnecting Switch,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,บางน้ำเปรี้ยว,C2_P,H23201,H23201,C2_P,H23201,,,,,272,314,586,,,,0,0,0,7095,1.0513221,,,23-09-2024 20:22:08,09-01-2025 15:40:02
16
+ 18,5832279138,09-01-2025 15:23:00,1,09-01-2025 15:24:00,09-01-2025 15:24:00,1,1,แผนดับไฟ,CTA,CTA03,CTA03VB-01,3222CB000000034,"838783.654109,1401980.495549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,จันทบุรี,C2_P,H03101,H03101,C2_P,H03101,,,,,997,,997,,,,997,,997,5900,5.2626816,,,01-10-2024 11:05:34,09-01-2025 15:25:14
17
+ 19,5832279138,09-01-2025 15:23:00,1,09-01-2025 15:24:00,09-01-2025 15:24:00,1,1,แผนดับไฟ,CTA,CTA03,CTA03VB-01,3222CB000000034,"838783.654109,1401980.495549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,จันทบุรี,C2_P,H03101,H03101,C2_P,H03102,,,,,9226,2,9228,,,,9226,2,9228,44655,5.2626816,,,01-10-2024 11:05:34,09-01-2025 15:25:14
18
+ 20,5832279138,09-01-2025 15:23:00,1,09-01-2025 15:24:00,09-01-2025 15:24:00,1,1,แผนดับไฟ,CTA,CTA03,CTA03VB-01,3222CB000000034,"838783.654109,1401980.495549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,จันทบุรี,C2_P,H03101,H03101,C2_P,H03302,,,,,41,,41,,,,41,,41,200,5.2626816,,,01-10-2024 11:05:34,09-01-2025 15:25:14
19
+ 21,5895262759,01-01-2025 10:00:00,1,01-01-2025 10:01:00,01-01-2025 10:01:00,1,1,แผนดับไฟ,-,-,BGP04YS-101,32SHHA000005825,"718222.360109,1484797.077549",Disconnecting Switch_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ชลบุรี,C2_P,H01101,H01101,C2_P,H01101,,,,,0,,0,,,,0,,0,50000,80,,1007871650,06-11-2024 15:09:20,01-01-2025 10:01:36
20
+ 22,5895262759,01-01-2025 10:00:00,1,01-01-2025 10:01:00,01-01-2025 10:01:00,1,1,แผนดับไฟ,-,-,BGP04YS-101,32SHHA000005825,"718222.360109,1484797.077549",Disconnecting Switch_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ชลบุรี,C2_P,H01101,H01101,C2_P,H20101,นิคมอุตสาหกรรมอมตะซิตี้ ชลบุรี,0,,,,,0,0,,,,,0,50000,80,,1007871650,06-11-2024 15:09:20,01-01-2025 10:01:36
21
+ 23,5895262759,01-01-2025 10:00:00,1,01-01-2025 10:01:00,01-01-2025 10:01:00,1,1,แผนดับไฟ,-,-,BGP04YS-101,32SHHA000005825,"718222.360109,1484797.077549",Disconnecting Switch_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ชลบุรี,C2_P,H01101,H01101,C2_P,H20101,,,,,,,0,,,,,,0,0,80,,1007871650,06-11-2024 15:09:20,01-01-2025 10:01:36
22
+ 24,5914246725,09-01-2025 15:26:00,1,09-01-2025 15:26:00,09-01-2025 15:26:00,0,0,แผนดับไฟ,-,-,NKP04YB-01,32CHHA000001746,"731293.435109,1418702.857549",Circuit Breaker_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,มาบตาพุด,C2_P,H14101,H14101,C2_P,H14101,,,,,,,0,,,,,,0,0,0,,1007830254,15-11-2024 16:04:47,09-01-2025 15:26:52
23
+ 25,5920756619,09-01-2025 15:27:00,1,09-01-2025 15:27:00,09-01-2025 15:27:00,0,0,แผนดับไฟ,SAT,SAT02,SAT02S-55,32SWHA001449129,"880909.617109,1365093.198549",Gas Switch ,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ตราด,C2_P,H04101,H04101,C2_P,H04101,,,,,,2157,2157,,,,,0,0,8695,0.86330164,,,19-11-2024 14:58:57,09-01-2025 15:28:44
24
+ 26,5920756619,09-01-2025 15:27:00,1,09-01-2025 15:27:00,09-01-2025 15:27:00,0,0,แผนดับไฟ,SAT,SAT02,SAT02S-55,32SWHA001449129,"880909.617109,1365093.198549",Gas Switch ,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ตราด,C2_P,H04101,H04101,C2_P,H25101,,,,,,0,0,,,,,0,0,160,0.86330164,,,19-11-2024 14:58:57,09-01-2025 15:28:44
25
+ 28,5929742318,09-01-2025 15:29:00,1,09-01-2025 15:29:00,09-01-2025 15:29:00,0,0,แผนดับไฟ,RAB,RAB01,RAB01VB-01,3221CB000000085,"734370.227109,1410803.309549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,มาบตาพุด,C2_P,H14101,H14101,C2_P,H14101,,,,2230,,,2230,,,0,,,0,19460,1.1392257,,1007839273,25-11-2024 14:59:59,09-01-2025 15:30:01
26
+ 29,5935551401,09-01-2025 15:30:00,1,09-01-2025 15:30:00,09-01-2025 15:30:00,0,0,แผนดับไฟ,-,-,KWA01YB-01,32CHHA000002027,"719012.278109,1519156.387549",Circuit Breaker_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,บ้านคลองเจ้า,C2_P,H23101,H23101,C2_P,H23101,,,,,,,0,,,,,,0,0,162.956,,1007840785,28-11-2024 17:20:34,09-01-2025 15:31:29
27
+ 31,5951248351,09-01-2025 15:33:00,1,09-01-2025 15:33:00,09-01-2025 15:33:00,0,0,แผนดับไฟ,TMM,TMM08,TMM08VB-01,3222CB000000006,"826906.158109,1401726.906549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,หนองคล้า,C2_P,H24102,H24102,C2_P,H03201,,,,835,,1,836,,,0,,0,0,3210,4.2251074,,,11-12-2024 17:27:56,09-01-2025 15:34:39
28
+ 32,5951248351,09-01-2025 15:33:00,1,09-01-2025 15:33:00,09-01-2025 15:33:00,0,0,แผนดับไฟ,TMM,TMM08,TMM08VB-01,3222CB000000006,"826906.158109,1401726.906549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,หนองคล้า,C2_P,H24102,H24102,C2_P,H03202,,,,,42,2939,2981,,,,0,0,0,37165,4.2251074,,,11-12-2024 17:27:56,09-01-2025 15:34:39
29
+ 33,5951248351,09-01-2025 15:33:00,1,09-01-2025 15:33:00,09-01-2025 15:33:00,0,0,แผนดับไฟ,TMM,TMM08,TMM08VB-01,3222CB000000006,"826906.158109,1401726.906549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,หนองคล้า,C2_P,H24102,H24102,C2_P,H24102,,,,,404,,404,,,,0,,0,1700,4.2251074,,,11-12-2024 17:27:56,09-01-2025 15:34:39
30
+ 34,5952896804,06-01-2025 16:40:00,1,06-01-2025 16:40:00,06-01-2025 16:40:00,0,0,แผนดับไฟ,-,-,KOA03YS-110,32SHHA000004946,"739930.298109,1512712.182549",Air break Switch_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,อุปกรณ์ป้องกันและตัดตอน,,,ใบมีด,ใบมีด,ไม่มีข้อมูลผู้ผลิต,,,,,,,บางคล้า,C2_P,H05301,H05301,C2_P,H05301,,,,,,,0,,,,,,0,0,0,,1007881171,12-12-2024 14:07:30,06-01-2025 16:41:11
31
+ 39,5964703769,08-01-2025 17:56:00,1,08-01-2025 17:57:00,08-01-2025 17:57:00,1,1,แผนดับไฟ,CHT,CHT04,CHT04S-03,32SWHA000017321,"710221.494109,1421335.053549",Disconnecting Switch,Operate,ABC,22 kV,22 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,วังหิน,C2_P,H18101,H18101,C2_P,H18101,,,,,,,0,,,,,,0,0,5.608,,,20-12-2024 10:47:40,08-01-2025 17:59:14
32
+ 40,5964707527,09-01-2025 12:11:00,1,09-01-2025 12:11:00,09-01-2025 12:11:00,0,0,แผนดับไฟ,CHU,CHU10,CHU08S-04,32SWHA000027021,"706180.175109,1422526.094549",Gas Switch ,Operate,ABC,22 kV,22 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,เปลี่ยนขนาดสายให้ใหญ่ขึ้น,สายเหนือดิน,สาย,สายหย่อน,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,นาจอมเทียน 4,C2_P,H18101,H18101,C2_P,H18101,,,,,,,0,,,,,,0,0,52.224,,1007863926,20-12-2024 10:51:40,09-01-2025 12:13:10
33
+ 49,5968645495,17-01-2025 19:46:00,1,17-01-2025 20:46:00,17-01-2025 20:46:00,60,60,แผนดับไฟ,HEA,HEA04,HEA04VB-01,32CBHA000001884,"736936.071109,1445693.759549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,สวิชชิ่งแล้วเสร็จ,ปลวกแดง,C2_P,H16101,H16101,C2_P,H16101,,,,,,2,2,,,,,120,120,110,5.3727114,,1007887861,24-12-2024 09:54:48,17-01-2025 23:11:30
34
+ 50,5968645495,17-01-2025 19:46:00,1,17-01-2025 20:46:00,17-01-2025 20:46:00,60,60,แผนดับไฟ,HEA,HEA04,HEA04VB-01,32CBHA000001884,"736936.071109,1445693.759549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,สวิชชิ่งแล้วเสร็จ,ปลวกแดง,C2_P,H16101,H16101,C2_P,H19101,นิคมอุตสาหกรรมปิ่นทอง (โครงการ 5),8,,,,,8,480,,,,,480,240,5.3727114,,1007887861,24-12-2024 09:54:48,17-01-2025 23:11:30
35
+ 51,5968645495,17-01-2025 19:46:00,1,17-01-2025 20:46:00,17-01-2025 20:46:00,60,60,แผนดับไฟ,HEA,HEA04,HEA04VB-01,32CBHA000001884,"736936.071109,1445693.759549",Circuit Breaker_MV,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,สวิชชิ��งแล้วเสร็จ,ปลวกแดง,C2_P,H16101,H16101,C2_P,H19101,,,,,,2284,2284,,,,,137040,137040,95455,5.3727114,,1007887861,24-12-2024 09:54:48,17-01-2025 23:11:30
36
+ 52,5968647496,05-01-2025 10:29:00,1,05-01-2025 10:30:00,05-01-2025 10:30:00,1,1,แผนดับไฟ,HEB,HEB01,HEB01VS-101,32SWHA001417517,"732966.847109,1452728.823549",Disconnecting Switch,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,อ.บ้านบึง,C2_P,H12101,H12101,C2_P,H12101,นิคมอุตสาหกรรมดับบลิวเอชเอ อีสเทิร์นซีบอร์ด 2,2,,,,,2,2,,,,,2,60,1.2264385,,1007868496,24-12-2024 09:55:58,05-01-2025 10:36:08
37
+ 53,5968647496,05-01-2025 10:29:00,1,05-01-2025 10:30:00,05-01-2025 10:30:00,1,1,แผนดับไฟ,HEB,HEB01,HEB01VS-101,32SWHA001417517,"732966.847109,1452728.823549",Disconnecting Switch,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,อ.บ้านบึง,C2_P,H12101,H12101,C2_P,H12101,,,3,,,,3,,3,,,,3,7790,1.2264385,,1007868496,24-12-2024 09:55:58,05-01-2025 10:36:08
38
+ 60,5970024326,05-01-2025 12:13:00,1,05-01-2025 12:13:00,05-01-2025 12:13:00,0,0,แผนดับไฟ,AKA,AKA02,AKA02S-01,32SWHA000004785,"723215.326109,1488212.448549",Disconnecting Switch,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,บำรุงรักษาตามวาระ,บำรุงรักษาอุปกรณ์,หม้อแปลงสถานี,,,ตัวถัง,ตัวถัง,ไม่มีข้อมูลผู้ผลิต,,,,,,,อมตะ1,C2_P,H20101,H20101,C2_P,H20101,,,,,,0,0,,,,,0,0,100,29.856,,1007880098,25-12-2024 14:47:17,05-01-2025 12:15:44
39
+ 75,5970798027,12-01-2025 18:23:00,1,12-01-2025 18:28:00,12-01-2025 18:28:00,5,5,แผนดับไฟ,PYO,PYO08,PYO08S-01,32SWHA001419684,"712444.831109,1435737.279549",Disconnecting Switch,Operate,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ก่อสร้างระบบใหม่,ระบบจำหน่าย,สายเหนือดิน,เสา,,เสาคอนกรีต,เปลือย,ไม่มีข้อมูลผู้ผลิต,,,,,,"สวิชชิ่งแล้วเสร็จ
40
+ งานปักเสา 22ม. และตัดสายข้ามทาง PYO8",เมืองพัทยา,C2_P,H06101,H06101,C2_P,H06101,,,,,,,0,,,,,,0,0,0,,1007887862,26-12-2024 13:17:40,13-01-2025 06:44:44
41
+ 76,5970879405,01-01-2025 16:42:00,1,01-01-2025 16:42:00,01-01-2025 16:42:00,0,0,แผนดับไฟ,-,-,KWA02YS-710,32SHHA000005329,"711006.192109,1525280.839549",Air break Switch_HV,Operate,ABC,115 kV,22 kV,22 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,ปรับปรุงระบบ,ปรับปรุงอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,สวิชชิ่งแล้วเสร็จ,บ้านคลองเจ้า,C2_P,H23101,H23101,C2_P,H23101,,,,,,0,0,,,,,0,0,200000,160,,1007875864,26-12-2024 15:19:13,01-01-2025 17:07:28
42
+ 89,5971444594,02-01-2025 15:48:00,1,02-01-2025 15:53:00,02-01-2025 15:53:00,5,5,แผนดับไฟ,-,-,BWN01YS-701,32SHHA000005496,"729162.835109,1445948.939549",Air break Switch_HV,Operate,ABC,115 kV,115 kV,115 kV,ระบบสายส่ง,กฟภ.-แผนดับไฟ,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,บำรุงรักษาตามวาระ,บำรุงรักษาอุปกรณ์,สายเหนือดิน,สาย,,เปลือย,เปลือย,ไม่มีข้อมูลผู้ผลิต,,,,,,"สวิชชิ่งดำเนินการแล้วเสร็จ
43
+ งาน PM บริษัทแคนนาเดียนโซล่า",บึง,C2_P,H19101,H19101,C2_P,H19101,,,,,,0,0,,,,,0,0,100000,80,,1007875865,27-12-2024 10:43:27,02-01-2025 16:19:33
44
+ 145,5974117216,01-01-2025 02:29:09,1,01-01-2025 02:29:10,01-01-2025 02:29:10,0.02,0.02,ไฟฟ้าขัดข้อง,APA,APA03,APA03VB-01,3220CB000000154,"708989.127109,1451738.941549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,สายขาด,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,"เป็นเหตุการณ์ทริปรีโคลส
45
+ สาเหตุ สายขาดกลางสแปนไม่ตกพื้น ",แหลมฉบัง,C2_P,H22101,H22101,C2_P,H22101,,,3192,,,,3192,,33.25,,,,33.25,4840,6.641457,,,01-01-2025 02:29:13,01-01-2025 07:35:00
46
+ 146,5974119115,01-01-2025 02:29:09,1,01-01-2025 02:29:10,01-01-2025 02:29:10,0.02,0.02,ไฟฟ้าขัดข้อง,APA,APA02,APA02VB-01,3220CB000000155,"708989.127109,1451738.941549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,สายขาด,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,"เป็นเหตุการณ์ทริปรีโคลส
47
+ สาเหตุ สายขาดกลางสแปนไม่ตกพื้น ชนิดสาย SAC",แหลมฉบัง,C2_P,H22101,H22101,C2_P,H22101,,,3853,,,,3853,,40.90601667,,,,40.90601667,42465,3.454099,,,01-01-2025 02:30:36,01-01-2025 07:42:34
48
+ 192,5974256039,01-01-2025 06:23:35,1,01-01-2025 06:23:40,01-01-2025 06:23:40,0.08,0.08,ไฟฟ้าขัดข้อง,NYM,NYM09,KAA02R-02,32RCHA000027039,"797476.511109,1416968.515549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,แกลง,C2_P,H09101,H09101,C2_P,H09101,,,,,,2010,2010,,,,,168.706,168.706,9060,0.7781869,,,01-01-2025 06:23:39,01-01-2025 07:10:11
49
+ 206,5974258830,01-01-2025 06:46:08,1,01-01-2025 06:46:13,01-01-2025 06:46:13,0.08,0.08,ไฟฟ้าขัดข้อง,PTP,PTP04,PTP03R-01,3220RC000000007,"726761.604109,1490769.622549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,พานทอง,C2_P,H20101,H20101,C2_P,H10101,,,,,6,,6,,,,0.5028,,0.5028,30,0.9898573,,,01-01-2025 06:46:10,01-01-2025 07:09:28
data/data_2.csv ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Number,EventNumber,OutageDateTime,CountOfRestoStep,FirstRestoDateTime,LastRestoDateTime,FirstStepDuration,LastStepDuration,EventType,SubstationID,Feeder,OpDeviceID,OpDeviceGIStag,OpDeviceXYcoord,OpDeviceType,OpDeviceStatus,OpDevicePhase,OpVolt,OpVolt1,OpVolt2,OpDeviceSysType,Owner,FaultSysType,KnowUnknowCause,Weather,CauseType,SubCauseType,FaultDeviceType,FaultDevice,FaultDeviceCondition,Parts,DamagedParts,Manufacturer,RelayType,Relation,RelayPhase,RelayStatus,Detail,FaultDetail,SiteDetail,OpDeviceAreaID,OpDeviceSiteID,EventSiteID,AffectedAreaID,AffectedSiteID,Industrial,AffectedCustomer1,AffectedCustomer2,AffectedCustomer3,AffectedCustomer4,AffectedCustomer5,AffectedCustomer,AllStepCusXTime1,AllStepCusXTime2,AllStepCusXTime3,AllStepCusXTime4,AllStepCusXTime5,AllStepCusXTime,Capacity(kVA),Load(MW),CorrectionDetail,WorkOrderID,CreateEventDateTime,CloseEventDateTime
2
+ 192,5974256039,01-01-2025 06:23:35,1,01-01-2025 06:23:40,01-01-2025 06:23:40,0.08,0.08,ไฟฟ้าขัดข้อง,NYM,NYM09,KAA02R-02,32RCHA000027039,"797476.511109,1416968.515549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,แกลง,C2_P,H09101,H09101,C2_P,H09101,,,,,,2010,2010,,,,,168.706,168.706,9060,0.7781869,,,01-01-2025 06:23:39,01-01-2025 07:10:11
3
+ 206,5974258830,01-01-2025 06:46:08,1,01-01-2025 06:46:13,01-01-2025 06:46:13,0.08,0.08,ไฟฟ้าขัดข้อง,PTP,PTP04,PTP03R-01,3220RC000000007,"726761.604109,1490769.622549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,พานทอง,C2_P,H20101,H20101,C2_P,H10101,,,,,6,,6,,,,0.5028,,0.5028,30,0.9898573,,,01-01-2025 06:46:10,01-01-2025 07:09:28
4
+ 207,5974258830,01-01-2025 06:46:08,1,01-01-2025 06:46:13,01-01-2025 06:46:13,0.08,0.08,ไฟฟ้าขัดข้อง,PTP,PTP04,PTP03R-01,3220RC000000007,"726761.604109,1490769.622549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,พานทอง,C2_P,H20101,H20101,C2_P,H20101,,,,,99,1893,1992,,,,8.2962,158.6334,166.9296,9960,0.9898573,,,01-01-2025 06:46:10,01-01-2025 07:09:28
5
+ 393,5974416873,01-01-2025 09:11:19,1,01-01-2025 09:11:45,01-01-2025 09:11:45,0.43,0.43,ไฟฟ้าขัดข้อง,PNU,PNU02,PNUBR-02,32CBHA000006370,"872522.831109,1444925.700549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,สอยดาว,C2_P,H21101,H21101,C2_P,H21101,,,,,,557,557,,,,,234.3763167,234.3763167,5420,2.8225032,,,01-01-2025 09:11:25,01-01-2025 09:28:55
6
+ 461,5974432123,01-01-2025 10:15:05,1,01-01-2025 10:15:10,01-01-2025 10:15:10,0.08,0.08,ไฟฟ้าขัดข้อง,TTA,TTA10,TTA10R-01,32RCHA000002222,"893355.312109,1356741.770549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ตราด,C2_P,H04101,H04101,C2_P,H04101,,,,,808,1606,2414,,,,70.2152,139.5614,209.7766,16125,1.23922,,,01-01-2025 10:15:07,01-01-2025 10:46:24
7
+ 462,5974432123,01-01-2025 10:15:05,1,01-01-2025 10:15:10,01-01-2025 10:15:10,0.08,0.08,ไฟฟ้าขัดข้อง,TTA,TTA10,TTA10R-01,32RCHA000002222,"893355.312109,1356741.770549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ตราด,C2_P,H04101,H04101,C2_P,H04501,,,,,,,0,,,,,,0,0,1.23922,,,01-01-2025 10:15:07,01-01-2025 10:46:24
8
+ 470,5974433886,01-01-2025 10:20:41,1,01-01-2025 10:20:46,01-01-2025 10:20:46,0.08,0.08,ไฟฟ้าขัดข้อง,NOY,NOY01,NOY01R-01,32RCHA000027924,"747838.843109,1448733.160549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,หนองใหญ่,C2_P,H12201,H12201,C2_P,H12201,,,,,,415,415,,,,,34.7355,34.7355,8150,1.0486464,,,01-01-2025 10:20:44,01-01-2025 10:45:54
9
+ 484,5974453978,01-01-2025 10:43:17,1,01-01-2025 10:43:18,01-01-2025 10:43:18,0.02,0.02,ไฟฟ้าขัดข้อง,CCB,CCB09,CCB09VB-01,32CBHA000013162,"725837.027109,1511125.476549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์,ชำรุด,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,ฉะเชิงเทรา,C2_P,H05101,H05101,C2_P,H05101,,,,,,318,318,,,,,2.6447,2.6447,3160,0.28109396,,,01-01-2025 10:43:20,01-01-2025 12:40:25
10
+ 523,5974466027,01-01-2025 11:30:31,1,01-01-2025 11:30:31,01-01-2025 11:30:31,0,0,ไฟฟ้าขัดข้อง,MPC,MPC03,MPC03VB-01,3221CB000000074,"736229.792109,1406024.463549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,มาบตาพุด,C2_P,H14101,H14101,C2_P,H02101,,,,,,,0,,,,,,0,0,1.8875446,,,01-01-2025 11:30:46,01-01-2025 13:16:55
11
+ 524,5974466027,01-01-2025 11:30:31,1,01-01-2025 11:30:31,01-01-2025 11:30:31,0,0,ไฟฟ้าขัดข้อง,MPC,MPC03,MPC03VB-01,3221CB000000074,"736229.792109,1406024.463549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,มาบตาพุด,C2_P,H14101,H14101,C2_P,H14101,,,,755,193,,948,,,7.411583333,1.894616667,,9.3062,16185,1.8875446,,,01-01-2025 11:30:46,01-01-2025 13:16:55
12
+ 537,5974470761,01-01-2025 11:53:00,1,01-01-2025 12:00:00,01-01-2025 12:00:00,7,7,ไฟฟ้าขัดข้อง,KLG,KLG09,KLG04F-43,3222SW000000454,"835694.899109,1381249.763549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สัตว์,นก/ค้างคาว,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,-,C2_P,H03601,H03601,C2_P,H03601,,,,,193,,193,,,,1351,,1351,3240,0.08130017,,1007876066,01-01-2025 11:54:01,01-01-2025 12:02:50
13
+ 564,5974482942,01-01-2025 12:36:11,2,01-01-2025 12:36:11,01-01-2025 12:36:16,0,0.08,ไฟฟ้าขัดข้อง,CTA,CTA03,CTA03R-02,3222RC000000018,"840991.925109,1399345.838549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,มะขาม,C2_P,H03102,H03102,C2_P,H03102,,,,,1909,,1909,,,,159.7196667,,159.7196667,7420,0.564784,,,01-01-2025 12:36:13,01-01-2025 12:38:53
14
+ 643,5974514196,01-01-2025 14:14:00,1,01-01-2025 14:31:00,01-01-2025 14:31:00,17,17,ไฟฟ้าขัดข้อง,BBA,BBA06,BBA06F-04,3220SW000000678,"734503.149109,1470695.873549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สัตว์,กระรอก/กระแต/หนู,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,อ.บ้านบึง,C2_P,H12101,H12101,C2_P,H12101,,,,,1,,1,,,,17,,17,250,0.001662634,,1007876171,01-01-2025 14:14:18,01-01-2025 14:31:50
15
+ 712,5974563148,01-01-2025 15:11:40,1,01-01-2025 15:11:41,01-01-2025 15:11:41,0.02,0.02,ไฟฟ้าขัดข้อง,CCX,CCX03,CCX03BR-01,32CBHA000003019,"721765.570109,1515969.177549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ฉะเชิงเทรา,C2_P,H05101,H05101,C2_P,H05101,,,,1578,,2,1580,,,13.5182,,0.017133333,13.53533333,17125,1.6410364,,,01-01-2025 15:13:49,01-01-2025 15:58:12
16
+ 728,5974566179,01-01-2025 15:26:39,1,01-01-2025 15:26:44,01-01-2025 15:26:44,0.08,0.08,ไฟฟ้าขัดข้อง,SNK,SNK03,SNK03R-03,32RCHA000003627,"784515.266109,1486209.416549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ท่าตะเกียบ,C2_P,H15202,H15202,C2_P,H15202,,,,,,1194,1194,,,,,98.1269,98.1269,2270,0.3736475,,,01-01-2025 15:26:42,01-01-2025 15:28:14
17
+ 756,5974581339,01-01-2025 15:51:00,1,01-01-2025 16:21:00,01-01-2025 16:21:00,30,30,ไฟฟ้าขัดข้อง,NYM,NYM08,51-013694,3222XF000004466,"809087.826109,1432590.327549",Single Phase Transformer,Operate,AC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,โหลดเกินพิกัด,โหลดเกินพิกัด,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงต่ำ,,,,,,,,,-,C2_P,H24103,H24103,C2_P,H24103,,,,,,7,7,,,,,210,210,30,0.00319067,,1007876256,01-01-2025 15:51:30,01-01-2025 15:54:15
18
+ 840,5974604293,01-01-2025 16:55:59,1,01-01-2025 16:56:04,01-01-2025 16:56:04,0.08,0.08,ไฟฟ้าขัดข้อง,KAC,KAC10,KAC05R-01,32RCHA000002926,"778523.293109,1407183.638549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,แกลง,C2_P,H09101,H09101,C2_P,H09101,,,,,836,15,851,,,,70.1822,1.25925,71.44145,4435,0.4343222,,,01-01-2025 16:56:03,01-01-2025 18:15:57
19
+ 940,5974631064,01-01-2025 18:18:36,1,01-01-2025 18:18:36,01-01-2025 18:18:36,0,0,ไฟฟ้าขัดข้อง,TMM,TMM08,TMM08R-01,32RCHA000005725,"817415.330109,1394032.679549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,เตาหม้อ,C2_P,H03202,H03202,C2_P,H03201,,,,,,1,1,,,,,0.001716667,0.001716667,30,2.6711262,,,01-01-2025 18:18:37,01-01-2025 18:32:06
20
+ 941,5974631064,01-01-2025 18:18:36,1,01-01-2025 18:18:36,01-01-2025 18:18:36,0,0,ไฟฟ้าขัดข้อง,TMM,TMM08,TMM08R-01,32RCHA000005725,"817415.330109,1394032.679549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟ��.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,เตาหม้อ,C2_P,H03202,H03202,C2_P,H03202,,,,,45,1864,1909,,,,0.07725,3.199866667,3.277116667,30135,2.6711262,,,01-01-2025 18:18:37,01-01-2025 18:32:06
21
+ 1081,5974662124,01-01-2025 20:04:00,1,01-01-2025 20:04:01,01-01-2025 20:04:01,0.02,0.02,ไฟฟ้าขัดข้อง,APA,APA07,APA07VB-01,3220CB000000172,"708989.127109,1451738.941549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,แหลมฉบัง,C2_P,H22101,H22101,C2_P,H22101,,,2984,,,,2984,,33.91813333,,,,33.91813333,26985,3.017963,,,01-01-2025 20:04:02,01-01-2025 21:33:23
22
+ 1432,5974842919,02-01-2025 08:01:58,2,02-01-2025 08:01:58,02-01-2025 08:02:03,0,0.08,ไฟฟ้าขัดข้อง,KLG,KLG06,KLG06VR-104,32RCHA000027778,"861471.977109,1403997.586549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,บ่อเวฬ,C2_P,H03302,H03302,C2_P,H03302,,,,,734,,734,,,,60.1146,,60.1146,8475,0.42855933,,,02-01-2025 08:02:01,02-01-2025 08:10:10
23
+ 1433,5974842919,02-01-2025 08:01:58,2,02-01-2025 08:01:58,02-01-2025 08:02:03,0,0.08,ไฟฟ้าขัดข้อง,KLG,KLG06,KLG06VR-104,32RCHA000027778,"861471.977109,1403997.586549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,บ่อเวฬ,C2_P,H03302,H03302,C2_P,H25102,,,,,0,,0,,,,0,,0,480,0.42855933,,,02-01-2025 08:02:01,02-01-2025 08:10:10
24
+ 1445,5974848669,02-01-2025 08:16:00,1,02-01-2025 09:09:00,02-01-2025 09:09:00,53,53,ไฟฟ้าขัดข้อง,SCB,SCB06,6600242122,3220PT000000427,"715482.146109,1455246.524549",Three Phase Transformer,Operate,ABC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์,ชำรุด,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงต่ำ,,,,,,,,,บจก.เอสซีจี แลนด์สเคป,C2_P,H07101,H07101,C2_P,H07101,,,1,,,,1,,52.99515,,,,52.99515,30,0.026199276,,1007877867,02-01-2025 08:16:00,03-01-2025 08:09:56
25
+ 1763,5975012988,02-01-2025 12:06:22,1,02-01-2025 12:06:27,02-01-2025 12:06:27,0.08,0.08,ไฟฟ้าขัดข้อง,NOY,NOY09,NOY09VR-101,32RCHA000004147,"744156.859109,1459766.486549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,บ้านบึง,C2_P,H12101,H12101,C2_P,H12101,,,,,,1099,1099,,,,,91.96798333,91.96798333,15155,2.6658318,,,02-01-2025 12:06:27,02-01-2025 12:54:58
26
+ 1764,5975012988,02-01-2025 12:06:22,1,02-01-2025 12:06:27,02-01-2025 12:06:27,0.08,0.08,ไฟฟ้าขัดข้อง,NOY,NOY09,NOY09VR-101,32RCHA000004147,"744156.859109,1459766.486549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือด��น,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,บ้านบึง,C2_P,H12101,H12101,C2_P,H12201,,,,,,,0,,,,,,0,0,2.6658318,,,02-01-2025 12:06:27,02-01-2025 12:54:58
27
+ 1899,5975070346,02-01-2025 13:48:36,1,02-01-2025 13:48:41,02-01-2025 13:48:41,0.08,0.08,ไฟฟ้าขัดข้อง,RAD,RAD07,RAA03R-02,32RCHA000001604,"743310.853109,1405874.593549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,ระยอง,C2_P,H02101,H02101,C2_P,H02101,,,,,2954,,2954,,,,256.6533667,,256.6533667,10095,1.49817,,,02-01-2025 13:48:39,02-01-2025 13:50:01
28
+ 2151,5975257775,02-01-2025 18:07:14,1,02-01-2025 18:07:19,02-01-2025 18:07:19,0.08,0.08,ไฟฟ้าขัดข้อง,SNK,SNK10,SNK10R-02,32RCHA000003926,"778331.816109,1497005.806549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,กับดักฟ้าผ่า,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,ท่าตะเกียบ,C2_P,H15202,H15202,C2_P,H15202,,,,,,1439,1439,,,,,118.2378333,118.2378333,2080,0.36891946,,,02-01-2025 18:07:18,02-01-2025 20:01:27
29
+ 2303,5975355304,02-01-2025 19:34:27,1,02-01-2025 21:41:00,02-01-2025 21:41:00,126.55,126.55,ไฟฟ้าขัดข้อง,BBB,BBB07,6400050068-1060070717,6400050068-1060070717,"731513.403108,1464267.387549",Meter,Operate,,Unknown,22 kV,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สัตว์,กระรอก/กระแต/หนู,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงสูง,,,,,,,,,อ.บ้านบึง,C2_P,H12101,H12101,C2_P,H12101,,,,,,1,1,,,,,126.5381667,126.5381667,,0.17238707,,1007877659,02-01-2025 21:24:51,02-01-2025 21:41:59
30
+ 2420,5975401420,03-01-2025 01:34:39,1,03-01-2025 01:34:44,03-01-2025 01:34:44,0.08,0.08,ไฟฟ้าขัดข้อง,NOY,NOY01,NOY01R-01,32RCHA000027924,"747838.843109,1448733.160549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,หนองใหญ่,C2_P,H12201,H12201,C2_P,H12201,,,,,,415,415,,,,,34.79775,34.79775,8150,1.0032551,,,03-01-2025 01:34:42,03-01-2025 03:52:11
31
+ 2469,5975448365,03-01-2025 06:52:49,2,03-01-2025 06:52:53,03-01-2025 06:52:59,0.07,0.17,ไฟฟ้าขัดข้อง,KMK,KMK10,KMK01R-01,32RCHA000004748,"716856.496109,1438970.082549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,เมืองพัทยา,C2_P,H06101,H06101,C2_P,H06101,,,,,310,,310,,,,36.58516667,,36.58516667,7430,0.5538954,,,03-01-2025 06:52:51,03-01-2025 06:54:28
32
+ 3041,5975764994,03-01-2025 12:02:37,2,03-01-2025 12:02:37,03-01-2025 12:02:42,0,0.08,ไฟฟ้าขัดข้อง,KAA,KAA10,KAA10R-01,32RCHA000027058,"784611.381109,1424883.346549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุก���รณ์ทริปรีโคลส,แกลง,C2_P,H09101,H09101,C2_P,H09101,,,,,,751,751,,,,,61.21901667,61.21901667,2190,0.25038603,,,03-01-2025 12:02:40,03-01-2025 12:18:40
33
+ 3137,5975797213,03-01-2025 13:16:00,1,03-01-2025 13:17:00,03-01-2025 13:17:00,1,1,ไฟฟ้าขัดข้อง,BBA,BBA02,BBA02VB-01,3220CB000000114,"740887.461109,1462461.911549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,บ้านบึง,C2_P,H12101,H12101,C2_P,H12101,,,,,,,0,,,,,,0,0,0,,,03-01-2025 13:18:39,03-01-2025 15:12:58
34
+ 3180,5975829233,03-01-2025 13:56:09,1,03-01-2025 13:56:14,03-01-2025 13:56:14,0.08,0.08,ไฟฟ้าขัดข้อง,NOY,NOY09,NOY09VR-101,32RCHA000004147,"744156.859109,1459766.486549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,บ้านบึง,C2_P,H12101,H12101,C2_P,H12101,,,,,,1097,1097,,,,,91.98345,91.98345,15155,2.6368174,,,03-01-2025 13:56:11,03-01-2025 14:18:44
35
+ 3181,5975829233,03-01-2025 13:56:09,1,03-01-2025 13:56:14,03-01-2025 13:56:14,0.08,0.08,ไฟฟ้าขัดข้อง,NOY,NOY09,NOY09VR-101,32RCHA000004147,"744156.859109,1459766.486549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,บ้านบึง,C2_P,H12101,H12101,C2_P,H12201,,,,,,,0,,,,,,0,0,2.6368174,,,03-01-2025 13:56:11,03-01-2025 14:18:44
36
+ 3220,5975856984,03-01-2025 14:33:31,1,03-01-2025 14:33:31,03-01-2025 14:33:31,0,0,ไฟฟ้าขัดข้อง,RAA,RAA05,RAA05VB-01,3221CB000000023,"746674.723109,1403906.443549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,ระยอง,C2_P,H02101,H02101,C2_P,H02101,,,2011,,1778,427,4216,,22.25506667,,19.67653333,4.725466667,46.65706667,23150,2.9845632,,,03-01-2025 14:33:35,03-01-2025 15:14:45
37
+ 3259,5975881669,03-01-2025 14:50:42,1,03-01-2025 14:50:43,03-01-2025 14:50:43,0.02,0.02,ไฟฟ้าขัดข้อง,CCB,CCB09,CCB09VB-01,32CBHA000013162,"725837.027109,1511125.476549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,ฉะเชิงเทรา,C2_P,H05101,H05101,C2_P,H05101,,,,,,318,318,,,,,2.6447,2.6447,3160,0.27845935,,,03-01-2025 14:50:45,03-01-2025 15:14:15
38
+ 3263,5975882573,03-01-2025 14:51:38,1,03-01-2025 14:51:43,03-01-2025 14:51:43,0.08,0.08,ไฟฟ้าขัดข้อง,BAK,BAK05,BAK05R-01,32RCHA000004386,"738111.787109,1525104.054549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,บางคล้า,C2_P,H05301,H05301,C2_P,H05301,,,,,,1330,1330,,,,,109.5033333,109.5033333,9615,1.1235221,,,03-01-2025 14:51:42,03-01-2025 14:58:31
39
+ 3264,5975882573,03-01-2025 14:51:38,1,03-01-2025 14:51:43,03-01-2025 14:51:43,0.08,0.08,ไฟฟ้าขัดข้อง,BAK,BAK05,BAK05R-01,32RCHA000004386,"738111.787109,1525104.054549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,บางคล้า,C2_P,H05301,H05301,C2_P,H05303,,,,,,59,59,,,,,4.857666667,4.857666667,50,1.1235221,,,03-01-2025 14:51:42,03-01-2025 14:58:31
40
+ 3401,5975946566,03-01-2025 16:09:29,1,03-01-2025 16:09:34,03-01-2025 16:09:34,0.08,0.08,ไฟฟ้าขัดข้อง,BYA,BYA03,RAA01R-02,3221RC000000022,"756111.353109,1399088.432549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,ระยอง,C2_P,H02101,H02101,C2_P,H02101,,,,,,4930,4930,,,,,395.1395,395.1395,17675,2.3163035,,,03-01-2025 16:09:31,03-01-2025 16:15:19
41
+ 3508,5975992650,03-01-2025 17:20:14,1,03-01-2025 17:20:19,03-01-2025 17:20:19,0.08,0.08,ไฟฟ้าขัดข้อง,PTP,PTP04,PTP03R-01,3220RC000000007,"726761.604109,1490769.622549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,พานทอง,C2_P,H20101,H20101,C2_P,H10101,,,,,6,,6,,,,0.5028,,0.5028,30,0.98500793,,,03-01-2025 17:20:16,03-01-2025 18:30:37
42
+ 3509,5975992650,03-01-2025 17:20:14,1,03-01-2025 17:20:19,03-01-2025 17:20:19,0.08,0.08,ไฟฟ้าขัดข้อง,PTP,PTP04,PTP03R-01,3220RC000000007,"726761.604109,1490769.622549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,พานทอง,C2_P,H20101,H20101,C2_P,H20101,,,,,99,1892,1991,,,,8.2962,158.5496,166.8458,9960,0.98500793,,,03-01-2025 17:20:16,03-01-2025 18:30:37
43
+ 3536,5976008507,03-01-2025 17:46:05,1,03-01-2025 17:46:10,03-01-2025 17:46:10,0.08,0.08,ไฟฟ้าขัดข้อง,KAA,KAA04,KAA04R-03,3221RC000000024,"790134.024109,1420829.389549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,แกลง,C2_P,H09101,H09101,C2_P,H09101,,,,,1027,599,1626,,,,85.73738333,50.00651667,135.7439,3330,0.59016595,,,03-01-2025 17:46:08,03-01-2025 18:29:59
44
+ 3561,5976018114,03-01-2025 18:01:00,1,03-01-2025 18:21:00,03-01-2025 18:21:00,20,20,ไฟฟ้าขัดข้อง,BBB,BBB06,BBB06F-03-003,32SWHA001433036,"727053.354109,1469085.277549",Drop out Fuse,D/F,AB,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สภาพสิ่งแวดล้อม,การผุกร่อน/สนิม,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,อ.บ้านบึง,C2_P,H12101,H12101,C2_P,H12101,,,,,6,,6,,,,120,,120,110,0.002664855,,1007878742,03-01-2025 18:01:33,03-01-2025 18:22:58
45
+ 3612,5976038309,03-01-2025 18:47:00,1,03-01-2025 19:32:00,03-01-2025 19:32:00,45,45,ไฟฟ้าขัดข้อง,NOU,NOU03,NOY01F-08-002,32SWHA001410130,"754353.446109,1449630.388549",Drop out Fuse,D/F,AC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สภาพสิ่งแวดล้อม,การผุกร่อน/สนิม,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,อ.หนองใหญ่,C2_P,H12201,H12201,C2_P,H12201,,,,,42,15,57,,,,1890,675,2565,150,0.026781088,,1007878801,03-01-2025 18:47:18,03-01-2025 19:33:45
46
+ 3876,5976174264,04-01-2025 04:11:53,1,04-01-2025 04:11:59,04-01-2025 04:11:59,0.1,0.1,ไฟฟ้าขัดข้อง,PNU,PNU02,PNU02R-01,32RCHA000004940,"873714.691109,1449192.573549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,สอยดาว,C2_P,H21101,H21101,C2_P,H21101,,,,,,1,1,,,,,0.087083333,0.087083333,30,2.07,,,04-01-2025 04:11:58,04-01-2025 04:24:00
47
+ 3950,5976211060,04-01-2025 07:09:06,1,04-01-2025 07:09:11,04-01-2025 07:09:11,0.08,0.08,ไฟฟ้าขัดข้อง,PHA,PHA05,PHA05R-01,3224RC000000021,"760280.225109,1526999.042549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,พนมสารคาม,C2_P,H15101,H15101,C2_P,H15101,,,,,278,705,983,,,,22.39753333,56.7995,79.19703333,12230,2.9399443,,,04-01-2025 07:09:09,04-01-2025 07:32:53
48
+ 3972,5976222849,04-01-2025 07:20:07,1,04-01-2025 07:20:12,04-01-2025 07:20:12,0.08,0.08,ไฟฟ้าขัดข้อง,GUU,GUU02,GUU02R-01,3222RC000000036,"816886.026109,1444244.276549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,แก่งหางแมว,C2_P,H24103,H24103,C2_P,H24103,,,,,24,2611,2635,,,,2.0064,218.2796,220.286,6310,0.69164606,,,04-01-2025 07:20:09,04-01-2025 07:41:46
49
+ 4051,5976245076,04-01-2025 06:36:00,1,04-01-2025 06:37:00,04-01-2025 06:37:00,1,1,ไฟฟ้าขัดข้อง,KWC,KWC04,KWC04VB-01,32CBHA000014003,"712620.903109,1523378.109549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,"เป็นเหตุการณ์ทริปรีโคลส
50
+ ",บ้านคลองเจ้า,C2_P,H23101,H23101,C2_P,H23101,,,,,,97,97,,,,,97,97,29420,3.6803796,,,04-01-2025 08:09:38,04-01-2025 13:00:02
51
+ 4111,5976277103,04-01-2025 09:18:05,1,04-01-2025 09:18:10,04-01-2025 09:18:10,0.08,0.08,ไฟฟ้าขัดข้อง,KLG,KLG03,KLG03VR-102,32RCHA000028217,"836526.979109,1379720.800549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,แหลมสิงห์,C2_P,H03601,H03601,C2_P,H03601,,,,,166,17,183,,,,13.94676667,1.428283333,15.37505,5610,0.5237769,,,04-01-2025 09:18:08,04-01-2025 09:36:04
52
+ 4147,5976290999,04-01-2025 09:50:19,1,04-01-2025 09:50:24,04-01-2025 09:50:24,0.08,0.08,ไฟฟ้าขัดข้อง,GUU,GUU01,GUU01R-01,32RCHA000027900,"823663.604109,1421968.577549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,หนองคล้า,C2_P,H24102,H24102,C2_P,H24102,,,,,,13,13,,,,,1.089833333,1.089833333,100,0.008436355,,,04-01-2025 09:50:23,04-01-2025 09:54:29
53
+ 4332,5976353885,04-01-2025 11:24:17,2,04-01-2025 11:24:18,04-01-2025 11:24:33,0.02,0.27,ไฟฟ้าขัดข้อง,NYM,NYM05,NYM05VB-01,3222CB000000014,"808721.423109,1413607.679549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,กับดักฟ้าผ่า,,ล่อฟ้า,ล่อฟ้า,ไม่มีข้อมูลผู้ผลิต,,,,,,"เป็นเหตุการณ์ทริปรีโคลส
54
+ สาเหตุ ล่อฟ้าชำรุดเฟส B บ.นัทาศิลา ห่าง NYM5S-03 ประมาณ 4 กม.",นายายอาม,C2_P,H24101,H24101,C2_P,H09101,,,,,2003,983,2986,,,,523.48405,256.90705,780.3911,37995,2.525252,,,04-01-2025 11:25:29,04-01-2025 15:17:40
55
+ 4333,5976353885,04-01-2025 11:24:17,2,04-01-2025 11:24:18,04-01-2025 11:24:33,0.02,0.27,ไฟฟ้าขัดข้อง,NYM,NYM05,NYM05VB-01,3222CB000000014,"808721.423109,1413607.679549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,กับดักฟ้าผ่า,,ล่อฟ้า,ล่อฟ้า,ไม่มีข้อมูลผู้ผลิต,,,,,,"เป็นเหตุการณ์ทริปรีโคลส
56
+ สาเหตุ ล่อฟ้าชำรุดเฟส B บ.นัทาศิลา ห่าง NYM5S-03 ประมาณ 4 กม.",นายายอาม,C2_P,H24101,H24101,C2_P,H24101,,,,,459,1,460,,,,119.95965,0.26135,120.221,2755,2.525252,,,04-01-2025 11:25:29,04-01-2025 15:17:40
57
+ 4513,5976463340,04-01-2025 13:56:00,1,04-01-2025 13:57:00,04-01-2025 13:57:00,1,1,ไฟฟ้าขัดข้อง,KLG,KLG01,KLG01VB-01,3222CB000000022,"852821.169109,1382468.131549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,สายขาด,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,"เป็นเหตุการณ์ทริปรีโคลส
58
+ สาเหตุ สายหลีดขาดเฟส B",ขลุง,C2_P,H03301,H03301,C2_P,H03301,,,,,1814,3626,5440,,,,1814,3626,5440,20125,2.0848394,,,04-01-2025 14:02:30,04-01-2025 14:56:56
59
+ 4514,5976463340,04-01-2025 13:56:00,1,04-01-2025 13:57:00,04-01-2025 13:57:00,1,1,ไฟฟ้าขัดข้อง,KLG,KLG01,KLG01VB-01,3222CB000000022,"852821.169109,1382468.131549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,สายขาด,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,"เป็นเหตุการณ์ทริปรีโคลส
60
+ สาเหตุ สายหลีดขาดเฟส B",ขลุง,C2_P,H03301,H03301,C2_P,H03302,,,,,1,132,133,,,,1,132,133,540,2.0848394,,,04-01-2025 14:02:30,04-01-2025 14:56:56
61
+ 4654,5976533287,04-01-2025 16:04:00,1,04-01-2025 16:04:04,04-01-2025 16:04:04,0.07,0.07,ไฟฟ้าขัดข้อง,KAC,KAC08,KAC08R-01,32RCHA000000948,"786312.085109,1401971.398549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้า���ัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,กร่ำ,C2_P,H09103,H09103,C2_P,H09103,,,,,1376,,1376,,,,111.0432,,111.0432,20585,1.3379481,,,04-01-2025 16:04:02,04-01-2025 18:15:48
62
+ 4668,5976537566,04-01-2025 16:03:00,1,04-01-2025 16:04:00,04-01-2025 16:04:00,1,1,ไฟฟ้าขัดข้อง,LMA,LMA02,LMA02VB-01,32CBHA000014100,"767787.574109,1408554.703549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,เพ,C2_P,H02201,H02201,C2_P,H02201,,,,,,,0,,,,,,0,0,0,,,04-01-2025 16:09:28,05-01-2025 07:23:53
63
+ 4692,5976543217,04-01-2025 16:25:11,1,04-01-2025 16:25:11,04-01-2025 16:25:11,0,0,ไฟฟ้าขัดข้อง,PHA,PHA06,PHA06VB-01,3224CB000000071,"757435.209109,1522886.980549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,พนมสารคาม,C2_P,H15101,H15101,C2_P,H05301,,,,,,1,1,,,,,0.011333333,0.011333333,50,5.074532,,,04-01-2025 16:25:22,05-01-2025 07:20:30
64
+ 4693,5976543217,04-01-2025 16:25:11,1,04-01-2025 16:25:11,04-01-2025 16:25:11,0,0,ไฟฟ้าขัดข้อง,PHA,PHA06,PHA06VB-01,3224CB000000071,"757435.209109,1522886.980549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,พนมสารคาม,C2_P,H15101,H15101,C2_P,H15101,,,,,2133,1775,3908,,,,24.174,20.11666667,44.29066667,27735,5.074532,,,04-01-2025 16:25:22,05-01-2025 07:20:30
65
+ 4744,5976560250,04-01-2025 17:03:00,1,04-01-2025 17:04:00,04-01-2025 17:04:00,1,1,ไฟฟ้าขัดข้อง,NKP,NKP07,NKP07R-01,32RCHA000003466,"725867.180109,1422207.991549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,มาบตาพุด,C2_P,H14101,H14101,C2_P,H13101,,,,,,1,1,,,,,1,1,30,1.3005388,,,04-01-2025 17:05:28,05-01-2025 07:16:21
66
+ 4745,5976560250,04-01-2025 17:03:00,1,04-01-2025 17:04:00,04-01-2025 17:04:00,1,1,ไฟฟ้าขัดข้อง,NKP,NKP07,NKP07R-01,32RCHA000003466,"725867.180109,1422207.991549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,วัสดุแปลกปลอม,วัสดุแปลกปลอมอื่นๆ,สายเหนือดิน,สาย,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,เป็นเหตุการณ์ทริปรีโคลส,มาบตาพุด,C2_P,H14101,H14101,C2_P,H14101,,,,,629,,629,,,,629,,629,27020,1.3005388,,,04-01-2025 17:05:28,05-01-2025 07:16:21
data/data_3.csv ADDED
The diff for this file is too large to render. See raw diff
 
data/data_3_1.csv ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Number,EventNumber,OutageDateTime,CountOfRestoStep,FirstRestoDateTime,LastRestoDateTime,FirstStepDuration,LastStepDuration,EventType,SubstationID,Feeder,OpDeviceID,OpDeviceGIStag,OpDeviceXYcoord,OpDeviceType,OpDeviceStatus,OpDevicePhase,OpVolt,OpVolt1,OpVolt2,OpDeviceSysType,Owner,FaultSysType,KnowUnknowCause,Weather,FaultDeviceType,FaultDevice,FaultDeviceCondition,Parts,DamagedParts,Manufacturer,RelayType,Relation,RelayPhase,RelayStatus,Detail,FaultDetail,SiteDetail,OpDeviceAreaID,OpDeviceSiteID,EventSiteID,AffectedAreaID,AffectedSiteID,Industrial,AffectedCustomer1,AffectedCustomer2,AffectedCustomer3,AffectedCustomer4,AffectedCustomer5,AffectedCustomer,AllStepCusXTime1,AllStepCusXTime2,AllStepCusXTime3,AllStepCusXTime4,AllStepCusXTime5,AllStepCusXTime,Capacity(kVA),Load(MW),CorrectionDetail,WorkOrderID,CreateEventDateTime,CloseEventDateTime
2
+ 251,5974274987,1/1/2025 07:20,1,1/1/2025 07:20,1/1/2025 07:20,0.08,0.08,ไฟฟ้าขัดข้อง,LSA,LSA08,LSA04R-01,41RCJA000004946,"511205.822109,1099989.523549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศชื้น / หมอก,สายเหนือดิน,,,ไม่ทราบ,ไม่ทราบ,ไม่มีข้อมูลผู้ผลิต,,,,,,,หลังสวน,S1_P,J13101,J13101,S1_P,J13101,,,,,,890,890,,,,,74.74516667,74.74516667,1390,2.4123716,,,1/1/2025 07:20,1/1/2025 08:04
3
+ 252,5974274987,1/1/2025 07:20,1,1/1/2025 07:20,1/1/2025 07:20,0.08,0.08,ไฟฟ้าขัดข้อง,LSA,LSA08,LSA04R-01,41RCJA000004946,"511205.822109,1099989.523549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศชื้น / หมอก,สายเหนือดิน,,,ไม่ทราบ,ไม่ทราบ,ไม่มีข้อมูลผู้ผลิต,,,,,,,หลังสวน,S1_P,J13101,J13101,S1_P,J13102,,,,,2865,1062,3927,,,,240.61225,89.1903,329.80255,14375,2.4123716,,,1/1/2025 07:20,1/1/2025 08:04
4
+ 253,5974275860,1/1/2025 07:20,1,1/1/2025 07:20,1/1/2025 07:20,0.08,0.08,ไฟฟ้าขัดข้อง,WUA,WUA06,WUA06R-04,2142RC000000016,"814842.120109,1913914.464549",Recloser,TR1,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,ไม่ทราบ,ไม่ทราบ,ไม่มีข้อมูลผู้ผลิต,,,Phase ABC,Trip Reclose1,T/R ,T/R ไม่ทราบสาเหตุ,กฟส.เอราวัณ,NE1_P,D17106,D17106,NE1_P,D11302,,,,,,732,732,,,,,60.268,60.268,730,1.42935,,,1/1/2025 07:20,1/1/2025 08:14
5
+ 254,5974275860,1/1/2025 07:20,1,1/1/2025 07:20,1/1/2025 07:20,0.08,0.08,ไฟฟ้าขัดข้อง,WUA,WUA06,WUA06R-04,2142RC000000016,"814842.120109,1913914.464549",Recloser,TR1,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,ไม่ทราบ,ไม่ทราบ,ไม่มีข้อมูลผู้ผลิต,,,Phase ABC,Trip Reclose1,T/R ,T/R ไม่ทราบสาเหตุ,กฟส.เอราวัณ,NE1_P,D17106,D17106,NE1_P,D17106,,,,,174,2821,2995,,,,14.326,232.2623333,246.5883333,11790,1.42935,,,1/1/2025 07:20,1/1/2025 08:14
6
+ 255,5974276401,1/1/2025 07:21,1,1/1/2025 08:00,1/1/2025 08:00,39,39,ไฟฟ้าขัดข้อง,SRG,SRG03,6000388703-1060050009,6000388703-1060050009,"706969.889109,1621924.118549",Meter,Operate,,Unknown,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,สายไฟฟ้าแรงต่ำ,,,,,,,,,.,C1_P,G03101,G03101,C1_P,G03101,,,,,,,0,,,,,,0,0,0.00024683,,,1/1/2025 07:21,1/1/2025 09:54
7
+ 256,5974276511,1/1/2025 07:10,1,1/1/2025 07:41,1/1/2025 07:41,31,31,ไฟฟ้าขัดข้อง,LKA,LKA02,51-013497,12XFBA000117611,"599730.348109,1845735.348549",Single Phase Transformer,Operate,AC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,สายไฟฟ้าแรงต่ำ,,,,,Phase A,,,,บ้าน ท่ามะเกลือ,N2_P,B01503,B01503,N2_P,B01503,,,,,,12,12,,,,,372,372,30,0.005446125,,1007875853,1/1/2025 07:22,1/1/2025 07:42
8
+ 257,5974276549,1/1/2025 07:22,1,1/1/2025 07:22,1/1/2025 07:22,0.08,0.08,ไฟฟ้าขัดข้อง,TMG,TMG02,TMG02WR-101,42RCKA000006219,"421232.857109,920942.224549",Recloser,T/R,ABC,33 kV,33 kV,33 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ส.นก,S2_P,K05301,K05301,S2_P,K05301,,,,,,201,201,,,,,16.7366,16.7366,310,0.061727097,,,1/1/2025 07:22,1/1/2025 07:46
9
+ 258,5974276590,1/1/2025 06:30,1,1/1/2025 06:55,1/1/2025 06:55,25,25,ไฟฟ้าขัดข้อง,KUR,KUR08,RNA05F-115,41SWJA000003531,"446071.046109,1048275.622549",Drop out Fuse,D/F,ABC,33 kV,33 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,ไลน์นากุ้งเจริญรุ่งเรือง,S1_P,J06105,J06105,S1_P,J06103,,,,,,0,0,,,,,0,0,12000,0.37672986,,1007875856,1/1/2025 07:26,1/1/2025 07:55
10
+ 259,5974276590,1/1/2025 06:30,1,1/1/2025 06:55,1/1/2025 06:55,25,25,ไฟฟ้าขัดข้อง,KUR,KUR08,RNA05F-115,41SWJA000003531,"446071.046109,1048275.622549",Drop out Fuse,D/F,ABC,33 kV,33 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,ไลน์นากุ้งเจริญรุ่งเรือง,S1_P,J06105,J06105,S1_P,J06105,,,,,,347,347,,,,,8675,8675,4780,0.37672986,,1007875856,1/1/2025 07:26,1/1/2025 07:55
11
+ 260,5974276857,1/1/2025 07:24,1,1/1/2025 07:24,1/1/2025 07:24,0.02,0.02,ไฟฟ้าขัดข้อง,YTA,YTA06,YTA06VB-01,22CBEA000009086,"1056548.101109,1753538.960549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,ลมแรง,สายเหนือดิน,,,กระบอกฟิวส์,กระบอกฟิวส์,ไม่มีข้อมูลผู้ผลิต,,,,,,,ยส.,NE2_P,E03101,E03101,NE2_P,E03101,,,,2878,668,2560,6106,,,30.9385,7.181,27.52,65.6395,33615,3.4747134,,,1/1/2025 07:24,1/1/2025 07:29
12
+ 261,5974278053,1/1/2025 07:22,1,1/1/2025 08:01,1/1/2025 08:01,39,39,ไฟฟ้าขัดข้อง,QSA,QSA01,59-024953,4284XF000007592,"509013.850109,936565.274549",Three Phase Transformer,Operate,ABC,33 kV,33 kV,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงสูง,,,,,Phase AB,,,,รายงานสรุปเหตุการณ์ รหัสอุปกรณ์: 59-024953 หมายเลขใบสั่ง: 1007875855 ชนิดฟอร์ท: AB 1Phase to Phase fault สันนิษฐานสัตว์ สภาพอากาศปกติ(1) อุปกรณ์ที่ใช้: Fuse link8k (2 เส้น),S2_P,K15102,K15102,S2_P,K15102,,,,,,72,72,,,,,2808,2808,250,0.027345512,,1007875855,1/1/2025 07:24,1/1/2025 08:03
13
+ 262,5974278348,1/1/2025 07:27,1,1/1/2025 07:40,1/1/2025 07:40,13,13,ไฟฟ้าขัดข้อง,NOA,NOA04,NOA04VF-124,21SWDA000036247,"877847.994109,1817956.845549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,ดรอปเอาท์ฟิวส์,ชำรุด,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,ฟิวส์แรงสูงขาด,ไลน์บ้านยางคำ,NE1_P,D07301,D07301,NE1_P,D07301,,,,,51,,51,,,,663,,663,130,0.015290024,,1007875858,1/1/2025 07:27,1/1/2025 07:46
14
+ 263,5974278369,1/1/2025 07:26,1,1/1/2025 07:26,1/1/2025 07:26,0.08,0.08,ไฟฟ้าขัดข้อง,DKA,DKA09,DKA05VR-101,1150RC000000054,"514785.684109,2087368.144549",Recloser,T/R,ABC,22 kV,22 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,รีโคลสเซอร์,,ชุดกลไก สำหรับ ปลด-สับ,ชุดกลไก สำหรับ ปลด-สับ,ไม่มีข้อมูลผู้ผลิต,,,,,,,ไม่ทราบ สาเหตุ ,N1_P,A15201,A15201,N1_P,A15201,,,,,2297,,2297,,,,189.1196667,,189.1196667,14600,1.0051406,,,1/1/2025 07:26,1/1/2025 07:31
15
+ 264,5974278955,1/1/2025 07:00,1,1/1/2025 07:20,1/1/2025 07:20,20,20,ไฟฟ้าขัดข้อง,PMB,PMB05,6500697589,33PTIA000038539,"641409.283109,1526208.691549",Three Phase Transformer,Operate,ABC,22 kV,22 kV,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงสูง,,,,,,,,,เครื่องวัดกรมยุทธ,C3_P,I18101,I18101,C3_P,I18101,,,,,1,,1,,,,20,,20,30,0.22835956,,1007875857,1/1/2025 07:27,1/1/2025 07:29
16
+ 265,5974279024,1/1/2025 06:00,1,1/1/2025 08:20,1/1/2025 08:20,140,140,ไฟฟ้าขัดข้อง,BSR,BSR02,BSR02F-023,41SWJA000008310,"549432.708109,1224830.697549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,Fuse - AEG,,,Phase C,,,,ได้รับแจ้งจาก กฟส.บางสะพานน้อยมีไฟดับบริเวณ ม.4 ซอย บรรตา - ดอนกระทุม ต.บางสะพานน้อย สาเหตุ หัวดรอปเอาท์เฟส C ขาด ทำการปลดฮอลไลน์แคล้มป์ เปลี่ยนอุปกรณ์แรงสูงใหม่ ( สภาพอากาศปกติ ) ,S1_P,J11102,J11102,S1_P,J11102,,,,,60,,60,,,,8400,,8400,310,0.023575142,,1007875859,1/1/2025 07:28,1/1/2025 08:31
17
+ 266,5974279088,1/1/2025 07:28,1,1/1/2025 07:28,1/1/2025 07:28,0.08,0.08,ไฟฟ้าขัดข้อง,KNI,KNI08,KNI01R-06,22RCEA000006911,"1118343.181109,1700654.210549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,ลมแรง,สายเหนือดิน,,,PIC,เปลือย,ไม่มีข้อมูลผู้ผลิต,,,,,,,จ.อุบลราชธานี,NE2_P,E01101,E01101,NE2_P,E01101,,,,,,347,347,,,,,28.9745,28.9745,600,0.08159491,,,1/1/2025 07:28,1/1/2025 09:19
18
+ 267,5974279301,1/1/2025 07:27,1,1/1/2025 08:30,1/1/2025 08:30,63,63,ไฟฟ้าขัดข้อง,SBY,SBY07,SBY07WF-115,43SWLA000074527,"704633.803109,742489.916549",Drop out Fuse,D/F,C,33 kV,33 kV,33 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,512160 ไฟดับบ้านควนหมาก ม.3 ต.วังใหญ่ อ.เทพา ตรวจสอบพบฟิวส์แรงสูงขาด DF ชำรุด เคลียร์ไลน์พบสาเหตุ ต้นมะพร้าวล้มทับสายแรงสูง ,S3_P,L13401,L13401,S3_P,L13401,,,,,,26,26,,,,,1638,1638,30,0.010800272,,1007875860,1/1/2025 07:30,1/1/2025 08:52
19
+ 268,5974279336,1/1/2025 07:31,1,1/1/2025 07:33,1/1/2025 07:33,2,2,ไฟฟ้าขัดข้อง,LBL,LBL04,6001560112-1060050001,6001560112-1060050001,"636815.781108,1561895.953549",Meter,Operate,,Unknown,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,จุดต่อสายแรงต่ำ,,,,,,,,,ม.7,C3_P,I14102,I14102,C3_P,I14102,,,,,,1,1,,,,,2,2,,0.001066576,,1007875862,1/1/2025 07:31,1/1/2025 07:34
20
+ 269,5974279432,1/1/2025 07:32,1,1/1/2025 07:32,1/1/2025 07:32,0.08,0.08,ไฟฟ้าขัดข้อง,SWA,SWA04,SWA04VR-04,12RCBA000011274,"581983.835109,1904250.804549",Recloser,T/R,ABC,22 kV,22 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศชื้น / หมอก,สายเหนือดิน,,,ไม่ทราบ,ไม่ทราบ,ไม่มีข้อมูลผู้ผลิต,,,Phase C,,,, ตรวจสอบระบบจำหน่ายไม่พบสาเหตุ ,N2_P,B11101,B11101,N2_P,B11101,,,,,1432,215,1647,,,,124.2976,18.662,142.9596,2690,0.42893198,,,1/1/2025 07:32,1/1/2025 08:07
21
+ 270,5974280888,1/1/2025 07:34,1,1/1/2025 07:34,1/1/2025 07:34,0,0,ไฟฟ้าขัดข้อง,NUA,NUA03,NUA03VB-01,13CBCA000005272,"676631.652109,1687428.282549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,เปลือย,เปลือย,ไม่มีข้อมูลผู้ผลิต,,,,,,,"""บ้านยางโทน,บ้านหนองอีเก้ง,อ.โคกเจริญ(บางส่วน) (ไม่มี รพ.ได้รับผลกระทบ)/T/R1/พบสาเหตุเกิดจาก D/F เฟส B ชำรุด บริเวณบ้านหนองทอง""",N3_P,C08501,C08501,N3_P,C08101,,,,,,,0,,,,,,0,0,2.991932,,,1/1/2025 07:34,1/1/2025 07:43
22
+ 271,5974280888,1/1/2025 07:34,1,1/1/2025 07:34,1/1/2025 07:34,0,0,ไฟฟ้าขัดข้อง,NUA,NUA03,NUA03VB-01,13CBCA000005272,"676631.652109,1687428.282549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,เปลือย,เปลือย,ไม่มีข้อมูลผู้ผลิต,,,,,,,"""บ้านยางโทน,บ้านหนองอีเก้ง,อ.โคกเจริญ(บางส่วน) (ไม่มี รพ.ได้รับผลกระทบ)/T/R1/พบสาเหตุเกิดจาก D/F เฟส B ชำรุด บริเวณบ้านหนองทอง""",N3_P,C08501,C08501,N3_P,C08501,,,,,45,2793,2838,,,,0.48,29.792,30.272,9240,2.991932,,,1/1/2025 07:34,1/1/2025 07:43
23
+ 272,5974280888,1/1/2025 07:34,1,1/1/2025 07:34,1/1/2025 07:34,0,0,ไฟฟ้าขัดข้อง,NUA,NUA03,NUA03VB-01,13CBCA000005272,"676631.652109,1687428.282549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,เปลือย,เปลือย,ไม่มีข้อมูลผู้ผลิต,,,,,,,"""บ้านยางโทน,บ้านหนองอีเก้ง,อ.โคกเจริญ(บางส่วน) (ไม่มี รพ.ได้รับผลกระทบ)/T/R1/พบสาเหตุเกิดจาก D/F เฟส B ชำรุด บริเวณบ้านหนองทอง""",N3_P,C08501,C08501,N3_P,C08502,,,,,,5155,5155,,,,,54.98666667,54.98666667,9445,2.991932,,,1/1/2025 07:34,1/1/2025 07:43
24
+ 273,5974284316,1/1/2025 06:45,1,1/1/2025 08:19,1/1/2025 08:19,94,94,ไฟฟ้าขัดข้อง,WVA,WVA03,LRA09F-91,42SWKA000048633,"539276.642109,868637.886549",Drop out Fuse,D/F,B,33 kV,33 kV,33 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,รับเเจ้งไฟดับ บ้านไชยภักดี สาเหตุ ช็อตสัตว์ อุปกรณ์ที่ใช้: Fuse link30k (1 เส้น),S2_P,K17102,K17102,S2_P,K17102,,,,,,124,124,,,,,11656,11656,150,0.018602335,,1007875866,1/1/2025 07:36,1/1/2025 08:20
25
+ 274,5974284397,1/1/2025 06:50,1,1/1/2025 07:34,1/1/2025 07:34,44,44,ไฟฟ้าขัดข้อง,BUY,BUY06,BUY06VF-312,23SWFA000105976,"880074.033109,1707155.028549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,Phase C,,หน้า อ.โนนแดง ฟิวส์ป้องกันไลน์ขาดเฟส C สับเปลี่ยนฟิวส์ทดลองจ่ายไฟได้ปกติ,หน้า อ.โนนแดง ฟิวส์ป้องกันไลน์ขาดเฟส C สับเปลี่ยนฟิวส์ทดลองจ่ายไฟได้ปกติ,หน้า อ.โนนแดง ,NE3_P,F08202,F08202,NE3_P,F08202,,,,,45,1008,1053,,,,1980,44352,46332,1130,1.525149,,1007875867,1/1/2025 07:36,1/1/2025 08:36
26
+ 275,5974285372,1/1/2025 07:36,1,1/1/2025 07:39,1/1/2025 07:39,3,3,ไฟฟ้าขัดข้อง,SPN,SPN05,58-012941,33XFIA000075317,"621824.305109,1561732.160549",Three Phase Transformer,Operate,ABC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงต่ำ,,,,,,,,,ม.16,C3_P,I14102,I14102,C3_P,I14102,,,,,,54,54,,,,,162,162,100,0.02227634,,1007875868,1/1/2025 07:36,1/1/2025 07:39
27
+ 276,5974285432,1/1/2025 07:00,1,1/1/2025 07:30,1/1/2025 07:30,30,30,ไฟฟ้าขัดข้อง,XNA,XNA09,65-001745,2330XF000009334,"803839.576109,1630603.082549",Three Phase Transformer,Operate,ABC,22 kV,22 kV,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงสูง,,,,,,,,,DCC_บ.หนองเลาใหญ่ (คลอนแคลน),NE3_P,F07201,F07201,NE3_P,F07201,,,,,,49,49,,,,,1470,1470,50,0.0100065,,1007875869,1/1/2025 07:39,1/1/2025 07:41
28
+ 277,5974285606,1/1/2025 07:29,1,1/1/2025 07:29,1/1/2025 07:29,0,0,ไฟฟ้าขัดข้อง,BLS,BLS06,BLS06VB-01,31CBGA000000679,"679627.210109,1571063.126549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,ตัว Circuit breaker,ตัว Circuit breaker,ไม่มีข้อมูลผู้ผลิต,,,,,,,T/R ไม่มีไฟดับ,C1_P,G24101,G24101,C1_P,G24101,,,,,,9,9,,,,,0,0,2725,0.41593845,,,1/1/2025 07:38,1/1/2025 13:11
29
+ 278,5974285687,1/1/2025 07:38,1,1/1/2025 07:38,1/1/2025 07:38,0.08,0.08,ไฟฟ้าขัดข้อง,KRA,KRA05,KRA05VR-101,2140RC000000058,"913521.763109,1851611.308549",Recloser,TR1,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,ไม่ทราบ,ไม่ทราบ,ไม่มีข้อมูลผู้ผลิต,,,Phase AG,Trip Reclose1,T/R ,T/R ไม่ทราบสาเหตุ,กฟส.น้ำพอง,NE1_P,D03201,D03201,NE1_P,D03201,,,,,,6136,6136,,,,,513.3786667,513.3786667,8600,1.2389691,,,1/1/2025 07:38,1/1/2025 08:15
30
+ 279,5974286282,1/1/2025 07:39,1,1/1/2025 07:57,1/1/2025 07:57,18,18,ไฟฟ้าขัดข้อง,ANA,ANA05,ANA05VF-043,22SWEA000221894,"1092707.393109,1754939.631549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,ลมแรง,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,บ.คำสร้างบ่อ,NE2_P,E08101,E08101,NE2_P,E08101,,,,,,52,52,,,,,936,936,350,0.013441769,,1007875873,1/1/2025 07:39,1/1/2025 07:58
31
+ 280,5974286358,1/1/2025 07:20,1,1/1/2025 07:40,1/1/2025 07:40,20,20,ไฟฟ้าขัดข้อง,PEA,PEA02,64-008964,13XFCA000081773,"723829.147109,1808884.171549",Three Phase Transformer,Operate,ABC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงต่ำ,,,,,,,,,บ้านโตก,N3_P,C06101,C06101,N3_P,C06101,,,,,,2,2,,,,,40,40,100,0.000267663,,1007875871,1/1/2025 07:39,1/1/2025 07:49
32
+ 281,5974286502,1/1/2025 07:39,1,1/1/2025 08:00,1/1/2025 08:00,21,21,ไฟฟ้าขัดข้อง,QKA,QKA04,QKA04VF-260,23SWFA000058976,"818569.164109,1811305.289549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,ดรอปเอาท์ฟิวส์,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,Phase B,,,,ไลน์บึงแก้ง,NE3_P,F11201,F11201,NE3_P,F11201,,,,,,12,12,,,,,252,252,810,0.001326415,,1007875870,1/1/2025 07:39,1/1/2025 08:22
33
+ 282,5974286532,1/1/2025 06:34,2,1/1/2025 07:20,1/1/2025 07:20,45.05,45.05,ไฟฟ้าขัดข้อง,BSP,BSP02,50-007299,41XFJA000088483,"570296.556109,1280750.554549",Three Phase Transformer,Operate,ABC,22 kV,22 kV,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,หม้อแปลงจำหน่าย,,,หม้อแปลงจำหน่าย,,,,,Phase AB,,,,หนองครก / เปลี่ยนฟิวส์แรงสูง,S1_P,J04301,J04301,S1_P,J04301,,,,,,22,22,,,,,885.0442,885.0442,50,0.013401268,,1007875872,1/1/2025 07:39,1/1/2025 07:50
34
+ 283,5974286813,1/1/2025 07:20,1,1/1/2025 07:42,1/1/2025 07:42,22,22,ไฟฟ้าขัดข้อง,CON,CON05,56-004918,13XFCA000022111,"705727.950109,1808367.465549",Single Phase Transformer,Operate,AC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,จุดต่อสายแรงต่ำ,,,,,,,,,บ้านซับเปิบ,N3_P,C06201,C06201,N3_P,C06201,,,,,,56,56,,,,,1232,1232,30,0.007835598,,1007875874,1/1/2025 07:41,1/1/2025 07:52
35
+ 284,5974287458,1/1/2025 07:20,1,1/1/2025 07:42,1/1/2025 07:42,22,22,ไฟฟ้าขัดข้อง,CON,CON04,37-001296,1367XF000000341,"707276.977109,1796954.112549",Single Phase Transformer,Operate,AC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,จุดต่อสายแรงต่ำ,,,,,,,,,บ้านอ่างหิน,N3_P,C06201,C06201,N3_P,C06201,,,,,,57,57,,,,,1254,1254,30,0.010892663,,1007875875,1/1/2025 07:42,1/1/2025 07:55
36
+ 285,5974287524,1/1/2025 07:00,1,1/1/2025 07:30,1/1/2025 07:30,30,30,ไฟฟ้าขัดข้อง,UAA,UAA06,UAA06F-19,13SWCA000062715,"617621.798109,1695544.969549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,บ.ตาลเอน,N3_P,C03101,C03101,N3_P,C03101,,,,,,412,412,,,,,12360,12360,500,0.065601234,,1007875876,1/1/2025 07:42,1/1/2025 07:45
37
+ 286,5974287591,1/1/2025 07:30,1,1/1/2025 07:45,1/1/2025 07:45,15,15,ไฟฟ้าขัดข้อง,DAA,DAA06,DAA09F-07,3372SW000000538,"575846.289109,1637847.137549",Drop out Fuse,D/F,ABC,22 kV,22 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,Phase A,,,,ไลน์แยกแตงโม ,C3_P,I13301,I13301,C3_P,I13301,,,,,,164,164,,,,,2460,2460,780,0.037147697,,1007875877,1/1/2025 07:44,1/1/2025 07:58
38
+ 287,5974287638,1/1/2025 07:43,1,1/1/2025 08:00,1/1/2025 08:00,17,17,ไฟฟ้าขัดข้อง,SRG,SRG03,6100888649-1060050009,6100888649-1060050009,"706976.303109,1621924.382549",Meter,Operate,,Unknown,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,สายไฟฟ้าแรงต่ำ,,,,,,,,,.,C1_P,G03101,G03101,C1_P,G03101,,,,,,,0,,,,,,0,0,0.000241395,,,1/1/2025 07:43,1/1/2025 09:54
39
+ 288,5974289895,1/1/2025 07:45,1,1/1/2025 07:45,1/1/2025 07:45,0.08,0.08,ไฟฟ้าขัดข้อง,SFB,SFB05,SFB05VR-201,2330RC000000001,"776245.846109,1643913.974549",Recloser,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,OHGW,OHGW,ไม่มีข้อมูลผู้ผลิต,,,Phase AC,,,,T/R ไม่ทราบสาเหตุ,NE3_P,F07101,F07101,NE3_P,F07101,,,,,4040,3901,7941,,,,338.0133333,326.3836667,664.397,22995,2.462084,,,1/1/2025 07:45,1/1/2025 09:33
40
+ 289,5974291677,1/1/2025 07:35,1,1/1/2025 08:28,1/1/2025 08:28,53,53,ไฟฟ้าขัดข้อง,KGA,KGA02,KGA06F-21,2330SW000000913,"894492.682109,1706541.074549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,Phase A,,,,ไลน์บ้���นโนนกระเพรา,NE3_P,F10101,F10101,NE3_P,F10101,,,,,,59,59,,,,,3127,3127,80,0.013643484,สัตว์ : เปลี่ยนฟิวส์ Link,1007875878,1/1/2025 07:45,1/1/2025 08:35
41
+ 290,5974293710,1/1/2025 07:45,1,1/1/2025 07:56,1/1/2025 07:56,11,11,ไฟฟ้าขัดข้อง,NCH,NCH05,MRA04F-27,13SWCA000060024,"589258.952109,1689010.392549",Drop out Fuse,D/F,AB,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,, บ้านหนองยาง,N3_P,C04602,C04602,N3_P,C04602,,,,,168,,168,,,,1848,,1848,160,0.02759504,,1007875879,1/1/2025 07:45,1/1/2025 07:57
42
+ 291,5974295843,1/1/2025 07:46,1,1/1/2025 07:46,1/1/2025 07:46,0.08,0.08,ไฟฟ้าขัดข้อง,NTB,NTB02,NTB02WR-102,42RCKA000009025,"602215.038109,947217.965549",Recloser,T/R,ABC,33 kV,33 kV,33 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,SAC,SAC,ไม่มีข้อมูลผู้ผลิต,,,,,,,ส.นก,S2_P,K16101,K16101,S2_P,K16101,,,,,,2339,2339,,,,,196.1641333,196.1641333,2510,0.6150933,,,1/1/2025 07:46,1/1/2025 09:21
43
+ 292,5974296108,1/1/2025 07:46,1,1/1/2025 08:34,1/1/2025 08:34,48,48,ไฟฟ้าขัดข้อง,PJA,PJA02,60-016859,31XFGA000082940,"682631.443109,1624103.890549",Three Phase Transformer,Operate,ABC,22 kV,22 kV,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,หม้อแปลงจำหน่าย,,,หม้อแปลงจำหน่าย,,,,,,,,,หนองโดน,C1_P,G10103,G10103,C1_P,G10103,,,,,52,,52,,,,2496,,2496,100,0.011461833,,1007875880,1/1/2025 07:46,1/1/2025 08:35
44
+ 293,5974296325,1/1/2025 07:48,1,1/1/2025 07:48,1/1/2025 07:48,0,0,ไฟฟ้าขัดข้อง,PCB,PCB06,PCB06VB-01,23CBFA000001116,"748664.685109,1621240.562549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,OHGW,PIC,ไม่มีข้อมูลผู้ผลิต,,,Phase AG,,,,T/R ไม่ทราบสาเหตุ,NE3_P,F06102,F06102,NE3_P,F06101,,,,,2,88,90,,,,0.022466667,0.988533333,1.011,11615,3.1105884,,,1/1/2025 07:48,1/1/2025 11:45
45
+ 294,5974296325,1/1/2025 07:48,1,1/1/2025 07:48,1/1/2025 07:48,0,0,ไฟฟ้าขัดข้อง,PCB,PCB06,PCB06VB-01,23CBFA000001116,"748664.685109,1621240.562549",Circuit Breaker_MV,T/R,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,OHGW,PIC,ไม่มีข้อมูลผู้ผลิต,,,Phase AG,,,,T/R ไม่ทราบสาเหตุ,NE3_P,F06102,F06102,NE3_P,F06102,,,,,0,,0,,,,0,,0,160,3.1105884,,,1/1/2025 07:48,1/1/2025 11:45
46
+ 295,5974296865,1/1/2025 07:49,1,1/1/2025 08:15,1/1/2025 08:15,26,26,ไฟฟ้าขัดข้อง,KCA,KCA09,52-004487,3371XF000004834,"558422.054109,1549426.942549",Three Phase Transformer,Operate,ABC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,สายเหนือดิน,,,สายไฟฟ้าแรงต่ำ,,,,,,,,,ซอยไปรษณีย์,C3_P,I03101,I03101,C3_P,I03101,,,,82,,,82,,,2132,,,2132,160,0.05334112,,1007875881,1/1/2025 07:49,1/1/2025 08:15
47
+ 296,5974297507,1/1/2025 07:15,1,1/1/2025 07:45,1/1/2025 07:45,30,30,ไฟฟ้าขัดข้อง,PSU,PSU03,54-017406,23XFFA000009393,"976471.927109,1625324.023549",Single Phase Transformer,Operate,AC,22 kV,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,ไม่พบสาเหตุ,อากาศปกติ,หม้อแปลงจำหน่าย,,,หม้อแปลงจำหน่าย,,,,,,,,,DCC_บ้านสัมพันธ์(กลุ่มนอก),NE3_P,F12101,F12101,NE3_P,F12101,,,,,,27,27,,,,,810,810,30,0.005457014,,1007875882,1/1/2025 07:50,1/1/2025 08:09
48
+ 297,5974297587,1/1/2025 07:51,1,1/1/2025 08:16,1/1/2025 08:16,25,25,ไฟฟ้าขัดข้อง,KCA,KCA03,27668822,33PTIA000041917,"552764.317109,1554760.264549",Three Phase Transformer,Operate,ABC,22 kV,22 kV,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,ฟิวส์แรงสูง,,,,,,,,,สนง ขนส่ง,C3_P,I03101,I03101,C3_P,I03101,,,,,1,,1,,,,25,,25,30,0.019874548,,1007875883,1/1/2025 07:51,1/1/2025 08:16
49
+ 298,5974297731,1/1/2025 07:52,1,1/1/2025 08:05,1/1/2025 08:05,13,13,ไฟฟ้าขัดข้อง,BNP,BNP08,BNP08F-12,33SWIA000054553,"618058.516109,1502573.775549",Drop out Fuse,D/F,ABC,22 kV,22 kV,220 V,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,Circuit Breaker - SPERCHER ENERGIE,,,,,,,บ้านแพ้ว,C3_P,I16101,I16101,C3_P,I16101,,,,,58,,58,,,,754,,754,260,0.04843949,,1007875884,1/1/2025 07:52,1/1/2025 08:07
50
+ 299,5974297805,1/1/2025 07:52,1,1/1/2025 08:44,1/1/2025 08:44,52,52,ไฟฟ้าขัดข้อง,CYA,CYA05,6100582030-1060050001,6100582030-1060050001,"821267.142108,1725242.149549",Meter,Operate,,Unknown,220 V,,ระบบจำหน่ายแรงต่ำ,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศชื้น / หมอก,อุปกรณ์ป้องกันและตัดตอน,,,LT สวิตซ์แรงต่ำ,,,,,,,,,-21 บ.บะเสียว ม.6 ต.หนองฉิม อ.เ,NE3_P,F02306,F02306,NE3_P,F02306,,,,,,1,1,,,,,52,52,,0.000365036,,1007875885,1/1/2025 07:52,1/1/2025 10:44
51
+ 300,5974297900,1/1/2025 07:10,1,1/1/2025 07:30,1/1/2025 07:30,20,20,ไฟฟ้าขัดข้อง,CTB,CTB09,CTA01F-20,3222SW000000576,"842091.815109,1394115.812549",Drop out Fuse,D/F,ABC,22 kV,22 kV,22 kV,ระบบจำหน่ายแรงสูง,กฟภ.-ไฟฟ้าขัดข้อง,ระบบจำหน่าย,พบสาเหตุ,อากาศปกติ,อุปกรณ์ป้องกันและตัดตอน,,,Fuse link,Fuse link,ไม่มีข้อมูลผู้ผลิต,,,,,,,ซอยวัดทองทั่ว,C2_P,H03101,H03101,C2_P,H03101,,,,,741,555,1296,,,,14820,11100,25920,2840,0.45207108,,1007875886,1/1/2025 07:53,1/1/2025 07:58
requirements.txt ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ pandas==2.2.2
2
+ numpy==1.26.4
3
+ python-dateutil==2.8.2
4
+ jinja2==3.1.2
5
+ scikit-learn==1.3.2
6
+ pydantic==2.11.7
7
+ matplotlib==3.8.1
8
+ seaborn==0.12.2
9
+ geopandas==0.13.2
10
+ shapely==2.1.1
11
+ fsspec==2024.9.0
12
+ tensorflow==2.16.1
13
+ gradio==3.44.0
14
+ fastapi==0.115.14
15
+ openai==1.109.1
16
+ python-dotenv==1.0.0
17
+ prophet==1.1.7
18
+ uvicorn==0.20.0
19
+ websockets==11.0.3
20
+ huggingface-hub==0.35.1
21
+ httpx==0.28.1
22
+ orjson==3.11.3
23
+ cmdstanpy==1.2.5
24
+ stanio==0.5.1
scripts/anomaly.py ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+ from sklearn.ensemble import IsolationForest
4
+ from sklearn.neighbors import LocalOutlierFactor
5
+ from sklearn.preprocessing import StandardScaler
6
+ from typing import Tuple
7
+ try:
8
+ import tensorflow as tf
9
+ from tensorflow.keras import layers, models
10
+ TF_AVAILABLE = True
11
+ except ImportError:
12
+ TF_AVAILABLE = False
13
+
14
+
15
+ def parse_datetime_cols(df: pd.DataFrame) -> pd.DataFrame:
16
+ for c in ['OutageDateTime','FirstRestoDateTime','LastRestoDateTime']:
17
+ if c in df.columns:
18
+ df[c+'_dt'] = pd.to_datetime(df[c], format='%d-%m-%Y %H:%M:%S', errors='coerce')
19
+ return df
20
+
21
+
22
+ def feature_engineer(df: pd.DataFrame) -> pd.DataFrame:
23
+ df = df.copy()
24
+ df = parse_datetime_cols(df)
25
+
26
+ # Duration in minutes between outage and last restore
27
+ if 'OutageDateTime_dt' in df.columns and 'LastRestoDateTime_dt' in df.columns:
28
+ df['duration_min'] = (df['LastRestoDateTime_dt'] - df['OutageDateTime_dt']).dt.total_seconds() / 60.0
29
+ else:
30
+ df['duration_min'] = np.nan
31
+
32
+ # Load numeric
33
+ for col in ['Load(MW)','Capacity(kVA)','FirstStepDuration','LastStepDuration','AffectedCustomer']:
34
+ if col in df.columns:
35
+ df[col+'_num'] = pd.to_numeric(df[col], errors='coerce')
36
+ else:
37
+ df[col+'_num'] = np.nan
38
+
39
+ # time of day
40
+ if 'OutageDateTime_dt' in df.columns:
41
+ df['hour'] = df['OutageDateTime_dt'].dt.hour
42
+ else:
43
+ df['hour'] = np.nan
44
+
45
+ # device type one-hot small encoding: frequency
46
+ if 'OpDeviceType' in df.columns:
47
+ freq = df['OpDeviceType'].fillna('NA').value_counts()
48
+ df['device_freq'] = df['OpDeviceType'].map(lambda x: freq.get(x,0))
49
+ else:
50
+ df['device_freq'] = 0
51
+
52
+ # coordinates
53
+ if 'OpDeviceXYcoord' in df.columns:
54
+ def parse_xy(s):
55
+ try:
56
+ s = str(s).strip().strip('"')
57
+ x,y = s.split(',')
58
+ return float(x), float(y)
59
+ except Exception:
60
+ return (np.nan, np.nan)
61
+ xs, ys = zip(*df['OpDeviceXYcoord'].map(parse_xy))
62
+ df['x'] = xs
63
+ df['y'] = ys
64
+ else:
65
+ df['x'] = np.nan
66
+ df['y'] = np.nan
67
+
68
+ return df
69
+
70
+
71
+ def build_feature_matrix(df: pd.DataFrame) -> Tuple[np.ndarray, list]:
72
+ df_fe = feature_engineer(df)
73
+ features = ['duration_min','Load(MW)_num','AffectedCustomer_num','hour','device_freq','x','y']
74
+ X = df_fe[features].copy()
75
+ # Fill na with median
76
+ X = X.fillna(X.median())
77
+ scaler = StandardScaler()
78
+ Xs = scaler.fit_transform(X)
79
+ return Xs, features, df_fe, scaler
80
+
81
+
82
+ def run_isolation_forest(X: np.ndarray, contamination: float = 0.05, random_state: int = 42):
83
+ iso = IsolationForest(contamination=contamination, random_state=random_state)
84
+ preds = iso.fit_predict(X)
85
+ # IsolationForest returns -1 for outliers
86
+ scores = iso.decision_function(X)
87
+ return preds, scores
88
+
89
+
90
+ def run_lof(X: np.ndarray, contamination: float = 0.05, n_neighbors: int = 20):
91
+ lof = LocalOutlierFactor(n_neighbors=n_neighbors, contamination=contamination)
92
+ preds = lof.fit_predict(X)
93
+ # negative_outlier_factor_ (the lower, more abnormal)
94
+ scores = lof.negative_outlier_factor_
95
+ return preds, scores
96
+
97
+
98
+ def run_autoencoder(X: np.ndarray, contamination: float = 0.05, latent_dim: int = 4, epochs: int = 50, batch_size: int = 32):
99
+ if not TF_AVAILABLE:
100
+ raise ImportError("TensorFlow not available. Install tensorflow to use autoencoder.")
101
+
102
+ input_dim = X.shape[1]
103
+
104
+ # Build autoencoder
105
+ encoder = models.Sequential([
106
+ layers.Input(shape=(input_dim,)),
107
+ layers.Dense(16, activation='relu'),
108
+ layers.Dense(latent_dim, activation='relu')
109
+ ])
110
+
111
+ decoder = models.Sequential([
112
+ layers.Input(shape=(latent_dim,)),
113
+ layers.Dense(16, activation='relu'),
114
+ layers.Dense(input_dim, activation='linear')
115
+ ])
116
+
117
+ autoencoder = models.Sequential([encoder, decoder])
118
+ autoencoder.compile(optimizer='adam', loss='mse')
119
+
120
+ # Train
121
+ autoencoder.fit(X, X, epochs=epochs, batch_size=batch_size, verbose=0, validation_split=0.1)
122
+
123
+ # Reconstruction error
124
+ reconstructed = autoencoder.predict(X, verbose=0)
125
+ mse = np.mean((X - reconstructed)**2, axis=1)
126
+
127
+ # Threshold based on contamination
128
+ threshold = np.percentile(mse, (1 - contamination) * 100)
129
+ preds = (mse > threshold).astype(int) * -1 # -1 for outliers
130
+ preds[preds == 0] = 1 # 1 for inliers
131
+
132
+ return preds, mse
133
+
134
+
135
+ def explain_anomalies(df_fe: pd.DataFrame, explain_features=None):
136
+ # explain_features: which numeric columns to compute z-score on
137
+ if explain_features is None:
138
+ explain_features = ['duration_min','Load(MW)_num','AffectedCustomer_num','hour','device_freq']
139
+ df_num = df_fe[explain_features].astype(float).fillna(df_fe[explain_features].median())
140
+ means = df_num.mean()
141
+ stds = df_num.std().replace(0, 1.0)
142
+ z = (df_num - means) / stds
143
+ # create explanation string for each row: top 3 absolute z-scores
144
+ explanations = []
145
+ for i, row in z.iterrows():
146
+ abs_row = row.abs()
147
+ top = abs_row.sort_values(ascending=False).head(3)
148
+ parts = []
149
+ for feat in top.index:
150
+ val = row[feat]
151
+ sign = 'สูง' if val > 0 else 'ต่ำ' if val < 0 else 'ปกติ'
152
+ parts.append(f"{feat} {sign} (z={val:.2f})")
153
+ explanations.append('; '.join(parts))
154
+ return z, explanations
155
+
156
+
157
+ def detect_anomalies(df: pd.DataFrame, contamination: float = 0.05, algorithm: str = 'both') -> pd.DataFrame:
158
+ Xs, features, df_fe, scaler = build_feature_matrix(df)
159
+
160
+ if algorithm == 'autoencoder':
161
+ preds, scores = run_autoencoder(Xs, contamination=contamination)
162
+ res = df.copy().reset_index(drop=True)
163
+ res['auto_pred'] = preds
164
+ res['auto_score'] = scores
165
+ res['final_flag'] = res['auto_pred'] == -1
166
+ else:
167
+ preds_iso, scores_iso = run_isolation_forest(Xs, contamination=contamination)
168
+ preds_lof, scores_lof = run_lof(Xs, contamination=contamination)
169
+
170
+ res = df.copy().reset_index(drop=True)
171
+ res['iso_pred'] = preds_iso
172
+ res['iso_score'] = scores_iso
173
+ res['lof_pred'] = preds_lof
174
+ res['lof_score'] = scores_lof
175
+ # ensemble: flag if both mark as outlier (-1)
176
+ res['ensemble_flag'] = ((res['iso_pred'] == -1) & (res['lof_pred'] == -1))
177
+
178
+ # algorithm filter: if algorithm == 'iso' or 'lof' or 'both', compute final_flag
179
+ if algorithm == 'iso':
180
+ res['final_flag'] = res['iso_pred'] == -1
181
+ elif algorithm == 'lof':
182
+ res['final_flag'] = res['lof_pred'] == -1
183
+ else:
184
+ res['final_flag'] = res['ensemble_flag']
185
+
186
+ # explainability (same for all)
187
+ z_df, explanations = explain_anomalies(df_fe)
188
+ # attach z-scores for explain features
189
+ for col in z_df.columns:
190
+ res[f'z_{col}'] = z_df[col].values
191
+ res['explanation'] = explanations
192
+
193
+ return res
scripts/classify.py ADDED
@@ -0,0 +1,446 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sys
2
+ import os
3
+ from pathlib import Path
4
+ import pandas as pd
5
+ import numpy as np
6
+ from typing import Optional
7
+
8
+ # sklearn imports
9
+ from sklearn.model_selection import train_test_split, StratifiedKFold
10
+ from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
11
+ from sklearn.neural_network import MLPClassifier
12
+ from sklearn.pipeline import Pipeline
13
+ from sklearn.compose import ColumnTransformer
14
+ from sklearn.preprocessing import OneHotEncoder, StandardScaler, LabelEncoder
15
+ from sklearn.impute import SimpleImputer
16
+ from sklearn.metrics import classification_report
17
+ import joblib
18
+
19
+ # Optional HF weak-labeling
20
+ HF_TOKEN = os.environ.get('HF_TOKEN')
21
+
22
+ # optional boosters
23
+ try:
24
+ import xgboost as xgb
25
+ _has_xgb = True
26
+ except Exception:
27
+ _has_xgb = False
28
+
29
+
30
+ def parse_and_features(df: pd.DataFrame) -> pd.DataFrame:
31
+ df = df.copy()
32
+ # parse datetimes
33
+ for c in ['OutageDateTime','FirstRestoDateTime','LastRestoDateTime']:
34
+ if c in df.columns:
35
+ df[c+'_dt'] = pd.to_datetime(df[c], format='%d-%m-%Y %H:%M:%S', errors='coerce')
36
+
37
+ # duration
38
+ if 'OutageDateTime_dt' in df.columns and 'LastRestoDateTime_dt' in df.columns:
39
+ df['duration_min'] = (df['LastRestoDateTime_dt'] - df['OutageDateTime_dt']).dt.total_seconds() / 60.0
40
+ else:
41
+ df['duration_min'] = np.nan
42
+
43
+ # numeric columns
44
+ for col in ['Load(MW)','Capacity(kVA)','FirstStepDuration','LastStepDuration','AffectedCustomer']:
45
+ if col in df.columns:
46
+ df[col+'_num'] = pd.to_numeric(df[col], errors='coerce')
47
+ else:
48
+ df[col+'_num'] = np.nan
49
+
50
+ # time features
51
+ if 'OutageDateTime_dt' in df.columns:
52
+ df['hour'] = df['OutageDateTime_dt'].dt.hour
53
+ df['weekday'] = df['OutageDateTime_dt'].dt.weekday
54
+ else:
55
+ df['hour'] = np.nan
56
+ df['weekday'] = np.nan
57
+
58
+ # device frequency
59
+ if 'OpDeviceType' in df.columns:
60
+ freq = df['OpDeviceType'].fillna('NA').value_counts()
61
+ df['device_freq'] = df['OpDeviceType'].map(lambda x: freq.get(x,0))
62
+ else:
63
+ df['device_freq'] = 0
64
+
65
+ # small cleanup for categorical
66
+ for c in ['OpDeviceType','Owner','Weather','EventType']:
67
+ if c in df.columns:
68
+ df[c] = df[c].fillna('NA')
69
+ else:
70
+ df[c] = 'NA'
71
+
72
+ return df
73
+
74
+
75
+ def weak_label_with_hf(text: str) -> Optional[str]:
76
+ # Use HF router via OpenAI-compatible client to map free-text to a label suggestions
77
+ if not HF_TOKEN or not isinstance(text, str) or not text.strip():
78
+ return None
79
+ try:
80
+ from openai import OpenAI
81
+ client = OpenAI(base_url='https://router.huggingface.co/v1', api_key=HF_TOKEN)
82
+ prompt = f"ให้จัดหมวดสาเหตุของเหตุการณ์ไฟฟ้า ในคำสั้นๆ (ไทย) จากข้อความนี้:\n\n{text}\n\nตอบเป็นคำเดียวหรือวลีสั้นๆ เช่น 'สายขาด' หรือ 'บำรุงรักษา'"
83
+ completion = client.chat.completions.create(
84
+ model='meta-llama/Llama-4-Scout-17B-16E-Instruct:novita',
85
+ messages=[{"role":"user","content":[{"type":"text","text":prompt}]}],
86
+ max_tokens=40,
87
+ )
88
+ choice = completion.choices[0]
89
+ msg = getattr(choice, 'message', None) or (choice.get('message') if isinstance(choice, dict) else None)
90
+ content = None
91
+ if msg:
92
+ content = msg.get('content') if isinstance(msg, dict) else getattr(msg, 'content', None)
93
+ if isinstance(content, list) and content:
94
+ # find text
95
+ for it in content:
96
+ if isinstance(it, dict) and it.get('type') in ('output_text','text'):
97
+ return it.get('text').strip()
98
+ return str(content[0]).strip()
99
+ # fallback
100
+ text_out = choice.get('text') if isinstance(choice, dict) else None
101
+ return text_out.strip() if text_out else None
102
+ except Exception:
103
+ return None
104
+
105
+
106
+ def train_classifier(df: pd.DataFrame, label_col: str = 'CauseType', test_size: float = 0.2, random_state: int = 42, min_count_to_keep: int = 2, model_type: str = 'rf', hyperparams: dict = {}):
107
+ df = parse_and_features(df)
108
+
109
+ # optionally weak-label rows missing label
110
+ if label_col not in df.columns:
111
+ df[label_col] = None
112
+
113
+ if df[label_col].isna().sum() > 0 and HF_TOKEN:
114
+ # attempt weak labeling for missing entries using Detail or FaultDetail
115
+ for idx, row in df[df[label_col].isna()].iterrows():
116
+ text = None
117
+ for f in ['Detail','FaultDetail','SiteDetail']:
118
+ if f in df.columns and pd.notna(row.get(f)):
119
+ text = row.get(f)
120
+ break
121
+ if text:
122
+ try:
123
+ lbl = weak_label_with_hf(text)
124
+ if lbl:
125
+ df.at[idx, label_col] = lbl
126
+ except Exception:
127
+ pass
128
+
129
+ # filter rare classes and drop na
130
+ if df[label_col].notna().any():
131
+ vc = df[label_col].value_counts()
132
+ rare = vc[vc < min_count_to_keep].index
133
+ if len(rare) > 0:
134
+ df[label_col] = df[label_col].apply(lambda x: 'Other' if x in rare else x)
135
+ df = df.dropna(subset=[label_col])
136
+
137
+ # features
138
+ feature_cols = ['duration_min','Load(MW)_num','Capacity(kVA)_num','AffectedCustomer_num','hour','weekday','device_freq','OpDeviceType','Owner','Weather','EventType']
139
+ X = df[feature_cols]
140
+
141
+ y = df[label_col].astype(str)
142
+ le = LabelEncoder()
143
+ y_encoded = le.fit_transform(y)
144
+
145
+ # split
146
+ X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=test_size, random_state=random_state, stratify=y_encoded)
147
+
148
+ # model
149
+ if model_type == 'rf':
150
+ clf = RandomForestClassifier(random_state=random_state, **hyperparams)
151
+ elif model_type == 'gb':
152
+ clf = GradientBoostingClassifier(random_state=random_state, **hyperparams)
153
+ elif model_type == 'mlp':
154
+ clf = MLPClassifier(random_state=random_state, **hyperparams)
155
+ else:
156
+ raise ValueError(f"Unknown model_type: {model_type}")
157
+
158
+ # preprocessor
159
+ preprocessor = ColumnTransformer(
160
+ transformers=[
161
+ ('num', Pipeline([('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())]), ['duration_min','Load(MW)_num','Capacity(kVA)_num','AffectedCustomer_num','hour','weekday','device_freq']),
162
+ ('cat', Pipeline([('imputer', SimpleImputer(strategy='most_frequent')), ('encoder', OneHotEncoder(handle_unknown='ignore'))]), ['OpDeviceType','Owner','Weather','EventType'])
163
+ ]
164
+ )
165
+
166
+ pipeline = Pipeline([('preprocessor', preprocessor), ('classifier', clf)])
167
+
168
+ pipeline.fit(X_train, y_train)
169
+
170
+ y_pred = pipeline.predict(X_test)
171
+ y_test_inv = le.inverse_transform(y_test)
172
+ y_pred_inv = le.inverse_transform(y_pred)
173
+ report = classification_report(y_test_inv, y_pred_inv, zero_division=0)
174
+
175
+ # save model
176
+ model_file = Path('outputs') / f'classifier_{model_type}_{label_col}.joblib'
177
+
178
+ # predictions on train set for download
179
+ y_pred_train = pipeline.predict(X)
180
+ pred_df = df.copy()
181
+ pred_df[f'Predicted_{label_col}'] = le.inverse_transform(y_pred_train)
182
+ preds_file = Path('outputs') / f'predictions_{model_type}_{label_col}.csv'
183
+ pred_df.to_csv(preds_file, index=False)
184
+
185
+ return {
186
+ 'report': report,
187
+ 'model_file': str(model_file),
188
+ 'predictions_file': str(preds_file)
189
+ }
190
+ df = parse_and_features(df)
191
+
192
+ is_multi = len(label_cols) > 1
193
+
194
+ # optionally weak-label rows missing label (only for single target)
195
+ if not is_multi and label_cols[0] not in df.columns:
196
+ df[label_cols[0]] = None
197
+
198
+ if not is_multi and df[label_cols[0]].isna().sum() > 0 and HF_TOKEN:
199
+ # attempt weak labeling for missing entries using Detail or FaultDetail
200
+ for idx, row in df[df[label_cols[0]].isna()].iterrows():
201
+ text = None
202
+ for f in ['Detail','FaultDetail','SiteDetail']:
203
+ if f in df.columns and pd.notna(row.get(f)):
204
+ text = row.get(f)
205
+ break
206
+ if text:
207
+ try:
208
+ lbl = weak_label_with_hf(text)
209
+ if lbl:
210
+ df.at[idx, label_cols[0]] = lbl
211
+ except Exception:
212
+ pass
213
+
214
+ # filter rare classes and drop na (for each label_col)
215
+ for col in label_cols:
216
+ if col not in df.columns:
217
+ df[col] = None
218
+ if df[col].notna().any():
219
+ vc = df[col].value_counts()
220
+ rare = vc[vc < min_count_to_keep].index
221
+ if len(rare) > 0:
222
+ df[col] = df[col].apply(lambda x: 'Other' if x in rare else x)
223
+ df = df.dropna(subset=[col])
224
+
225
+ # features
226
+ feature_cols = ['duration_min','Load(MW)_num','Capacity(kVA)_num','AffectedCustomer_num','hour','weekday','device_freq','OpDeviceType','Owner','Weather','EventType']
227
+ X = df[feature_cols]
228
+
229
+ # target
230
+ if is_multi:
231
+ y = df[label_cols]
232
+ # encode each target
233
+ les = [LabelEncoder() for _ in label_cols]
234
+ y_encoded = np.column_stack([le.fit_transform(y[col]) for le, col in zip(les, label_cols)])
235
+ else:
236
+ y = df[label_cols[0]].astype(str)
237
+ le = LabelEncoder()
238
+ y_encoded = le.fit_transform(y)
239
+ les = [le]
240
+
241
+ # split
242
+ X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=test_size, random_state=random_state, stratify=y_encoded if not is_multi else None)
243
+
244
+ # model
245
+ if model_type == 'rf':
246
+ clf = RandomForestClassifier(random_state=random_state)
247
+ elif model_type == 'gb':
248
+ clf = GradientBoostingClassifier(random_state=random_state)
249
+ elif model_type == 'mlp':
250
+ clf = MLPClassifier(random_state=random_state, max_iter=500)
251
+ else:
252
+ raise ValueError(f"Unknown model_type: {model_type}")
253
+
254
+ # preprocessor
255
+ preprocessor = ColumnTransformer(
256
+ transformers=[
257
+ ('num', Pipeline([('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())]), ['duration_min','Load(MW)_num','Capacity(kVA)_num','AffectedCustomer_num','hour','weekday','device_freq']),
258
+ ('cat', Pipeline([('imputer', SimpleImputer(strategy='most_frequent')), ('encoder', OneHotEncoder(handle_unknown='ignore'))]), ['OpDeviceType','Owner','Weather','EventType'])
259
+ ]
260
+ )
261
+
262
+ pipeline = Pipeline([('preprocessor', preprocessor), ('classifier', clf)])
263
+
264
+ if do_gridsearch:
265
+ param_grid = {
266
+ 'classifier__n_estimators': [50, 100, 200] if hasattr(clf, 'n_estimators') else [1],
267
+ 'classifier__max_depth': [None, 10, 20] if hasattr(clf, 'max_depth') else [1],
268
+ }
269
+ cv = 3 if not is_multi else KFold(n_splits=3, shuffle=True, random_state=random_state)
270
+ scoring = 'accuracy' if not is_multi else None
271
+ grid = GridSearchCV(pipeline, param_grid, cv=cv, scoring=scoring, n_jobs=-1)
272
+ grid.fit(X_train, y_train)
273
+ pipeline = grid.best_estimator_
274
+
275
+ pipeline.fit(X_train, y_train)
276
+
277
+ # predict
278
+ y_pred = pipeline.predict(X_test)
279
+
280
+ # report
281
+ if is_multi:
282
+ reports = []
283
+ for i, col in enumerate(label_cols):
284
+ y_test_i = y_test[:, i]
285
+ y_pred_i = y_pred[:, i]
286
+ y_test_inv = les[i].inverse_transform(y_test_i)
287
+ y_pred_inv = les[i].inverse_transform(y_pred_i.astype(int))
288
+ rep = classification_report(y_test_inv, y_pred_inv, zero_division=0)
289
+ reports.append(f"Report for {col}:\n{rep}")
290
+ report = '\n\n'.join(reports)
291
+ else:
292
+ y_test_inv = les[0].inverse_transform(y_test)
293
+ y_pred_inv = les[0].inverse_transform(y_pred)
294
+ report = classification_report(y_test_inv, y_pred_inv, zero_division=0)
295
+
296
+ # save model
297
+ model_file = Path('outputs') / f'classifier_{model_type}_{"_".join(label_cols)}.joblib'
298
+ model_file.parent.mkdir(exist_ok=True)
299
+ joblib.dump({'pipeline': pipeline, 'label_encoders': les}, model_file)
300
+
301
+ # predictions on train set for download
302
+ y_pred_train = pipeline.predict(X)
303
+ if is_multi:
304
+ pred_df = df.copy()
305
+ for i, col in enumerate(label_cols):
306
+ pred_df[f'Predicted_{col}'] = les[i].inverse_transform(y_pred_train[:, i].astype(int))
307
+ else:
308
+ pred_df = df.copy()
309
+ pred_df[f'Predicted_{label_cols[0]}'] = les[0].inverse_transform(y_pred_train)
310
+
311
+ preds_file = Path('outputs') / f'predictions_{model_type}_{"_".join(label_cols)}.csv'
312
+ pred_df.to_csv(preds_file, index=False)
313
+
314
+ return {
315
+ 'report': report,
316
+ 'model_file': str(model_file),
317
+ 'predictions_file': str(preds_file)
318
+ }
319
+ df = parse_and_features(df)
320
+
321
+ # optionally weak-label rows missing label
322
+ if label_col not in df.columns:
323
+ df[label_col] = None
324
+
325
+ if df[label_col].isna().sum() > 0 and HF_TOKEN:
326
+ # attempt weak labeling for missing entries using Detail or FaultDetail
327
+ for idx, row in df[df[label_col].isna()].iterrows():
328
+ text = None
329
+ for f in ['Detail','FaultDetail','SiteDetail']:
330
+ if f in df.columns and pd.notna(row.get(f)):
331
+ text = row.get(f)
332
+ break
333
+ if text:
334
+ lbl = weak_label_with_hf(text)
335
+ if lbl:
336
+ df.at[idx, label_col] = lbl
337
+
338
+ # combine rare classes into 'Other' if needed
339
+ if df[label_col].notna().any():
340
+ vc = df[label_col].value_counts()
341
+ rare = vc[vc < min_count_to_keep].index.tolist()
342
+ if rare:
343
+ df[label_col] = df[label_col].apply(lambda x: 'Other' if x in rare else x)
344
+
345
+ df = df.dropna(subset=[label_col])
346
+ if df.empty:
347
+ raise ValueError('No labeled data available for training')
348
+
349
+ # define features
350
+ feature_cols = ['duration_min','Load(MW)_num','Capacity(kVA)_num','AffectedCustomer_num','hour','weekday','device_freq','OpDeviceType','Owner','Weather','EventType']
351
+ X = df[feature_cols]
352
+ y = df[label_col].astype(str)
353
+
354
+ # encode labels to integers
355
+ le = LabelEncoder()
356
+ y_encoded = le.fit_transform(y)
357
+
358
+ # simple train/test split
359
+ X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=test_size, random_state=random_state, stratify=y_encoded)
360
+
361
+ # preprocessing
362
+ numeric_feats = ['duration_min','Load(MW)_num','Capacity(kVA)_num','AffectedCustomer_num','hour','weekday','device_freq']
363
+ cat_feats = ['OpDeviceType','Owner','Weather','EventType']
364
+
365
+ numeric_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())])
366
+ # sklearn versions differ on parameter name for sparse output
367
+ try:
368
+ cat_transformer = OneHotEncoder(handle_unknown='ignore', sparse_output=False)
369
+ except TypeError:
370
+ cat_transformer = OneHotEncoder(handle_unknown='ignore', sparse=False)
371
+
372
+ preprocessor = ColumnTransformer(transformers=[
373
+ ('num', numeric_transformer, numeric_feats),
374
+ ('cat', cat_transformer, cat_feats)
375
+ ], remainder='drop')
376
+
377
+ # choose classifier
378
+ model_type = (model_type or 'rf').lower()
379
+ if model_type == 'rf':
380
+ clf_est = RandomForestClassifier(class_weight='balanced', random_state=random_state)
381
+ clf_name = 'rf'
382
+ elif model_type == 'gb':
383
+ clf_est = GradientBoostingClassifier(random_state=random_state)
384
+ clf_name = 'gb'
385
+ elif model_type == 'mlp':
386
+ clf_est = MLPClassifier(hidden_layer_sizes=(100,), max_iter=300, random_state=random_state)
387
+ clf_name = 'mlp'
388
+ else:
389
+ raise ValueError(f'Unknown model_type: {model_type}')
390
+
391
+ clf = Pipeline(steps=[('pre', preprocessor), ('clf', clf_est)])
392
+
393
+ if do_gridsearch:
394
+ if clf_name == 'rf':
395
+ param_grid = {
396
+ 'clf__n_estimators': [100,200],
397
+ 'clf__max_depth': [None, 10, 20],
398
+ 'clf__min_samples_split': [2,5]
399
+ }
400
+ elif clf_name == 'lgb':
401
+ param_grid = {
402
+ 'clf__n_estimators': [100,200],
403
+ 'clf__num_leaves': [31,63]
404
+ }
405
+ elif clf_name == 'gb':
406
+ param_grid = {
407
+ 'clf__n_estimators': [100,200],
408
+ 'clf__max_depth': [3,6]
409
+ }
410
+ elif clf_name == 'mlp':
411
+ param_grid = {
412
+ 'clf__hidden_layer_sizes': [(50,),(100,)],
413
+ 'clf__alpha': [0.0001, 0.001]
414
+ }
415
+ else:
416
+ param_grid = {}
417
+ cv = StratifiedKFold(n_splits=3, shuffle=True, random_state=random_state)
418
+ gs = GridSearchCV(clf, param_grid, cv=cv, scoring='f1_weighted', n_jobs=1)
419
+ gs.fit(X_train, y_train)
420
+ best = gs.best_estimator_
421
+ best_params = gs.best_params_
422
+ model_to_save = best
423
+ else:
424
+ clf.fit(X_train, y_train)
425
+ best_params = None
426
+ model_to_save = clf
427
+
428
+ y_pred = model_to_save.predict(X_test)
429
+ unique_labels = np.unique(np.concatenate([y_test, y_pred]))
430
+ target_names = [le.classes_[i] for i in unique_labels]
431
+ report = classification_report(y_test, y_pred, target_names=target_names, zero_division=0)
432
+ cm = confusion_matrix(y_test, y_pred)
433
+
434
+ # save model pipeline
435
+ out_dir = Path.cwd() / 'outputs'
436
+ out_dir.mkdir(exist_ok=True)
437
+ model_file = out_dir / f'{clf_name}_cause_pipeline.joblib'
438
+ joblib.dump({'pipeline': model_to_save, 'label_encoder': le}, model_file)
439
+
440
+ # save predictions
441
+ pred_df = X_test.copy()
442
+ pred_df['y_true'] = le.inverse_transform(y_test)
443
+ pred_df['y_pred'] = le.inverse_transform(y_pred)
444
+ pred_df.to_csv(out_dir / 'predictions_cause.csv', index=False, encoding='utf-8-sig')
445
+
446
+ return {'model_file': str(model_file), 'report': report, 'confusion_matrix': cm, 'predictions_file': str(out_dir / 'predictions_cause.csv'), 'best_params': best_params}
scripts/data_cleansing.py ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+
4
+
5
+ def cleanse_data(df, remove_duplicates, missing_strategy):
6
+ """
7
+ Perform data cleansing on the dataframe.
8
+
9
+ Args:
10
+ df: pandas DataFrame
11
+ remove_duplicates: bool, whether to remove duplicate rows
12
+ missing_strategy: str, 'drop', 'impute_mean', 'impute_median', 'impute_mode'
13
+
14
+ Returns:
15
+ df_clean: cleaned DataFrame
16
+ original_shape: tuple (rows, cols) before cleansing
17
+ cleaned_shape: tuple (rows, cols) after cleansing
18
+ """
19
+ df = df.copy()
20
+ original_shape = df.shape
21
+
22
+ # Remove duplicates
23
+ if remove_duplicates:
24
+ df = df.drop_duplicates()
25
+
26
+ # Handle missing values
27
+ if missing_strategy == 'drop':
28
+ df = df.dropna()
29
+ elif missing_strategy in ['impute_mean', 'impute_median']:
30
+ for col in df.select_dtypes(include=[np.number]).columns:
31
+ if missing_strategy == 'impute_mean':
32
+ df[col] = df[col].fillna(df[col].mean())
33
+ elif missing_strategy == 'impute_median':
34
+ df[col] = df[col].fillna(df[col].median())
35
+ elif missing_strategy == 'impute_mode':
36
+ for col in df.columns:
37
+ mode_val = df[col].mode()
38
+ if not mode_val.empty:
39
+ df[col] = df[col].fillna(mode_val[0])
40
+
41
+ cleaned_shape = df.shape
42
+ return df, original_shape, cleaned_shape
scripts/forecast.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+ from pathlib import Path
4
+ import warnings
5
+
6
+ try:
7
+ from prophet import Prophet
8
+ PROPHET_AVAILABLE = True
9
+ except Exception:
10
+ PROPHET_AVAILABLE = False
11
+
12
+
13
+ def prepare_timeseries(df: pd.DataFrame, date_col: str = 'OutageDateTime', metric: str = 'count') -> pd.DataFrame:
14
+ # date_col is in format DD-MM-YYYY HH:MM:SS
15
+ df = df.copy()
16
+ df['dt'] = pd.to_datetime(df[date_col], format='%d-%m-%Y %H:%M:%S', errors='coerce')
17
+ df = df.dropna(subset=['dt'])
18
+ df['day'] = df['dt'].dt.floor('D')
19
+ if metric == 'count':
20
+ ts = df.groupby('day').size().rename('y').reset_index()
21
+ elif metric == 'downtime_minutes':
22
+ # need LastRestoDateTime
23
+ df['last_dt'] = pd.to_datetime(df.get('LastRestoDateTime'), format='%d-%m-%Y %H:%M:%S', errors='coerce')
24
+ df['duration_min'] = (df['last_dt'] - df['dt']).dt.total_seconds() / 60.0
25
+ ts = df.groupby('day')['duration_min'].sum().rename('y').reset_index()
26
+ else:
27
+ raise ValueError('Unsupported metric')
28
+ ts = ts.rename(columns={'day':'ds'})
29
+ return ts
30
+
31
+
32
+ def forecast_prophet(ts: pd.DataFrame, periods: int = 7, freq: str = 'D') -> pd.DataFrame:
33
+ if not PROPHET_AVAILABLE:
34
+ raise RuntimeError('Prophet not available')
35
+ m = Prophet()
36
+ m.fit(ts)
37
+ future = m.make_future_dataframe(periods=periods, freq=freq)
38
+ fcst = m.predict(future)
39
+ return fcst[['ds','yhat','yhat_lower','yhat_upper']]
40
+
41
+
42
+ def forecast_naive(ts: pd.DataFrame, periods: int = 7) -> pd.DataFrame:
43
+ # naive: use rolling mean of last 7 days as forecast
44
+ last_mean = ts['y'].tail(7).mean() if len(ts) >= 7 else ts['y'].mean()
45
+ last_date = ts['ds'].max()
46
+ future_dates = pd.date_range(start=last_date + pd.Timedelta(days=1), periods=periods, freq='D')
47
+ return pd.DataFrame({'ds': future_dates, 'yhat': [last_mean]*periods, 'yhat_lower':[np.nan]*periods, 'yhat_upper':[np.nan]*periods})
48
+
49
+
50
+ def run_forecast(df: pd.DataFrame, metric: str = 'count', periods: int = 7):
51
+ ts = prepare_timeseries(df, metric=metric)
52
+ if PROPHET_AVAILABLE and len(ts) >= 14:
53
+ try:
54
+ fcst = forecast_prophet(ts, periods=periods)
55
+ return ts, fcst
56
+ except Exception:
57
+ warnings.warn('Prophet failed, falling back to naive')
58
+ fcst = forecast_naive(ts, periods=periods)
59
+ return ts, fcst
scripts/label_suggestion.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ from pathlib import Path
3
+
4
+
5
+ def suggest_labels(df: pd.DataFrame, top_k: int = 1):
6
+ """
7
+ Given an event dataframe, suggest CauseType for rows with KnowUnknowCause == 'ไม่พบสาเหตุ' or missing.
8
+ Returns a DataFrame with suggestions and scores.
9
+ """
10
+ df = df.copy()
11
+ # ensure columns exist
12
+ needed = ['KnowUnknowCause','CauseType','SubCauseType','OpDeviceType','FaultDeviceType','FaultDeviceCondition','Weather','Capacity(kVA)','Load(MW)','OpDeviceSysType','OpDevicePhase']
13
+ for c in needed:
14
+ if c not in df.columns:
15
+ df[c] = None
16
+
17
+ known = df[df['KnowUnknowCause'].notna() & (df['KnowUnknowCause'].str.strip() != 'ไม่พบสาเหตุ')]
18
+ unknown = df[df['KnowUnknowCause'].notna() & (df['KnowUnknowCause'].str.strip() == 'ไม่พบสาเหตุ')]
19
+ unknown = pd.concat([unknown, df[df['KnowUnknowCause'].isna()]], ignore_index=False)
20
+
21
+ if known.empty or unknown.empty:
22
+ return pd.DataFrame([])
23
+
24
+ for num in ['Capacity(kVA)','Load(MW)']:
25
+ known[num] = pd.to_numeric(known.get(num), errors='coerce')
26
+ unknown[num] = pd.to_numeric(unknown.get(num), errors='coerce')
27
+
28
+ cat_features = ['OpDeviceType','FaultDeviceType','FaultDeviceCondition','Weather','OpDeviceSysType','OpDevicePhase']
29
+ num_features = ['Capacity(kVA)','Load(MW)']
30
+
31
+ cause_groups = {cause: g for cause, g in known.groupby('CauseType')}
32
+ # compute most common SubCauseType per cause group
33
+ cause_submode = {}
34
+ for cause, g in cause_groups.items():
35
+ try:
36
+ # pick first mode that's non-null
37
+ modes = g['SubCauseType'].dropna()
38
+ if not modes.empty:
39
+ cause_submode[cause] = modes.mode().iloc[0]
40
+ else:
41
+ cause_submode[cause] = None
42
+ except Exception:
43
+ cause_submode[cause] = None
44
+
45
+ suggestions = []
46
+ for idx, row in unknown.iterrows():
47
+ scores = {}
48
+ for cause, g in cause_groups.items():
49
+ cat_score = 0.0
50
+ matches = 0
51
+ for f in cat_features:
52
+ val = row.get(f)
53
+ if pd.isna(val) or val is None:
54
+ continue
55
+ same = (g[f] == val).sum()
56
+ frac = same / max(1, len(g))
57
+ cat_score += frac
58
+ matches += 1
59
+ cat_score = cat_score / matches if matches>0 else 0.0
60
+
61
+ num_score = 0.0
62
+ ncount = 0
63
+ for nf in num_features:
64
+ rv = row.get(nf)
65
+ if pd.isna(rv) or rv is None:
66
+ continue
67
+ median = g[nf].median()
68
+ if pd.isna(median):
69
+ continue
70
+ scale = abs(median) if abs(median) > 0 else 1.0
71
+ num_score += 1.0 / (1.0 + abs(rv - median) / scale)
72
+ ncount += 1
73
+ num_score = num_score / ncount if ncount>0 else 0.0
74
+
75
+ combined = 0.7 * cat_score + 0.3 * num_score
76
+ scores[cause] = combined
77
+
78
+ sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
79
+ top = sorted_scores[:int(top_k)]
80
+ suggestion_text = '; '.join([f"{c}: {s:.3f}" for c,s in top])
81
+ suggested_cause = top[0][0] if top else None
82
+ suggested_subcause = cause_submode.get(suggested_cause) if suggested_cause is not None else None
83
+ suggestions.append({
84
+ 'Number': row.get('Number'),
85
+ 'EventNumber': row.get('EventNumber'),
86
+ 'OutageDateTime': row.get('OutageDateTime'),
87
+ 'KnowUnknowCause': row.get('KnowUnknowCause'),
88
+ 'Orig_CauseType': row.get('CauseType'),
89
+ 'Orig_SubCauseType': row.get('SubCauseType'),
90
+ 'SuggestedCause': suggested_cause,
91
+ 'SuggestedSubCauseType': suggested_subcause,
92
+ 'Scores': suggestion_text
93
+ })
94
+
95
+ return pd.DataFrame(suggestions)
96
+
97
+
98
+ def suggest_labels_to_file(df: pd.DataFrame, out_path: str = None, top_k: int = 1):
99
+ out_df = suggest_labels(df, top_k=top_k)
100
+ if out_path:
101
+ p = Path(out_path)
102
+ p.parent.mkdir(parents=True, exist_ok=True)
103
+ out_df.to_csv(p, index=False, encoding='utf-8-sig')
104
+ return out_df
scripts/summarize.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pandas as pd
3
+ from typing import List, Dict
4
+ from pathlib import Path
5
+
6
+ # Prefer HF router via OpenAI-compatible client. Use env `HF_TOKEN`.
7
+ # HF_TOKEN loaded lazily to allow dotenv loading after import
8
+ def get_hf_token():
9
+ return os.environ.get('HF_TOKEN')
10
+
11
+ def rule_summary(row: pd.Series) -> str:
12
+ parts = []
13
+ if pd.notna(row.get('EventType')):
14
+ parts.append(f"ประเภท: {row['EventType']}")
15
+ if pd.notna(row.get('CauseType')):
16
+ parts.append(f"สาเหตุ: {row['CauseType']}")
17
+ if pd.notna(row.get('OutageDateTime')):
18
+ parts.append(f"เวลาเริ่ม: {row['OutageDateTime']}")
19
+ if pd.notna(row.get('AffectedCustomer')):
20
+ parts.append(f"ลูกค้าได้รับผลกระทบ: {row['AffectedCustomer']}")
21
+ if pd.notna(row.get('Load(MW)')):
22
+ parts.append(f"โหลด: {row['Load(MW)']}")
23
+ return ' | '.join(parts) if parts else ''
24
+
25
+
26
+ def openai_summary(text: str, verbosity: str = 'brief', model: str = 'meta-llama/Llama-3.1-8B-Instruct:novita') -> str:
27
+ HF_TOKEN = get_hf_token()
28
+ if not HF_TOKEN:
29
+ return None
30
+ try:
31
+ # Import here to avoid requiring OpenAI client unless HF_TOKEN set
32
+ from openai import OpenAI
33
+ client = OpenAI(base_url="https://router.huggingface.co/v1", api_key=HF_TOKEN)
34
+ if verbosity == 'analyze':
35
+ instruction = 'วิเคราะห์สาเหตุไฟฟ้าจากข้อมูลนี้ สรุปไม่เกิน 3-4 บรรทัด (ไทย) ระบุสาเหตุทางเทคนิค ผลกระทบต่อลูกค้าและระบบ และช่วงเวลา:'
36
+ elif verbosity == 'recommend':
37
+ instruction = 'วิเคราะห์สาเหตุไฟฟ้าจากข้อมูลนี้ พร้อมแนะนำการแก้ไข สรุปไม่เกิน 3-4 บรรทัด (ไทย) ระบุสาเหตุทางเทคนิค ผลกระทบต่อลูกค้าและระบบ ช่วงเวลาและข้อเสนอแนะในการป้องกัน:'
38
+ prompt = f"{instruction}\n\n{text}\n\nสรุป:"
39
+ completion = client.chat.completions.create(
40
+ model=model,
41
+ messages=[{"role": "user", "content": prompt}],
42
+ max_tokens=1000,
43
+ )
44
+ # Extract text from response
45
+ choice = completion.choices[0]
46
+ msg = choice.message
47
+ content = msg.content
48
+ return content.strip() if content else None
49
+ except Exception:
50
+ return None
51
+
52
+
53
+ def summarize_events(df: pd.DataFrame, use_hf: bool = False, verbosity: str = 'brief', model: str = 'meta-llama/Llama-3.1-8B-Instruct:novita') -> List[Dict]:
54
+ rows = []
55
+ for _, r in df.iterrows():
56
+ text_fields = []
57
+ for col in df.columns:
58
+ if pd.notna(r.get(col)) and str(r.get(col)).strip():
59
+ text_fields.append(f"{col}: {r[col]}")
60
+ long_text = '\n'.join(text_fields)
61
+ print(f"Debug: EventNumber={r.get('EventNumber','')}, long_text='{long_text}'")
62
+ summary = None
63
+ if use_hf and get_hf_token() and long_text:
64
+ # prefer HF router
65
+ summary = openai_summary(long_text, verbosity=verbosity, model=model)
66
+ if not summary:
67
+ summary = rule_summary(r)
68
+ rows.append({
69
+ 'EventNumber': r.get('EventNumber',''),
70
+ 'OutageDateTime': r.get('OutageDateTime',''),
71
+ 'Summary': summary,
72
+ })
73
+ return rows