أنشئ أول لوحة تحكم لتطبيق الويب باستخدام Shiny و R.

واحدة من الهدايا الجميلة التي يمتلكها R (التي فاتتها Python ، حتى اندفاعة) هي لامعة . لامعة هو R الحزمة التي تجعل من السهل لبناء تطبيقات الويب التفاعلية مباشرة من R . تحظى لوحات المعلومات بشعبية نظرًا لأنها جيدة في مساعدة الشركات على تكوين رؤى من البيانات الموجودة.

في هذا المنشور ، سنرى كيفية الاستفادة من Shiny لبناء لوحة تحكم بسيطة لإيرادات المبيعات. سوف تحتاج إلى تثبيت R.

تحميل الحزم في R

الحزم التي تحتاج يجب تحميل بشكل منفصل، وتثبيت باستخدام R . يمكن تثبيت جميع الحزم المدرجة أدناه مباشرة من CRAN ، ويمكنك اختيار مرآة CRAN التي تريد استخدامها. سيتم أيضًا تنزيل تبعيات الحزمة وتثبيتها بشكل افتراضي.

بمجرد تثبيت الحزم ، ستحتاج إلى تحميلها في جلسة R الخاصة بك . المكتبة وتتطلب تستخدم الأوامر، ومرة أخرى، يتم تحميل تبعيات الحزمة أيضا تلقائيا بواسطة R .

# load the required packageslibrary(shiny)require(shinydashboard)library(ggplot2)library(dplyr)

نموذج ملف الإدخال

نظرًا لأن لوحة القيادة تحتاج إلى بيانات إدخال لتصور ، فسنستخدم توصية .csv كمثال على بيانات الإدخال إلى لوحة القيادة الخاصة بنا. نظرًا لأن هذا ملف .csv ، تم استخدام الأمر read.csv. الصف الأول في .csv هو صف عنوان ، لذلك يتم استخدام header = T. هناك طريقتان يمكنك من خلالهما الحصول على ملف توصية .csv في جلسة R الحالية:

  1. افتح هذا الرابط - توصية. csv واحفظه (Ctrl + S) في دليل العمل الحالي ، حيث يتم حفظ رمز R هذا. ثم سيعمل الكود التالي بشكل مثالي.
recommendation <- read.csv('recommendation.csv',stringsAsFactors = F,header=T)head(recommendation) Account Product Region Revenue1 Axis Bank FBB North 20002 HSBC FBB South 300003 SBI FBB East 10004 ICICI FBB West 10005 Bandhan Bank FBB West 2006 Axis Bank SIMO North 200

2. بدلاً من قراءة ملف .csv من جهاز الكمبيوتر المحلي لديك ، يمكنك أيضًا قراءته من عنوان URL (ويب) باستخدام نفس الوظيفة read.csv. نظرًا لأنه تم تحميل ملف .csv هذا بالفعل على Github الخاص بي ، يمكننا استخدام هذا الرابط في read.csv لقراءة الملف.

recommendation <- read.csv('//raw.githubusercontent.com/amrrs/sample_revenue_dashboard_shiny/master/recommendation.csv',stringsAsFactors = F,header=T)head(recommendation) Account Product Region Revenue1 Axis Bank FBB North 20002 HSBC FBB South 300003 SBI FBB East 10004 ICICI FBB West 10005 Bandhan Bank FBB West 2006 Axis Bank SIMO North 200

نظرة عامة على Shiny

كل لامعة التطبيق لديه قسمين رئيسيين: UI و خادم . تحتوي واجهة المستخدم على رمز للأزرار الأمامية مثل الأزرار والرسوم المرئية وعلامات التبويب وما إلى ذلك. يحتوي الخادم على رمز للجهة الخلفية مثل استرداد البيانات والتلاعب بها والجدل.

بدلاً من استخدام Shiny فقط ، قمنا بإقرانه بلوحة shinydashboard . shinydashboard عبارة عن حزمة R مهمتها تسهيل إنشاء لوحات معلومات باستخدام Shiny ، كما يوحي الاسم .

إنشاء لوحة معلومات مأهولة: واجهة المستخدم

يحتوي جزء واجهة المستخدم من تطبيق Shiny الذي تم إنشاؤه باستخدام shinydashboard على 3 عناصر أساسية ملفوفة في أمر dashboardPage (). أبسط كود لامع مع shinydashboard

## app.R ##library(shiny)library(shinydashboard)ui <- dashboardPage( dashboardHeader(), dashboardSidebar(), dashboardBody())server <- function(input, output) { }shinyApp(ui, server)

يعطي هذا التطبيق

دعونا نملأ dashboardHeader()و dashboardSidebar(). يحتوي الرمز على تعليقات مسبوقة بـ #.

#Dashboard header carrying the title of the dashboardheader <- dashboardHeader(title = "Basic Dashboard") #Sidebar content of the dashboardsidebar <- dashboardSidebar( sidebarMenu( menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")), menuItem("Visit-us", icon = icon("send",lib='glyphicon'), href = "//www.salesforce.com") ))

تتم تعبئة عناصر واجهة المستخدم التي نرغب في عرضها في لوحة المعلومات الخاصة بنا dashboardPage(). نظرًا لأن المثال عبارة عن لوحة معلومات لإيرادات المبيعات ، فلنعرض ثلاثة مربعات لمؤشر الأداء الرئيسي (KPI) في الأعلى تمثل ملخصًا سريعًا ، متبوعًا بمخططين مربعين لعرض تفصيلي.

لمحاذاة هذه العناصر ، واحدة تلو الأخرى ، نحددها بالداخل fluidRow().

