تجسم داده های زمان واقعی با پایتون، داش و افزایش موج

داده های بلادرنگ برای کسب و کارها برای تصمیم گیری سریع مهم است. دیدن این داده ها به صورت بصری می تواند به تصمیم گیری سریعتر کمک کند. ما می توانیم با استفاده از برنامه های داده یا داشبوردهای مختلف، نمایش های بصری داده ها را ایجاد کنیم. داش است یک کتابخانه پایتون که طیف وسیعی از اجزای داخلی را برای ایجاد نمودارهای تعاملی، نمودارها، جداول و سایر عناصر رابط کاربری فراهم می کند. RisingWave یک است پایگاه داده جریان مبتنی بر SQL برای پردازش داده ها در زمان واقعی این مقاله نحوه استفاده از Python، پروژه منبع باز Dash و RisingWave را برای تجسم دادههای بلادرنگ توضیح میدهد.
نحوه تجسم داده ها در زمان واقعی
ما می دانیم که داده های بلادرنگ داده هایی هستند که بلافاصله تولید و پردازش می شوند، زیرا از منابع داده های مختلف جمع آوری می شوند. منابع می توانند پایگاه داده های معمولی مانند Postgres یا MySQL و واسطه های پیام مانند کافکا باشند. تجسم داده در زمان واقعی شامل چند مرحله است، ابتدا ما بلعیدن، سپس پردازش کنید و در نهایت این داده ها را نشان دهید در یک داشبورد
در مورد داده های تحویل سفارش، تجسم این داده ها در زمان واقعی می تواند بینش ارزشمندی در مورد عملکرد یک رستوران یا خدمات تحویل ارائه دهد. برای مثال، میتوانیم از دادههای بیدرنگ برای نظارت بر مدت زمان تحویل سفارشها، شناسایی تنگناها در فرآیند تحویل و پیگیری تغییرات حجم سفارش در طول زمان استفاده کنیم. هنگام برخورد با داده هایی که دائماً در حال تغییر هستند، پیگیری همه چیزهایی که اتفاق می افتد و شناسایی الگوها یا روندها می تواند دشوار باشد. با استفاده از ابزارهای رایگان مانند Dash و RisingWave، میتوانیم تجسمهای تعاملی ایجاد کنیم که به ما امکان میدهد این دادههای دائماً در حال تغییر را بررسی و تجزیه و تحلیل کنیم.
وقتی صحبت از کار با داده می شود، اولین زبان برنامه نویسی که ممکن است به آن فکر کنید پایتون است، زیرا دارای طیف وسیعی از کتابخانه ها است. Dash یکی از آنهاست که به ما امکان می دهد یک برنامه داده با رابط کاربری غنی و قابل تنظیم فقط با استفاده از کد پایتون ایجاد کنیم. Dash بر روی Flask، Plotly.js و React.js ساخته شده است که ابزارهای محبوب توسعه وب هستند، بنابراین نیازی به دانستن HTML، CSS یا سایر چارچوب های جاوا اسکریپت ندارید.
با RisingWave، ما می توانیم مصرف جریان داده از منابع مختلف، نماهای مادی شده ای ایجاد کنید که برای پرس و جوهای پیچیده بهینه شده اند و داده های بلادرنگ را با استفاده از SQL جستجو کنید. از آنجایی که RisingWave با PostgreSQL سازگار است، می توانیم از آن استفاده کنیم [psycopg2](https://pypi.org/project/psycopg2/)
(کتابخانه مشتری PostgreSQL در پایتون) درایور برای اتصال به RisingWave، انجام عملیات پرس و جو. در بخش بعدی ببینید.
نمایش داده های تحویل سفارش را تجسم کنید
در آموزش آزمایشی، ما از مخزن GitHub زیر با نسخههای نمایشی RisingWave استفاده میکنیم، جایی که فرض میکنیم تمام موارد ضروری با استفاده از Docker compose تنظیم شدهاند. می توانید راه های دیگر اجرای RisingWave را در وب سایت رسمی بررسی کنید. ما یک موضوع کافکا داریم به نام delivery_orders
که شامل رویدادهایی برای هر سفارشی است که در یک وب سایت تحویل غذا ارسال می شود. هر رویداد شامل اطلاعات مربوط به سفارش، مانند order ID
، restaurant ID
، و delivery status
. مولد بار کاری (اسکریپت پایتون به نام Datagen) تولید دادههای ساختگی تصادفی را به طور مداوم شبیهسازی میکند و آنها را در موضوعات کافکا پخش میکند. در واقع، این داده های ساختگی را می توان با داده هایی که از برنامه وب یا سرویس پشتیبان شما می آید جایگزین کرد.
قبل از اینکه شروع کنی
برای تکمیل این آموزش به موارد زیر نیاز دارید.
- مطمئن شوید که Docker و Docker Compose را در محیط خود نصب کرده اید.
- اطمینان حاصل کنید که ترمینال تعاملی PostgreSQL، psql، در محیط شما نصب شده است. برای دستورالعمل های دقیق، دانلود PostgreSQL را ببینید.
- پایتون 3 را برای سیستم عامل خود دانلود و نصب کنید.
pip
دستور به طور خودکار نصب خواهد شد.
نسخه ی نمایشی که من روی سیستم عامل ویندوز آزمایش کردم، دسکتاپ Docker و نسخه 3.10.11 پایتون نصب شده است.
مرحله 1: راه اندازی خوشه نمایشی RisingWave
ابتدا مخزن نمونه RisingWave را در محیط محلی خود کلون کنید.
git clone https://github.com/risingwavelabs/risingwave.git
سپس integration_tests/delivery
دایرکتوری و کلاستر دمو را از فایل نوشتن docker شروع کنید.
cd risingwave/integration_tests/delivery
docker compose up -d
مطمئن شوید که همه کانتینرها آماده و کار می کنند!
مرحله 2: کتابخانه های Dash و Psycopg2 را نصب کنید
برای نصب دش می توانید به راهنمای نصب دش در وب سایت نیز مراجعه کنید. اصولاً باید دو کتابخانه (خود داش و پانداها) را با اجرای موارد زیر نصب کنیم pip install
دستور:
# This also brings along the Plotly graphing library.
# Plotly is known for its interactive charts
# Plotly Express requires Pandas to be installed too.
pip install dash pandas
ما هم باید نصب کنیم [psycopg2](https://pypi.org/project/psycopg2/)
برای تعامل با پایگاه داده جریان RisingWave:
pip install psycopg2-binary
مرحله 3: یک منبع داده ایجاد کنید
برای دریافت داده های بلادرنگ با RisingWave، ابتدا باید یک منبع داده راه اندازی کنید. در پروژه نمایشی، کافکا باید به عنوان منبع داده تعریف شود. ما قصد داریم یک فایل جدید به نام ایجاد کنیم create-a-source.py
در همان integration_tests/delivery
دایرکتوری با اسکریپت پایتون که در آن به RisingWave متصل میشویم و جدولی برای مصرف و ماندگاری ایجاد میکنیم. delivery_orders
موضوعات کافکا به سادگی می توانید کد زیر را کپی کرده و در فایل جدید قرار دهید.
import psycopg2
conn = psycopg2.connect(database="dev", user="root", password="", host="localhost", port="4566") # Connect to RisingWave.
conn.autocommit = True # Set queries to be automatically committed.
with conn.cursor() as cur:
cur.execute("""
CREATE TABLE delivery_orders_source (
order_id BIGINT,
restaurant_id BIGINT,
order_state VARCHAR,
order_timestamp TIMESTAMP
) WITH (
connector="kafka",
topic="delivery_orders",
properties.bootstrap.server="message_queue:29092",
scan.startup.mode="earliest"
) ROW FORMAT JSON;""") # Execute the query.
conn.close() # Close the connection.
پس از ایجاد فایل، اجرا می کنید python create-a-source.py
و جدول منبع را در RisingWave ایجاد می کند.
مرحله 4: یک نمای مادی ایجاد کنید
در مرحله بعد، ما یک نمای متریال شده جدید مشابه نحوه ایجاد جدول ایجاد می کنیم، یک فایل جدید به نام ایجاد می کنیم create-a-materialized-view.py
و پرس و جوی SQL را با استفاده از psycopg2
کتابخانه همچنین امکان ادغام دو مرحله آخر در یک فایل اسکریپت پایتون وجود دارد.
import psycopg2
conn = psycopg2.connect(database="dev", user="root", password="", host="localhost", port="4566")
conn.autocommit = True
with conn.cursor() as cur:
cur.execute("""CREATE MATERIALIZED VIEW restaurant_orders_view AS
SELECT
window_start,
restaurant_id,
COUNT(*) AS total_order
FROM
HOP(delivery_orders_source, order_timestamp, INTERVAL '1' MINUTE, INTERVAL '15' MINUTE)
WHERE
order_state="CREATED"
GROUP BY
restaurant_id,
window_start;""")
conn.close()
در بالای کوئری SQL تعداد کل سفارشهای ایجاد شده از یک رستوران خاص در 15 دقیقه گذشته را در زمان واقعی محاسبه میکند و نتیجه را در نمای واقعی ذخیره میکند. اگر تغییری در دادهها اتفاق بیفتد یا موضوعات جدید کافکا از راه برسد، RisingWave به طور خودکار افزایش و به روز رسانی می شود نتیجه نگاه مادی شده پس از تنظیم منبع داده، نمای واقعی، می توانید شروع به دریافت داده ها کنید و این داده ها را با استفاده از Dash تجسم کنید.
مرحله 5: ساخت اپلیکیشن Dash
اکنون ما یک برنامه Dash خود را میسازیم تا محتوای مشاهدهای که در RisingWave داریم را جستجو و تجسم کنیم. می توانید آموزش Dash را در 20 دقیقه دنبال کنید تا بلوک های اصلی Dash را درک کنید. کد برنامه مثال ما داده های سفارشات رستوران را در دو قالب جدول و نمودار نمایش می دهد. کد پایتون زیر را ببینید dash-example.py
:
import psycopg2
import pandas as pd
import dash
from dash import dash_table
from dash import dcc
import dash_html_components as html
import plotly.express as px
# Connect to the PostgreSQL database
conn = psycopg2.connect(database="dev", user="root", password="", host="localhost", port="4566")
# Retrieve data from the materialized view using pandas
df = pd.read_sql_query("SELECT window_start, restaurant_id, total_order FROM restaurant_orders_view;", conn)
# Create a Dash application
app = dash.Dash(__name__)
# Define layout
app.layout = html.Div(children=[
html.H1("Restaurant Orders Table"),
dash_table.DataTable(id="restaurant_orders_table", columns=[{"name": i, "id": i} for i in df.columns], data=df.to_dict("records"), page_size=10),
html.H1("Restaurant Orders Graph"),
dcc.Graph(id="restaurant_orders_graph", figure=px.bar(df, x="window_start", y="total_order", color="restaurant_id", barmode="group"))
])
# Run the application
if __name__ == '__main__':
app.run_server(debug=True)
این قطعه کد داده ها را از قسمت بازیابی می کند restaurant_orders_view
نمای مادی با استفاده از پانداها و نمایش آن در جدول داش با استفاده از dash_table.DataTable
و نمودار میله ای با استفاده از dcc.Graph
. جدول و نمودار میلهای دارای ستونهایی است که با ستونهای نمای تحققیافته (“window_start”، “total_order” و “restaurant_id”) و ردیفهایی مطابقت دارند که با دادههای نمای تحققیافته مطابقت دارند.
مرحله 6: نتایج را مشاهده کنید
با اجرای موارد بالا می توانید برنامه را اجرا کنید dash-example.py
اسکریپت و پیمایش به http://localhost:8050/
در مرورگر وب خود (پیامی در ترمینال دریافت می کنید که به شما می گوید به این پیوند بروید).
خلاصه
به طور کلی، Dash یک ابزار قدرتمند برای ایجاد نماهای تحلیلی داده است که به رابط های کاربری پیچیده و قابلیت های تجسم داده نیاز دارد، همه با استفاده از سادگی و ظرافت زبان برنامه نویسی پایتون. وقتی از آن همراه با پایگاه داده استریم RisingWave استفاده میکنیم، بینشهایی درباره دادههای همزمان به دست میآوریم و میتوانیم به ما در تصمیمگیری آگاهانهتر و اقدام برای بهینهسازی عملکرد کمک کنیم.
منابع مرتبط
محتوای پیشنهادی
انجمن
🙋 به انجمن Risingwave بپیوندید
درباره نویسنده