21. [Streamlit] ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์™€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ

2026. 3. 8. 13:06ยทPython & SQL/Python Basics

๐Ÿ’ก ๋ณธ ํฌ์ŠคํŒ…์€ ์ˆ˜์—… ๋‚ด์šฉ, ๊ต์žฌ, ChatGPT๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•œ ํ•™์Šต ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.
๊ธ€๊ณผ ๊ทธ๋ฆผ ๋“ฑ ๋ชจ๋“  ์ฝ˜ํ…์ธ ์˜ ์ •๋ฆฌ ๋ฐ ์ž‘์„ฑ์€ ๋ณธ ๋ธ”๋กœ๊ทธ์—์„œ ์ง์ ‘ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

Python ๊ธฐ์ดˆ๋ถ€ํ„ฐ Streamlit ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๊นŒ์ง€ ์ •๋ฆฌํ•˜๋Š” ํ•™์Šต ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.

์ด ๊ธ€์€ '21. [Streamlit] ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์™€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ' ์ž…๋‹ˆ๋‹ค.

 

 

๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ๋‹จ์ˆœํ•œ ํ‘œ๋ณด๋‹ค ์‹œ๊ฐํ™”๋œ ๊ทธ๋ž˜ํ”„๊ฐ€ ํ›จ์”ฌ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

Streamlit์€ Python ์ฝ”๋“œ๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๋‹ค.

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Streamlit์„ ํ™œ์šฉํ•˜์—ฌ

  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
  • ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค
  • ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ทธ๋ž˜ํ”„

๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

 

๐Ÿ’ก streamlit ์„ค์น˜ ํ›„, pandas, numpy, matplotlib๋„ ์„ค์น˜ํ•ด์ฃผ์ž.
๋งฅ๋ถ์˜ ๊ฒฝ์šฐ, pip ๋˜๋Š” python ์„ ์‚ฌ์šฉํ•  ๋•Œ pip3, pyhon3 ๋กœ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

pip3 install pandas numpy matplotlib

 

 

๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๊ธฐ๋ณธ

Streamlit์—์„œ๋Š” DataFrame์„ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € ์˜ˆ์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

import streamlit as st
import pandas as pd
import numpy as np

st.title("Monthly Sales Dashboard")

months = pd.date_range("2024-01-01", periods=12, freq="ME")

sales = np.random.randint(20000, 50000, size=12)

df = pd.DataFrame({
    "Month": months.strftime("%Y-%m"),
    "Sales": sales
})

 

๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

st.dataframe(df)

 

์ด์ œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณด์ž.

 

 

๋ผ์ธ ์ฐจํŠธ

Streamlit์—์„œ๋Š” st.line_chart()๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„  ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

st.subheader("Monthly Sales Trend")

st.line_chart(df.set_index("Month"))

์ด ๊ทธ๋ž˜ํ”„๋Š” ์›”๋ณ„ ๋งค์ถœ ํ๋ฆ„์„ ํ•œ๋ˆˆ์— ๋ณด์—ฌ์ค€๋‹ค.

 

 

๋ฐ” ์ฐจํŠธ

๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋Š” ๋น„๊ต๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ค„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

st.subheader("Monthly Sales Comparison")

st.bar_chart(df.set_index("Month"))

์ด ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ์›”๋ณ„ ๋งค์ถœ ๊ทœ๋ชจ ์ฐจ์ด๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 


์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ถ”๊ฐ€

Streamlit์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์‰ฝ๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” ์Šฌ๋ผ์ด๋”๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

num_data = st.slider("Number of Data Points", 5, 50, 20)

 

๋žœ๋ค ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

data = np.random.randn(num_data)

chart_data = pd.DataFrame({
    "value": data
})

st.line_chart(chart_data)

 

์Šฌ๋ผ์ด๋”๋ฅผ ์›€์ง์ด๋ฉด ๊ทธ๋ž˜ํ”„๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์‹œ๊ฐํ™” ์˜ˆ์ œ

์ด๋ฒˆ์—๋Š” ์กฐ๊ธˆ ๋” ์žฌ๋ฏธ์žˆ๋Š” ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

๋žœ๋ค ๋ฐ์ดํ„ฐ๋กœ ์ƒ์„ฑ๋˜๋Š” "๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ๊ทธ๋ž˜ํ”„"์ด๋‹ค.

import streamlit as st
import pandas as pd
import numpy as np

st.subheader("Real-time Style Random Data")

points = st.slider("Number of Points", 10, 200, 50)

data = np.cumsum(np.random.randn(points))

df_random = pd.DataFrame({
    "value": data
})

st.line_chart(df_random)

์ด ๊ทธ๋ž˜ํ”„๋Š” ๋žœ๋คํ•˜๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋ณด์—ฌ์ค€๋‹ค.

 

 

๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ

์ด๋ฒˆ์—๋Š” ์ˆ˜์—… ์‹œ๊ฐ„์— ๋‹ค๋ฃฌ Python ํ•จ์ˆ˜๋“ค์„ ํ™œ์šฉํ•ด

๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

import streamlit as st
import pandas as pd
import numpy as np

scores = np.random.randint(60, 100, 20)

df_scores = pd.DataFrame({
    "score": scores
})

st.subheader("Score Distribution")

st.bar_chart(df_scores)


# ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ ํ†ต๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ด๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.
st.write("Average Score:", np.mean(scores))
st.write("Max Score:", np.max(scores))
st.write("Min Score:", np.min(scores))

์ด์ฒ˜๋Ÿผ Python์—์„œ ๋ฐฐ์šด

  • mean
  • max
  • min

๊ฐ™์€ ๊ณ„์‚ฐ์„ ๊ทธ๋Œ€๋กœ ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Matplotlib ํ™œ์šฉ

Streamlit์—์„œ๋Š” matplotlib ๊ทธ๋ž˜ํ”„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

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

# ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
df = pd.DataFrame({
    "Month": ["Jan", "Feb", "Mar", "Apr"],
    "Sales": [20000, 25000, 30000, 28000]
})

fig, ax = plt.subplots()

ax.plot(df["Month"], df["Sales"], marker="o")

ax.set_title("Monthly Sales Example")
ax.set_xlabel("Month")
ax.set_ylabel("Sales")

plt.xticks(rotation=45)

st.pyplot(fig)

 

์ด ๋ฐฉ์‹์€ ๊ทธ๋ž˜ํ”„๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

 

Streamlit ์‹œ๊ฐํ™”์˜ ์žฅ์ 

Streamlit์„ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Python ์ฝ”๋“œ๋งŒ์œผ๋กœ ์›น ๋Œ€์‹œ๋ณด๋“œ ์ƒ์„ฑ
  • ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ธฐ๋ฐ˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„
  • ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘
  • ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ฒฐ๊ณผ ๊ณต์œ ์— ์ ํ•ฉ

ํŠนํžˆ ๋ฐ์ดํ„ฐ ๋ถ„์„์ด๋‚˜ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ํ™˜๊ฒฝ์—์„œ ๊ฐ„๋‹จํ•œ ๋Œ€์‹œ๋ณด๋“œ๋‚˜ ์‹คํ—˜์šฉ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋„๊ตฌ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

 

์ •๋ฆฌ

Streamlit์„ ์‚ฌ์šฉํ•˜๋ฉด Python ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š”

  • st.line_chart()
  • st.bar_chart()
  • st.slider()
  • st.pyplot()

๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์™€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ํ›จ์”ฌ ์ง๊ด€์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

Python๊ณผ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ณผ์ •์—์„œ Streamlit์€ ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋งค์šฐ ์œ ์šฉํ•œ ๋„๊ตฌ๊ฐ€ ๋œ๋‹ค.

 

 

'Python & SQL > Python Basics' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

20. [Streamlit] ์„ค์น˜๋ถ€ํ„ฐ ์ฒซ ํ™”๋ฉด๊นŒ์ง€  (0) 2026.03.08
19. [ํŒŒ์ด์ฌ] ์ •๋ ฌ ๊ธฐ์ˆ ๊ณผ ์œ ์šฉํ•œ ์œ ํ‹ธ ํ•จ์ˆ˜  (0) 2026.03.08
18. [ํŒŒ์ด์ฌ] ๋ชจ๋“ˆ๊ณผ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ  (2) 2026.03.08
17. [ํŒŒ์ด์ฌ] ํด๋กœ์ €์™€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ  (2) 2026.03.08
16. [ํŒŒ์ด์ฌ] class methos vs static method  (2) 2026.03.08
'Python & SQL/Python Basics' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 20. [Streamlit] ์„ค์น˜๋ถ€ํ„ฐ ์ฒซ ํ™”๋ฉด๊นŒ์ง€
  • 19. [ํŒŒ์ด์ฌ] ์ •๋ ฌ ๊ธฐ์ˆ ๊ณผ ์œ ์šฉํ•œ ์œ ํ‹ธ ํ•จ์ˆ˜
  • 18. [ํŒŒ์ด์ฌ] ๋ชจ๋“ˆ๊ณผ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ
  • 17. [ํŒŒ์ด์ฌ] ํด๋กœ์ €์™€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
J. Son
J. Son
Petit à petit l'oiseau fait son nid.
  • J. Son
    Steady Study Log
    J. Son
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (172) N
      • Python & SQL (63)
        • Python Basics (21)
        • Python Problems (23)
        • Python Practice (11)
        • MySQL (1)
        • Git & GitHub (7)
      • ML & DL (7) N
      • Projects (6) N
        • Project Portfolio (6) N
      • AI Camp (4)
        • Camp Reflection (4)
      • Concept Notes (6)
        • Statistics & Stata (4)
        • Mathematics (2)
      • Archive (85) N
        • Java (24)
        • R (1)
        • Languages (49)
        • Miscellaneous (11) N
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
    • WikiDocs
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ”„๋ž‘์Šค์–ด ๊ณต๋ถ€
    passe compose
    ํŒŒ์ด์ฌ ๋ฌธ์ œ
    ํŒŒ์ด์ฌ ํฌ๋กค๋ง
    ๋ถˆ์–ด ๊ณต๋ถ€
    ๊ฐ์ฒด
    ์–ด๋ฆฐ์™•์ž ํ”„๋ž‘์Šค์–ด
    GIT
    machine learning
    ์ ํ”„ํˆฌํŒŒ์ด์ฌ ์—ฐ์Šต๋ฌธ์ œ
    ๋ณตํ•ฉ๊ณผ๊ฑฐ
    Stata
    ์–ด๋ฆฐ์™•์ž ๋ถˆ์–ด
    python problem
    MySQL
    ํ”„๋กœ์ ํŠธ ์˜ค์ผ๋Ÿฌ
    ๋ถˆ์–ด ๊ด€๊ณ„๋Œ€๋ช…์‚ฌ
    Python
    ํŒŒ์ด์ฌ streamlit
    streamlit
    ๋งฅ git
    ์ž๋ฐ”
    ์ ํ”„ํˆฌํŒŒ์ด์ฌ ์—ฐ์Šต๋ฌธ์ œ ํ’€์ด
    share.streamlit.io
    ํŒŒ์ด์ฌ
    ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ํŒŒ์ด์ฌ 300์ œ
    Le Petit Prince
    python streamlit
    Github
    ๋จธ์‹ ๋Ÿฌ๋‹
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
J. Son
21. [Streamlit] ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์™€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”