FA-TOOLS — Header Component

آموزش ساخت داشبورد با Streamlit و پایتون

رفیق برنامه‌نویس، تا حالا شده بخوای داده‌هات رو به یه شکل جذاب و تعاملی به نمایش بذاری اما وقت و حوصله درگیر شدن با فریمورک‌های پیچیده وب رو نداشته باشی؟ اگه جوابت مثبته، استریملیت (Streamlit) بهترین دوست جدیدته! با پایتون و چند خط کد ساده، می‌تونی داشبوردهای خیره‌کننده‌ای بسازی که نه تنها کاربردی باشن، بلکه هر کسی رو هم مجذوب کنن. تو این مقاله، قراره قدم به قدم با هم یاد بگیریم چطور از صفر تا صد یه داشبورد حرفه‌ای بسازیم و داده‌هامون رو به زبان تصویر دربیاریم. اگر دنبال ابزارهای بیشتر و کدنویسی‌های آماده برای پروژه‌هات هستی، حتماً یه سری به فروشگاه ابزارهای ما بزن؛ کلی کد آماده پایتون و اسنیپت‌های بدردبخور دیگه اونجا منتظرته!

🚀 نقشه راه ساخت داشبورد با Streamlit 🚀

آموزش ساخت داشبورد با Streamlit و پایتون — تصویر 1

اینفوگرافی سریع: از نصب تا استقرار، همه‌چی اینجاست!

1️⃣ شروع کار و نصب

  • نصب پایتون
  • `pip install streamlit`
  • ساخت فایل `app.py`

2️⃣ اولین داشبورد

  • `st.title()`
  • `st.write()`
  • `streamlit run app.py`

3️⃣ افزودن تعامل

  • `st.slider()`
  • `st.selectbox()`
  • `st.text_input()`

4️⃣ نمایش داده

  • `st.dataframe()`
  • `st.line_chart()`
  • `Matplotlib/Plotly`

5️⃣ ساختاردهی

  • `st.sidebar()`
  • `st.columns()`
  • `st.expander()`

6️⃣ استقرار و عیب‌یابی

  • Streamlit Cloud
  • Docker/Heroku
  • راه حل مشکلات رایج

نیاز به مشاوره یا پشتیبانی داری؟ 📞 09202232789

چرا Streamlit بهترین گزینه برای ساخت داشبورد با پایتون است؟

آموزش ساخت داشبورد با Streamlit و پایتون — تصویر 2

تصور کن که برای نمایش داده‌ها و مدل‌های پایتونی‌ت، نیاز به یک رابط کاربری زیبا و تعاملی داری، اما نمی‌خوای ماه‌ها درگیر یادگیری HTML، CSS و JavaScript بشی. اینجا Streamlit وارد عمل میشه! این کتابخانه قدرتمند پایتون بهت این امکان رو میده که فقط با استفاده از زبان پایتون، داشبوردهای وب فوق‌العاده‌ای بسازی. دیگه خبری از پیچیدگی‌های فرانت‌اند نیست، تمام تمرکزت میره روی داده‌ها و منطق برنامه. اگر دوست داری با سرعت بیشتری کدهات رو بنویسی، یه نگاهی به اسنیپت‌های پایتون آماده ما بنداز تا کارت راحت‌تر بشه.

مزایای کلیدی Streamlit

  • سرعت توسعه بی‌نظیر: داشبوردها رو در عرض چند ساعت، نه چند روز یا هفته، آماده کن.
  • فقط پایتون: نیازی به دانش HTML، CSS و JavaScript نداری. هرچیزی که برای ساخت داشبورد نیاز داری، با پایتون قابل انجامه.
  • تعاملی و پویا: به راحتی ابزارهای تعاملی مثل اسلایدر، دکمه و فیلتر به داشبوردت اضافه کن.
  • جامعه کاربری فعال: منابع آموزشی فراوان و پشتیبانی عالی از طرف جامعه بزرگ Streamlit.
  • قابلییت استقرار آسان: میتونی داشبوردهات رو به راحتی روی پلتفرم‌هایی مثل Streamlit Cloud یا Docker مستقر کنی.

