TIL(Today I Learned)

[2025/02/26]내일배움캠프 QA/QC 1기 - 47일차

essay2892 2025. 2. 26. 20:30

코드카타(https://essay2892.tistory.com/127)

 

프로젝트 진행

 

Streamlit 라이브세션

더보기
import streamlit as st

st.set_page_config(
    page_title="QA/AC streamlit App",
    page_icon="🧊",
    layout="wide")

st.title("컬럼(Column) 예시")

# 페이지를 세 개의 세로 열로 나눕니다.
col1, col2, col3 = st.columns(3)

with col1:
   st.header("A cat")

with col2:
   st.header("A dog")

with col3:
   st.header("An owl")



# 열의 너비 비율을 조정합니다.
col1, col2, col3 = st.columns([1, 2, 1])

with col2:

st.title("Expander 예시")

with st.expander("📺 요즘 OTT 플랫폼에서 뜨는 작품들"):
    st.write("""
    - **더 글로리**: 화제의 드라마, 역대급 복수극!
    - **피지컬: 100**: 서바이벌 예능 열풍!
    - **오징어 게임**: 전 세계를 휩쓴 한국형 데스게임!
    """)
    st.write("더 자세한 줄거리는 스포일러 방지를 위해 생략!")

with st.expander("⏰ 오늘의 소셜 미디어 소식"):
    st.write("""
    - 틱톡에서 난리 난 '#쿠쿠다스챌린지'
    - 인스타그램 릴스, 짧은 영상 편집 팁 공유하기
    - 재테크/절약 관련 '챌린지'도 인기 상승 중!
    """)
# 세 개의 탭을 생성합니다.
tab1, tab2, tab3 = st.tabs(["Cat", "Dog", "Owl"])

with tab1:
   st.header("A cat")

with tab2:
   st.header("A dog")

with tab3:
   st.header("An owl")

# 사이드바를 생성하고, 라디오 버튼을 추가합니다.
with st.sidebar:
    add_radio = st.radio(
        "Choose a shipping method",
        ("Standard (5-15 days)", "Express (2-5 days)")
    )
 

 

import streamlit as st

# st.title("버튼 클릭 횟수 (session_state 미사용)")

# count = 0  # 항상 0으로 시작

# if st.button("버튼을 눌러보세요!"):
#     count += 1

# st.write(f"버튼 클릭 횟수: {count}")

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}")
 

 

import streamlit as st
import pandas as pd
import time

# st.title("캐싱 미사용 예제")

# def expensive_computation(n):
#     # 실제로는 더 복잡한 연산이라고 가정
#     time.sleep(3)  # 3초 대기 (연산 비용 시뮬레이션)
#     return sum(i*i for i in range(n))

# options = [1000, 3000, 5000]  # 예시로 3개만
# 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.write("같은 n 값이라도, Compute 누를 때마다 3초씩 기다립니다.")

# 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를 누르면, 이미 계산한 결과를 캐시에서 즉시 반환합니다!")

st.title("캐싱 사용 예제")

@st.cache_data
def load_data(file_path):
    time.sleep(3)  # 로딩 시간 시뮬레이션
    return pd.DataFrame({"data": [1, 2, 3]})  # 간단한 예시

if st.button("데이터 불러오기"):
    start = time.time()
    df = load_data("big_data.csv")  # 첫 호출 시 3초 걸림
    st.write(df.head())
    st.write(f"로딩 시간: {time.time() - start:.2f}초")
 
더보기

entrypoint.py

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. 선택된 페이지를 실행(run)합니다.
selected_page.run()
 

home.py

import streamlit as st

st.title("홈 화면")
st.write("제조업 데이터 분석 앱에 오신 것을 환영합니다!")
st.write(
    """
    이 곳에서는 생산, 품질, 유지보수 등의 다양한 데이터 분석을
    손쉽게 해볼 수 있습니다.
"""
)

maintenance.py

import streamlit as st


st.title("예지 보전 (Predictive Maintenance)")
st.write(
    """
    설비 센서(진동, 온도, 압력 등) 데이터를 토대로
    고장 징후를 사전에 파악하는 모델 예시를 구현할 수 있습니다.
"""
)

st.subheader("예시: 간단 설명")
st.write(
    """
    - 일정 주기마다 장비 상태 데이터를 수집
    - 특정 임계값(Threshold)을 초과하는 경우, 유지보수 알림
    - 예지 보전 모델로 고장 발생 가능 시점 예측
"""
)

production.py

import streamlit as st
import pandas as pd


st.title("생산 데이터")
st.write("생산량, 가동시간, 공정별 데이터 분석을 해보세요.")

# 예시 데이터: 실제로는 CSV나 DB에서 불러올 수 있음
data = {
    "라인": ["A", "B", "C"],
    "생산량": [1000, 800, 1200],
    "가동시간": [22, 19, 24],
}
df = pd.DataFrame(data)

st.subheader("생산 데이터 테이블")
st.dataframe(df)

st.subheader("라인별 생산량 차트")
st.bar_chart(df.set_index("라인")["생산량"])

quality.py

import streamlit as st
import matplotlib.pyplot as plt
import random


st.title("품질 관리")
st.write("불량률, 불량 유형, 품질 지표 등을 확인합니다.")

# 간단히 불량률 히스토그램 예시 (평균 2%, 표준편차 1% 가정)
data = [random.gauss(0.02, 0.01) for _ in range(100)]

fig, ax = plt.subplots()
ax.hist(data, bins=20, color="orange")
ax.set_title("불량률 분포 (예시)")
ax.set_xlabel("불량률 (%)")
ax.set_ylabel("빈도")

st.pyplot(fig)