Algoritma & Struktur Data

Ujian Akhir Semester (UAS)


Kontak : \(\downarrow\)
Email :
Instagram : https://www.instagram.com/dhelaasf/
RPubs : https://rpubs.com/dhelaasafiani/
NIM : 20214920009
Prodi : Statistika Bisnis 2021

Soal UAS

Berikut ini saya lampirkan data perumahan di kota Melbourne Australia, dengan struktur data sebagai berikut:

Type: yang dibagi menjadi 3 bagian
TipeA.csv
TipeB.xlsx
TipeC.rds

Dimana setiap tipe rumah (A,B,C) tersebut terdiri dari beberapa variabel sebagai berikut:
- Suburb: Suburb
- Rooms: Number of rooms
- Price: Price in dollars
- Method: Status of property sale -
* S - property sold;
* SP - property sold prior;
* PI - property passed in;
* PN - sold prior not disclosed;
* SN - sold not disclosed;
* VB - vendor bid;
* W - withdrawn prior to auction;
* SA - sold after auction;
* SS - sold after auction price not disclosed.
- SellerG: Real Estate Agent
- Date: Date sold
- Distance: Distance from CBD
- Bedroom2: Number of Bedrooms
- Bathroom: Number of Bathrooms
- Car: Number of car spots
- Landsize: Land Size
- YearBuilt: Year the house was built
- Regionname: General Region (West, North West, North, North east …etc)

Soal 1

Gabungkan data tipe A,B, C kedalam satu dataframe sehingga membentuk struktur data (Type,Subur, Price, Method, SellerG, Date, Distance,Bedroom2, Bathroom, Car, Landsize, YearBuilt, Regionname)

pacman::p_load(readxl, writexl)                        # untuk load readxl, writexl, untuk read excel
imp1 <- read.csv("UAS/TipeA.csv",sep = ",")            # impor data tipe A yang berbentuk file csv, kita gunakan fungsi read.csv
imp2 <- read_excel("UAS/TipeB.xlsx")                   # impor data tipe B yang berbentuk file xlsx, kita gunakan fungsi read_excel
imp3 <- readRDS("UAS/TipeC.rds")                       # impor data tipe C yang berbentuk file rds, kita gunakan fungsi readRDS

# Untuk menambahkan variabel baru pada setiap data
imp1$Type = "Cluster"
imp2$Type = "Komplek"
imp3$Type = "Residence"

# Menggabungkan ke-3 data yang sudah di impor
df <- rbind(imp1,imp2,imp3)                            # menggabungkan imp1,imp2,imp3
df                                                     # mencetak hasil berupa dataframe dari df


Baik, pada kali ini saya mau menggabungkan data tipe A, B, dan C menjadi 1 data frame. Tapi sebelumnya, kita perlu untuk import data nya terlebih dahulu. Di dalam data belum ada tipe rumah, jadi saya menambahkan variable baru di dataset yang saya pakai. Variable nya bernama Type. Dimana isi TYpe atau tipe rumah ini ada tipe rumah cluster, komplek, dan residence. Setelah itu, saya ingin menyatukan 3 data menjadi 1 dataframe dengan menggunakan fungsi rbind. Saya menamai dataframe ini df

# Menggabungkan variabel-variabel yang ditentukan ke dalam 1 dataframe baru yang bernama 'yy'
yy = data.frame("Type" =df$Type,
               "Subur" =df$Suburb,
               "Price"= df$Price,
               "Method" = df$Method,
               "SellerG" = df$SellerG,
               "Date" = df$Date,
               "Distance" = df$Distance,
               "Bedroom2" = df$Bedroom2,
               "Bathroom" = df$Bathroom,
               "Car" = df$Car,
               "Landsize" = df$Landsize,
               "YearBuilt" = df$YearBuilt,
               "Regionname" = df$Regionname)

# Memanggil data frame 'yy'
yy


Setelah itu, saya ingin mengambil variable data yang dibutuhkan saja seperti yang ada di perintah soal. Saya mengambil variabel data (Type,Subur, Price, Method, SellerG, Date, Distance,Bedroom2, Bathroom, Car, Landsize, YearBuilt, Regionname). Setelah itu, saya jadikan dataframe baru lagi yang isinya variabel yang sudah ditentukan. Saya menggunakan fungsi dataframe untuk mengambil kolom variabel data dari dataframe df.

Soal 2

Rename setiap variabel diatas kedalam bahasa indonesia.

ganti <- yy                                 # Menggati nama dataframe 'yy' menjadi 'ganti'

# Mengganti nama variabel dengan menggunakan fungsi names
names(ganti) = c("Tipe",
               "Pinggiran_Kota",
               "Harga",
               "Metode",
               "PenjualG",
               "Tanggal" ,
               "Jarak",
               "Kamartidur2",
               "Kamarmandi",
               "Mobil",
               "Luas",
               "Tahunbangun",
               "Daerah")

ganti


Dalam kasus ini, saya ingin mengganti nama-nama variabel nya menjadi versi bahasa indonesia. Dimana saya menggunakan fungsi names untuk mengganti nama setiap variabel nya atau melakukan rename setiap variabel nya. Setelah itu, masukan list nama variabel baru yang akan diganti nama variabel nya dari yang sebelumnya. Setelah itu, print dataframe ganti

Soal 3

Rename kategori variabel “Regionname” kedalam bahasa Indonesia.

ganti$Daerah[ganti$Daerah=="Southern Metropolitan"] <- "Selatan"
ganti$Daerah[ganti$Daerah=="Northern Metropolitan"] <- "Utara"
ganti$Daerah[ganti$Daerah=="Western Metropolitan"] <- "Barat"
ganti$Daerah[ganti$Daerah=="Eastern Metropolitan"] <- "Timur"
ganti$Daerah[ganti$Daerah=="South-Eastern Metropolitan"] <- "Tenggara.Metropolitan"
ganti$Daerah[ganti$Daerah=="Northern Victoria"] <- "Utara.Victoria"
ganti$Daerah[ganti$Daerah=="Western Victoria"] <- "Barat.Victoria"
ganti$Daerah[ganti$Daerah=="Eastern Victoria"] <- "Timur.Victoria"

ganti


Disini, saya mendapat kasus bahwa kita harus melakukan rename setiap kategori variabel ‘Daerah’ ke bahasa Indonesia.

#wilayah = factor(c(ganti$Daerah))

#library("dplyr")
# %>%
 # group_by(ganti$Daerah)%>%
#  summarise(n_distinct(ganti$Daerah))

#levels(wilayah) <- list(Utara.Met = "Northern Metropolitan",
#                      Selatan.Met = "Southern Metropolitan",
#                       Timur.Met = "Eastern Metropolitan",
#                       Barat.Met = "Western Metropolitan",
#                       Tenggara.Met = "South-Eastern Metropolitan",
#                       Utara.Vic = "Northern Victoria",
#                       Timur.Vic = "Eastern Victoria",
#                       Barat.Vic = "Western Victoria")

#ganti$Daerah = wilayah
#ganti

Soal 4

Lakukan pengecekan Missing Value dan pengendalian

# Cara melakukan pengecekan missing values
t_NA = na.omit(ganti)                  # Menggunakan fungsi 'na.omit' untuk memunculkan data yang sudah bersih dari missing values
t_NA                                   # print t_NA
ada.NA = setdiff(ganti, t_NA)          # Memunculkan data 'ganti' yang tidak ada data 't_NA' nya
ada.NA
# Cara manual
NA_Harga = ganti[is.na(ganti$Harga),]
NA_Ktidur = ganti[is.na(ganti$Kamartidur2),]
NA_Kmandi = ganti[is.na(ganti$Kamarmandi),]
NA_Mobil = ganti[is.na(ganti$Mobil),]
NA_Jarak = ganti[is.na(ganti$Jarak),]
NA_Luas = ganti[is.na(ganti$Luas),]
NA_Tahun = ganti[is.na(ganti$Tahunbangun),]
NA_Wilayah = ganti[is.na(ganti$Daerah),]

