Plotly এর মাধ্যমে আপনি external data sources (বাইরের ডেটা উৎস) থেকে dynamic data integration করতে পারেন, যার মাধ্যমে আপনি আপনার ড্যাশবোর্ড বা ভিজুয়ালাইজেশন সিস্টেমে লাইভ বা আপডেট হওয়া ডেটা প্রদর্শন করতে পারবেন। এতে ব্যবহারকারী বা সিস্টেমের পরিবর্তন অনুসারে ডেটা আপডেট হবে এবং গ্রাফ বা ড্যাশবোর্ড স্বয়ংক্রিয়ভাবে রিফ্রেশ হবে।
Plotly সাধারণত Dash ফ্রেমওয়ার্কের মাধ্যমে এই ধরনের ডেটা ইন্টিগ্রেশন সম্ভব করে তোলে। Dash-এর মাধ্যমে আপনি বিভিন্ন ধরনের external data sources যেমন APIs, CSV files, Databases, এবং Real-time data streams থেকে ডেটা সংগ্রহ করতে পারেন এবং সেগুলো আপনার গ্রাফে ডায়নামিকভাবে প্রদর্শন করতে পারেন।
External Data Sources এর মধ্যে Integration
১. APIs: Web APIs (REST APIs) থেকে ডেটা নিয়ে গ্রাফ বা ড্যাশবোর্ডে প্রদর্শন করা। ২. CSV/Excel Files: স্থানীয় বা ওয়েব সার্ভার থেকে CSV/Excel ফাইল ইমপোর্ট করে ডেটা সংগ্রহ করা। ৩. Databases: SQL বা NoSQL ডেটাবেস থেকে ডেটা কোয়েরি করে ড্যাশবোর্ডে ডিসপ্লে করা। ৪. Real-time Data Streams: WebSocket বা অন্যান্য স্ট্রিমিং পদ্ধতি ব্যবহার করে লাইভ ডেটা গ্রাফে দেখানো।
External Data Sources থেকে Data Integration এর উদাহরণ
ধরি, আপনি একটি CSV ফাইল থেকে ডেটা নিয়ে Plotly গ্রাফে প্রদর্শন করতে চান। এখানে Dash ফ্রেমওয়ার্ক ব্যবহার করে লাইভ ডেটা ইন্টিগ্রেশন দেখানো হবে।
১. CSV ফাইল থেকে ডেটা ইন্টিগ্রেশন
এখানে আমরা একটি সিম্পল উদাহরণ দেখবো যেখানে একটি CSV ফাইল থেকে ডেটা লোড করে Scatter Plot তৈরি করা হবে।
উদাহরণ: CSV থেকে ডেটা ইন্টিগ্রেট করে গ্রাফ তৈরি করা
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import pandas as pd
from dash.dependencies import Input, Output
# Dash অ্যাপ্লিকেশন শুরু করা
app = dash.Dash()
# CSV ফাইল থেকে ডেটা লোড করা
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv')
# অ্যাপ্লিকেশনের লেআউট
app.layout = html.Div([
html.H1("Gapminder Data Visualization"),
# Dropdown উইজেট
dcc.Dropdown(
id='continent-dropdown',
options=[
{'label': continent, 'value': continent} for continent in df['continent'].unique()
],
value='Asia'
),
# গ্রাফ প্লট করার জন্য Div
dcc.Graph(id='scatter-plot')
])
# Callback ফাংশন
@app.callback(
Output('scatter-plot', 'figure'),
[Input('continent-dropdown', 'value')]
)
def update_graph(selected_continent):
filtered_df = df[df['continent'] == selected_continent]
# Scatter Plot তৈরি করা
fig = px.scatter(filtered_df, x="gdpPercap", y="lifeExp", color="country", size="pop", log_x=True, title=f"Life Expectancy vs GDP per Capita ({selected_continent})")
return fig
# অ্যাপ চালানো
if __name__ == '__main__':
app.run_server(debug=True)
এখানে:
- CSV ফাইল: আমরা gapminder ডেটাসেট CSV ফাইল থেকে ডেটা লোড করছি।
- Dropdown: ড্রপডাউন উইজেটের মাধ্যমে মহাদেশ নির্বাচন করা যাচ্ছে এবং সেই অনুযায়ী গ্রাফ আপডেট হচ্ছে।
- Scatter Plot: CSV ডেটা ব্যবহার করে Scatter Plot তৈরি করা হয়েছে, যেখানে GDP এবং Life Expectancy এর মধ্যে সম্পর্ক দেখানো হয়েছে।
২. API থেকে ডেটা ইন্টিগ্রেশন
আপনি একটি REST API থেকে ডেটা সংগ্রহ করে তা Plotly গ্রাফে প্রদর্শন করতে পারেন। এখানে আমরা requests লাইব্রেরি ব্যবহার করে একটি API থেকে ডেটা সংগ্রহ করব।
উদাহরণ: API থেকে ডেটা ইন্টিগ্রেট করা
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import requests
from dash.dependencies import Input, Output
# Dash অ্যাপ্লিকেশন তৈরি করা
app = dash.Dash()
# API থেকে ডেটা সংগ্রহ
response = requests.get("https://api.coindesk.com/v1/bpi/currentprice.json")
data = response.json()
bitcoin_data = {
"time": data["time"]["updated"],
"price": data["bpi"]["USD"]["rate_float"]
}
# অ্যাপ্লিকেশনের লেআউট
app.layout = html.Div([
html.H1("Real-time Bitcoin Price"),
# গ্রাফ প্লট করার জন্য Div
dcc.Graph(id='bitcoin-price-graph')
])
# Callback ফাংশন
@app.callback(
Output('bitcoin-price-graph', 'figure'),
[Input('bitcoin-price-graph', 'id')] # Dummy Input to trigger graph update
)
def update_graph(_):
# রিয়েল-টাইম Bitcoin মূল্য গ্রাফ তৈরি করা
fig = px.line(x=[bitcoin_data["time"]], y=[bitcoin_data["price"]], title="Bitcoin Price (USD)")
return fig
# অ্যাপ চালানো
if __name__ == '__main__':
app.run_server(debug=True)
এখানে:
- API Call: আমরা CoinDesk API থেকে Bitcoin মূল্য তথ্য সংগ্রহ করেছি।
- Line Graph: API থেকে প্রাপ্ত ডেটা ব্যবহার করে Line Graph তৈরি করেছি, যা রিয়েল-টাইম Bitcoin মূল্য প্রদর্শন করবে।
৩. WebSocket বা Real-time Data Streams থেকে Data Integration
রিয়েল-টাইম ডেটা স্ট্রিমের জন্য, আপনি WebSockets বা SocketIO ব্যবহার করতে পারেন। Dash এবং Flask-SocketIO লাইব্রেরির সাহায্যে রিয়েল-টাইম ডেটা ইন্টিগ্রেশন সম্ভব।
উদাহরণ: WebSocket থেকে রিয়েল-টাইম ডেটা নেওয়া
from flask_socketio import SocketIO, emit
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objects as go
import random
# Flask এবং SocketIO ইনিশিয়ালাইজ করা
app = dash.Dash(__name__)
server = app.server
socketio = SocketIO(server)
# অ্যাপ্লিকেশনের লেআউট
app.layout = html.Div([
dcc.Graph(id='live-update-graph'),
dcc.Interval(id='interval-component', interval=1*1000, n_intervals=0)
])
# লাইভ গ্রাফ আপডেট করার জন্য কলব্যাক
@app.callback(
Output('live-update-graph', 'figure'),
[Input('interval-component', 'n_intervals')]
)
def update_graph(n_intervals):
# লাইভ ডেটা তৈরি করা (এখানে একটি র্যান্ডম ডেটা ব্যবহার করা হয়েছে)
x_data = list(range(1, n_intervals + 1))
y_data = [random.randint(1, 100) for _ in range(n_intervals)]
# গ্রাফে লাইভ ডেটা আপডেট করা
figure = {
'data': [
go.Scatter(
x=x_data,
y=y_data,
mode='lines+markers'
)
],
'layout': go.Layout(
title='Real-time Data Visualization via WebSocket',
xaxis=dict(range=[min(x_data), max(x_data)]),
yaxis=dict(range=[0, 100]),
)
}
return figure
if __name__ == '__main__':
socketio.run(server, debug=True)
এখানে:
- WebSocket: আমরা WebSocket এর মাধ্যমে লাইভ ডেটা পেতে এবং আপডেট করতে সক্ষম।
- Interval:
dcc.Intervalব্যবহৃত হয়েছে গ্রাফের আপডেটের জন্য।
সারাংশ
Plotly এবং Dash এর মাধ্যমে External Data Sources থেকে Dynamic Data Integration সম্ভব। আপনি বিভিন্ন ধরনের data sources যেমন APIs, CSV files, Databases, এবং Real-time data streams থেকে ডেটা সংগ্রহ করতে পারেন এবং তা ইন্টারেকটিভ ড্যাশবোর্ড বা গ্রাফে প্রদর্শন করতে পারেন। এটি ডেটার আপডেট এবং ইন্টারেক্টিভ ভিজুয়ালাইজেশনকে বাস্তবসম্মত এবং কার্যকরী করে তোলে।
Read more