01. Streamlit ์์ํ๊ธฐ (Setup)
1. Streamlit์ด๋?
Streamlit์ ๋ฐ์ดํฐ ๋ถ์๊ฐ๋ฅผ ์ํ ์คํ์์ค ์ฑ ํ๋ ์์ํฌ์ ๋๋ค. ๋ณต์กํ ์น ํ๋ก ํธ์๋(HTML, CSS, JS) ์ง์ ์์ด๋, ์์ Python ์ฝ๋๋ง์ผ๋ก ๋ฐ์ดํฐ ๋์๋ณด๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ํน์ง
- Python Only: ํ์ด์ฌ ๋ฌธ๋ฒ๋ง ์๋ฉด ๋ฉ๋๋ค.
- Interactive: ๋ฒํผ, ์ฌ๋ผ์ด๋, ์ ๋ ฅ์ฐฝ ๋ฑ์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- Fast: ์ฝ๋๋ฅผ ์ ์ฅํ๋ฉด ์นํ์ด์ง๊ฐ ์ฆ์ ์๋ก๊ณ ์นจ๋ฉ๋๋ค.
2. ์ค์น ๋ฐ ํ๊ฒฝ ์ค์
๋จผ์ Streamlit ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
โ ๋ฌธ์ 1: Streamlit ์ค์น
Q. ํฐ๋ฏธ๋(Terminal)์ ์ด๊ณ pip๋ฅผ ์ฌ์ฉํ์ฌ streamlit์ ์ค์นํ์ธ์.
Terminal
pip install streamlit์ค์น๊ฐ ์ ๋์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํด๋ณด์ธ์.
streamlit hello3. Hello World!
์ฒซ ๋ฒ์งธ ์ฑ์ ๋ง๋ค์ด๋ด ์๋ค.
โ ๋ฌธ์ 2: ์ฒซ ๋ฒ์งธ ์ฑ ์คํ
Q. app.py๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณ , ํ๋ฉด์ โHello, Analyst!โ๋ผ๋ ํฐ ์ ๋ชฉ์ ๋์๋ณด์ธ์.
1๋จ๊ณ: Python ํ์ผ ์์ฑ
์์
๋๋ ํ ๋ฆฌ์ app.py ํ์ผ์ ์์ฑํฉ๋๋ค.
2๋จ๊ณ: ์ฝ๋ ์์ฑ
๋ค์ ์ฝ๋๋ฅผ app.py์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ต๋๋ค.
import streamlit as st
import pandas as pd
# ์ ๋ชฉ ์์ฑ
st.title("My First Dashboard ๐")
# ํ
์คํธ ์์ฑ
st.write("Hello, Analyst! ๋ฐ์ดํฐ ๋ถ์์ ์ธ๊ณ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค.")3๋จ๊ณ: ์ฑ ์คํ
ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
streamlit run app.py๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์ด๋ฆฌ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ๊ฒ์ ๋๋ค.
4. ๋ฐ์ดํฐํ๋ ์ ์ถ๋ ฅํ๊ธฐ
๋ถ์์ ๊ฒฐ๊ณผ๋ฌผ์ธ ๋ฐ์ดํฐํ๋ ์(DataFrame)์ ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
โ ๋ฌธ์ 3: ๋ฐ์ดํฐํ๋ ์ ์๊ฐํ
Q. app.py์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ CSV ํ์ผ์ ์ฝ์ด์ค๊ฑฐ๋ ์ํ ๋ฐ์ดํฐํ๋ ์์ ๋ง๋ค์ด์ ํ๋ฉด์ ์ถ๋ ฅํ์ธ์.
Python (Streamlit)
Hint: st.dataframe() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ ฌ๊ณผ ํํฐ๋ง์ด ๊ฐ๋ฅํ ํ
์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค.
# (app.py์ ์ด์ด์ ์์ฑ)
st.header("1. Data Overview")
# ์ํ ๋ฐ์ดํฐ ์์ฑ
data = {
'Product': ['Shirt', 'Pants', 'Hat'],
'Price': [25, 40, 15],
'Stock': [100, 50, 200]
}
df = pd.DataFrame(data)
# ๋ฐ์ดํฐํ๋ ์ ์ถ๋ ฅ
st.dataframe(df)
# ํ: ์์ ํ๋ st.table()์ด ๋ ๊น๋ํ ์ ์์ต๋๋ค.
st.subheader("Static Table")
st.table(df)๐ก ์์ฝ
pip install streamlit: ์ค์น๋ ํ ๋ฒ์ด๋ฉด ๋๋ฉ๋๋ค.streamlit run app.py: ์ฑ์ ์คํํ๋ ๋ช ๋ น์ด์ ๋๋ค.st.title(),st.write(),st.dataframe(): ๊ฐ์ฅ ๋ง์ด ์ฐ๋ 3๋์ฅ ํจ์์ ๋๋ค.
๋ค์ ์ฑํฐ์์๋ **์ฌ์ด๋๋ฐ(Sidebar)**์ **์ปฌ๋ผ(Columns)**์ ์ฌ์ฉํ์ฌ ์ง์ง ๋์๋ณด๋์ฒ๋ผ ๋ ์ด์์์ ๊พธ๋ฉฐ๋ณด๊ฒ ์ต๋๋ค.