library(prob)
a = union(NA_Harga,
          union(NA_Ktidur,
          union(NA_Kmandi,
          union(NA_Mobil,
          union(NA_Jarak,
          union(NA_Luas,
          union(NA_Tahun,
          (NA_Wilayah))))))))

a


Disini saya ingin melakukan pengecekan missing value yang ada dalam data ganti. Pertama, saya menggunakan fungsi na.omit untuk menyingkirkan data yang memiliki Missing Values pada data ganti. Setelah smua NA sudah di hilangkan, saya memanggil data baru yang sudah bersih dari NA. Data bersih ini bernama t_NA. Lalu, akan muncul data bersih atau yang tidak ada Missing Values nya lagi.

Nah, bagaimana cara kita tau Missing Values letaknya dimana saja? Saya memiliki cara untuk mengetahui Missing Valuesnya letaknya dimana saja. Yaitu dengan menggunakan fungsi setdiff. Kenapa? karena saya ingin memunculkan data yang memiliki Missing Value nya saja. Dalam arti, saya ingin memunculkan data ganti yang sudah tidak ada lagi data t_NA nya. Seperti yang kita ketahui tadi, t_NA itu adalah data dari ganti yang sudah tidak ada lagi nilai NA nya. Nah, disini kita ingin menggunakan setdiff dimana ingin memunculkan data yang berisi NA nya saja. Disini saya menamai data yang berisi NA saja itu adalah ada.NA.


Saya memiliki opsi lain untuk mengetahui data yang sudah bersih dari NA, dan data yang ada NA nya saja. Pertama, saya melakukan subset tiap variable yang memiliki NA terlebih dahulu. Tentunya dengan menggunakan fungsi is.na. Ketika di run, muncul data yang kita inginkan. Setelah itu, saya menggunakan library prob untuk mencari data ‘ganti’ yang sudah tidak ada nilai NA nya lagi. Yaitu dengan menggunakan fungsi union. Fungsi union ini digunakan untuk mengkombinasikan kedua data atau lebih.

# Menggati NA dengan 0

# ganti[is.na(ganti)] <- 0         # menggunakan fungsi 'is.na' untuk mengganti nilai NA menjadi 0
# ganti


Nah, disini saya memiliki opsi lain untuk melakukan pengendalian terhadap missing values. Yaitu dengan mengganti NA dengan 0. Disini saya menggunakan fungsi is.na dan mengganti NA nya dengan nilai 0. KEtika di print, smua missing values yang ada di data ‘ganti’ akan berubah menjadi 0.

Keterangan:
- select() : mengambil data atau variabel yang dibutuhkan
- filter() : menyaring data
- %>% : menggabungkan berbagai fungsi atau meneruskan suatu fungsi

summary(ganti)
##      Tipe           Pinggiran_Kota         Harga             Metode         
##  Length:34857       Length:34857       Min.   :   85000   Length:34857      
##  Class :character   Class :character   1st Qu.:  635000   Class :character  
##  Mode  :character   Mode  :character   Median :  870000   Mode  :character  
##                                        Mean   : 1050173                     
##                                        3rd Qu.: 1295000                     
##                                        Max.   :11200000                     
##                                        NA's   :7610                         
##    PenjualG           Tanggal              Jarak        Kamartidur2    
##  Length:34857       Length:34857       Min.   : 0.00   Min.   : 0.000  
##  Class :character   Class :character   1st Qu.: 6.40   1st Qu.: 2.000  
##  Mode  :character   Mode  :character   Median :10.30   Median : 3.000  
##                                        Mean   :11.18   Mean   : 3.085  
##                                        3rd Qu.:14.00   3rd Qu.: 4.000  
##                                        Max.   :48.10   Max.   :30.000  
##                                        NA's   :1       NA's   :8217    
##    Kamarmandi         Mobil             Luas           Tahunbangun   
##  Min.   : 0.000   Min.   : 0.000   Min.   :     0.0   Min.   :1196   
##  1st Qu.: 1.000   1st Qu.: 1.000   1st Qu.:   224.0   1st Qu.:1940   
##  Median : 2.000   Median : 2.000   Median :   521.0   Median :1970   
##  Mean   : 1.625   Mean   : 1.729   Mean   :   593.6   Mean   :1965   
##  3rd Qu.: 2.000   3rd Qu.: 2.000   3rd Qu.:   670.0   3rd Qu.:2000   
##  Max.   :12.000   Max.   :26.000   Max.   :433014.0   Max.   :2106   
##  NA's   :8226     NA's   :8728     NA's   :11810      NA's   :19306  
##     Daerah         
##  Length:34857      
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 

