برنامه نویسی

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

داده های بلادرنگ برای کسب و کارها برای تصمیم گیری سریع مهم است. دیدن این داده ها به صورت بصری می تواند به تصمیم گیری سریعتر کمک کند. ما می توانیم با استفاده از برنامه های داده یا داشبوردهای مختلف، نمایش های بصری داده ها را ایجاد کنیم. داش است یک کتابخانه پایتون که طیف وسیعی از اجزای داخلی را برای ایجاد نمودارهای تعاملی، نمودارها، جداول و سایر عناصر رابط کاربری فراهم می کند. 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 بپیوندید

درباره نویسنده

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا