Bermain dengan RShiny dengan RVest (R)
Hoi Hoi manteman, kali ini kita aka mendeploy hasil scrapping data dari website dengan RShiny!
Collect Data dengan Rvest
Eits, sebelum deploy mendeploy, mari kita bahas bagaimana saya mendapatkan data yang akan dideploy menggunakan Rshiny.
Nah, saya akan menggunakan package Rvest untuk scrapping data web.
Fungsi rvest sendiri adalah untuk mengscrape data web (web pages), ia akan memudahkan kita untuk mengambil dan memanipulasi data yang ditampilkan website yaitu HTML dan XML. Selain Rvest ada juga package bernam Rselenium untuk meng-scrap data, namun ‘katanya’ rvest adalah tool yang lebih rapi untuk kali ini, lagi pula kita juga tetap akan menggunakan Rvest untuk coretan kali ini,
Lets Start, shall we ?
Apa yang akan kita lakukan adalah membuat webapp untuk memeperlihatkan data dari Coinmarketcap yang dimana akan memperlihatkan Coin apa sih yang lagi tinggi selama 24 jam terakhir dan akan menunjukkan grafik batangnya. Oke?
Lanjut,
jadi langkah-langkahnya adalah sebagai berikut (ohiya, ini menggunakan Rstudio ya manteman) :
- Buat new RStudio Project
- Buat satu “app.R” shiny file
- Panggil semua library yang kita butuhkan
- Buat fungsinya
- Buat User Interfacenya
- Buat servernya
- Deploy deh
Waktunya mulai,
Langkah 1 sama 2 kita skip aja ya, langsung kita ke langkah selanjutnya, library, yaitu packages packages yang kita akan butuh kan.
library(shiny)
library(tidyverse)
library(shinydashboard)
library(rvest)
diatas adalah packages packages yang dibutuhkan jika belum adasilahkan install dulu packagesnya
install.packages("namapackagesnya")
sudah, mari kita mulai langkah selanjutnya
Membuat fungsinya
Ada beberapa fungsi yang akan kita buat
- Fungsi untuk mengambil data
get.data<- function(x){
myurl <- read_html("https://coinmarketcap.com/gainers-losers/") # membaca data sebagai html
myurl <- html_table(myurl) # memanipulasi data
to.parse <- myurl[[3]] # mengambil data yang berada dalam tabel
to.parse$`% 24h` <- gsub("%","",to.parse$`% 24h`) # membersihkan data yang bukan karakter
to.parse$`% 24h`<- as.numeric(to.parse$`% 24h`) #menjadikan data menjadi data numerik
to.parse$Symbol <- as.factor(to.parse$Symbol) # memanipulasi symbol coin menjadi faktor
to.parse$Symbol <- factor(to.parse$Symbol,
levels = to.parse$Symbol[order(to.parse$'% 24')]) # mengurutkan berdasarkan value teratas
to.parse # mengembalikan menjadi data frame
}
2. Fungsi untuk menampilkan Infobox
- Infobox Coin teratas
get.infobox.val<- function(x){
df1 <- get.data() # menjadikan fungsi get data tadi menjadi sebuah variabel
df1 <- df1$`% 24h`[1] # menjadikan data dengan value teratas untuk ditampilkan
df1 # return value
}
- Infobox nama Coin teratas
get.infobox.coin <- function(x){
df <- get.data() # menjadikan fungsi get data tadi menjadi sebuah variabel
df <- df$Name[1] # amenjadikan nama data dengan value teratas untuk ditampilkan
df # return value
}
Untuk fungsi- fungsinya sudah cukup ya, sekarang mari kita buat UInya
Membuat UI
Ini adalah UI yang akan kita buat nantinya,
Pada pembuatan UI ini langsung liat saja kodingannya ya tapi, pertama mulai kodingan fungsi UI nya
ui <- dashboardPage(
lalu isi fungsinya dengan kodingan dibawah.
- Dashboard dan Side Dashboard
# H E A D E R
dashboardHeader(title = "Alt Coin Gainers"),# S I D E B A R
dashboardSidebar(
br(),
br(),
br(),
br(),
br(),
br(),
br(),
br(),
br(),
br(),
h6("Terinpirasi dari Brad Lindblad in the R computing language
[ R Core Team (2018). R: A language and environment for statistical computing. R Foundation for Statistical Computing,
Vienna, Austria. URL https://www.R-project.org/]"),
br(),
a("author, Rintaldi Ghazian Hindami", href="iamraldygh@gmail.com"),
br(),
h6("Honorable mentions"),
br(),
a("bradley.lindblad@gmail.com", href="bradley.lindblad@gmail.com"),
br()
),
2. Body
# B O D Y
dashboardBody(
fluidRow(
# InfoBox
infoBoxOutput("top.coin",
width = 3),
# InfoBox
infoBoxOutput("top.name",
width = 3)
),
fluidRow(
column(
# Datatable
box(
status = "primary",
headerPanel("Top 10 Coins"),
solidHeader = T,
br(),
DT::dataTableOutput("table", height = "350px"),
width = 6,
height = "560px"
),
# Chart
box(
status = "primary",
headerPanel("Chart"),
solidHeader = T,
br(),
plotOutput("plot", height = "400px"),
width = 6,
height = "500px"
),
width = 12
)
)
)
)
UInya sudah cukup disitu, jangan lupa ditutup fungsi UInya jika sudah menggabungkan semua kodingan diatas. Selanjutnya aldalah mensetting SERVERnya
Membuat Server
Mulai dengan membuat fungsi servernya dengan kodingan pertama
server <- function(input, output) {
- Membuat server akan merefresh semua komponennya dalam 1 menit
# R E A C T I V E
liveish_data <- reactive({
invalidateLater(60000) # refresh setiap 1 menit
get.data() # memanggil fungsi diatas
})
live.infobox.val <- reactive({
invalidateLater(60000) # refresh setiap 1 menit
get.infobox.val() # memanggil fungsi diatas
})
live.infobox.coin <- reactive({
invalidateLater(60000) # refresh setiap 1 menit
get.infobox.coin() # memanggil fungsi diatas
})
2. Menampilkan Output dari Scrapping data menjadi data tabel
output$table <- DT::renderDataTable(DT::datatable({
data <- liveish_data()}))
3. Menampilkan Output Plot
output$plot <- renderPlot({ (ggplot(data=liveish_data(), aes(x=Symbol, y=`% 24h`)) +
geom_bar(stat="identity", fill = "orange") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
ggtitle("Gainers from the Last 24Hour"))
})
4. Menampilkan Infobox
# I N F O B O X O U T P U T - V A L
output$top.coin <- renderInfoBox({
infoBox(
"Gain in 24h",
paste0(live.infobox.val(), "%"),
icon = icon("signal"),
color = "yellow",
fill = TRUE)
})
# I N F O B O X O U T P U T - N A M E
output$top.name <- renderInfoBox({
infoBox(
"Coin Name",
live.infobox.coin(),
icon = icon("bitcoin"),
color = "yellow",
fill = TRUE)
})
}
Langkah terkahir DEPLOY!
shinyApp(ui = ui, server = server)
Sudah deh, Jalankan
sudah semua , silahkan jalankan App.R nya , jika tidak ada error maka akan menghasilkan Output yang di inginkan.
Oke manteman, kita sudah berhasil mendeploy hasil scrapping data kita dan membuat shiny app dengan menggunakan shinydashboard framework untuk mendeploy hasil analisis atau visualisasi data kita barusan.
Penulis berharap , tutorial kecil ini bisa bermanfaat untuk kita semua ya. Its a cool thing to learn new stuff every day.
Until next time,
Ciao Mantemann!!!
Sumber :