Algoritma & Struktur Data

UAS Algoritma dan Struktur Data


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/dsciencelabs/
RPubs https://rpubs.com/dsciencelabs/

Karen Natalie

20204920015

Statistika 2020

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)

Tugas kalian adalah:

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)
2. Rename setiap variabel diatas kedalam bahasa indonesia.
3. Rename kategori variabel “Regionname” kedalam bahasa Indonesia.
4. Lakukan pengecekan Missing Value dan pengendalian
5.Buatlah Visualisasi Data secara lengkap untuk mendapatkan informasi
penting yang terkandung dalam Data_Perumahan_Melbourne.xlsx.

print (getwd())    # memperlihatkan data yang menyimpan file
## [1] "C:/Users/HP/OneDrive/Documents/uas algo"
getwd()            # memperlihatkan data yang menyimpan file
## [1] "C:/Users/HP/OneDrive/Documents/uas algo"
setwd(getwd())     # memperlihatkan data yang menyimpan file

Menggabungkan ketiga data

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


Menggunakan fungsi rbind untuk menggabungkan beberapa baris untuk membentuk satu kumpulan, termasuk menggabungkan dua bingkai data, vektor, dan banyak lagi.

# install.packages(c("readxl","writexl")) # install packages readxl and writexl
pacman::p_load(readxl, writexl)         # install pacman

data1 <- read.csv("C:\\Users\\HP\\OneDrive\\Documents\\uas algo/TipeA.csv",sep = ",")
data2 <- read_excel("C:\\Users\\HP\\OneDrive\\Documents\\uas algo/TipeB.xlsx")
data3 <- readRDS("C:/Users/HP/OneDrive/Documents/uas algo/TipeC.rds")

data1$Type="House"
data2$Type="Town-House"
data3$Type="Units"

df <- rbind(data1, data2, data3)
df

Keterangan: Menggabungkan ketiga data dengan jenis file yang berbeda dengan fungsi rbind() dan menambahkan variabel baru yaitu Type ke dalam data.

Kemudian menghilangkan 2 column yaitu Rooms dan BuildingArea untuk mendapatkan bentuk struktur data (Type,Subur, Price, Method, SellerG, Date, Distance,Bedroom2, Bathroom, Car, Landsize, YearBuilt, Regionname)

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

Keterangan: Fungsi Data.frame() digunakan karena untuk membentuk tabel atau struktur seperti array dua dimensi di mana setiap kolom berisi nilai dari satu variabel dan setiap baris berisi satu set nilai dari setiap kolom dan memberikan kesan yang mudah dimengerti dalam setiap baris dan kolom.

Rename Regionname

Rename setiap variabel diatas kedalam bahasa indonesia menggunakan fungsi names. Kemudian hasil akhir menggunakan data frame agar tidak memunculkan banyak data terlalu banyak dan lebih tertata.

rename_1= dfbaru
names(rename_1)= c("Tipe",
                   "Pinggiran Kota",
                   "Harga",
                   "Langkah",
                   "PenjualG",
                   "Tanggal",
                   "Jarak",
                   "Ruang Kamar",
                   "Kamar Mandi",
                   "Mobil",
                   "Ukuran Tanah",
                   "Tahun Pembangunan",
                    "Wilayah")

dff <- data.frame(rename_1)
dff

Renaming Variabel in Regionname

Rename kategori variabel “Regionname” kedalam bahasa Indonesia.

Pertama, memanggil semua variabel dalam column wilayah menggunakan fungsi unique.
Untuk mengevaluasi apa saja nilai unik dalam kolom menggunakan fungsi unique.

unique(dff$Wilayah)
## [1] "Northern Metropolitan"      "Western Metropolitan"      
## [3] "Southern Metropolitan"      "Eastern Metropolitan"      
## [5] "South-Eastern Metropolitan" "Eastern Victoria"          
## [7] "Northern Victoria"          "Western Victoria"          
## [9] NA

Setelah memanggil semua variabel yang ada dalam wilayah, kita mengetahui bahwa sebelumnya variabel dalam berbahasa inggris, karena itu kita mengganti languange ke Bahasa Indonesia.

dff$Wilayah[dff$Wilayah=="Southern Metropolitan"] <- "Metropolitan Selatan"
dff$Wilayah[dff$Wilayah=="Northern Metropolitan"] <- "Metropolitan Utara"
dff$Wilayah[dff$Wilayah=="Western Metropolitan"] <- "Metropolitan Barat"
dff$Wilayah[dff$Wilayah=="South-Eastern Metropolitan"] <- "Metropolitan Tenggara"
dff$Wilayah[dff$Wilayah=="Eastern Victoria"] <- "Victoria Timur"
dff$Wilayah[dff$Wilayah=="Northern Victoria"] <- "Victoria Utara"
dff$Wilayah[dff$Wilayah=="Eastern Metropolitan"] <- "Metropolitan Timur"
dff$Wilayah[dff$Wilayah=="Western Victoria"] <- "Victoria Barat"

