레이블이 Streamlit인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Streamlit인 게시물을 표시합니다. 모든 게시물 표시

20250115

Streamlit : 이미지 분류 및 데이터 시각화 앱 만들기 (Mac 환경)

1. 개발 환경 설정

Python 및 Streamlit 설치

  1. Python 설치: Python 3.8 이상이 필요합니다. Mac에서 Python이 설치되어 있지 않다면, Python 공식 웹사이트에서 다운로드
  2. 가상 환경 생성:
    python3 -m venv streamlit_env
    source streamlit_env/bin/activate
  3. 필요한 라이브러리 설치:
    pip install streamlit pandas numpy matplotlib tensorflow_hub pillow

Streamlit 설치 확인

Streamlit이 올바르게 설치되었는지 확인하려면 다음 명령을 실행

streamlit hello

브라우저에 Streamlit 데모 앱이 열리면 성공적으로 설치된 것입니다.

2. Streamlit 앱 코드 작성

아래 코드는 이미지 분류와 데이터 시각화를 포함한 Streamlit 애플리케이션입니다.

import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow_hub as hub
from PIL import Image

# 앱 제목 및 설명
st.title("이미지 분류 및 데이터 시각화 앱")
st.write("이 앱은 업로드된 이미지를 분류하고 데이터를 시각화합니다.")

# 이미지 업로드 및 분류
uploaded_file = st.file_uploader("이미지를 업로드하세요", type=["jpg", "png", "jpeg"])
if uploaded_file is not None:
    image = Image.open(uploaded_file)
    st.image(image, caption="업로드된 이미지", use_column_width=True)
    st.write("이미지를 분류 중입니다...")

    # TensorFlow Hub에서 사전 학습된 모델 로드
    model = hub.load("https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/classification/5")
    image = image.resize((224, 224))
    image_array = np.array(image) / 255.0  # 정규화
    image_array = np.expand_dims(image_array, axis=0)

    predictions = model(image_array)
    st.write("분류 결과:", predictions.numpy())

# 데이터 시각화
st.header("데이터 시각화")
data = pd.DataFrame(
    np.random.randn(100, 3),
    columns=['특성 A', '특성 B', '특성 C']
)
st.line_chart(data)

# 사이드바 예제
st.sidebar.header("사이드바 설정")
range_slider = st.sidebar.slider("값 범위 선택", 0, 100, (25, 75))
st.sidebar.write(f"선택된 범위: {range_slider}")

3. 코드 저장

위 코드를 image_classification_app.py라는 이름으로 저장하세요:

nano image_classification_app.py

4. 앱 실행

  1. 디렉토리 이동:
    cd /path/to/your/directory
  2. Streamlit 앱 실행:
    streamlit run image_classification_app.py
    브라우저에서 http://localhost:8501로 이동하여 앱을 확인합니다.

5. 주요 기능 설명

  • A. 이미지 업로드 및 분류: 사용자가 이미지를 업로드하면 TensorFlow Hub의 사전 학습된 MobileNet V2 모델을 사용하여 이미지를 분류합니다.
  • B. 데이터 시각화: 무작위로 생성된 데이터를 Pandas DataFrame으로 변환하고 이를 라인 차트로 시각화합니다.
  • C. 사이드바: 사이드바에 슬라이더를 추가하여 사용자 입력을 받을 수 있습니다.

6. 실행 결과

앱 실행 후 다음과 같은 기능을 테스트할 수 있습니다:

  • 이미지를 업로드하고 분류 결과를 확인합니다.
  • 데이터가 라인 차트로 표시되는 것을 봅니다.
  • 사이드바 슬라이더를 조작하여 선택된 범위를 변경합니다.

7. 추가 팁

  • TensorFlow Hub 모델 외에도 다양한 사전 학습 모델을 사용할 수 있습니다.
  • @st.cache 데코레이터를 활용해 데이터 로딩 속도를 최적화할 수 있습니다.
  • Streamlit Cloud를 사용해 앱을 쉽게 배포할 수 있습니다.


20250101

웹앱 Streamlit + Python

데이터 분석과 AI 프로젝트를 진행하며, 종종 빠르게 결과물을 시각화하거나 프로토타입을 만들어야 할 때가 많습니다. 이때 제가 자주 사용하는 도구가 바로 Streamlit입니다. Streamlit은 파이썬 코드 몇 줄로 손쉽게 웹 애플리케이션을 만들 수 있는 프레임워크로, 특히 데이터 시각화와 AI 모델 배포에 최적화되어 있습니다.

이번 글에서는 Streamlit의 기본 사용법부터 실전 예제까지 다뤄보겠습니다.

1. Streamlit이란?

Streamlit은 파이썬 기반의 오픈소스 웹 프레임워크로, 다음과 같은 특징을 가지고 있습니다:
  • 간단한 코드: HTML, CSS, JavaScript 없이도 파이썬 코드만으로 웹앱 제작 가능.
  • 빠른 개발: 데이터 분석 결과나 모델을 바로 시각화하여 공유 가능.
  • 다양한 위젯 지원: 슬라이더, 버튼, 체크박스 등 인터랙티브 UI 구성 가능.
  • 손쉬운 배포: Streamlit Cloud를 통해 클릭 몇 번으로 앱을 배포할 수 있음.

2. 설치 및 기본 실행

Streamlit 설치:
bash
pip install streamlit
설치 후, Streamlit의 기본 실행:
bash
streamlit hello
브라우저가 열리며 Streamlit의 기능을 체험할 수 있는 페이지가 표시됩니다.

3. 첫 번째 앱 만들기

코드 작성

아래와 같은 간단한 코드를 작성해 app.py라는 파일로 저장합니다:
python
import streamlit as st # 제목 출력 st.title("Hello, Streamlit!") st.write("이것은 Streamlit으로 만든 첫 번째 웹앱입니다.")

앱 실행

터미널에서 다음 명령어를 입력합니다:
bash
streamlit run app.py
브라우저에서 http://localhost:8501로 접속하면 앱이 실행된 것을 확인할 수 있습니다.

4. 실전 예제: 데이터 시각화 대시보드

이제 실제 데이터를 활용한 대시보드를 만들어 보겠습니다.

코드 작성

아래 코드를 dashboard.py라는 파일로 저장하세요:
python
import streamlit as st import pandas as pd import numpy as np # 제목과 설명 추가 st.title("데이터 시각화 대시보드") st.write("랜덤 데이터를 생성하여 다양한 차트를 그려봅니다.") # 랜덤 데이터 생성 data = pd.DataFrame( np.random.randn(50, 3), columns=["A", "B", "C"] ) # 데이터프레임 출력 st.subheader("데이터프레임") st.dataframe(data) # 라인 차트 출력 st.subheader("라인 차트") st.line_chart(data) # 바 차트 출력 st.subheader("바 차트") st.bar_chart(data) # 슬라이더로 데이터 필터링 st.subheader("슬라이더로 데이터 필터링") value = st.slider("표시할 데이터 개수", min_value=1, max_value=50, value=10) filtered_data = data.head(value) st.write(f"선택된 {value}개의 데이터:") st.dataframe(filtered_data)

결과 확인

위 코드를 실행하면 다음과 같은 기능을 가진 대시보드가 생성됩니다:
  1. 랜덤 데이터를 테이블 형태로 표시.
  2. 데이터를 라인 차트와 바 차트로 시각화.
  3. 슬라이더를 이용해 표시할 데이터 개수를 동적으로 조정.

5. 주요 기능 소개

Streamlit은 다양한 기능을 제공하며, 이를 활용하면 더욱 풍부한 웹앱을 제작할 수 있습니다.

(1) 텍스트 출력

  • st.title()st.header()st.subheader(): 제목 및 부제목 출력.
  • st.write(): 텍스트, 데이터프레임 등 다양한 형태의 데이터를 출력.
python
st.title("Streamlit 기능 소개") st.write("이곳에 텍스트나 데이터를 출력할 수 있습니다.")

(2) 위젯 (사용자 입력)

  • 버튼: if st.button('클릭')
  • 슬라이더: value = st.slider('슬라이더', 0, 100)
  • 체크박스: if st.checkbox('체크')
  • 선택 박스: option = st.selectbox('옵션 선택', ['A', 'B', 'C'])
python
if st.checkbox("데이터 보기"): st.write(data)

(3) 차트

  • 라인 차트: st.line_chart(data)
  • 바 차트: st.bar_chart(data)
  • 맵: st.map(data)
python
import numpy as np map_data = pd.DataFrame( np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4], columns=["lat", "lon"] ) st.map(map_data)

6. 배포하기

Streamlit 앱은 로컬에서 실행하는 것뿐 아니라 클라우드에 배포하여 다른 사람들과 공유할 수도 있습니다.

GitHub와 연동하여 배포

  1. 코드를 GitHub 저장소에 업로드합니다.
  2. Streamlit Cloud에 접속해 GitHub 저장소를 연결합니다.
  3. 배포하고자 하는 브랜치와 파일 경로를 지정한 후 "Deploy" 버튼을 클릭합니다.
배포가 완료되면 고유 URL이 생성되어 누구나 접근할 수 있습니다.

7. 활용 사례

Streamlit은 다음과 같은 프로젝트에 적합합니다:
  1. 데이터 분석 대시보드: 분석 결과를 팀원들과 공유.
  2. AI 모델 데모: 머신러닝 모델의 입력값과 결과를 인터랙티브하게 보여줌.
  3. 프로토타입 제작: 복잡한 백엔드 없이 빠르게 웹앱 제작.

결론

Streamlit은 파이썬 개발자에게 웹 애플리케이션 제작의 문턱을 낮춰주는 강력한 도구입니다. 특히 데이터 분석이나 AI 모델링 결과를 빠르게 공유해야 하는 경우 유용하며, 간단한 인터페이스 덕분에 누구나 쉽게 사용할 수 있습니다.