Penilaian dibagi menjadi 2 jenis yakni Penilaian berdasarkan Tempat (Review) dan Penilaian berdasarakan hasil skor dari wisatawan.
Peniaian Keseluruhan merupakan Rata - Rata dari Penilaian Tempat dan Penilaian dari Wisatawan.
---
title: "Data Destinasi Wisata di 5 Kota Besar Pulau Jawa"
output:
flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: scroll
source_code: embed
css: ./footer.css
includes:
after_body: ./footer.html
---
```{r setup, include=FALSE}
library(flexdashboard)
library(DT) # menampilkan dataframe di flex
library(dplyr) # melakukan EDA
library(ggplot2) # membuat plot statis
library(ggpubr) # export plot statis
library(scales) # mengatur skala plot
library(glue) # setting teks pada tooltip
library(plotly) # membuat plot interaktif
library(leaflet) # membuat map
library(stringr) # mengubah skala
```
```{r}
# Function
metode_bayar <- function(y){
if(y == 0)
{
y <- "Gratis" # Metode gratis
}
else
{
y <- "Berbayar" # Metode berbayar
}
}
```
```{r}
# Read data
tourism_rating <- read.csv("tourism_rating.csv")
tourism_with_id <- read.csv("tourism_with_id.csv")
user <- read.csv("user.csv")
```
```{r}
# Menggabungkan data
data <- merge(x = tourism_rating, y = user,by = "User_Id")
data <- merge(x = tourism_with_id,y = data, by.x = "Place_Id")
```
```{r}
data1 <- data %>%
#Drop kolom
select(-c(X,X.1,Coordinate,Time_Minutes)) %>%
mutate(
# menambahkan kolom baru
avg = (Rating + Place_Ratings)/2,
Metode = sapply(X = Price, FUN = metode_bayar)) %>%
# ganti tipe data
mutate_at(c("Lat","Long"), as.double) %>%
mutate_at(c("Place_Name","Category","City","Metode","Location"), as.factor)
#memperbaiki data yag salah
data1$Lat <- str_replace(data1$Lat, "1.07888", "-6.1204747")
data1$Long <- str_replace(data1$Long, "103.931398", "106.8297537")
data1$Lat <- str_replace(data1$Lat, "-6.601321", "-7.0773168")
data1$Long <- str_replace(data1$Long, "106.6327", "107.4845008")
#menghilangkan baris duplikat
data1 <- data1 %>% distinct()
```
```{r}
place_free <- data1 %>%
filter(Metode == "Gratis") %>%
select(Place_Name,Category,City,Metode,Rating,Place_Ratings,Price) %>%
group_by(Place_Name,Category,City,Metode,Price) %>%
summarise(Avg_Place = mean(Rating), Avg_User = round(mean(Place_Ratings),3), count = n()) %>%
mutate(Avg_total = (Avg_Place+Avg_User)/2) %>%
# ungroup()%>%
arrange(-Avg_total) %>%
group_by(City) %>%
slice(1) %>%
arrange(-Avg_total) %>%
mutate(label = glue("Lokasi: <b>Kota {City}</b>
Kategori: <b>{Category}</b>
Harga Masuk: <b>Rp.{comma(Price)}</b>
Penilaian Tempat: <b>{Avg_Place}</b>
Penilaian dari Wisatawan: <b>{Avg_User}</b>
Penilaian Keseluruhan: <b>{Avg_total}</b>"))
```
```{r}
place_paid <- data1 %>%
filter(Metode == "Berbayar") %>%
select(Place_Name,Category,City,Metode,Rating,Place_Ratings,Price) %>%
group_by(Place_Name,Category,City,Metode,Price) %>%
summarise(Avg_Place = mean(Rating), Avg_User = round(mean(Place_Ratings),3), count = n()) %>%
mutate(Avg_total = ((Avg_Place+Avg_User)/2)) %>%
# ungroup()%>%
arrange(-Avg_total) %>%
group_by(City) %>%
slice(1) %>%
arrange(-Avg_total) %>%
mutate(label = glue("Lokasi: <b>Kota {City}</b>
Kategori: <b>{Category}</b>
Harga Masuk: <b>Rp.{comma(Price)}</b>
Penilaian Tempat: <b>{Avg_Place}</b>
Penilaian dari Wisatawan: <b>{Avg_User}</b>
Penilaian Keseluruhan: <b>{Avg_total}</b>"))
```
Overview {data-icon="fa-chart-bar"}
=====================================
Row {data-height=120}
-----------------------------------------------------------------------
###
```{r}
valueBox(value = length(unique(data1$Place_Id)), caption ="Tempat Wisata", icon ="fa-map-pin", color = "#01497c")
```
###
```{r}
valueBox(value = length(unique(data1$User_Id)), caption ="Wisatawan/Reviewer", icon = "fa-user", color = "#01497c")
```
###
```{r}
valueBox(value =length(data1$User_Id), caption ="Trip", icon = "fa-map", color = "#01497c")
```
Row {data-height=400}
-----------------------------------------------------------------------
### Distribusi Umur Wisatawan Berdasarkan Banyaknya Kunjungan
```{r}
age <- data1 %>%
count(Age) %>%
mutate(label = glue("Umur: {Age}
Banyaknya Kunjungan: {n}"))
plot_hist <- ggplot(age, aes(Age,n,text= label))+
geom_col(fill="skyblue", color="black")+
scale_x_continuous(breaks = seq(min(age$Age),max(age$Age),1))+
labs(title = "Distribusi Umur Total Pengunjung Tempat Wisata di 5 Kota Besar Pulau Jawa",
x = "Umur",
y = "Banyaknya Kunjungan")+
theme_minimal()+
theme(legend.position = "none"
)
ggplotly(plot_hist, tooltip = "text")
```
### Demografi Umur Wisatawan di 5 Kota Besar Pulau Jawa
```{r}
plot_box <- ggplot(data1,aes(x= City, y = Age))+
geom_boxplot(width = 2,color = "black", fill = "skyblue")+
labs(title = "Demografi Umur Pengunjung Tempat Wisata di Kota Besar Pulau Jawa",
x = NULL,
y = "Umur")+
theme_minimal()+
theme(#plot.title = element_text(face="bold"),untuk menebalkan judul
legend.position = "none"
)
ggplotly(plot_box)
```
Row {data-height=400, .tabset .tabset-fade}
-----------------------------------------------------------------------
### Tempat Wisata Gratis Terfavorit
```{r}
plot_place_free<- ggplot(data = place_free,
aes(x = Avg_total, y = reorder(Place_Name, Avg_total),text = label))+
geom_col(aes(fill=Avg_total),width=0.5)+
scale_fill_gradient(low="skyblue", high="black")+
labs(x = "Skor Penilaian Keseluruhan",
y = NULL)+
theme_minimal()+
theme(legend.position = "none"
)
ggplotly(plot_place_free, tooltip = "text") %>%
style(hoverlabel = list(bgcolor = "white", align="left")) %>%
layout(margin = "m",title = list(text = paste0('Tempat Wisata Gratis Terfavorit',
'<br>',
'<sup>',
'Berdasarkan Lokasi dan Tingkat Penilaian Wisatawan di 5 Kota Besar Pulau Jawa','</sup>'), y=0.9))
```
### Tempat Wisata Berbayar Terfavorit
```{r}
plot_place_paid<- ggplot(data = place_paid,
aes(x = Avg_total, y = reorder(Place_Name, Avg_total),text = label))+
geom_col(aes(fill=Avg_total),width=0.5)+
scale_fill_gradient(low="skyblue", high="black")+
labs(x = "Skor Penilaian Keseluruhan",
y = NULL)+
theme_minimal()+
theme(legend.position = "none"
)
ggplotly(plot_place_paid, tooltip = "text") %>%
style(hoverlabel = list(bgcolor = "white", align="left")) %>%
layout(margin = "m",title = list(text = paste0('Tempat Wisata Berbayar Terfavorit',
'<br>',
'<sup>',
'Berdasarkan Lokasi dan Tingkat Penilaian Wisatawan di 5 Kota Besar Pulau Jawa','</sup>'), y=0.9))
```
Row {data-height=70}
-----------------------------------------------------------------------
### Keterangan Plot
* Penilaian dibagi menjadi 2 jenis yakni Penilaian berdasarkan Tempat (Review) dan Penilaian berdasarakan hasil skor dari wisatawan.
* Peniaian Keseluruhan merupakan Rata - Rata dari Penilaian Tempat dan Penilaian dari Wisatawan.
Row {data-height=500}
-----------------------------------------------------------------------
### Peta Lokasi Wisata di 5 Kota Besar Pulau Jawa
```{r}
loca <- data1 %>%
group_by(Place_Name,Description,Category,City,Metode,Price,Lat,Long) %>%
summarise(Avg_Place = mean(Rating), Avg_User = round(mean(Place_Ratings),3), count = n()) %>%
mutate(Avg_total = (Avg_Place+Avg_User)/2) %>%
mutate_at(c("Lat","Long"), as.double) %>%
mutate(label = glue(
"<b>Nama: </b> {Place_Name} <br/>
<b>Deskripsi: </b> {Description} <br/>
<b>Kategori: </b> {Category} <br/>
<b>Kota: </b> {City} <br/>
<b>Jenis: </b> {Metode} <br/>
<b>Harga Masuk: </b> Rp.{comma(Price)} <br/>
<b>Penilaian Tempat: </b> {Avg_Place} <br/>
<b>Penilaian dari Pengunjung: </b> {Avg_User} dari <b>{count}</b> pengunjung<br/>
<b>Penilaian Keseluruhan: </b> {Avg_total} <br/>"
))
# create a leaflet map widget
map1 <- leaflet()
# add tiles (kerangka peta) from open street map
map1 <- addTiles(map1, group = "Default") %>%
addProviderTiles(providers$Esri.WorldImagery, group = "Satelite") %>%
addLayersControl(baseGroups = c("Default", "Satelite"))
# add markers
map1 <- addMarkers(map = map1, data = loca, popup = loca$label, clusterOptions = markerClusterOptions()) %>%
addMiniMap(
toggleDisplay = TRUE
)
map1
```
Dataset {data-icon="fa-table"}
=====================================
Row {data-height=855, .tabset .tabset-fad}
-----------------------------------------------------------------------
### Tourism with id
```{r}
datatable(tourism_with_id, options = list(scrollX = TRUE))
```
-----------------------------------------------------------------------
### Tourism Rating
```{r}
datatable(tourism_rating, options = list(scrollX = TRUE))
```
-----------------------------------------------------------------------
### User
```{r}
datatable(user, options = list(scrollX = TRUE))