Skip to content

Instantly share code, notes, and snippets.

@hypebright
Created September 27, 2022 12:14
Show Gist options
  • Save hypebright/bde3d4e079c8fcc95dcf38dc28791641 to your computer and use it in GitHub Desktop.
Save hypebright/bde3d4e079c8fcc95dcf38dc28791641 to your computer and use it in GitHub Desktop.
Demo of the histoslider package
# install histoslider
# remotes::install_github("cpsievert/histoslider")
# load libraries
library(shiny)
library(histoslider)
library(data.table)
library(quantmod) # to get current exchange rates
# load airbnb dataset containing properties in London
# source: http://insideairbnb.com/get-the-data
data <- fread("http://data.insideairbnb.com/united-kingdom/england/london/2022-09-10/data/listings.csv.gz")
# some data cleaning to get a numeric price
data[, price_num := as.numeric(gsub('\\$|,', '', price))]
# change prices from USD to GBP
exchange_rate <- getQuote(paste0('USD', 'GBP', "=X"))$Last
data[, price_num := price_num * exchange_rate]
# limit to 1000 GBP per night
data[price_num > 1000, price_num := 1000]
ui <- fluidPage(
titlePanel("Histoslider for London Airbnb data 🏡 - demo"),
br(),
fluidRow(
column(12,
input_histoslider(id = "price_range",
label = "Price (GBP) per night",
values = data$price_num,
breaks = seq(0, 1000, by = 10),
options = list(
showOnDrag = FALSE,
handleLabelFormat = ",.2f", # this uses d3 format: https://github.com/d3/d3-format
selectedColor = "#219265",
unselectedColor = "#DDDDDD",
height = 400
))
)
),
br(),
fluidRow(
column(12,
align = 'center',
textOutput('property_count')
)
),
)
server <- function(input, output, session) {
observe({
print(input$price_range)
output$property_count <- renderText(paste0(
prettyNum(nrow(data[price_num >= input$price_range[1] & price_num <= input$price_range[2],]), big.mark = ','),
' available properties'))
})
}
shinyApp(ui = ui, server = server)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment