Shiny একটি আর প্রোগ্রামিং প্যাকেজ যা ডেভেলপারদের ওয়েব অ্যাপ্লিকেশন তৈরি করার সুবিধা দেয়, যেখানে ইউজার ইন্টারঅ্যাকশন এবং ডায়নামিক ডেটা ভিজ্যুয়ালাইজেশন সহজে ইনকর্পোরেট করা যায়। Shiny অ্যাপ্লিকেশন তৈরি করতে কোনো ওয়েব ডেভেলপমেন্টের বিশেষজ্ঞ হতে হয় না, কারণ এটি আর প্রোগ্রামিং ভাষা এবং আর প্যাকেজগুলোর মাধ্যমে ইউজার ইন্টারফেস (UI) এবং সার্ভার লজিক তৈরি করতে সাহায্য করে।
Shiny অ্যাপ্লিকেশনগুলো ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে ডেটার ফলাফল বা ভিজ্যুয়াল পরিবর্তন করে, যেটি ওয়েব ব্রাউজার বা সার্ভার থেকে রান হয়।
Shiny এর প্রধান কম্পোনেন্ট
Shiny অ্যাপ্লিকেশন দুটি প্রধান কম্পোনেন্টে বিভক্ত থাকে:
- UI (User Interface): এটি হলো শাখা যা ব্যবহারকারী অ্যাপ্লিকেশনের সাথে ইন্টারঅ্যাক্ট করে। UI সঠিকভাবে সাজানোর জন্য HTML, CSS এবং JavaScript ব্যবহৃত হতে পারে।
- Server: এটি হলো শাখা যা শখে শখে ডেটা প্রক্রিয়া করে এবং UI তে ফিডব্যাক দেয়। এখানে সকল ডেটা প্রসেসিং এবং অ্যানালিসিস ঘটে।
Shiny অ্যাপ্লিকেশন তৈরির জন্য সাধারণত ui.R (UI) এবং server.R (Server Logic) দুটি ফাইল ব্যবহার করা হয়।
Shiny অ্যাপ্লিকেশন তৈরি করা
১. Shiny প্যাকেজ ইনস্টল এবং লোড করা
প্রথমে shiny প্যাকেজটি ইনস্টল এবং লোড করতে হবে:
# shiny প্যাকেজ ইনস্টল করা
install.packages("shiny")
# shiny প্যাকেজ লোড করা
library(shiny)
২. Basic Shiny অ্যাপ্লিকেশন তৈরি করা
একটি সহজ Shiny অ্যাপ্লিকেশন তৈরি করতে shinyApp() ফাংশন ব্যবহার করা হয়, যেখানে UI এবং Server অংশ আলাদাভাবে লিখতে হয়।
উদাহরণ ১: Simple Shiny অ্যাপ্লিকেশন
library(shiny)
# UI তৈরি করা
ui <- fluidPage(
titlePanel("Simple Shiny Application"),
sidebarLayout(
sidebarPanel(
sliderInput("num", "Choose a number:", 1, 100, 50)
),
mainPanel(
textOutput("value")
)
)
)
# Server লজিক তৈরি করা
server <- function(input, output) {
output$value <- renderText({
paste("The selected number is", input$num)
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
ব্যাখ্যা:
- fluidPage(): একটি রেসপন্সিভ লেআউট তৈরি করে যা সমস্ত স্ক্রীন সাইজে মানানসই।
- sliderInput(): একটি স্লাইডার তৈরি করে, যা ব্যবহারকারীকে মান নির্বাচন করতে দেয়।
- textOutput(): এই ফাংশনটি UI তে একটি টেক্সট আউটপুট তৈরি করে।
- renderText(): এটি server ফাংশনে লেখা থাকে এবং UI তে ডাইনামিক টেক্সট রেন্ডার করতে ব্যবহৃত হয়।
Shiny অ্যাপ্লিকেশনে ডাইনামিক ইন্টারঅ্যাকশন যোগ করা
Shiny অ্যাপ্লিকেশনের প্রধান বৈশিষ্ট্য হল ডাইনামিক ইন্টারঅ্যাকশন। এখানে ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে ফলাফল পরিবর্তিত হয়। যেমন, স্লাইডার ইনপুটের উপর ভিত্তি করে একটি গ্রাফ তৈরি করা।
উদাহরণ ২: Plot তৈরি করা
library(shiny)
# UI তৈরি করা
ui <- fluidPage(
titlePanel("Dynamic Plot Example"),
sidebarLayout(
sidebarPanel(
sliderInput("num", "Choose the number of bins:", 1, 50, 30)
),
mainPanel(
plotOutput("distPlot")
)
)
)
# Server লজিক তৈরি করা
server <- function(input, output) {
output$distPlot <- renderPlot({
x <- faithful$waiting # built-in dataset in R
hist(x, breaks = input$num, col = "skyblue", border = "white",
main = paste("Histogram of Waiting Times"),
xlab = "Waiting Time (in minutes)")
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
এখানে, hist() ফাংশন ব্যবহার করে স্লাইডার ইনপুট অনুযায়ী একটি Histogram তৈরি করা হয়েছে।
Shiny অ্যাপ্লিকেশন ডিপ্লয়মেন্ট
Shiny অ্যাপ্লিকেশনটি Shiny Server বা shinyapps.io এ ডিপ্লয় করা যায়। shinyapps.io একটি ফ্রি এবং পেইড সার্ভিস, যা আপনাকে Shiny অ্যাপ্লিকেশন ক্লাউডে হোস্ট করতে দেয়। এজন্য অ্যাকাউন্ট তৈরি করে অ্যাপ্লিকেশনটি আপলোড করতে হয়।
১. shinyapps.io এ অ্যাপ্লিকেশন আপলোড করা
# shinyapps.io প্যাকেজ ইনস্টল এবং লোড করা
install.packages("rsconnect")
library(rsconnect)
# shinyapps.io তে লগইন করা
rsconnect::setAccountInfo(name='your_name', token='your_token', secret='your_secret')
# অ্যাপ্লিকেশনটি shinyapps.io এ ডিপ্লয় করা
rsconnect::deployApp('path/to/your/app')
Shiny অ্যাপ্লিকেশন কাস্টমাইজেশন
Shiny অ্যাপ্লিকেশনটি আরও কাস্টমাইজ করা যেতে পারে বিভিন্ন ধরনের ফিচার যোগ করে, যেমন:
- Input Widgets: টেক্সট বক্স, চেকবক্স, রেডিও বাটন, স্লাইডার, ড্রপডাউন মেনু ইত্যাদি।
- Output Widgets: গ্রাফ, টেবিল, টেক্সট, HTML কোড ইত্যাদি।
- Themes: UI এর স্টাইল এবং লেআউট কাস্টমাইজ করা।
উদাহরণ: Reactivity (ডাইনামিক পরিবর্তন)
library(shiny)
# UI
ui <- fluidPage(
titlePanel("Reactivity Example"),
sidebarLayout(
sidebarPanel(
sliderInput("n", "Choose a number", 1, 100, 50)
),
mainPanel(
textOutput("numText")
)
)
)
# Server
server <- function(input, output) {
output$numText <- renderText({
paste("You selected the number:", input$n)
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
এখানে, স্লাইডারের ইনপুট পরিবর্তন হলে টেক্সট আউটপুট ডাইনামিকভাবে পরিবর্তিত হবে।
সারাংশ
Shiny হল একটি অত্যন্ত শক্তিশালী এবং সহজ টুল, যা আর প্রোগ্রামিং ব্যবহার করে ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। এটি ডাইনামিক ইন্টারঅ্যাকশন, ডেটা ভিজ্যুয়ালাইজেশন এবং ইউজার ইনপুট হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। Shiny অ্যাপ্লিকেশন তৈরি করতে UI এবং Server অংশের কাস্টমাইজেশন করা যায় এবং এরপর সহজেই ওয়েব সার্ভারে হোস্ট করা সম্ভব। Shiny এর মাধ্যমে আপনি সহজেই ইন্টারঅ্যাকটিভ এবং রেসপন্সিভ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন, যা ডেটা সায়েন্স, মেশিন লার্নিং এবং বিশ্লেষণে ব্যবহার করা যায়।
Shiny হলো একটি শক্তিশালী আর প্যাকেজ যা ইন্টারঅ্যাকটিভ ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য ব্যবহৃত হয়। এটি ব্যবহার করে আপনি ডেটা বিশ্লেষণ এবং ভিজ্যুয়ালাইজেশন ইন্টারফেস তৈরি করতে পারেন, যা রিয়েল-টাইমে ব্যবহারকারীদের ইনপুটের ভিত্তিতে পরিবর্তিত হয়। শাইনি অ্যাপ্লিকেশনগুলো সম্পূর্ণভাবে R ভাষায় তৈরি হয় এবং আপনি খুব সহজেই ওয়েব ব্রাউজারে দেখতে পারেন। এটি RStudio এর একটি খুব জনপ্রিয় এবং কার্যকরী টুল।
Shiny কি?
Shiny মূলত ওয়েব অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত একটি ফ্রেমওয়ার্ক যা আপনাকে ইন্টারঅ্যাকটিভ ইউজার ইন্টারফেস (UI) এবং সার্ভার সাইড প্রোগ্রামিং (Server-side logic) একত্রিত করার সুযোগ দেয়। এতে ব্যবহারকারী ইন্টারফেসের জন্য HTML, CSS, এবং JavaScript কোডের প্রয়োজন নেই, কারণ এটি সবকিছু R ভাষার মাধ্যমে খুব সহজেই তৈরি করা সম্ভব।
Shiny এর প্রধান বৈশিষ্ট্য:
- Interactivity: ব্যবহারকারীরা ডেটা এবং ভিজ্যুয়ালাইজেশনগুলোর সাথে ইন্টারঅ্যাক্ট করতে পারে।
- Real-time Updates: ব্যবহারকারীদের ইনপুটের উপর ভিত্তি করে ডেটা এবং ভিজ্যুয়ালাইজেশন রিয়েল-টাইমে আপডেট হয়।
- No Need for HTML or JavaScript: Shiny আপনাকে HTML, CSS, বা JavaScript জানার প্রয়োজন ছাড়াই অ্যাপ্লিকেশন তৈরি করতে সক্ষম করে।
- Integration with R: R-এর শক্তিশালী প্যাকেজ এবং লাইব্রেরির সাথে Shiny এর সম্পূর্ণ একীভূতকরণ।
Shiny Installation (Shiny ইনস্টলেশন)
Shiny প্যাকেজটি আর-এ ইনস্টল করা এবং সেটআপ করা বেশ সহজ। নিচে Shiny প্যাকেজ ইনস্টল করার জন্য পদক্ষেপগুলো বিস্তারিতভাবে বর্ণনা করা হলো:
১. Shiny প্যাকেজ ইনস্টল করা
প্রথমে আপনার R প্রোগ্রামিং ইন্টারফেসে Shiny প্যাকেজটি ইনস্টল করতে হবে।
# Shiny প্যাকেজ ইনস্টল করা
install.packages("shiny")
এটি আপনার সিস্টেমে Shiny প্যাকেজটি ডাউনলোড এবং ইনস্টল করবে। একবার ইনস্টল হয়ে গেলে, আপনি এটি ব্যবহার করতে পারবেন।
২. Shiny প্যাকেজ লোড করা
Shiny প্যাকেজ ইনস্টল হওয়ার পর, আপনাকে এটি আর-এ লোড করতে হবে।
# Shiny প্যাকেজ লোড করা
library(shiny)
এখন আপনি Shiny প্যাকেজের ফাংশনগুলি ব্যবহার করতে প্রস্তুত।
Shiny App তৈরি করা
Shiny অ্যাপ্লিকেশন মূলত দুটি ভাগে বিভক্ত: UI (User Interface) এবং Server।
- UI (User Interface): এখানে আপনি অ্যাপ্লিকেশনের ব্যবহারকারী ইন্টারফেস ডিজাইন করেন। এটি এমনভাবে ডিজাইন করা হয় যাতে ব্যবহারকারী ডেটা ইনপুট এবং ফলাফল দেখতে পারে।
- Server: এখানে আপনি লগিকাল কোড এবং ডেটা প্রসেসিং করেন। এটি UI থেকে পাওয়া ইনপুট নিয়ে কাজ করে এবং সেই অনুযায়ী আউটপুট তৈরি করে।
Basic Shiny App Example
এখানে একটি সিম্পল Shiny অ্যাপ্লিকেশন উদাহরণ দেওয়া হলো:
# UI অংশ তৈরি করা
ui <- fluidPage(
# UI কোড
titlePanel("My First Shiny App"),
sidebarLayout(
sidebarPanel(
sliderInput("slider", "Select a Number:",
min = 1, max = 100, value = 50)
),
mainPanel(
textOutput("value")
)
)
)
# Server অংশ তৈরি করা
server <- function(input, output) {
output$value <- renderText({
paste("You selected:", input$slider)
})
}
# অ্যাপ চালানো
shinyApp(ui = ui, server = server)
কোড ব্যাখ্যা:
- ui: এখানে
fluidPage()ফাংশনটি ব্যবহার করে UI তৈরি করা হয়েছে। এতেtitlePanel()দিয়ে শিরোনাম এবংsliderInput()দিয়ে একটি স্লাইডার তৈরি করা হয়েছে। - server: এখানে
server()ফাংশনেrenderText()ফাংশনটি ব্যবহার করে স্লাইডারের মানের উপর ভিত্তি করে আউটপুট প্রদর্শন করা হয়েছে। - shinyApp(): এটি অ্যাপটি রেন্ডার করে এবং UI ও server কে যুক্ত করে।
এই কোডটি চালানোর মাধ্যমে একটি স্লাইডার এবং একটি টেক্সট আউটপুট প্রদর্শিত হবে, যেখানে ব্যবহারকারী স্লাইডারের মাধ্যমে একটি সংখ্যা নির্বাচন করতে পারবে এবং সেই সংখ্যাটি রিয়েল-টাইমে দেখাবে।
সারাংশ
Shiny হল একটি রিড্যাবল টুল যা R ব্যবহার করে ইন্টারঅ্যাকটিভ ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। এটি ডেটা সায়েন্স, পরিসংখ্যান, এবং বিশ্লেষণমূলক অ্যাপ্লিকেশন তৈরিতে খুবই কার্যকরী। Shiny ইনস্টল এবং লোড করা খুবই সহজ, এবং এর মাধ্যমে আপনি আপনার ডেটা এবং বিশ্লেষণকে একটি সুন্দর, ইন্টারঅ্যাকটিভ ওয়েব ফরম্যাটে উপস্থাপন করতে পারেন।
Shiny অ্যাপ্লিকেশন তৈরি করতে UI (User Interface) এবং Server দুটি গুরুত্বপূর্ণ কম্পোনেন্ট তৈরি করতে হয়। UI অংশে আমরা ব্যবহারকারীর ইন্টারফেস ডিজাইন করি, যেখানে ব্যবহারকারী অ্যাপ্লিকেশনটির সাথে ইন্টারঅ্যাক্ট করে। Server অংশে, আমরা ডেটা প্রসেসিং, বিশ্লেষণ এবং ফাংশনগুলি ব্যবহারকারী ইনপুটের উপর ভিত্তি করে ফলাফল প্রদান করার জন্য লিখি।
নিচে শো করা হয়েছে কিভাবে UI এবং Server তৈরি করে একটি শাইনির অ্যাপ্লিকেশন তৈরি করা যায়।
Shiny UI এবং Server তৈরি করার পদ্ধতি
১. UI (User Interface) তৈরি করা
Shiny অ্যাপ্লিকেশনে UI হলো ব্যবহারকারীর ইন্টারফেস যা fluidPage(), navbarPage(), sidebarLayout(), ইত্যাদি ফাংশন দিয়ে তৈরি করা হয়। এটি আপনার অ্যাপ্লিকেশনটির লেআউট এবং ডিজাইন নিয়ন্ত্রণ করে।
২. Server তৈরি করা
Server ফাংশনটি হলো সেগমেন্ট যা ডেটা প্রক্রিয়াকরণ এবং ইনপুটের উপর ভিত্তি করে আউটপুট প্রদান করে। এটি renderText(), renderPlot(), renderTable() ইত্যাদি ফাংশন ব্যবহার করে আউটপুট তৈরি করে।
উদাহরণ: Basic Shiny UI এবং Server
library(shiny)
# UI অংশ তৈরি করা
ui <- fluidPage(
# Title Panel
titlePanel("Basic Shiny Application"),
# Sidebar Layout
sidebarLayout(
sidebarPanel(
# Slider Input
sliderInput("num",
label = "Choose a number:",
min = 1,
max = 100,
value = 50)
),
mainPanel(
# Output text
textOutput("value")
)
)
)
# Server অংশ তৈরি করা
server <- function(input, output) {
# Render text based on slider input
output$value <- renderText({
paste("The selected number is", input$num)
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
ব্যাখ্যা:
- fluidPage(): একটি রেসপন্সিভ লেআউট তৈরি করে যেটি বিভিন্ন স্ক্রীন সাইজে মানানসই হয়।
- sliderInput(): একটি স্লাইডার তৈরি করে, যা ব্যবহারকারীকে একটি সংখ্যার পরিসর থেকে মান নির্বাচনের সুযোগ দেয়।
- textOutput(): UI-তে টেক্সট আউটপুট প্রদর্শন করতে ব্যবহৃত হয়।
- renderText():
serverঅংশে, স্লাইডার ইনপুট পরিবর্তিত হলে renderText() ব্যবহার করে ডাইনামিকভাবে আউটপুট তৈরি করা হয়।
৩. আরও জটিল UI তৈরি করা
Shiny UI-তে আরও কাস্টমাইজড উপাদান যোগ করা যায়, যেমন চেকবক্স, রেডিও বাটন, ড্রপডাউন মেনু ইত্যাদি। আপনি গ্রাফ, টেবিল, চিত্র এবং অন্যান্য ইন্টারঅ্যাকটিভ উপাদানও যোগ করতে পারেন।
উদাহরণ: Checkbox এবং Plot তৈরি করা
library(shiny)
# UI অংশ তৈরি করা
ui <- fluidPage(
# Title Panel
titlePanel("Interactive Plot Example"),
# Sidebar Layout
sidebarLayout(
sidebarPanel(
# Checkbox input
checkboxInput("show", "Show Plot", value = TRUE)
),
mainPanel(
# Plot output
plotOutput("distPlot")
)
)
)
# Server অংশ তৈরি করা
server <- function(input, output) {
# Render Plot
output$distPlot <- renderPlot({
# শুধু checkbox এর ভিত্তিতে প্লট দেখানো
if (input$show) {
hist(rnorm(500)) # 500 রেনডম নম্বরের হিস্টোগ্রাম
}
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
ব্যাখ্যা:
- checkboxInput(): এটি একটি চেকবক্স তৈরি করে যার মাধ্যমে ব্যবহারকারী প্লটটি দেখানোর বা না দেখানোর সিদ্ধান্ত নিতে পারে।
- renderPlot(): এটি UI-তে ডাইনামিক গ্রাফ বা প্লট তৈরি করতে ব্যবহৃত হয়।
- rnorm(): 500টি রেনডম নম্বর জেনারেট করা এবং তার উপর একটি হিস্টোগ্রাম তৈরি করা।
৪. Input থেকে Output পর্যন্ত Reactivity (ডাইনামিক আউটপুট)
Shiny অ্যাপ্লিকেশনগুলির প্রধান বৈশিষ্ট্য হল reactivity—যা মানে হলো যে ব্যবহারকারী ইনপুট পরিবর্তন করলে আউটপুটও স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়।
উদাহরণ: Reactive Plot with Multiple Inputs
library(shiny)
# UI অংশ তৈরি করা
ui <- fluidPage(
titlePanel("Reactive Plot Example"),
sidebarLayout(
sidebarPanel(
# Slider Input for X-axis range
sliderInput("xrange", "X-axis Range", min = 1, max = 100, value = c(10, 90)),
# Slider Input for Y-axis range
sliderInput("yrange", "Y-axis Range", min = 1, max = 100, value = c(10, 90))
),
mainPanel(
plotOutput("scatterPlot")
)
)
)
# Server অংশ তৈরি করা
server <- function(input, output) {
output$scatterPlot <- renderPlot({
# Scatter plot generation based on input ranges
plot(x = runif(100, min = input$xrange[1], max = input$xrange[2]),
y = runif(100, min = input$yrange[1], max = input$yrange[2]),
xlab = "X-axis", ylab = "Y-axis", main = "Reactive Scatter Plot")
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
ব্যাখ্যা:
- sliderInput(): দুটি স্লাইডার ইনপুট তৈরি করে, একটি X-অক্ষ এবং আরেকটি Y-অক্ষের জন্য।
- renderPlot(): ইনপুটের উপর ভিত্তি করে প্লটটি রেন্ডার করে। যখন ব্যবহারকারী স্লাইডার পরিবর্তন করবে, তখন গ্রাফটি পরিবর্তিত হবে।
সারাংশ
Shiny অ্যাপ্লিকেশন তৈরির জন্য দুটি প্রধান অংশ প্রয়োজন: UI (User Interface) এবং Server। UI অংশে ডাইনামিক এলিমেন্ট যেমন স্লাইডার, চেকবক্স, প্লট, ইত্যাদি তৈরি করা হয়, আর Server অংশে সেই ইনপুটের উপর ভিত্তি করে ডেটা প্রক্রিয়া এবং আউটপুট তৈরি করা হয়। Shiny অ্যাপ্লিকেশনগুলির প্রধান বৈশিষ্ট্য হল তাদের reactivity, যেখানে ব্যবহারকারী ইনপুট পরিবর্তন করলে আউটপুট স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়। Shiny-এর মাধ্যমে আপনি সহজেই ইন্টারঅ্যাকটিভ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Shiny অ্যাপ্লিকেশন তৈরি করতে UI (User Interface) এবং Server দুটি গুরুত্বপূর্ণ কম্পোনেন্ট তৈরি করতে হয়। UI অংশে আমরা ব্যবহারকারীর ইন্টারফেস ডিজাইন করি, যেখানে ব্যবহারকারী অ্যাপ্লিকেশনটির সাথে ইন্টারঅ্যাক্ট করে। Server অংশে, আমরা ডেটা প্রসেসিং, বিশ্লেষণ এবং ফাংশনগুলি ব্যবহারকারী ইনপুটের উপর ভিত্তি করে ফলাফল প্রদান করার জন্য লিখি।
নিচে শো করা হয়েছে কিভাবে UI এবং Server তৈরি করে একটি শাইনির অ্যাপ্লিকেশন তৈরি করা যায়।
Shiny UI এবং Server তৈরি করার পদ্ধতি
১. UI (User Interface) তৈরি করা
Shiny অ্যাপ্লিকেশনে UI হলো ব্যবহারকারীর ইন্টারফেস যা fluidPage(), navbarPage(), sidebarLayout(), ইত্যাদি ফাংশন দিয়ে তৈরি করা হয়। এটি আপনার অ্যাপ্লিকেশনটির লেআউট এবং ডিজাইন নিয়ন্ত্রণ করে।
২. Server তৈরি করা
Server ফাংশনটি হলো সেগমেন্ট যা ডেটা প্রক্রিয়াকরণ এবং ইনপুটের উপর ভিত্তি করে আউটপুট প্রদান করে। এটি renderText(), renderPlot(), renderTable() ইত্যাদি ফাংশন ব্যবহার করে আউটপুট তৈরি করে।
উদাহরণ: Basic Shiny UI এবং Server
library(shiny)
# UI অংশ তৈরি করা
ui <- fluidPage(
# Title Panel
titlePanel("Basic Shiny Application"),
# Sidebar Layout
sidebarLayout(
sidebarPanel(
# Slider Input
sliderInput("num",
label = "Choose a number:",
min = 1,
max = 100,
value = 50)
),
mainPanel(
# Output text
textOutput("value")
)
)
)
# Server অংশ তৈরি করা
server <- function(input, output) {
# Render text based on slider input
output$value <- renderText({
paste("The selected number is", input$num)
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
ব্যাখ্যা:
- fluidPage(): একটি রেসপন্সিভ লেআউট তৈরি করে যেটি বিভিন্ন স্ক্রীন সাইজে মানানসই হয়।
- sliderInput(): একটি স্লাইডার তৈরি করে, যা ব্যবহারকারীকে একটি সংখ্যার পরিসর থেকে মান নির্বাচনের সুযোগ দেয়।
- textOutput(): UI-তে টেক্সট আউটপুট প্রদর্শন করতে ব্যবহৃত হয়।
- renderText():
serverঅংশে, স্লাইডার ইনপুট পরিবর্তিত হলে renderText() ব্যবহার করে ডাইনামিকভাবে আউটপুট তৈরি করা হয়।
৩. আরও জটিল UI তৈরি করা
Shiny UI-তে আরও কাস্টমাইজড উপাদান যোগ করা যায়, যেমন চেকবক্স, রেডিও বাটন, ড্রপডাউন মেনু ইত্যাদি। আপনি গ্রাফ, টেবিল, চিত্র এবং অন্যান্য ইন্টারঅ্যাকটিভ উপাদানও যোগ করতে পারেন।
উদাহরণ: Checkbox এবং Plot তৈরি করা
library(shiny)
# UI অংশ তৈরি করা
ui <- fluidPage(
# Title Panel
titlePanel("Interactive Plot Example"),
# Sidebar Layout
sidebarLayout(
sidebarPanel(
# Checkbox input
checkboxInput("show", "Show Plot", value = TRUE)
),
mainPanel(
# Plot output
plotOutput("distPlot")
)
)
)
# Server অংশ তৈরি করা
server <- function(input, output) {
# Render Plot
output$distPlot <- renderPlot({
# শুধু checkbox এর ভিত্তিতে প্লট দেখানো
if (input$show) {
hist(rnorm(500)) # 500 রেনডম নম্বরের হিস্টোগ্রাম
}
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
ব্যাখ্যা:
- checkboxInput(): এটি একটি চেকবক্স তৈরি করে যার মাধ্যমে ব্যবহারকারী প্লটটি দেখানোর বা না দেখানোর সিদ্ধান্ত নিতে পারে।
- renderPlot(): এটি UI-তে ডাইনামিক গ্রাফ বা প্লট তৈরি করতে ব্যবহৃত হয়।
- rnorm(): 500টি রেনডম নম্বর জেনারেট করা এবং তার উপর একটি হিস্টোগ্রাম তৈরি করা।
৪. Input থেকে Output পর্যন্ত Reactivity (ডাইনামিক আউটপুট)
Shiny অ্যাপ্লিকেশনগুলির প্রধান বৈশিষ্ট্য হল reactivity—যা মানে হলো যে ব্যবহারকারী ইনপুট পরিবর্তন করলে আউটপুটও স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়।
উদাহরণ: Reactive Plot with Multiple Inputs
library(shiny)
# UI অংশ তৈরি করা
ui <- fluidPage(
titlePanel("Reactive Plot Example"),
sidebarLayout(
sidebarPanel(
# Slider Input for X-axis range
sliderInput("xrange", "X-axis Range", min = 1, max = 100, value = c(10, 90)),
# Slider Input for Y-axis range
sliderInput("yrange", "Y-axis Range", min = 1, max = 100, value = c(10, 90))
),
mainPanel(
plotOutput("scatterPlot")
)
)
)
# Server অংশ তৈরি করা
server <- function(input, output) {
output$scatterPlot <- renderPlot({
# Scatter plot generation based on input ranges
plot(x = runif(100, min = input$xrange[1], max = input$xrange[2]),
y = runif(100, min = input$yrange[1], max = input$yrange[2]),
xlab = "X-axis", ylab = "Y-axis", main = "Reactive Scatter Plot")
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
ব্যাখ্যা:
- sliderInput(): দুটি স্লাইডার ইনপুট তৈরি করে, একটি X-অক্ষ এবং আরেকটি Y-অক্ষের জন্য।
- renderPlot(): ইনপুটের উপর ভিত্তি করে প্লটটি রেন্ডার করে। যখন ব্যবহারকারী স্লাইডার পরিবর্তন করবে, তখন গ্রাফটি পরিবর্তিত হবে।
সারাংশ
Shiny অ্যাপ্লিকেশন তৈরির জন্য দুটি প্রধান অংশ প্রয়োজন: UI (User Interface) এবং Server। UI অংশে ডাইনামিক এলিমেন্ট যেমন স্লাইডার, চেকবক্স, প্লট, ইত্যাদি তৈরি করা হয়, আর Server অংশে সেই ইনপুটের উপর ভিত্তি করে ডেটা প্রক্রিয়া এবং আউটপুট তৈরি করা হয়। Shiny অ্যাপ্লিকেশনগুলির প্রধান বৈশিষ্ট্য হল তাদের reactivity, যেখানে ব্যবহারকারী ইনপুট পরিবর্তন করলে আউটপুট স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়। Shiny-এর মাধ্যমে আপনি সহজেই ইন্টারঅ্যাকটিভ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Shiny আর প্রোগ্রামিং প্যাকেজটির মাধ্যমে ডেটা ভিজ্যুয়ালাইজেশন এবং রিপোর্টিং তৈরি করা সম্ভব, যা ব্যবহারকারীদের ইন্টারঅ্যাকটিভ ওয়েব অ্যাপ্লিকেশন তৈরি করার সুযোগ দেয়। Shiny অ্যাপ্লিকেশনগুলো ব্যবহারকারীদের জন্য ডায়নামিক গ্রাফ, টেবিল, এবং রিপোর্ট তৈরি করে, যাতে ডেটা বিশ্লেষণ আরও সহজ এবং কার্যকর হয়। এখানে আমরা আলোচনা করব কিভাবে Shiny এর মাধ্যমে ডেটা ভিজ্যুয়ালাইজেশন এবং রিপোর্টিং করা যায়।
Shiny এবং Data Visualization
Data Visualization হল ডেটা বিশ্লেষণ করার জন্য একটি গুরুত্বপূর্ণ হাতিয়ার, এবং Shiny এর মাধ্যমে আপনি ডাইনামিক গ্রাফ এবং প্লট তৈরি করতে পারবেন। Shiny অ্যাপ্লিকেশন ব্যবহারকারীদের ইনপুট অনুসারে গ্রাফ এবং চার্ট তৈরি করতে সাহায্য করে, যা ডেটা বিশ্লেষণের ফলাফলকে আরও ভালোভাবে উপস্থাপন করে।
১. Shiny অ্যাপে Data Visualization তৈরি করা
Shiny অ্যাপে ভিজ্যুয়ালাইজেশন তৈরির জন্য plotOutput() এবং renderPlot() ফাংশন ব্যবহার করা হয়।
উদাহরণ: Histogram তৈরি করা
library(shiny)
# UI তৈরি করা
ui <- fluidPage(
titlePanel("Dynamic Histogram Example"),
sidebarLayout(
sidebarPanel(
sliderInput("bins", "Number of bins:", 1, 50, 30)
),
mainPanel(
plotOutput("distPlot")
)
)
)
# Server লজিক তৈরি করা
server <- function(input, output) {
output$distPlot <- renderPlot({
x <- faithful$waiting # built-in dataset in R
hist(x, breaks = input$bins, col = "skyblue", border = "white",
main = paste("Histogram of Waiting Times"),
xlab = "Waiting Time (in minutes)")
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
এখানে, একটি Histogram তৈরি করা হয়েছে যা স্লাইডার ইনপুট অনুসারে ডাইনামিকভাবে পরিবর্তিত হয়। hist() ফাংশনটি R-এর একটি বিল্ট-ইন ফাংশন যা হিস্টোগ্রাম তৈরি করে, এবং renderPlot() ব্যবহার করা হয়েছে প্লট রেন্ডার করার জন্য।
২. Interactive Plots with plotly
plotly প্যাকেজটি ব্যবহার করে Shiny অ্যাপে ইন্টারঅ্যাকটিভ গ্রাফ তৈরি করা যায়। plotly ব্যবহারকারীদের গ্রাফের ওপর হোভার (hover), জুম (zoom) ইত্যাদি ইনপুট দেয়, যা ডেটা ভিজ্যুয়ালাইজেশন আরও ইন্টারঅ্যাকটিভ করে তোলে।
উদাহরণ: Plotly ব্যবহার করে ইন্টারঅ্যাকটিভ Scatter Plot
library(shiny)
library(plotly)
# UI তৈরি করা
ui <- fluidPage(
titlePanel("Interactive Plot Example"),
sidebarLayout(
sidebarPanel(
sliderInput("size", "Point Size:", 1, 20, 5)
),
mainPanel(
plotlyOutput("scatterPlot")
)
)
)
# Server লজিক তৈরি করা
server <- function(input, output) {
output$scatterPlot <- renderPlotly({
plot_ly(data = iris, x = ~Sepal.Length, y = ~Sepal.Width,
mode = "markers",
marker = list(size = input$size))
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
এখানে, plot_ly() ফাংশনটি ব্যবহার করে ইন্টারঅ্যাকটিভ স্ক্যাটার প্লট তৈরি করা হয়েছে, এবং স্লাইডারের মাধ্যমে গ্রাফের পয়েন্টের সাইজ পরিবর্তন করা যাচ্ছে।
Shiny এবং Reporting
Shiny অ্যাপ্লিকেশন ব্যবহার করে dynamic reports তৈরি করা যায়, যেখানে ডেটার বিশ্লেষণ এবং ভিজ্যুয়ালাইজেশন সাইটের মধ্যে সিঙ্ক্রোনাইজড থাকে। rmarkdown এবং shinydashboard প্যাকেজ ব্যবহার করে আপনি রিচ রিপোর্ট এবং ড্যাশবোর্ড তৈরি করতে পারেন যা ব্যবহারকারীকে একটি পূর্ণাঙ্গ এবং ইন্টারঅ্যাকটিভ রিপোর্ট দেয়।
১. rmarkdown প্যাকেজ দিয়ে Dynamic Reporting
rmarkdown প্যাকেজ ব্যবহার করে আপনি HTML, PDF, বা Word রিপোর্ট তৈরি করতে পারেন, যেখানে কোড এবং আউটপুট একসাথে থাকে। এটি একটি অত্যন্ত শক্তিশালী টুল যা Shiny অ্যাপ্লিকেশনের ফলাফল ডাইনামিকভাবে রিপোর্টে রেন্ডার করতে সহায়তা করে।
উদাহরণ: R Markdown Report তৈরি করা
# rmarkdown প্যাকেজ ইনস্টল এবং লোড করা
install.packages("rmarkdown")
library(rmarkdown)
# Dynamic রিপোর্ট তৈরি করা
render("report.Rmd")
report.Rmd ফাইলের মধ্যে আপনি ডেটা এবং ভিজ্যুয়ালাইজেশনসহ কোড লিখতে পারেন, এবং render() ফাংশনটি ব্যবহার করে একটি পূর্ণাঙ্গ রিপোর্ট তৈরি করতে পারেন।
২. shinydashboard ব্যবহার করে ড্যাশবোর্ড তৈরি করা
shinydashboard প্যাকেজের মাধ্যমে আপনি ড্যাশবোর্ড তৈরি করতে পারেন, যেখানে বিভিন্ন ধরণের ডেটা ভিজ্যুয়ালাইজেশন, টেবিল এবং ইন্টারঅ্যাকটিভ উপাদান থাকে।
উদাহরণ: Simple Dashboard তৈরি করা
library(shiny)
library(shinydashboard)
# UI তৈরি করা
ui <- dashboardPage(
dashboardHeader(title = "Simple Dashboard"),
dashboardSidebar(),
dashboardBody(
fluidRow(
box(plotOutput("distPlot")),
box(sliderInput("bins", "Number of bins:", 1, 50, 30))
)
)
)
# Server লজিক তৈরি করা
server <- function(input, output) {
output$distPlot <- renderPlot({
x <- faithful$waiting
hist(x, breaks = input$bins, col = "skyblue", border = "white")
})
}
# Shiny অ্যাপ চালানো
shinyApp(ui = ui, server = server)
এখানে, shinydashboard ব্যবহার করে একটি সিম্পল ড্যাশবোর্ড তৈরি করা হয়েছে, যেখানে প্লট এবং স্লাইডার ইনপুট রয়েছে।
সারাংশ
Shiny একটি শক্তিশালী টুল যা আর প্রোগ্রামিংয়ের মাধ্যমে ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে, যেখানে ডেটা ভিজ্যুয়ালাইজেশন এবং ডাইনামিক রিপোর্ট তৈরি করা যায়। Plotly এবং ggplot2 এর মাধ্যমে ইন্টারঅ্যাকটিভ গ্রাফ তৈরি করা যায় এবং rmarkdown ব্যবহার করে ডাইনামিক রিপোর্ট তৈরি করা যায়। shinydashboard প্যাকেজ দিয়ে আপনি ড্যাশবোর্ড তৈরি করতে পারেন, যেখানে ডেটা ভিজ্যুয়ালাইজেশন, টেবিল এবং ইন্টারঅ্যাকটিভ ইনপুট উপাদান থাকবে।
Shiny এবং এর বিভিন্ন প্যাকেজের মাধ্যমে আপনি ইন্টারঅ্যাকটিভ ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন যা ডেটা বিশ্লেষণ এবং রিপোর্টিংয়ের জন্য অত্যন্ত কার্যকর।
Read more