frow1 <- fluidRow( valueBoxOutput("value1") ,valueBoxOutput("value2") ,valueBoxOutput("value3"))frow2 <- fluidRow( box( title = "Revenue per Account" ,status = "primary" ,solidHeader = TRUE ,collapsible = TRUE ,plotOutput("revenuebyPrd", height = "300px") ) ,box( title = "Revenue per Product" ,status = "primary" ,solidHeader = TRUE ,collapsible = TRUE ,plotOutput("revenuebyRegion", height = "300px") ) )# combine the two fluid rows to make the bodybody <- dashboardBody(frow1, frow2)

في الكود أعلاه ، valueBoxOutput()يتم استخدامه لعرض معلومات KPI. valueBoxOutput()و plotOutput()هي مكتوبة في خادم جزء، والذي يستخدم في الجزء UI لعرض المؤامرة. box()هي وظيفة توفرها shinydashboardلإحاطة مؤامرة داخل مربع يحتوي على ميزات مثل title، solidHeaderو collapsible. بعد تحديد وظيفتين fluidRow()بشكل فردي من أجل نمطية ، نقوم بدمج كل منهما في dashbboardBody().

وبالتالي يمكننا إكمال جزء واجهة المستخدم ، الذي يشتمل على الرأس والشريط الجانبي والصفحة ، مع الكود أدناه:

#completing the ui part with dashboardPageui <- dashboardPage(title = 'This is my Page title', header, sidebar, body, skin="red")

قيمة titlein dashboardPage()هي عنوان صفحة / علامة تبويب المتصفح ، بينما العنوان المحدد في dashboardHeader()مرئي كعنوان لوحة المعلومات.

إنشاء لوحة معلومات مأهولة: الخادم

مع UI جزء أكثر، وسوف نخلق ل خادم الجزء الذي وراء برنامج والمنطق valueBoxOutput()و plotOutput()تضاف مع renderValueBox()و renderPlot()على التوالي. هذه مرفقة داخل a server function، مع inputو output كمعلماتها. inputيتم استلام القيم الداخلية من واجهة المستخدم (مثل textBox القيمة Slider والقيمة). القيم داخل output يتم إرسالها إلى واجهة المستخدم (مثل plotOutput، valueBoxOutput).

فيما يلي رمز الخادم الكامل :

# create the server functions for the dashboard server <- function(input, output) { #some data manipulation to derive the values of KPI boxes total.revenue <- sum(recommendation$Revenue) sales.account % group_by(Account) %>% summarise(value = sum(Revenue)) %>% filter(value==max(value)) prof.prod % group_by(Product) %>% summarise(value = sum(Revenue)) %>% filter(value==max(value))#creating the valueBoxOutput content output$value1 <- renderValueBox({ valueBox( formatC(sales.account$value, format="d", big.mark=',') ,paste('Top Account:',sales.account$Account) ,icon = icon("stats",lib='glyphicon') ,color = "purple") }) output$value2 <- renderValueBox({ valueBox( formatC(total.revenue, format="d", big.mark=',') ,'Total Expected Revenue' ,icon = icon("gbp",lib='glyphicon') ,color = "green") })output$value3 <- renderValueBox({ valueBox( formatC(prof.prod$value, format="d", big.mark=',') ,paste('Top Product:',prof.prod$Product) ,icon = icon("menu-hamburger",lib='glyphicon') ,color = "yellow") })#creating the plotOutput content output$revenuebyPrd <- renderPlot({ ggplot(data = recommendation, aes(x=Product, y=Revenue, fill=factor(Region))) + geom_bar(position = "dodge", stat = "identity") + ylab("Revenue (in Euros)") + xlab("Product") + theme(legend.position="bottom" ,plot.title = element_text(size=15, face="bold")) + ggtitle("Revenue by Product") + labs(fill = "Region") })output$revenuebyRegion <- renderPlot({ ggplot(data = recommendation, aes(x=Account, y=Revenue, fill=factor(Region))) + geom_bar(position = "dodge", stat = "identity") + ylab("Revenue (in Euros)") + xlab("Account") + theme(legend.position="bottom" ,plot.title = element_text(size=15, face="bold")) + ggtitle("Revenue by Region") + labs(fill = "Region") })}

حتى الآن، قمنا بتحديد كل من الأجزاء الأساسية من لامعة التطبيق - UI و خادم . أخيرًا ، علينا استدعاء / تشغيل Shiny ،مع واجهة المستخدم و خادم كمعلمات لها.

#run/call the shiny appshinyApp(ui, server)Listening on //127.0.0.1:5101

يجب حفظ ملف R بأكمله app.Rداخل مجلد قبل تشغيل التطبيق اللامع. تذكر أيضًا وضع ملف بيانات الإدخال (في حالتنا ، recommendation.csv)داخل نفس المجلد مثل app.R. في حين أن هناك طريقة أخرى صالحة لهيكلة تطبيق Shiny بملفينui.R و server.R(اختياريًا ، global.R) ، تم تجاهله في هذه المقالة من أجل الإيجاز لأن هذا يستهدف المبتدئين.

عند تشغيل الملف ، سيتم فتح تطبيق الويب Shiny في متصفحك الافتراضي وسيبدو مشابهًا للقطات أدناه:

نأمل ، في هذه المرحلة ، أن يكون لديك هذا المثال تطبيق ويب Shiny قيد التشغيل. الكود والمؤامرات المستخدمة هنا متوفرة على جيثب الخاص بي. إذا كنت مهتمًا بـ Shiny ، فيمكنك معرفة المزيد من تطبيقات الويب الخاصة ببناء DataCamp في R with Shiny Course.