آماده‌سازی محیط توسعه

آموزش ساخت داشبورد با Streamlit و پایتون — تصویر 3

قبل از اینکه شروع به کدنویسی کنیم، باید مطمئن بشیم که همه چیز برای کار آماده‌ست. اولین قدم، نصب پایتون (اگر هنوز نصب نکردی) و بعد نصب کتابخانه Streamlit.

1. نصب پایتون و Pip

اگر پایتون روی سیستمت نصب نیست، می‌تونی از وبسایت رسمی پایتون (python.org) آخرین نسخه رو دانلود و نصب کنی. مطمئن شو که گزینه “Add Python to PATH” رو هنگام نصب فعال می‌کنی. Pip، ابزار مدیریت بسته پایتون، معمولاً همراه با پایتون نصب میشه.

2. ساخت محیط مجازی (اختیاری اما توصیه شده)

برای جلوگیری از تداخل بسته‌ها در پروژه‌های مختلف، بهتره همیشه از محیط‌های مجازی استفاده کنی. برای ساخت و فعال‌سازی یک محیط مجازی، دستورات زیر رو تو ترمینال وارد کن:

python -m venv my_streamlit_env
# برای فعال‌سازی در ویندوز:
my_streamlit_envScriptsactivate
# برای فعال‌سازی در مک/لینوکس:
source my_streamlit_env/bin/activate

3. نصب Streamlit

حالا که محیط مجازیت فعاله، می‌تونی Streamlit رو نصب کنی. این کار فقط با یک دستور ساده انجام میشه:

pip install streamlit

علاوه بر Streamlit، ممکنه برای تحلیل و نمایش داده به کتابخانه‌هایی مثل Pandas، Matplotlib یا Plotly هم نیاز داشته باشی:

pip install pandas matplotlib plotly

اولین داشبورد Streamlit: “سلام استریملیت!”

حالا که همه چیز آماده‌ست، بیا اولین داشبوردت رو بسازیم. یک فایل جدید با نام app.py (یا هر نامی که دوست داری) بساز و کدهای زیر رو داخلش بذار.

کدنویسی ساده‌ترین برنامه


import streamlit as st

st.set_page_config(layout="wide") # تنظیم لایه‌بندی به حالت عریض

st.title('اولین داشبورد من با Streamlit')
st.header('به دنیای داشبوردهای پایتون خوش آمدید!')
st.write('این یک متن ساده در داشبورد Streamlit است.')

# نمایش یک تکه کد
st.code("""
def hello_streamlit():
    print("Hello, Streamlit!")
""", language='python')

st.success('تبریک! داشبورد شما آماده است.')
    

تو این کد، st.title() برای عنوان اصلی، st.header() برای یک تیتر فرعی و st.write() برای نمایش متن ساده استفاده میشه. st.code() هم برای نمایش قطعه کد داخل داشبورد کاربرد داره.

اجرای برنامه

فایلت رو ذخیره کن و به ترمینال برگرد. مطمئن شو که تو همون دایرکتوری هستی که فایل app.py رو ساختی، بعد این دستور رو اجرا کن:

streamlit run app.py

بعد از اجرای دستور، Streamlit به صورت خودکار مرورگرت رو باز میکنه و داشبوردت رو نشون میده. اگر این اتفاق نیفتاد، آدرس محلی که تو ترمینال نمایش داده میشه (معمولاً http://localhost:8501) رو به صورت دستی تو مرورگرت وارد کن.

افزودن تعامل به داشبورد با ویجت‌ها

زیبایی Streamlit به قابلیت افزودن سریع و آسون ویجت‌های تعاملیه. این ویجت‌ها به کاربر اجازه میدن با داده‌ها و نمودارها ارتباط برقرار کنن و تجربه کاربری رو بهبود ببخشن. بیا چند نمونه رو امتحان کنیم.

مثالی از ویجت‌های رایج

فایل app.py رو با کدهای زیر جایگزین کن:


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

st.set_page_config(layout="wide")

st.title('داشبورد تعاملی با ویجت‌های Streamlit')

# ویجت اسلایدر
age = st.slider('سن خود را انتخاب کنید:', 0, 100, 25) # min, max, default
st.write(f'سن شما: {age} سال')

# ویجت ورودی متن
name = st.text_input('نام شما چیست؟', 'دوست عزیز')
st.write(f'سلام، {name}!')

# ویجت انتخابگر (Selectbox)
option = st.selectbox(
    'بهترین زبان برنامه‌نویسی برای داشبورد؟',
    ('پایتون', 'R', 'JavaScript', 'Julia'))
st.write(f'شما انتخاب کردید: {option}')

# ویجت چک‌باکس
show_data = st.checkbox('نمایش داده‌های تصادفی')
if show_data:
    st.subheader('داده‌های تصادفی:')
    data = pd.DataFrame(
        np.random.randn(10, 2),
        columns=['ستون A', 'ستون B'])
    st.dataframe(data)

st.info('با هر تغییری در ویجت‌ها، داشبورد به صورت خودکار بروزرسانی می‌شود.')
    

وقتی این کد رو اجرا کنی (با streamlit run app.py)، میبینی که با تغییر اسلایدر، ورودی متن یا انتخاب گزینه از Selectbox، محتوای صفحه به صورت زنده و بدون نیاز به رفرش شدن کل صفحه، آپدیت میشه. این یکی از قوی‌ترین ویژگی‌های Streamlit برای ساخت داشبوردهای واکنشیه.

نمایش و بصرى‌سازی داده‌ها

یک داشبورد بدون نمایش داده، مثل غذای بدون نمکه! Streamlit ابزارهای فوق‌العاده‌ای برای نمایش داده‌ها در قالب جدول، نمودار و حتی نقشه‌های تعاملی داره. میتونی از کتابخانه‌های محبوب پایتون مثل Matplotlib، Plotly، Altair یا Seaborn استفاده کنی.

1. نمایش داده‌ها در جدول

برای نمایش DataFrameهای Pandas، از st.dataframe() یا st.table() استفاده می‌کنیم. st.dataframe() قابلییت تعامل بیشتری داره (مثل مرتب‌سازی و جستجو).


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

st.set_page_config(layout="wide")

st.title('نمایش و بصری‌سازی داده‌ها')

st.subheader('داده‌های نمونه:')
df = pd.DataFrame(
   np.random.randn(50, 2),
   columns=['مقدار_۱', 'مقدار_۲'])

st.dataframe(df)
    

2. ساخت نمودارهای تعاملی

Streamlit توابق داخلی برای نمودارهای ساده داره، اما بهترین نتایج رو با استفاده از کتابخانه‌های اختصاصی بصری‌سازی به دست میاری.


import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.express as px

st.set_page_config(layout="wide")

st.title('نمودارهای جذاب در Streamlit')

# داده‌های ساختگی برای مثال
chart_data = pd.DataFrame(
    np.random.randn(20, 3),
    columns=['a', 'b', 'c']
).cumsum()

st.subheader('نمودار خطی با st.line_chart')
st.line_chart(chart_data)

st.subheader('نمودار میله‌ای با Matplotlib')
fig, ax = plt.subplots()
ax.bar(chart_data.index, chart_data['a'])
st.pyplot(fig) # نمایش نمودار Matplotlib

st.subheader('نمودار Scatter با Plotly')
fig_plotly = px.scatter(
    chart_data, x='a', y='b', color='c',
    title='پراکندگی مقادیر'
)
st.plotly_chart(fig_plotly)
    

همونطور که می‌بینی، Streamlit توابعی اختصاصی برای هر کتابخانه داره (مثل st.pyplot() برای Matplotlib و st.plotly_chart() برای Plotly) تا به راحتی بتونی نمودارهات رو نمایش بدی. برای یادگیری بیشتر در مورد بصری‌سازی داده‌ها، میتونی به اسنیپت‌های کدهای آماده مراجعه کنی.

ساختاردهی داشبورد برای بهترین تجربه کاربری

یک داشبورد خوب فقط به خاطر داده‌هاش نیست، بلکه طراحی و ساختاردهی مناسب اون هم خیلی مهمه. Streamlit ابزارهایی برای سازماندهی محتوا و ایجاد یک جریان بصری منطقی در اختیارت میزاره.

1. نوار کناری (Sidebar)

برای قرار دادن ویجت‌ها یا اطلاعات جانبی که نمی‌خوای فضای اصلی صفحه رو اشغال کنن، نوار کناری ایده‌آله. کافیه از st.sidebar به جای st استفاده کنی.


import streamlit as st

st.set_page_config(layout="wide")

st.title('داشبورد با نوار کناری')

# محتویات نوار کناری
st.sidebar.header('تنظیمات داشبورد')
selected_option = st.sidebar.selectbox(
    'انتخاب گزینه:',
    ('گزینه 1', 'گزینه 2', 'گزینه 3')
)
st.sidebar.slider('محدوده: ', 0, 100, 50)

# محتویات اصلی صفحه
st.write(f'گزینه انتخاب شده از نوار کناری: {selected_option}')
st.write('اینجا محتوای اصلی داشبورد قرار می‌گیرد.')
    

2. ستون‌ها (Columns)

برای چیدمان محتوا در کنار هم، از st.columns() استفاده کن. این تابع لیستی از آبجکت‌های ستون رو برمی‌گردونه که میتونی محتوات رو داخلشون قرار بدی.


import streamlit as st
import numpy as np

st.set_page_config(layout="wide")

st.title('چیدمان با ستون‌ها')

col1, col2, col3 = st.columns(3) # ساخت سه ستون با عرض مساوی

with col1:
    st.header('ستون اول')
    st.write('این متن در ستون اول است.')
    st.line_chart(np.random.randn(10, 1))

with col2:
    st.header('ستون دوم')
    st.write('اینجا می‌تونی نمودار یا جدول بذاری.')
    st.bar_chart(np.random.rand(10, 1))

with col3:
    st.header('ستون سوم')
    st.write('و اینجا اطلاعات تکمیلی.')
    st.metric(label="دما", value="25°C", delta="1.2°C")
    

همچنین می‌تونی با دادن یک لیست از اعداد به st.columns()، عرض ستون‌ها رو به نسبت دلخواهت تنظیم کنی، مثلاً st.columns([2, 1]) یک ستون دو برابر عریض‌تر از دیگری ایجاد می‌کنه. این ویژگی برای ساخت داشبوردهای رسپونسیو و با طراحی منحصر بع فرد واقعاً عالیه.

3. بخش‌های قابل گسترش (Expanders)

برای سازماندهی محتوای زیاد و جلوگیری از شلوغی صفحه، از st.expander() استفاده کن. اینها مثل یک آکاردئون عمل می‌کنن که کاربر میتونه باز و بسته‌شون کنه.


import streamlit as st

st.set_page_config(layout="wide")

st.title('استفاده از Expander')

with st.expander("برای دیدن جزئیات بیشتر کلیک کنید"):
    st.write("اینجا محتوای مخفی قرار می‌گیرد که با کلیک کردن ظاهر می‌شود.")
    st.image("https://www.streamlit.io/images/brand/streamlit-logo-secondary-colormark-light.png", width=200)

with st.expander("اطلاعات تماس"):
    st.write("ایمیل: info@example.com")
    st.write("تلفن: 123-456-7890")
    

جدول مقایسه‌ای: Streamlit در برابر Flask/Django (به عنوان یک راه حل سریع)

اگه هنوز بین Streamlit و فریمورک‌های وب سنتی‌تر مثل Flask یا Django مرددی، این جدول ممکنه بهت کمک کنه تصمیم بهتری بگیری:

ویژگی Streamlit
سرعت توسعه بسیار سریع (ساعتی)
نیاز به دانش وب فقط پایتون (بدون HTML/CSS/JS)
قابلیت تعامل بالا، با ویجت‌های آماده
پیچیدگی پروژه‌ها برای داشبوردها و اپلیکیشن‌های داده‌محور کوچک تا متوسط عالی است.
جامعه کاربری و پشتیبانی فعال و رو به رشد

برای پروژه‌های بسیار بزرگ و پیچیده با نیازهای فرانت‌اند خاص، شاید فریمورک‌های وب کامل‌تر مثل Django یا React+Flask مناسب‌تر باشن. اما برای پروتوتایپ‌سازی سریع، نمایش مدل‌های یادگیری ماشین، یا ابزارهای داخلی، Streamlit بی‌رقیبه.

استقرار داشبورد Streamlit

بعد از اینکه داشبوردت رو ساختی و ازش لذت بردی، نوبت به این میرسه که اون رو با بقیه به اشتراک بذاری. چندین راه برای استقرار (Deployment) برنامه‌های Streamlit وجود داره.

1. Streamlit Community Cloud

ساده‌ترین راه برای استقرار، استفاده از سرویس رایگان Streamlit Community Cloud هست. کافیه کد برنامه‌ت رو در یک ریپازیتوری عمومی گیت‌هاب (GitHub) قرار بدی و اون رو به Streamlit Cloud لینک کنی. این پلتفرم خودش همه چیز رو برات مدیریت میکنه.

2. استفاده از Docker و سرویس‌های ابری

برای کنترل بیشتر و مقیاس‌پذیری، میتونی داشبوردت رو داخل یک کانتینر Docker بسازی و بعد اون رو روی سرویس‌های ابری مثل AWS، Google Cloud، Azure یا Heroku مستقر کنی. این روش برای پروژه‌های بزرگ‌تر و نیازمند منابع خاص‌تر مناسبه.

فایل Dockerfile ساده برای Streamlit:


FROM python:3.9-slim-buster

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8501

CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]
    

و فایل `requirements.txt` باید شامل تمام کتابخانه‌هایی باشه که در پروژه‌ت استفاده کردی، مثل:


streamlit
pandas
numpy
matplotlib
plotly
    

می‌تونی برای دریافت آموزش‌های پیشرفته‌تر در مورد Docker و استقرار، به بخش کدهای آماده و اسنیپت‌ها تو سایتمون سر بزنی.

⚠️ عیب‌یابی سریع: مشکلات رایج و راه‌حل‌ها

طبیعیه که تو مسیر یادگیری و توسعه، با چالش‌هایی روبرو بشی. اینجا به چند مشکل رایج و راه حل‌های اونها اشاره می‌کنیم تا وقتت هدر نره و بتونی به راحتی ادامه بدی.

1. Streamlit اجرا نمی‌شود یا ارور “ModuleNotFoundError” می‌دهد

  • مشکل: بعد از streamlit run app.py چیزی اتفاق نمی‌افتد یا با خطای “ModuleNotFoundError: No module named ‘streamlit'” مواجه می‌شوید.
  • راه‌حل:

    • نصب Streamlit: مطمئن شوید که Streamlit با pip install streamlit نصب شده است.
    • محیط مجازی: اگر از محیط مجازی استفاده می‌کنید، اطمینان حاصل کنید که محیت فعال است. ممکن است Streamlit در محیط پایه نصب شده باشد و محیط مجازی فعال آن را نشناسد.
    • تداخل پایتون: اگر چندین نسخه پایتون نصب دارید، از python -m pip install streamlit یا python3 -m pip install streamlit برای نصب در نسخه صحیح استفاده کنید.

