حول المحتوى:
دليل خطوة بخطوة لبناء لوحة بيانات تفاعلية، ربطها بقاعدة بيانات، نشرها على الإنترنت، وتحسين أدائها.
إذا كنت تعمل في تحليل البيانات، الذكاء الاصطناعي، أو تطوير البرمجيات، فغالباً ستحتاج إلى عرض النتائج بصورة تفاعلية وواضحة أمام فريقك أو عملائك. هنا يأتي دور Dashboard Plotly Dash Python كأحد أقوى الحلول لبناء لوحات بيانات تفاعلية بسهولة وسرعة، بالاعتماد على لغة بايثون فقط.
في هذا الدليل سنشرح خطوة بخطوة:
Plotly Dash هي إطار عمل (Framework) مفتوح المصدر مبني على بايثون، تم تطويره لتسهيل إنشاء تطبيقات ويب تفاعلية ولوحات بيانات (Dashboards) دون الحاجة لكتابة كود Frontend (مثل HTML, CSS, JavaScript) بشكل مباشر.
أهم مميزات Plotly Dash:
هذا يجعل Dashboard Plotly Dash Python خياراً ممتازاً لكل من يعمل في الذكاء الاصطناعي أو تحليل البيانات، خصوصاً إذا أردت واجهة تفاعلية سريعة التطوير.
من الأفضل عزل مشاريعك في بيئة افتراضية لتجنب تعارض الإصدارات بين المكتبات:
python -m venv venv
source venv/bin/activate # على لينكس/ماك
venv\Scripts\activate # على ويندوز
داخل البيئة الافتراضية قم بتثبيت:
pip install dash plotly pandas
إذا كنت تخطط للاتصال بقاعدة بيانات SQL (مثل PostgreSQL أو MySQL)، يمكنك تثبيت:
pip install sqlalchemy psycopg2-binary # لمثال PostgreSQL
لنبدأ بتطبيق بسيط يوضح الفكرة الأساسية. سننشئ ملفاً باسم app.py.
import dash
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd
# بيانات تجريبية بسيطة
df = px.data.gapminder().query("year == 2007")
app = dash.Dash(__name__)
تتكون واجهة Dash من عناصر HTML وعناصر تفاعلية تسمى Components، مثل القوائم المنسدلة والرسوم البيانية:
app.layout = html.Div(
children=[
html.H1("أول Dashboard باستخدام Plotly Dash"),
html.P("عرض بيانات الدول حسب القارة باستخدام Dashboard Plotly Dash Python"),
dcc.Dropdown(
id="continent-dropdown",
options=[
{"label": c, "value": c}
for c in df["continent"].unique()
],
value="Asia",
clearable=False
),
dcc.Graph(id="life-exp-graph")
]
)
الـCallback هي دالة تربط بين مدخلات (Inputs) مثل Dropdown وبين مخرجات (Outputs) مثل Graph.
@app.callback(
Output("life-exp-graph", "figure"),
Input("continent-dropdown", "value")
)
def update_graph(selected_continent):
filtered = df[df["continent"] == selected_continent]
fig = px.scatter(
filtered,
x="gdpPercap",
y="lifeExp",
size="pop",
color="country",
title=f"العمر المتوقع مقابل دخل الفرد في {selected_continent}",
log_x=True
)
return fig
if __name__ == "__main__":
app.run_server(debug=True)
بعد تشغيل الملف:
python app.py
افتح المتصفح على الرابط الذي يظهر في الطرفية (غالباً http://127.0.0.1:8050)، وستشاهد أول Dashboard Plotly Dash Python تعمل بشكل تفاعلي.
لجعل الـDashboard مفيدة في سياق حقيقي (مشروع ذكاء اصطناعي، نظام تقارير، لوحات مراقبة)، يجب أن تتصل بمصدر بيانات حقيقي مثل قاعدة بيانات SQL.
نفترض وجود قاعدة بيانات PostgreSQL تحتوي جدولاً باسم metrics يحفظ بيانات أداء نموذج ذكاء اصطناعي (دقة، خسارة، وقت التدريب… إلخ).
from sqlalchemy import create_engine
import pandas as pd
DATABASE_URL = "postgresql://user:password@localhost:5432/mydb"
engine = create_engine(DATABASE_URL)
def load_data():
query = "SELECT * FROM metrics ORDER BY created_at DESC LIMIT 1000"
df = pd.read_sql(query, engine)
return df
سنضيف رسم بياني جديد يعتمد على بيانات قاعدة البيانات:
app.layout = html.Div(
children=[
html.H1("لوحة متابعة أداء نموذج الذكاء الاصطناعي"),
dcc.Dropdown(
id="metric-dropdown",
options=[
{"label": "الدقة (Accuracy)", "value": "accuracy"},
{"label": "الخسارة (Loss)", "value": "loss"}
],
value="accuracy",
clearable=False
),
dcc.Graph(id="metric-graph"),
# زر لتحديث البيانات يدوياً
html.Button("تحديث البيانات", id="refresh-btn"),
html.Div(id="last-update")
]
)
الآن نعرّف Callback يستخدم البيانات من قاعدة البيانات:
from dash.dependencies import Input, Output, State
import datetime
@app.callback(
Output("metric-graph", "figure"),
Output("last-update", "children"),
Input("metric-dropdown", "value"),
Input("refresh-btn", "n_clicks"),
prevent_initial_call=False
)
def update_metric_graph(selected_metric, n_clicks):
df = load_data()
fig = px.line(
df,
x="created_at",
y=selected_metric,
title=f"تتبع {selected_metric} بمرور الوقت"
)
last_update = f"آخر تحديث: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
return fig, last_update
بهذا الشكل أصبحت الـDashboard متصلة ببيانات حقيقية يتم استدعاؤها من قاعدة بيانات وتحديثها عند الطلب.
بعد اختبار التطبيق محلياً، حان وقت نشره ليستطيع الآخرون استخدامه. هناك عدة طرق:
pip freeze > requirements.txt
أضف في نهاية ملف app.py تعريف متغير server المطلوب لـGunicorn:
server = app.server
ثم يمكنك في الخادم البعيد تشغيل:
gunicorn app:server
عادة يتم وضع Nginx أمام Gunicorn كـ Reverse Proxy لتوجيه الطلبات من المنفذ 80/443 إلى منفذ Gunicorn، مع إعداد HTTPS (باستخدام Let’s Encrypt مثلاً).
عند العمل على Dashboard Plotly Dash Python خاصة بمشاريع الذكاء الاصطناعي أو تحليل البيانات الكبيرة، ستواجه تحديات في الأداء. إليك بعض النصائح العملية:
إذا كانت البيانات نفسها تُستخدم في أكثر من رسم بياني، يمكنك تحميلها مرة واحدة وتخزينها في dcc.Store:
app.layout = html.Div([
dcc.Store(id="data-store"),
# باقي مكونات الـDashboard
])
ثم تُحمّل البيانات في Callback واحد، وتستهلكها باقي الـCallbacks من الـStore بدلاً من إعادة الاستعلام عن قاعدة البيانات.
مع نمو الـDashboard، يصبح الكود معقداً. حاول:
بما أن موضوع المقال ضمن قسم الذكاء الاصطناعي، فمن المهم توضيح كيف يمكن ربط Dash بنماذج الذكاء الاصطناعي:
على سبيل المثال، إذا كنت تبني نموذج تصنيف نصوص يعتمد على إحدى نماذج الذكاء الاصطناعي على Ollama أو نموذج قمت بتدريبه بنفسك باستخدام PyTorch، يمكنك:
لجعل الـDashboard الخاصة بك عملية ومفيدة حقاً:
بناء Dashboard Plotly Dash Python هو خيار ممتاز لكل من يعمل في الذكاء الاصطناعي، تحليل البيانات، أو تطوير الحلول التقنية التي تحتاج إلى عرض تفاعلي للأرقام والنتائج. باستخدام Dash يمكنك:
ابدأ بتجربة بسيطة كما في الأمثلة، ثم قم تدريجياً بتوسيع Dashboard الخاصة بك لتشمل المزيد من الرسوم التفاعلية، التكاملات مع قواعد البيانات، وربما نماذج ذكاء اصطناعي متقدمة، لتصل في النهاية إلى لوحة تحكم احترافية تخدم مشروعك بأفضل شكل.
دليل خطوة بخطوة لبناء لوحة بيانات تفاعلية، ربطها بقاعدة بيانات، نشرها على الإنترنت، وتحسين أدائها.
مساحة اعلانية