✅ 오늘 한 것
시계열, Streamlit 라이브세션, Tableau 개인 과제
✏️ 오늘 배운 점
Tableau

Ctrl을 통하여 원하는 목록을 하나의 그룹으로 묶을 수 있다.

위와 같은 방식으로도 그룹화를 진행할 수 있다.
행 수준 계산 vs 집계 수준 계산
| 구분 | 행 수준 계산 | 집계 수준 계산 |
| 계산 시점 | 집계 전 | 집계 후 |
| 기준 데이터 | 개별 행(Row) | 집계된 결과 |
| 용도 | 행별 파생 변수 생성 | 비율, 평균 비교, KPI 계산 |
| 예시 | [매출] * 0.1 | SUM([매출]) / SUM([전체매출]) |
행 수준 계산: 각 행마다 수익/매출을 계산하고 수익률을 합계한 상태로 값 표시

집계 수준 계산: 매출의 합과 수익의 합을 구하고, 수익률을 계산하여 집계된 값 표

시계열
잔차 분석: 회귀 분석에서 관측값과 회귀 모형의 예측값 사이의 차이인 '잔차(residual)'를 분석하여 회귀 모형의 가정이 잘 만족되는지 확인하는 절차
잔차가 백색소음인지 확인하는 방법
- ACF (자기상관함수)
- 잔차의 자기상관이 없는지 확인하기 위한 도구 ACF 그래프에서 모든 시차에서 유의미한 상관관계가 없을 때, 잔차가 백색소음임을 의미
- Ljung-Box Q 통계량:
Ljung-Box 검정은 잔차들이 서로 상관되어 있는지 여부를 테스트- H0: 잔차들이 상관되지 않는다
- H1: 잔차들이 상관이 있다.
from statsmodels.stats.diagnostic import acorr_ljungbox
# Ljung-Box test for white noise
lb_test = acorr_ljungbox(model_fit.resid, lags=[10], return_df=True)
print(lb_test)
모델 평가:
1. AIC: 모델의 복잡성(k)과 적합도(L)와 사이의 균형을 중시하며, 적합도가 더 높은 모델을 선호
2. BIC: 모델의 복잡성을 더 많이 고려하여 단순한 모델을 선호하며, 샘플 수가 클수록 더 엄격한 페널티를 부여
AIC와 BIC는 가장 낮은 값을 가진 모델을 선택하는 것이 원칙
Auto-ARIMA: ARIMA와 SARIMA 모델에서 사용되는 최적 차수(p, d, q, P, D, Q, s)를 자동으로 탐색해주는 도구
Auto-ARIMA는 pmdarima 패키지에서 제공하는 강력한 자동화 도구로, 최소 AIC(아카이케 정보 기준) 또는 BIC(베이즈 정보 기준) 값을 찾는 방식으로 최적 차수를 결정
- Auto-ARIMA의 주요 기능
- p, d, q (비계절성 차수) 및 P, D, Q, s (계절성 차수)를 자동으로 선택
- AIC/BIC 기준으로 최적 모델 탐색
- 비계절적과 계절적 데이터를 모두 지원
- 수작업으로 차수 선택하는 번거로움을 줄여 시간 절약!
from pmdarima import auto_arima
# Auto-ARIMA 모형 적합
model = auto_arima(data, seasonal=True, m=12) #월간 데이터(계절 주기)를 고려.
model.fit(data)
model.summary()
Streamlit
columns: 한 페이지 안에서 여러 개의 수직 열(Column)을 만들어 레이아웃을 구성
import streamlit as st
st.title("컬럼(Column) 예시")
# 페이지를 세 개의 세로 열로 나눕니다.
col1, col2, col3 = st.columns(3)
with col1:
st.header("A cat")
st.image("https://static.streamlit.io/examples/cat.jpg")
with col2:
st.header("A dog")
st.image("https://static.streamlit.io/examples/dog.jpg")
with col3:
st.header("An owl")
st.image("https://static.streamlit.io/examples/owl.jpg")
Expander: 접을 수 있는 UI 컴포넌트를 제공하여, 사용자에게는 핵심 내용만 보이게 하고 자세한 내용은 펼쳐볼 수 있도록 할 수 있습니다.
st.title("Expander 예시")
with st.expander("📺 요즘 OTT 플랫폼에서 뜨는 작품들"):
st.write("""
- **더 글로리**: 화제의 드라마, 역대급 복수극!
- **피지컬: 100**: 서바이벌 예능 열풍!
- **오징어 게임**: 전 세계를 휩쓴 한국형 데스게임!
""")
st.write("더 자세한 줄거리는 스포일러 방지를 위해 생략!")
with st.expander("⏰ 오늘의 소셜 미디어 소식"):
st.write("""
- 틱톡에서 난리 난 '#쿠쿠다스챌린지'
- 인스타그램 릴스, 짧은 영상 편집 팁 공유하기
- 재테크/절약 관련 '챌린지'도 인기 상승 중!
""")
Taps: 페이지 내에서 탭을 생성하여 콘텐츠를 구분
# 세 개의 탭을 생성합니다.
tab1, tab2, tab3 = st.tabs(["Cat", "Dog", "Owl"])
with tab1:
st.header("A cat")
st.image("https://static.streamlit.io/examples/cat.jpg", width=200)
with tab2:
st.header("A dog")
st.image("https://static.streamlit.io/examples/dog.jpg", width=200)
with tab3:
st.header("An owl")
st.image("https://static.streamlit.io/examples/owl.jpg", width=200)
Sidebar: 페이지의 사이드바를 생성
# 사이드바를 생성하고, 라디오 버튼을 추가합니다.
with st.sidebar:
add_radio = st.radio(
"Choose a shipping method",
("Standard (5-15 days)", "Express (2-5 days)")
)
Page: 한 페이지의 정보를 담는 객체
import streamlit as st
# home.py 파일을 페이지로 등록하고, 제목과 아이콘을 지정
st.Page(
page="home.py",
title="홈 화면",
icon="🏠",
default=True
)
navigation: 여러 st.Page를 리스트(목록)로 받아, 사이드바 메뉴(또는 상단 메뉴)를 자동으로 생성
import streamlit as st
# 1) 페이지 목록 만들기
pages = [
st.Page("home.py", title="홈", icon="🏠", default=True),
st.Page("production.py", title="생산 데이터", icon="🏭"),
st.Page("quality.py", title="품질 관리", icon="🔍"),
st.Page("maintenance.py", title="예지 보전", icon="🛠️"),
]
# 2) 사용자 선택
selected_page = st.navigation(pages)
# 3) 선택된 페이지 실행
selected_page.run()
session_state: 브라우저(사용자)마다 서로 다른 상태를 유지할 수 있게 해주는 ‘저장 공간’
import streamlit as st
st.title("버튼 클릭 횟수 (session_state 사용)")
# session_state에 count 키가 없으면 0으로 초기화
if "count" not in st.session_state:
st.session_state.count = 0
if st.button("버튼을 눌러보세요!"):
st.session_state.count += 1
st.write(f"버튼 클릭 횟수: {st.session_state.count}")
cache_data(or cache): 연산 결과(예: CSV 불러오기, 무거운 계산)를 저장해두었다가,같은 입력으로 다시 함수를 부르면 이미 계산해 둔 결과를 바로 가져오는 기능
import streamlit as st
import time
st.title("캐싱 사용 예제")
@st.cache_data
def expensive_computation(n):
st.write(f"실제 계산 수행... (n={n})")
time.sleep(3) # 3초 대기 (연산 비용 시뮬레이션)
return sum(i*i for i in range(n))
options = [1000, 3000, 5000]
n = st.selectbox("숫자를 선택하세요", options)
if st.button("Compute"):
start = time.time()
result = expensive_computation(n)
elapsed = time.time() - start
st.write(f"결과: {result}")
st.write(f"소요 시간: {elapsed:.2f} 초")
st.info("같은 n을 다시 선택해 Compute를 누르면, 이미 계산한 결과를 캐시에서 즉시 반환합니다!")
📌추가로 해야 할 점
Tableau 개인 과제
'품질관리(QAQC) 데이터 부트캠프(본캠프)' 카테고리의 다른 글
| 본캠프_11주차(목)_TIL(시계열, 심화 프로젝트[바이오]) (0) | 2025.11.27 |
|---|---|
| 본캠프_11주차(수)_TIL(Tableau, 시계열) (0) | 2025.11.26 |
| 본캠프_11주차(월)_TIL(Streamlit) (0) | 2025.11.24 |
| 본캠프_10주차(금)_TIL(Streamlit, Tableau) (0) | 2025.11.21 |
| 본캠프_10주차(목)_TIL(ADF, ACF, ARIMA 정리) (0) | 2025.11.20 |