๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ผ์ด ๋ง์ผ์ ๊ฐ์? Streamlit์ ์ด์ฉํด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋๋ง์ ๋ฐ์ดํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด๋ณด์ธ์! ๐
Streamlit์ Python์ผ๋ก ์์ฑ๋ ์ฝ๋๋ง์ผ๋ก๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ ์คํ ์์ค ํ๋ ์์ํฌ์์. ์ด ๋๊ตฌ๋ ๋ฐ์ดํฐ ๊ณผํ์, ์์ง๋์ด, ์ฐ๊ตฌ์๋ค์ด ๋ฐ์ดํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฝ๊ฒ ๊ตฌ์ถํ๊ณ ๊ณต์ ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. Streamlit์ ์ฅ์ ์ ๋ณต์กํ ์น ๊ฐ๋ฐ ์ง์ ์์ด๋ ์ง๊ด์ ์ธ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ค๋ ์ ์ด๋ผ ์์๋์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค!
๊ฐ์ธ์ ์ผ๋ก๋ ์ง์ฅ์์ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ด๋ ๋น์ ์๊ณ ๋ฆฌ์ฆ ๋ฐ๋ชจ ํ์ด์ง๋ ํน์ ๋ก๊ทธ ๋์๋ณด๋๋ฅผ ๋ง๋ค ๋ ์ ์ฉํ๊ณ ์์ต๋๋คโจ
๐ Streamlit์ด๋? ๐ง
Streamlit์ Python๋ง์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ ๋๊ตฌ๋ก HTML, CSS ๋ชฐ๋ผ๋ OK! ๊ทธ๋ฅ Python์ผ๋ก ๋ฐ์ดํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด๋ณผ ์ ์์ด์ ๐
๐ Streamlit์ผ๋ก ๋ฌด์์ ํ ์ ์๋์? ๐ค
- ๋ฐ์ดํฐ ์๊ฐํ ๋์๋ณด๋ : ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ง๊ฒ ์๊ฐํํ๊ณ , ๋์๋ณด๋๋ฅผ ๋ง๋ค์ด๋ณด์ธ์! ์๋ฅผ ๋ค์ด, ํ๋งค ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ๋์๋ณด๋๋ฅผ ๋ง๋ค์ด๋ณผ ์ ์์ด์ ๐
- ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ๋ฐฐํฌ : Python์ผ๋ก ๋ง๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์์ฝ๊ฒ ๋ฐฐํฌํ ์ ์์ด์! ๋ชจ๋ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก๋ฐ๋ก ํ์ธํ ์ ์์ด์.
- ์ธํฐ๋ํฐ๋ธ ๋ฐ์ดํฐ ๋ถ์ ๋๊ตฌ : ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ์ํ๊ณ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๋ ๋๊ตฌ๋ฅผ ๋ง๋ค ์ ์์ด์
- ์ค์๊ฐ ๋ฐ์ดํฐ ๋ชจ๋ํฐ๋ง : ์๋ฒ ์ํ๋ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ ๋์๋ณด๋๋ ๋ง๋ค ์ ์๋ต๋๋ค.
๐ 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์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์๋ ํฌ์คํ ์์ ์ค๋ช ํ๊ณ ์์ด์ -!