Soal 5

Buatlah Visualisasi Data secara lengkap untuk mendapatkan informasi penting yang terkandung dalam Data_Perumahan_Melbourne.xlsx. Keterangan
1. geom_histogram : fungsi untuk memodifikasi histogram
2. scale_y_continuous: Mengubah label tanda centang pada sumbu y
3. labs : Ubah label sumbu, legenda, dan plot
4. geom_boxplot : fungsi untuk modifikasi boxplot
5. coord_polar : utk diagram lingkaran
6. factor : Mengubah urutan kategori untuk kelas variabel serta urutan labels untuk variabel drive
7. scale_fill_brewer : Mengubah skema warna isian
8. theme_minimal : Menghapus latar belakang abu-abu dan mengubah warna kisi
9. summarize() : mengembalikan NA jika ada nilai yang terlibat dalam perhitungan adalah NA.

library(ggplot2)                                                    # panggil library ggplot2
ggplot(t_NA, aes(Harga))+
  geom_histogram(binwidth = 300000,                                 # lebaar binwidth
                 fill = "black",                                    # beri fill atau warna pada bar 
                 color ="white",                                    # warna pada garis bar
                 bins = 10,                                           
                 size = 1)+
  scale_x_continuous(breaks = c(1000000,2000000,3000000,4000000),   
                     labels = c("$1m","$2m","$3m","$4m"))+          # memasukkan harga berdasarkan dollar
  labs(title = "Harga Perumahan Melbourne")


Berdasarkan grafik di atas, dapat disimpulkan bahwa harga perumahan yang paling banyak diminati adalah harga yang kurang dari $1m.
Dalam pembuatan grafik ini, kita perlu untuk memanggil library ggplot2. Setelah itu, memplot variabel Harga. Setelah itu, modifikasi grafik menggunakan fungsi histogram yaitu geom_histogram.

library(ggplot2)                                           # panggil library ggplot2
ggplot(t_NA, aes(Tipe, Harga)) +                           # memplot variable tipe dan harga pada data t_NA
  geom_boxplot(outlier.colour = "red") +                   # memberi warna pencilan merah
  scale_x_discrete(labels = c('Cluster','Komplek','Residence')) +              # memberi label di sb. x
  scale_y_continuous(breaks=seq(0,10000000,1500000)) +     # memberi label pada sb. y dari 0 - 10000000
  xlab("Tipe") +                                           # memberi label pada grafik di x berupa 'tipe'
  ylab("Harga") +                                          # memberi label di sb.y berupa 'harga'
  ggtitle("Distribusi Harga Tipe Rumah")                   # memberi judul grafik


Berdasarkan grafik di atas, dapat disimpulkan bahwa cluster rumah dengan tipe Cluster memiliki harga yang paling mahal dibandingkan dengan tipe komplek dan residence.
Untuk membuat grafik di atas, kita perlu memanggil library ggplot2 dan memplot variabel Tipe dan Harga dari data ‘t_NA’. Setelah itu, kita beri warna pada pencila boxplot dengan fungsi geom_boxplot. Lalu, beri label untuk setiap sumbu x dan y. Dan tentunya langkah terakhir adalah jangan lupa untuk menambahkan judul grafik nya.

