R-এ Shiny Apps এবং Reactive Programming
Shiny হল R-এর একটি প্যাকেজ যা ইন্টারেক্টিভ ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য ব্যবহৃত হয়। এটি ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে ডায়নামিক রেসপন্স বা ফলাফল প্রদর্শন করতে পারে। Reactive programming হল সেই কৌশল যা Shiny অ্যাপ্লিকেশনে ব্যবহৃত হয়, যাতে ব্যবহারকারীর ইনপুট পরিবর্তনের সাথে সাথে রিয়েল-টাইমে আউটপুট আপডেট করা যায়।
১. Reactive Programming in Shiny
Reactive programming একটি প্রোগ্রামিং প্যারাডাইম যেখানে ডেটা পরিবর্তন হলে স্বয়ংক্রিয়ভাবে সিস্টেমের অন্যান্য অংশ আপডেট হয়ে যায়। Shiny অ্যাপ্লিকেশনেও একই কৌশল ব্যবহার করা হয়, যেখানে একটি ইনপুট পরিবর্তন হলে, সেই ইনপুটের উপর নির্ভরশীল আউটপুট স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়।
Shiny-তে মূল reactive constructs হল:
- Reactive expressions (
reactive()): কিছু রিয়েল-টাইম পরিবর্তনযোগ্য ডেটা তৈরি করা হয়। - Reactive values (
reactiveValues()): ডেটাকে পরিবর্তনযোগ্য অবস্থায় রাখা হয়। - Observers (
observe()এবংobserveEvent()): কোনো পরিবর্তন ঘটলে তা পর্যবেক্ষণ করে ফাংশন চালানো হয়।
২. Reactive Expressions (reactive())
Reactive expressions হল এমন ফাংশন যা যখন তাদের ইনপুট পরিবর্তিত হয়, তখন তারা স্বয়ংক্রিয়ভাবে পুনরায় হিসাব করা হয়। এটি মূলত ডেটার উপর নির্ভরশীল এবং ইনপুট পরিবর্তন হলেই তা আপডেট হবে।
উদাহরণ: Basic Reactive Expression in Shiny
# shiny প্যাকেজ লোড করা
library(shiny)
# UI তৈরি
ui <- fluidPage(
sliderInput("slider", "Select a number:", min = 1, max = 100, value = 50),
textOutput("text_output")
)
# সার্ভার ফাংশন
server <- function(input, output) {
# Reactive expression
reactive_value <- reactive({
input$slider * 2 # Slider value এর দ্বিগুণ
})
# Reactive output
output$text_output <- renderText({
paste("The double of the selected number is:", reactive_value()) # Reactive value এর আউটপুট
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)ব্যাখ্যা:
reactive()ফাংশনটি একটি রিয়েল-টাইম আপডেট তৈরি করে। এখানে, যখন slider এর মান পরিবর্তিত হয়, তখনreactive_value()ফাংশনটি স্বয়ংক্রিয়ভাবে তার মান আপডেট করবে এবংrenderText()আউটপুট হিসেবে এটি প্রদর্শন করবে।reactive_value()ফাংশনটির মানটি স্বয়ংক্রিয়ভাবেinput$sliderএর মানের দ্বিগুণ হিসেব করা হবে এবং প্রতি পরিবর্তনের সাথে এটি আপডেট হবে।
৩. Reactive Values (reactiveValues())
ReactiveValues হলো একটি রিয়েল-টাইম পরিবর্তনযোগ্য ডেটা স্টোর যা শাইনির অ্যাপ্লিকেশনের মধ্যে ভ্যালু স্টোর করতে ব্যবহৃত হয়।
উদাহরণ: Using reactiveValues()
library(shiny)
# UI তৈরি
ui <- fluidPage(
actionButton("button", "Click Me"),
textOutput("click_count")
)
# Server ফাংশন
server <- function(input, output) {
# Reactive values তৈরি
values <- reactiveValues(count = 0)
# Observer: Button ক্লিক হলে count বাড়বে
observeEvent(input$button, {
values$count <- values$count + 1 # Count বাড়ানো
})
# Reactive output: Click count প্রদর্শন
output$click_count <- renderText({
paste("Button clicked", values$count, "times.")
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)ব্যাখ্যা:
reactiveValues()ফাংশনটি count নামে একটি reactive value তৈরি করেছে। এখানেcountএকবার ০ দিয়ে শুরু হয়।observeEvent()ফাংশনটি ব্যবহারকারী যখন বাটনে ক্লিক করবেন, তখনvalues$countমানটি ১ বাড়াবে।renderText()ব্যবহার করে সেই count এর মান শো করা হবে, যা প্রতি ক্লিকের সাথে আপডেট হবে।
৪. Observers (observe() এবং observeEvent())
Observers হল ফাংশন যা কোনো নির্দিষ্ট ইভেন্ট বা পরিবর্তন শোনার কাজ করে এবং যখনই নির্দিষ্ট পরিবর্তন ঘটে, তখন তার ভিত্তিতে কিছু অ্যাকশন নেওয়া হয়।
observe(): সাধারণ পরিবর্তন বা রিয়েক্টিভ এক্সপ্রেশন গুলি ট্র্যাক করে।observeEvent(): নির্দিষ্ট কোনো ইভেন্ট (যেমন একটি বাটন ক্লিক) ট্র্যাক করে এবং সে অনুযায়ী কাজ করে।
উদাহরণ: Using observe() and observeEvent()
library(shiny)
# UI তৈরি
ui <- fluidPage(
actionButton("button", "Click Me"),
textOutput("message")
)
# Server ফাংশন
server <- function(input, output) {
# Observer: Button ক্লিক হলে message পরিবর্তিত হবে
observeEvent(input$button, {
output$message <- renderText("Button has been clicked!")
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)ব্যাখ্যা:
observeEvent(input$button, {...})ফাংশনটি শোনে, যখন ব্যবহারকারী button ক্লিক করবেন, তখন একটি নতুন মেসেজ প্রদর্শিত হবে। এটি একটি সাধারণ observer যা ইভেন্টের পরিবর্তন শোনে এবং তার ভিত্তিতে অ্যাকশন নেয়।
৫. Reactive UI Elements
Shiny-তে reactive UI elements তৈরি করা যেতে পারে, যা স্বয়ংক্রিয়ভাবে পরিবর্তিত হয় যখন ডেটা বা ইনপুট পরিবর্তিত হয়। উদাহরণস্বরূপ, ড্রপডাউন বা স্লাইডার ব্যবহারকারী একটি ভ্যালু নির্বাচন করলে, তার ভিত্তিতে UI পরিবর্তন হতে পারে।
উদাহরণ: Reactive UI with Inputs
library(shiny)
# UI তৈরি
ui <- fluidPage(
selectInput("num", "Choose a number", choices = c(1, 2, 3, 4, 5)),
textOutput("result")
)
# Server ফাংশন
server <- function(input, output) {
output$result <- renderText({
paste("You selected number", input$num)
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)ব্যাখ্যা:
- এখানে selectInput() ব্যবহার করা হয়েছে, যেখানে ব্যবহারকারী একটি সংখ্যা নির্বাচন করতে পারবেন।
- renderText() ফাংশনটি সিলেক্ট করা সংখ্যাটি প্রদর্শন করবে, যা প্রতি নির্বাচনের সাথে আপডেট হবে।
সারসংক্ষেপ
- Reactive Programming Shiny অ্যাপ্লিকেশনে ব্যবহৃত একটি মূল কৌশল, যা ডেটার পরিবর্তনের সাথে UI এবং আউটপুট আপডেট করতে সাহায্য করে।
- Reactive Expressions (যেমন
reactive()) ডেটার উপর ভিত্তি করে ফলাফল আপডেট করে। - Reactive Values (যেমন
reactiveValues()) ডেটার পরিবর্তনগুলো পরিচালনা করে এবং তার ভিত্তিতে UI পরিবর্তন হতে পারে। - Observers (যেমন
observe()এবংobserveEvent()) ইনপুট ইভেন্ট বা ডেটার পরিবর্তন শোনে এবং তার ভিত্তিতে কিছু কার্যকলাপ চালায়।
Shiny এবং Reactive Programming ব্যবহার করে আপনি ডায়নামিক ও ইন্টারঅ্যাক্টিভ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন যা ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে রিয়েল-টাইমে আউটপুট আপডেট করতে পারে।
Read more