2. برنامه در مرورگر به‌روزرسانی نمی‌شود

  • مشکل: کد را تغییر داده‌اید اما داشبورد در مرورگر به‌روزرسانی نمی‌شود.
  • راه‌حل:

    • ذخیره فایل: مطمئن شوید فایل .py خود را ذخیره کرده‌اید.
    • ری‌ران (Re-run): بعد از ذخیره، باید روی دکمه “Rerun” در بالای سمت راست داشبورد (که بعد از تغییر کد ظاهر می‌شود) کلیک کنید. یا دکمه a را فشار دهید.
    • کش (Cache): گاهی اوقات مرورگر کش می‌کند. با Ctrl+Shift+R (ویندوز) یا Cmd+Shift+R (مک) یک Hard Refresh انجام دهید.

3. نمودارها یا تصاویر نمایش داده نمی‌شوند

  • مشکل: نمودارهایی که با Matplotlib یا Plotly ساخته‌اید، یا تصاویری که با st.image() اضافه کرده‌اید، نمایش داده نمی‌شوند.
  • راه‌حل:

    • کتابخانه مربوطه: مطمئن شوید که کتابخانه مربوطه (مثل Matplotlib یا Plotly) نصب شده است.
    • فراخوانی صحیح: از تابع صحیح Streamlit برای نمایش استفاده کنید: st.pyplot(fig) برای Matplotlib، st.plotly_chart(fig_plotly) برای Plotly، و st.image(path_or_url) برای تصاویر.
    • مسیر فایل (برای تصاویر): اگر تصویر محلی است، مطمئن شوید مسیر فایل صحیح و قابل دسترسی است.

4. مشکلات عملکردی و کندی

  • مشکل: داشبورد شما کند است، مخصوصاً وقتی داده‌های زیادی پردازش می‌شود یا محاسبات سنگین انجام می‌شود.
  • راه‌حل:

    • کشینگ (Caching): از دکوراتورهای @st.cache_data و @st.cache_resource برای کش کردن نتایج توابع با محاسبات سنگین استفاده کنید. این کار باعث می‌شود محاسبات فقط یک بار انجام شوند و دفعه بعدی از کش خوانده شوند.
      
      @st.cache_data
      def load_data():
          # ... کد بارگذاری یا پردازش سنگین داده ...
          return data
      
      data = load_data()
                      

    • بهینه‌سازی کد پایتون: الگوریتم‌های خود را برای کار با داده‌های بزرگ بهینه کنید.
    • مقیاس‌پذیری سرور: در صورت استقرار، از سروری با منابع کافی استفاده کنید.

پرسش‌های متداول (FAQ)

برای تکمیل این راهنما، به چند سوال پر تکرار در مورد ساخت داشبورد با Streamlit پاسخ میدیم.

آیا Streamlit برای ساخت اپلیکیشن‌های پیچیده و بزرگ مناسب است؟

Streamlit عمدتاً برای ساخت سریع داشبوردها و اپلیکیشن‌های داده‌محور کوچک تا متوسط طراحی شده. برای پروژه‌های بسیار بزرگ و پیچیده با نیازهای فرانت‌اند خاص، شاید فریمورک‌های وب کامل‌تر مثل Django یا React+Flask مناسب‌تر باشن. اما برای پروتوتایپ‌سازی سریع، نمایش مدل‌های یادگیری ماشین، یا ابزارهای داخلی، Streamlit بی‌رقیبه.

آیا می‌توانم Streamlit را با پایگاه‌های داده ارتباط دهم؟

بله، قطعاً! Streamlit یک ابزار پایتونیه و میتونی با استفاده از کتابخانه‌های پایتون مثل SQLAlchemy، Psycopg2 (برای PostgreSQL)، mysql-connector-python و … به راحتی به انواع پایگاه‌های داده (SQL، NoSQL) متصل بشی و داده‌ها رو بخونی یا بنویسی.

آیا Streamlit رایگان است؟

بله، خود کتابخانه Streamlit متن‌باز و کاملاً رایگانه. همچنین Streamlit Community Cloud هم یک پلن رایگان برای استقرار برنامه‌های کوچک ارائه میده. برای نیازهای پیشرفته‌تر یا استقرار خصوصی، میتونی از سرویس‌های ابری خودت استفاده کنی که البته هزینه‌های خودشون رو دارن.

رفیق برنامه‌نویس، امیدوارم این راهنمای جامع بهت کمک کرده باشه تا با دنیای جذاب Streamlit آشنا بشی و بتونی داشبوردهای خودت رو بسازی. این تازه شروع کاره! با کمی خلاقیت و تمرین، میتونی ایده‌هات رو به واقعیت تبدیل کنی و داده‌هات رو به بهترین شکل ممکن به نمایش بذاری. اگر در هر مرحله‌ای به کد آماده، ابزار یا راهنمایی بیشتری نیاز داشتی، فراموش نکن که وب‌سایت ما همیشه در کنارته. موفق باشی!

Table of Contents

آخرین نوشته‌ها