library(scales)                                                  # panggil library scales
library(dplyr)                                                   # panggil library dplyr
plotdata <- t_NA %>%                                             # memanggil data 't_NA' untuk dilakukan sebuah operasi perhitungan
  count(Daerah) %>%                                              # yang akan dihitung adalah variabel 'Daerah'
  arrange(desc(Daerah)) %>%
  mutate(prop = round(n*100/sum(n),1),
         lab.ypos = cumsum(prop) - 0.5*prop)


ggplot(plotdata,                                                  
       aes(x = "",                                               # memplot variabel Daerah pada data plotdata
           y = prop,
           fill = Daerah)) +
  geom_bar(width = 1,                                            # mengatur lebar bar nya
           stat = "identity", 
           color = "black") +                                    # memberi warna garis
  coord_polar("y", start = 0) +                                  # mulai dari 0
  geom_text(aes(y = lab.ypos, label = prop),                     
            color = "black") +
  scale_fill_brewer(palette="Reds", 
                    direction=-1) +                              # mengatur berlawanan dengan arah jarum jam
  theme_void() +                                                 # masukkan tema void
  labs(title = "Banyak Penduduk Berdasarkan Wilayah")            # menambah judul


Grafik di atas adalah tentang banyak penduduk yang ada di suatu Daerah. Dapat disimpulkan bahwa daerah Selatan memiliki penduduk yang paling banyak dengan presentase 31.9. Dan yang terendahnya adalah Daerah Utara.Victoria dengan presentase 0.6. start
Offset of starting point from 12 o’clock in radians. Offset is applied clockwise or anticlockwise depending on value of direction. direction 1, searah jarum jam; -1, berlawanan arah jarum jam

library(ggplot2)                                     # untuk visualisasi
ggplot(t_NA,
       aes(x = Luas, 
           y = Harga)) +
  geom_point(color= "cornflowerblue") +
  geom_smooth(method = "lm", color = "red")+
  scale_y_continuous(label = scales::dollar, 
                     limits = c(50000, 5000000)) +
  scale_x_continuous(breaks = seq(0, 2500, 200), 
                     limits=c(0, 2500)) +
  theme_minimal() +                                  # menggunakan tema minimal
  labs(x = "Luas Bangunan",
       y = "Harga",
       title = "Luas Bangunan Vs. Harga",
       subtitle = "Harga dan Luas")+
  theme(axis.text.x = element_text(angle = 60, hjust = 1))


library(dplyr)                                       # untuk manipulasi data
library(ggplot2)                                     # untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis

# Menghitung rata-rata harga rumah pada setiap Daerah
plotdata <- t_NA %>%
  group_by(Daerah) %>%
  dplyr::summarize(mean_Harga = mean(Harga))         # menghitung rata-rata


mycols <- c("#CD534CFF", "#EFC000FF", "#2FDD92",     # memberi warna pada bar
            "#FFAB4C", "#116530", "#7267CB",
            "#CD534CFF", "#EBE645")
ggplot(plotdata, 
       aes(x = factor(Daerah,                             # memplot Daerah beserta menambahkan label nya pada sb.x
                      labels = c("Selatan",
                                 "Utara",
                                 "Barat",
                                 "Timur",
                                 "Tenggara.Metropolitan",
                                 "Utara.Victoria",
                                 "Barat.Victoria",
                                 "Timur.Victoria")), 
                      y = mean_Harga)) +                  # y nya berupa hasil perhitungan rata-rata
  geom_bar(stat = "identity", 
           fill = mycols) +
  geom_text(aes(label = dollar(mean_Harga)), 
            vjust = -0.5) +
  scale_y_continuous(breaks = seq(0, 40000000, 500000),   # perhitungan di sb. y mulai dr 0 - 40000000
                     label = dollar) +                    # jenis label nya dollar
  theme_minimal() +                                       # menggunakan tema minimal
  labs(title = "Rata-rata harga rumah di setiap daerah",  # menambah judul
       x = "",
       y = "") +
  theme(axis.text.x = element_text(angle = 45, vjust = 0.5))   # mengatur angle dan vjust agar tidak terjadi tumpang tindiih