dff

Missing Value

Melakukan pengecekan Missing Value dan pengendalian

Sebelumnya, kita mengetahui bahwa missing value atau NA merupakan nilai yang tak tersedia atau bukan merupakan angka. Oleh karena itu,untuk mengendalikan missing value ada berbagai cara.

Pertama, bisa menggunakan library tidyverse yang berfungsi untuk pengolahan data import dan export data, membuat visualisasi data, dan pemodelan data, serta library dplyr untuk memanipulasi data.

filter(!Complete.cases(.))

library(tidyverse)  # memanggil tidyverse
library(dplyr)      # memanggil dplyr

dff %>%
  select(Harga, Ruang.Kamar, Kamar.Mandi, Mobil, Ukuran.Tanah, Tahun.Pembangunan) %>%
  filter(!complete.cases(.)) %>%
  data.frame()

Keterangan:
- select() : mengambil data atau variabel yang dibutuhkan
- filter() : menyaring data
- ! complete.cases() : mengembalikan vektor dengan data yang lengkap(tidak ada nilai yang hilang)
- %>% : menggabungkan berbagai fungsi atau meneruskan suatu fungsi

na.omit()

memakai fungsi na.omit() untuk menghilangkan missing value.

dff %>%
  select(Harga, Ruang.Kamar, Kamar.Mandi, Mobil, Ukuran.Tanah, Tahun.Pembangunan) %>%
  na.omit() %>%
  data.frame()

Keterangan: fungsi na.omit() untuk mengembalikan daftar tanpa baris yang berisi nilai NA/ missing value.

drop_na()

Menggunakan fungsi drop_na untuk menghapus semua baris yang berisi NA/ missing value pada variabel.

dff %>%
  select(Harga, Ruang.Kamar, Kamar.Mandi, Mobil, Ukuran.Tanah, Tahun.Pembangunan) %>%
  tidyr::drop_na()

is.na()

Menggunakan fungsi is.na untuk mengembalikan value yang ilang dengan dimensi yang sama dengan bingkai data untuk setiap elemen.

dff$Harga[which(is.na(dff$Harga))] <- mean(dff$Harga,na.rm = TRUE)
dff

Menggunakan fungsi mean dalam is.na untuk mengembalikan value yang hilang dengan nilai rata-rata dari variabel harga.
Argumen na.rm=TRUE untuk mengecualikan nilai yang hilang.
Fungsi which() mengembalikan posisi atau indeks dari nilai NA yang diberikan.

dff
dff[is.na(dff)] <- "none"

Kemudian bisa juga menganti NA menjadi “none” dengan menggunakan fungsi is.na.

visualisasi Data

Buatlah Visualisasi Data secara lengkap untuk mendapatkan informasi penting yang terkandung dalam Data_Perumahan_Melbourne.xlsx.

NA BarPlot

membuat barplot missing value untuk melihat seberapa banyak NA pada data.

missing_var <- as.data.frame(colSums(is.na(dfbaru))) %>% 
  rename(value = `colSums(is.na(dfbaru))`) %>% 
  add_rownames(var = "Variable") %>% 
  filter(value > 0) %>% 
  arrange(value)

missing_var <-  missing_var %>% 
  mutate(prop = value/nrow(dfbaru)) %>% 
  mutate(Variable = fct_reorder(Variable, prop))

missing_var %>% 
  ggplot(aes(Variable, prop))+
  geom_bar(stat = "identity", fill = "yellow", color = "red")+
  scale_y_continuous(labels = scales::percent)+
  labs(x = "VariabelNA", y = "Percent", title = "Bar Plot Variabel NA")

Keterangan: hanya pada column jarak dan wilayah yang tidak memiliki nilai NA. Pada column Tahun pembangunan memiliki nilai paling tinggi yang memiliki missing value.

Keterangan fungsi:
-colSums() : mengembalikan jumlah kolom dalam kumpulan data.
- add_rownames : mengonversi nama baris menjadi variabel.
- var : nama variabel yang digunakan.
- arrange : mengurutkan data berdasarkan kolom tertentu.
- mutate : menambahkan variabel baru dan mempertahankan yang sudah ada.
- prop : menghitung proporsi nilai atau pada data dfbaru.
- fct_reorder : menyusun ulang faktor variabel dan prop mengikuti nilai kolom variabel.

Perbandingan antar Variabel dalam data

Pada data yang bisa kita lihat, ada beberapa variabel yang sangat menarik untuk pembandingan antar kenaikan harga rumah dalam kurun waktu/tahun yang bisa kita interpretasikan ke dalam visualisasi data.


