Today I learned
1. 대시보드 프로젝트 진행(~12.17)
streamlit 대시보드 작성 작업 진행
1) sidebar 필터
import streamlit as st
import pandas as pd
st.set_page_config(page_title="공정 모니터링 대시보드", layout="wide")
st.title("공정 시계열 기반 불량 모니터링")
# 1) 캐시된 데이터 로드
@st.cache_data
def load_data():
df = pd.read_csv("process_timeseries.csv")
df["timestamp"] = pd.to_datetime(df["timestamp"])
return df
df_raw = load_data()
# 2) Sidebar 필터
st.sidebar.header("필터")
df = df_raw.copy()
if "rec_num" in df.columns:
rec_options = sorted(df["rec_num"].unique())
rec_selected = st.sidebar.selectbox("공정(rec_num) 선택", rec_options)
df = df[df["rec_num"] == rec_selected]
seq_options = sorted(df["sequence_id"].unique())
seq_selected = st.sidebar.selectbox("시퀀스(sequence_id) 선택", seq_options)
df_seq = df[df["sequence_id"] == seq_selected]
2) 시계열 Feature Engineering
import numpy as np
def add_time_features(df: pd.DataFrame) -> pd.DataFrame:
df = df.sort_values(["sequence_id", "timestamp"]).copy()
# lag features
for col in ["sensor_1", "sensor_2", "sensor_3"]:
df[f"{col}_lag1"] = df.groupby("sequence_id")[col].shift(1)
# rolling mean / std (window=3)
for col in ["sensor_1", "sensor_2", "sensor_3"]:
df[f"{col}_ma"] = (
df.groupby("sequence_id")[col]
.rolling(window=3)
.mean()
.shift(1)
.reset_index(level=0, drop=True)
)
df[f"{col}_std"] = (
df.groupby("sequence_id")[col]
.rolling(window=3)
.std()
.shift(1)
.reset_index(level=0, drop=True)
)
# diff (△값)
for col in ["sensor_1", "sensor_2", "sensor_3"]:
df[f"Δ_{col}"] = df.groupby("sequence_id")[col].diff()
return df
df_fe = add_time_features(df)
df_seq_fe = df_fe[df_fe["sequence_id"] == seq_selected]'빅데이터 QAQC_3기 > 빅데이터 QAQC_3기 TIL' 카테고리의 다른 글
| TIL_251212 (0) | 2025.12.12 |
|---|---|
| TIL_251211 (0) | 2025.12.11 |
| TIL_251205 (0) | 2025.12.05 |
| TIL_251204 (0) | 2025.12.04 |
| TIL_251203 (0) | 2025.12.03 |