Cara Membina Apl Web Interaktif dengan Shiny dalam R

Cara Membina Apl Web Interaktif Dengan Shiny Dalam R



Disebabkan oleh rangka kerja R Shiny, himpunan daripada RStudio, mencipta apl web dinamik dengan R adalah agak mudah. Manfaat Shiny ialah ia memungkinkan untuk meletakkan kod R anda di web, menjadikannya lebih mudah diakses oleh julat pengguna yang lebih luas. Dengan R Shiny, anda boleh membuat laporan data dan visual yang sangat berkuasa yang membolehkan pengguna menganalisis set data. Bersama komponen Berkilat, elemen HTML boleh digunakan untuk mereka bentuk kandungan program. Artikel hari ini memandu anda melalui proses membina aplikasi Web interaktif menggunakan pakej R's Shiny. Untuk ini, pastikan anda telah memasang 'RStudio'.

Pasang Pakej Berkilat dalam RStudio

Sebelum bergerak ke arah mencipta aplikasi web interaktif dalam RStudio, kita sepatutnya telah memasang pakej 'Berkilat' di dalamnya. Untuk ini, anda perlu mengembangkan menu 'Alat' RStudio diikuti dengan pilihan 'Pasang Pakej'. Dalam tetingkap yang dibuka, anda perlu menyebut pakej yang anda ingin pasang, iaitu 'berkilat,' dan ketik pada butang 'Pasang'. RStudio akan memasang pakej berkilat dalam konsol RStudio.







Bermula dengan Shiny dalam R

Untuk bermula dengan Shiny dalam R, anda perlu mencipta fail R baharu menggunakan menu 'Fail' yang terletak di tempat pertama RStudio. Kembangkannya dan gunakan pilihan 'Fail Baru' diikuti dengan pilihan 'Skrip R'. Fail skrip 'tidak bertajuk' akan dibuka dalam RStudio. Namakannya semula sebagai fail 'R' di lokasi yang anda inginkan.



Sekarang, muatkan pakej yang diperlukan untuk membina aplikasi interaktif dalam R, iaitu menggunakan fungsi 'perpustakaan' R. Pernyataan 'jika' digunakan untuk memasang pakej yang tidak dipasang sebelum ini. Pakej Shiny digunakan untuk membina antara muka interaktif untuk aplikasi web bersama-sama dengan beberapa visualisasi grafik. Pakej 'dplyr' digunakan terutamanya untuk memudahkan manipulasi data dalam R dengan menggunakan beberapa fungsi berguna.



Akhir sekali, pakej 'ggplot2' dimuatkan sebagai sumber visualisasi data yang hebat dengan mencipta graf tersuai dan berkuasa.





jika ( ! memerlukanNamespace ( 'berkilat' , senyap-senyap = BENAR ) ) {

pasang. pakej ( 'berkilat' )

}

jika ( ! memerlukanNamespace ( 'dplyr' , senyap-senyap = BENAR ) ) {

pasang. pakej ( 'dplyr' )

}

jika ( ! memerlukanNamespace ( 'ggplot2' , senyap-senyap = BENAR ) ) {

pasang. pakej ( 'ggplot2' )

}

perpustakaan ( berkilat )

perpustakaan ( dplyr )

perpustakaan ( ggplot2 )

Bina Sistem Penggredan Peperiksaan Interaktif

Dalam tutorial ini, kami akan mencipta 'Sistem Penggredan Peperiksaan' untuk pelajar mendapatkan gred yang dicapai melalui markah yang diperoleh daripada 100. Skrip yang disediakan ialah komponen 'ui' bagi aplikasi Berkilat yang menentukan reka bentuk dan rupa program yang. Program ini menjana fluidPage, reka bentuk yang boleh disesuaikan yang boleh diskalakan untuk melaraskan tetingkap penyemak imbas.

'titlePanel' dan 'sidebarLayout' adalah keturunan 'fluidPage'. Tajuk 'Sistem Penggredan Peperiksaan' program adalah semua yang dipaparkan dalam 'titlePanel'. 'sidebarPanel' dan 'mainPanel' ialah dua bahagian yang digunakan oleh 'sidebarLayout' untuk memisahkan aplikasi. Sepasang input disertakan dalam 'sidebarPanel': 'textAreaInput' bernama 'skor' ditambah dengan 'actionButton' bernama 'calculate'.



Satu markah setiap baris boleh dimasukkan untuk setiap pelajar menggunakan 'textAreaInput'. Penilaian gred boleh dimulakan dengan menggunakan 'actionButton'. Sepasang output terdapat dalam 'Panel utama': 'tableOutput' bernama 'Result' ditambah dengan 'plotOutput' bernama 'ResultGraph'. Kedua-dua 'tableOutput' dan 'plotOutput' akan membentangkan dapatan pengiraan dalam bentuk graf.

ui <- fluidPage (

titlePanel ( 'Sistem Penggredan Peperiksaan' ) ,
sidebarLayout (
sidebarPanel (
textAreaInput ( 'skor' , 'Masukkan Markah untuk Pelajar (satu setiap baris):' , '' ) ,
actionButton ( 'kira' , 'Mari Kira Gred' )
) ,
Panel utama (
tableOutput ( 'Hasil' ) ,
plotOutput ( 'Graf Keputusan' )
) ) )

