Overview

Row

437

300

9921

Row

Distribusi Umur Wisatawan Berdasarkan Banyaknya Kunjungan

Demografi Umur Wisatawan di 5 Kota Besar Pulau Jawa

Row

Tempat Wisata Gratis Terfavorit

Tempat Wisata Berbayar Terfavorit

Row

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

Peta Lokasi Wisata di 5 Kota Besar Pulau Jawa

Dataset

Row

Tourism with id


Tourism Rating


User

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