๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/Python

[python] Streamlit ์œผ๋กœ ๋ฐ์ดํ„ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ! | ๊ฐ„๋‹จํ•œ ๋Œ€์‹œ๋ณด๋“œ & ์›น๋ฐ๋ชจ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ

by ๋ญ…์ฆค 2024. 7. 8.
๋ฐ˜์‘ํ˜•

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ผ์ด ๋งŽ์œผ์‹ ๊ฐ€์š”? Streamlit์„ ์ด์šฉํ•ด ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋‚˜๋งŒ์˜ ๋ฐ์ดํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”! ๐Ÿ˜Ž

 

 

Streamlit์€ Python์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์—์š”. ์ด ๋„๊ตฌ๋Š” ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž, ์—”์ง€๋‹ˆ์–ด, ์—ฐ๊ตฌ์ž๋“ค์ด ๋ฐ์ดํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Streamlit์˜ ์žฅ์ ์€ ๋ณต์žกํ•œ ์›น ๊ฐœ๋ฐœ ์ง€์‹ ์—†์ด๋„ ์ง๊ด€์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋ผ ์•Œ์•„๋‘์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

 

๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์ง์žฅ์—์„œ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์ด๋‚˜ ๋น„์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ๋ชจ ํŽ˜์ด์ง€๋‚˜ ํŠน์ • ๋กœ๊ทธ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ๋•Œ ์• ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹คโœจ

 

๐Ÿ“Œ Streamlit์ด๋ž€? ๐Ÿง

Streamlit์€ Python๋งŒ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ HTML, CSS ๋ชฐ๋ผ๋„ OK! ๊ทธ๋ƒฅ Python์œผ๋กœ ๋ฐ์ดํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ์–ด์š” ๐Ÿ‘Œ

 

๐Ÿ“Œ Streamlit์œผ๋กœ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ๐Ÿค”

  1. ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ : ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ‹์ง€๊ฒŒ ์‹œ๊ฐํ™”ํ•˜๊ณ , ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”! ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒ๋งค ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ์–ด์š” ๐Ÿ“ˆ
  2. ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ ๋ฐฐํฌ : Python์œผ๋กœ ๋งŒ๋“  ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์†์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์–ด์š”! ๋ชจ๋ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
  3. ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋„๊ตฌ : ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ํƒ์ƒ‰ํ•˜๊ณ  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”
  4. ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง : ์„œ๋ฒ„ ์ƒํƒœ๋‚˜ ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ Streamlit์˜ ํ™œ์šฉ ์˜ˆ์‹œ ๐ŸŒŸ

๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt

st.title('๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ')

# ๋ฐ์ดํ„ฐ ๋กœ๋“œ
df = pd.read_csv('data.csv')

# ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
fig, ax = plt.subplots()
df.plot(kind='bar', ax=ax)
st.pyplot(fig)
  • Streamlit์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒ๋งค ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ๊ธˆ์œต ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

 

๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ ๋ฐฐํฌ

import streamlit as st
from sklearn.ensemble import RandomForestClassifier
import numpy as np

st.title('๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ ๋ฐฐํฌ')

# ๊ฐ„๋‹จํ•œ ์˜ˆ์ธก ๊ธฐ๋Šฅ
input_data = st.text_input('์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์„ธ์š” (์˜ˆ: 5, 3, 2)')
if input_data:
    data = np.array([float(x) for x in input_data.split(',')]).reshape(1, -1)
    model = RandomForestClassifier()
    model.fit(data, [0])
    prediction = model.predict(data)
    st.write(f'์˜ˆ์ธก ๊ฒฐ๊ณผ: {prediction[0]}')
  • Streamlit์„ ์‚ฌ์šฉํ•˜์—ฌ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ด ๋ชจ๋ธ์— ์ž…๋ ฅ๊ฐ’์„ ์ œ๊ณตํ•˜๊ณ , ๋ชจ๋ธ์˜ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋„๊ตฌ

import streamlit as st
import pandas as pd

st.title('์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋„๊ตฌ')

# ๋ฐ์ดํ„ฐ ๋กœ๋“œ
df = pd.read_csv('data.csv')

# ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ›๊ธฐ
column = st.selectbox('๋ถ„์„ํ•  ์ปฌ๋Ÿผ์„ ์„ ํƒํ•˜์„ธ์š”', df.columns)
st.write(df[column].describe())
  • ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

import streamlit as st
import time

st.title('์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง')

# ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง
for i in range(10):
    st.write(f'ํ˜„์žฌ ์‹œ๊ฐ„: {time.strftime("%H:%M:%S")}')
    time.sleep(1)
  • Streamlit์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„์˜ ์ƒํƒœ๋‚˜ ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ก Streamlit ๋Œ€์‹œ ๋ณด๋“œ ์˜ˆ์‹œ


 

Streamlit์€ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ, ๋ณต์žกํ•œ ์›น ๊ฐœ๋ฐœ ๊ธฐ์ˆ  ์—†์ด๋„ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ง๊ตฐ์— ํŠนํžˆ ์œ ์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ํฐ ๋„์›€์„ ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Streamlit์„ ํ™œ์šฉํ•˜์—ฌ ๋” ๋‚˜์€ ๋ฐ์ดํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!

 

Streamlit์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์—์„œ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์–ด์š” -!

 

[python] Streamlit ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์ตํžˆ๊ธฐ ! | ํ…์ŠคํŠธ & ๋ฐ์ดํ„ฐ ํ‘œ์‹œ | ๋ ˆ์ด์•„์›ƒ ๊ด€๋ฆฌ | ํŒŒ์ผ ์—…๋กœ๋“œ & ๋‹ค์šด๋กœ

Streamlit์€ Python์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์š”. Streamlit์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž์™€ ์• ๋„๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฝ”๋“œ ๋ช‡ ์ค„๋งŒ์œผ๋กœ ์•„๋ฆ„๋‹ค์šด ๋Œ€ํ™”ํ˜• ์›น ์• ํ”Œ๋ฆฌ์ผ€

mvje.tistory.com

๋ฐ˜์‘ํ˜•