Study Note/Streamlit

    [Django x Streamlit] 의료 데이터 분석 플랫폼 구축하기: ORM부터 웹 대시보드까지

    데이터 분석가로서 로컬 파일(CSV) 관리의 한계를 넘어, 엔터프라이즈급 데이터베이스(PostgreSQL)를 장고(Django)로 제어하고, Streamlit으로 시각화하는 과정을 공부해봅니다. 프로젝트 구조 mysite/├── manage.py├── config/ # Django 설정 (settings.py 등)├── heart_app/ # Django 앱 (models.py 등)├── utils/ # 유틸리티│ ├── cache.py # DB 로딩 및 캐싱│ ├── common.py # 전처리 함수│ └── styles.css # CSS 스타일├── pages/ ..

    [Streamlit 대시보드] 숫자로 말하는 데이터: st.metric과 멀티페이지 앱(MPA) 설계

    대시보드의 핵심은 "중요한 정보를 3초 안에 파악하게 하는 것"입니다. 이를 위해 Streamlit은 st.metric이라는 강력한 도구를 제공하며, 앱이 복잡해질 것을 대비해 멀티페이지(MPA) 기능을 지원합니다. 오늘은 가상의 병원 데이터를 활용해, 병원장님이 매일 아침 확인하고 싶어 할 '병원 운영 현황 대시보드'를 만들어보겠습니다. 1. 대시보드의 꽃: st.metric (지표 표시)공식 문서에 따르면, st.metric은 큰 글씨로 핵심 지표(KPI)를 보여주고, 이전 대비 변화량(Delta)을 화살표와 함께 표시하는 함수입니다.주요 파라미터 3가지label: 지표의 이름 (예: "총 내원 환자 수")value: 현재 값 (예: "150명")delta: 변화량 (예: "+10", "-5%"). ..

    AI 모델, 직접 만들어서 웹으로 배포하기 (A to Z)

    지금까지는 남이 만든 모델을 가져온다고 가정했지만, 오늘은 직접 의료 데이터를 생성하고, AI를 학습시켜 파일(.pkl)로 저장한 뒤, 웹 서비스로 띄우는 전체 과정을 실습합니다.이 과정은 크게 주방(모델 학습)과 홀(웹 서비스)로 나뉩니다. 1부. 주방: 의료 데이터 생성 및 모델 저장 (train_model.py)먼저 주피터 노트북이나 파이썬 스크립트에서 실행할 코드입니다. 가상의 심장병 데이터를 만들고, RandomForest로 학습시킨 뒤, 그 '뇌'를 heart_model.pkl이라는 파일로 박제(Serialize)합니다.import pandas as pdimport numpy as npfrom sklearn.ensemble import RandomForestClassifierfrom sklea..

    "내 앱은 왜 자꾸 까먹을까?" : Session State와 Caching 완벽 해부

    Streamlit을 쓰다 보면 당황스러운 순간이 옵니다. 버튼을 눌렀는데, 방금 입력한 환자 정보가 사라지거나 변수가 0으로 초기화되는 현상이죠. 이는 버그가 아니라 Streamlit의 고유한 작동 방식 때문입니다.오늘은 이 '기억 상실' 문제를 해결하는 Session State와 Caching, 그리고 Widget과의 관계를 의료 시나리오로 풀어봅니다. 1. Streamlit의 작동 방식: "금붕어 기억력"공식 문서에 따르면, Streamlit의 가장 큰 특징은 Data Flow입니다.전체 재실행 (Rerun): 사용자가 버튼을 클릭하거나, 텍스트를 입력하는 등 상호작용(Interaction)이 발생할 때마다, Streamlit은 파이썬 스크립트 전체를 맨 위에서부터 맨 아래까지 다시 실행합니다.초기화..

    속도는 올리고 코드는 깔끔하게

    앱이 커지면 코드가 복잡해지고 속도가 느려집니다. 기능 분리(Code Structure)와 캐싱(Caching)으로 성능을 최적화하는 방법을 알아봅시다. 1. 코드 구조화: common.py 분리하기데이터를 로드하거나 전처리하는 무거운 함수들은 별도 파일(common.py)로 빼두는 것이 좋습니다. 그래야 메인 코드(app.py)가 깔끔해집니다. 파일 구조common.py: 데이터 생성 및 로드 담당app.py: 화면 구성 및 시각화 담당 2. 실행 속도 높이기: @st.cache_dataStreamlit은 버튼을 한 번 클릭할 때마다 코드를 처음부터 끝까지 다시 실행하는 특징이 있습니다. 데이터가 100만 건이라면 매번 다시 로딩하느라 엄청 느려지겠죠? 이때 "이 데이터는 변하지 않으니 기억해둬!"..

    의료 데이터 분석, 웹으로 띄우기 (기초편)

    지금까지 주피터 노트북에서만 보던 그래프를, 이제는 클릭 가능한 웹 대시보드로 만들어봅시다.데이터를 불러오고(Load), 보여주고(Display), 그리는(Plot) 3단계면 충분합니다.시나리오: 고혈압 환자 관리 대시보드환자의 나이, BMI, 혈압(Blood Pressure), 재입원 여부를 분석하는 대시보드를 만들어보겠습니다.import streamlit as stimport pandas as pdimport numpy as npimport plotly.express as pximport seaborn as snsimport matplotlib.pyplot as plt# 1. 페이지 기본 설정st.set_page_config(page_title="고혈압 환자 분석기", page_icon="🩺", l..

    머신러닝 모델 연동: "재입원 확률, AI에게 물어보세요"

    이번에는 사용자가 입력한 값으로 예측해주는 'AI 진단 도구'를 만듭니다.1. 모델 학습 (백그라운드 실행)웹 앱 안에서 모델을 실시간으로 학습시킵니다. (데이터가 크다면 미리 학습된 .pkl 파일을 불러오는 게 좋지만, 실습용으로는 이게 편합니다.)from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score# --- 사이드바(Sidebar)에서 모델 학습 ---st.sidebar.header(" 모델 설정")# 데이터 준비X = df[['Age', 'BMI', 'Glucose', 'HbA1c']]y = d..

    EDA 대시보드: 가상의 의료 데이터 생성 및 시각화

    데이터를 불러오고 그래프를 그리는 과정을 웹에 구현해 봅니다. "당뇨 환자 재입원 데이터"를 가상으로 만들어 사용하겠습니다. 1. 가상 데이터 생성 (Medical Data Generation)먼저 app.py에 데이터를 만드는 함수를 추가합니다.import streamlit as stimport pandas as pdimport numpy as npimport plotly.express as px# 페이지 기본 설정st.set_page_config(page_title="재입원 예측 AI", page_icon="🏥", layout="wide")# 가상 데이터 생성 함수 (캐싱을 사용하여 속도 최적화)@st.cache_datadef load_data(): np.random.seed(42) n_..