Bermain dengan RShiny dengan RVest (R)

Rintaldi Ghazian Hindami
5 min readJan 11, 2020

--

Hoi Hoi manteman, kali ini kita aka mendeploy hasil scrapping data dari website dengan RShiny!

Photo by Joao Marcelo Marques on Unsplash

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) :

  1. Buat new RStudio Project
  2. Buat satu “app.R” shiny file
  3. Panggil semua library yang kita butuhkan
  4. Buat fungsinya
  5. Buat User Interfacenya
  6. Buat servernya
  7. 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

  1. 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.

  1. 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) {
  1. 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.

Hasil output

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 :

https://towardsdatascience.com/scrape-data-and-build-a-webapp-in-r-using-rvest-and-shiny-f20d84dd1b74

--

--

Rintaldi Ghazian Hindami
Rintaldi Ghazian Hindami

Written by Rintaldi Ghazian Hindami

Some Folk Trying to be expertise in Data Analytics

No responses yet