Kaedah pelayan menetapkan logik bahagian pelayan aplikasi. Markah untuk pelajar pada mulanya disimpan dalam pembolehubah reaktif bernama 'data'. Untuk ini, butang 'kira' dipantau oleh kaedah 'observeEvent' R. Selepas butang dicetuskan, kod pada mulanya menukar nilai yang dimasukkan dalam input medan teks kepada nilai berangka.

Setiap skor diikuti dengan pemisah baris menggunakan ā€œ\nā€ untuk memasukkan skor baharu pada baris seterusnya. Kaedah meletakkan apa sahaja skor yang ditemui dalam pembolehubah 'data'. Jika pengguna tidak memasukkan skor, kaedah menunjukkan mesej dengan ralat.

pelayan <- fungsi ( masukan, keluaran ) {

data <- reaktifVal ( NULL )

observeEvent ( input$kira, {

skor <- sebagai. angka ( tidak tersenarai ( strsplit ( input$skor, ' \n ' ) ) )

jika ( panjang ( skor ) > 0 ) {

data ( skor )

} lain {

data ( NULL )

showModal ( modalDialog (

tajuk = 'Ralat' ,

'Ralat: Sila tambah nilai!' ,

mudahTutup = BENAR

) )

}

} )

Dua output, 'output$Result' ditambah 'output$ResultGraph', ditentukan untuk menunjukkan markah pelajar dan gred yang dicapai. Kaedah dinamik renderTable() menghasilkan jadual data markah dan gred ujian pelajar yang dilabelkan sebagai 'output$Result'. Kaedah renderPlot(), yang juga reaktif, menghasilkan graf bar untuk gred pelajar dan menyimpannya dalam output 'output$ResultGraph' dengan cara yang sama.

Oleh itu, mereka akan disemak setiap kali data input dikemas kini. Ungkapan if (!is.null(data())) menentukan sama ada data yang diterima adalah batal atau tidak. Skrip pernyataan 'jika' dilakukan jika ia tidak kosong. Vektor skor untuk pelajar membentuk input 'data'. Setiap pelajar diberi gred berdasarkan markah mereka menggunakan kaedah case_when(). Bingkai data yang mengandungi gred pelajar dan markah ujian dibuat menggunakan kaedah data.frame(). Lajur berikut ditambahkan pada bingkai data: 'Pelajar', 'Skor', dan 'Gred'. Pengagihan gred disusun dalam jadual yang dipanggil 'GradeCount' menggunakan kaedah table().

output$Result <- renderTable ( {

jika ( ! ialah. null ( data ( ) ) ) {

gred <- kes_bila (

data ( ) > 80 ~ 'A' ,

data ( ) > 60 ~ 'B' ,

data ( ) > 40 ~ 'C' ,

data ( ) > 30 ~ 'D' ,

BENAR ~ 'F'

)

data. bingkai ( Pelajar = 1 : panjang ( data ( ) ) , Skor = data ( ) , Gred = gred )

}

} )

output$ResultGraph <- renderPlot ( {

jika ( ! ialah. null ( data ( ) ) ) {

gred <- kes_bila (

data ( ) > 80 ~ 'A' ,

data ( ) > 60 ~ 'B' ,

data ( ) > 40 ~ 'C' ,

data ( ) > 30 ~ 'D' ,

BENAR ~ 'F'

)

GredCount <- meja ( gred )

Carta bar dibuat menggunakan perpustakaan 'ggplot2'. Kira (jumlah bilangan pelajar yang memperoleh setiap gred) dan Gred lajur dicipta dalam DataFrame. Graf bar dengan data 'Gred' pada 'paksi-x' dan data 'Kira' pada 'paksi-y' dihasilkan menggunakan kaedah geom_bar(). Pilihan stat = 'identiti' mengarahkan ggplot2 untuk menggunakan data sebenar tanpa sebarang jenis transformasi. Tajuk, label paksi-x dan label paksi-y semuanya ditambahkan melalui kaedah 'makmal'. Warna bar diberikan menggunakan kaedah scale_fill_manual(). Garis grid dan komponen tindanan yang tidak diperlukan dialih keluar menggunakan kaedah theme_minimal(). Kaedah shinyApp(ui, pelayan) membina aplikasi.

ggplot ( data = data. bingkai ( Gred = nama ( GredCount ) , Kira = sebagai. angka ( GredCount ) ) ,
aes ( x = Gred, dan = Kira, isi = Gred ) ) +
geom_bar ( stat = 'identiti' ) +
makmal ( tajuk = 'Taburan Gred' ,
x = 'Gred' ,
dan = 'Kira' ) +
skala_isi_manual ( nilai = c ( 'A' = 'hijau' , 'B' = 'ungu' , 'C' = 'merah jambu' ,
'D' = 'oren' , 'F' = 'merah' ) ) +
tema_minimum ( )
}
} )
}
aplikasi berkilat ( ui, pelayan )

Setelah menjalankan kod ini, kami mendapat antara muka interaktif di mana kami menambah beberapa markah dan mengklik pada butang 'Mari Kira Gred'.

Jadual yang mengandungi markah dan gred pelajar dipaparkan, diikuti dengan graf Bar taburan gred dalam warna yang berbeza.

Kesimpulan

Panduan ini menerangkan kepentingan penggunaan pakej Shiny dalam bahasa R melalui RStudio. Untuk menambah penjelasan kami, kami membina aplikasi web interaktif untuk sistem penggredan pelajar dalam kod R dengan menggunakan pakej 'Berkilat'.