Grafik menyimpulkan bahwa berdasarkan nilai rata-rata harga, Daerah Barat memiliki rata-rata harga yang paling mahal dibandingkan dengan Utara yang adalah Daerah yang harga rata-rata nya rendah. Jadi, Daerah Barat lebih mahal harga perumahannya.

ggplot(t_NA, aes(Kamarmandi, Kamartidur2)) + 
  geom_jitter(color = "navy blue", size = 0.5, size = 8) + 
  labs(title = "Kamar mandi Vs. Kamar tidur", xlab = "Bathrooms", ylab = "Price") + 
  xlim(0,8) + ylim(0,10)

t_NA %>% 
  ggplot(aes(Harga, fill = Tipe))+                    # memplot variabel Harga dan Tipe     
  geom_density(alpha = 0.3)+                          # memberi tranparan pada grafik
  scale_x_log10()+
  facet_wrap(~Daerah, ncol =2)+                       # Membuat dan membagi plot menjadi banyak
  theme(axis.text.x = element_text(angle = 90, 
                                   vjust = .5))+
  labs(x = "log10", y = "Density")


Grafik di atas menyimpulkan bahwa penjualan rumah Tipe Residence mengalami peningkatan di daerah Timur.Victoria. Lalu, rumah Tipe Cluster mengalami sedikit peningkatan di Daerah Barat.Victoria. Sedangkan rumah Tipe Komplek, hanya mengalami kestabilan saja dalam penjualannya.
Fungsi ncol() dalam Bahasa R digunakan untuk mengembalikan jumlah kolom dari matriks yang ditentukan. Dengan satu fungsi, Anda dapat membagi satu plot menjadi banyak plot terkait menggunakan facet_wrap() atau facet_grid().

yoi <- t_NA %>%
  count(PenjualG)

yoi$rank = rank(desc(yoi$n))                       # Membuat variabel baru berupa 'rank' berdasarkan n terbanyak

top30 = subset(yoi, subset = rank <= 30)           # Subset data 30 teratas 

bukan_top30 = setdiff(yoi, top30)                  # Memunculkan data 

others = data.frame("PenjualG" = "Others",
                    "n" = sum(bukan_top30$n),
                    "rank" = 31)
others
t.PenjualG = data.frame(top30)
t.PenjualG
ggplot(t.PenjualG, 
       aes(x= n, 
           y=reorder(PenjualG, n))) +              # mengurutkan data dari yg terbesar, kalau pakai (-) dia dr yg terkecil
  geom_point(color="red", 
             size = 2) +
  geom_segment(aes(x = 40, 
               xend = n, 
               y = reorder(PenjualG, n), 
               yend = reorder(PenjualG, n)),
               color = "black") +
  labs (x = "n",
        y = "",
        title = "30 Penjual Teratas") +
  theme_minimal() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())


Dari grafik di atas, dapat disimpulkan bahwa penjual bernama Nelson adalah penjual yang menjual rumah terbanyak di Melbourne. Data di atas adalah data 30 tertinggi.

library(tidyverse)
library(DT)
library(scales)
library(dplyr)

dataaa <-t_NA %>% 
  group_by(Pinggiran_Kota) %>% 
  summarise(Avg = mean(Harga, na.rm = T)) %>% 
  arrange(Avg) %>% 
  top_n(n = 10)

dataaa %>% 
  mutate_at(vars(Pinggiran_Kota), funs(as.factor(.))) %>% 
  ggplot(aes(fct_reorder(Pinggiran_Kota, Avg), Avg))+
  geom_bar(stat = "identity", fill = rainbow(10), color = "black")+
  geom_text(aes(Pinggiran_Kota, 1, label = paste("(",scales::dollar(Avg),")")), hjust = 0, vjust = .5, fontface = "bold", color = "black")+
  coord_flip()+
  theme_minimal()+
  labs(y = "Harga", x = "Pinggiran Kota", title = "10 Pinggiran Kota paling teratas berdasarkan rata-rata")