Sebelum itu, kita harus memanggil library ggplot2, dplyr, dan library caret untuk memvisualisasikan data dengan mudah dan menarik.

library(ggplot2)   # memanggil ggplot2
library(dplyr)     # memanggil dplyr

Price and no.Rooms

dff%>% 
  group_by(Ruang.Kamar) %>% 
  summarise(AvgPrice = mean(Harga, na.rm = T)) %>% 
  arrange(Ruang.Kamar) %>% 
  ggplot(aes(fct_reorder(as.factor(Ruang.Kamar), AvgPrice), AvgPrice))+
  geom_bar(stat = "identity", color = "black", fill ="pink")+
  scale_y_continuous(labels = scales::dollar)+
  labs(x = "No.Ruang", title = "Harga rata-rata terhadap no.Ruang")+
  coord_flip()+
  geom_text(aes(label = paste0("(", scales::dollar(AvgPrice),")", sep = "")), hjust = 1.1, vjust = .5, fontface = "bold")

Keterangan: Ruang no.16 memiliki rata-rata harga tertinggi.

Keterangan fungsi:
- summarise : menghitung harga rata-rata dari mean Harga pada data.
- as.factor : mengubah kolom numerik ruang kamar menjadi faktor sebagai argumen.
- coord_flip() : membalikkan vertikal menjadi horizontal
- aes : aesthetic mapping, untuk memperindah tampilan plot
- hjust : mengontrol justifikasi horizontal
- vjust : mengontrol justifikasi vertikal

Region and Price

Saya menggunakan Data Bivariat kategorikal yaitu boxplot karena untuk memperlihatkan jumlah numerik vaktor Harga sebagai komponennya

Pada tahap ini, saya membandingkan harga dengan rumah terhadap wilayah per tahunnya. Saya menggunakan boxplot untuk melihat kenaikan serta penurunan harga dari masing-masing wilayah.

cols <- c("yellow", "green", "purple", "Red", "blue", "darkgrey", "orange", "pink", "black")
ggplot(dff, aes( x = Harga,
                 y = Wilayah,
                 horizontal = TRUE)) +
  scale_x_continuous(breaks=seq(0,10000000,1250000)) +
  geom_boxplot(notch = FALSE,
               fill = cols,
               outlier.colour = "skyblue",
               alpha = 1) +
  theme_minimal() +
  labs(title = "Distribusi Harga Wilayah")

Keterangan: Rumah di kawasan Metropolitan Selatan memiliki harga rata-rata tertinggi. Sedangkan di wilayah Victoria Barat memiliki harga dengan rata-rata yang rendah yaitu kurang dari $ 1.250.000.
Keterangan fungsi:
- notch : nilai logika. jika median berbeda nilai maka notch tidak tumpang tindih
- seq : menghasilkan urutan yang teratur

Perbandingan harga dalam Suburb

Melihat pinggiran kota yang paling laku dengan yang kurang diminati.

Paling laku

gl <- unique(dff$Pinggiran.Kota)
data.frame(gl)
Top_avg_property_price <- dff %>% 
  group_by(Pinggiran.Kota) %>% 
  summarise(Avg = round(mean(Harga, na.rm = T),2)) %>% 
  arrange(-Avg) %>% 
  top_n(n = 5)

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

Keterangan: Dari barplot di atas bisa dilihat bahwa Pinggiran Kota Canterbury yang termahal di antara semua Pinggiran Kota yang ada di Melbourne berdasarkan rata-rata harga.

Kurang diminati

melihat kota dengan harga terendah dari variabel pinggiran kota

Bottom_avg_property_price <-dff %>% 
  group_by(Pinggiran.Kota) %>% 
  summarise(Avg = mean(Harga, na.rm = T)) %>% 
  arrange(Avg) %>% 
  top_n(n = -5)

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

Keterangan: pinggiran kota terendah berdasarkan rata-rata adalah Pinggiran kota Bacchus Marsh.

Wilayah dengan Penduduk Terbanyak

library(scales)
library(dplyr)
plotdata <- dff %>%
  count(Wilayah) %>%
  arrange(desc(Wilayah)) %>%
  mutate(prop = round(n*100/sum(n),1),
         lab.ypos = cumsum(prop) - 0.5*prop)


ggplot(plotdata,
       aes(x = "",
           y = prop,
           fill = Wilayah)) +
  geom_bar(width = 1, stat = "identity", color = "black") +
  coord_polar("y", start = 0) +
  geom_text(aes(y = lab.ypos, label = prop), color = "black") +
  scale_fill_brewer(palette="pinks", direction=-1) +
  theme_void() +
  labs(title = "Wilayah dengan Penduduk Terbanyak")

Keterangan: Penduduk yang menempati suatu wilayah terbanyak ada di wilayah Metropolitan Selatan.