Grafik di atas menunjukkan 10 pinggiran kota yang teratas berdasarkan rata-rata harga jualnya. Yang paling tinggi adalah pinggiran Kooyong.

library(ggplot2)                      # Untuk visualisasi
bw.nrd0(t_NA$Jarak)                   # default bandwidth untuk variabel usia
## [1] 0.7911057
ggplot(t_NA, aes(x = Jarak)) + 
  geom_density(fill = "gold1",
               color = "white",
               bw = 1) +
  theme_minimal() +
  labs(title = "Jarak Jangkauan",
       subtitle = "bandwidth = 1")


Grafik di atas menyimpulkan bahwa jarak dari CBD dalam penjualan rumah yang paling banyak terletak sekitaran jarak 10.

library(dplyr)                                       # untuk manipulasi data 
library(ggplot2)                                     # untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
# membuat ringkasan dataset (manipulasi data)
plotdata <- t_NA %>%
  group_by(Daerah, Tipe) %>%
  dplyr::summarize(n = n()) %>%
  mutate(pct = n/sum(n),
         persen = scales::percent(pct))
# membuat diagram batang tersegmentasi
# menambahkan label untuk setiap segmen
ggplot(plotdata, 
       aes(x = factor(Daerah),
           y = pct,
        fill = factor(Tipe))) +
  geom_bar(stat = "identity",
           position = "fill") +
  scale_y_continuous(breaks = seq(0, 1, .1), 
                     label = percent)+
  geom_text(aes(label = persen),
            size = 2.5,
            position = position_stack(vjust = 0.5)) +
  scale_fill_brewer(palette = "Set3") +
  theme_minimal() +                                  # menggunakan tema minimal
  labs(y = "Percent",
       fill = "Tipe",
       x = "Wilayah",
       title = "Banyak Rumah berdasarkan Tipe dan Letak Wilayah ") +
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 45, vjust = 0.6))


Berdasarkan grafik diatas dapat disimpulkan bahwa rumah tipe cluster memiliki jumlah yang banyak di berbagai Daerah.

library(dplyr)                                       # untuk manipulasi data
library(ggplot2)                                     # untuk visualisasi
library(ggridges)                                    # untuk menangani visualisasi yang tumpang tindih
# menghitung rata-rata, deviasi standar,
# kesalahan standar, dan 95% interval kepercayaan 
# berdasarkan jabatan
plotdata <- t_NA %>%
  group_by(Tipe, Metode) %>%
  dplyr::summarize(n = n(),
            mean = mean(Harga),
            sd = sd(Harga),
            se = sd/sqrt(n),
            ci = qt(0.975, df = n - 1) * sd / sqrt(n))
# meningkatkan plot rata-rata kesalahan atau standar kesalahan
pd <- position_dodge(0.2)
ggplot(plotdata, 
       aes(x = factor(Tipe, 
                      labels = c("Cluster",
                                 "Komplek",
                                 "Residence")), 
           y = mean, 
           group=Metode, 
           color=Metode)) +
  geom_point(position=pd, 
             size = 3) +
  geom_line(position = pd, 
            size = 1) +
  geom_errorbar(aes(ymin = mean - se, 
                    ymax = mean + se), 
                width = .1, 
                position = pd, 
                size = 1) +
  scale_y_continuous(label = scales::dollar) +
  scale_color_brewer(palette="Set2") +
  theme_minimal() +
  labs(title = "Harga Rumah berdasarkan Tipe dan Metode Penjualan",
       subtitle = "(mean +/- standard error)",
       x = "Tipe", 
       y = "",
       color = "Metode")


Grafik di atas menunjukkan bahwa metode penjualan VB memiliki harga yang paling mahal, khususnya pada tipe rumah Cluster.