Algoritma & Struktur Data
Ulangan Akhir Semester 1 ASD
| Kontak | : \(\downarrow\) |
| ali.19arifin@gmail.com | |
| https://www.instagram.com/arifin.alicia/ | |
| RPubs | https://rpubs.com/aliciaarifin/ |
Biodata
Nama : Alicia Arifin
Prodi : Statistika Bisnis
NIM : 20214920001
Soal UAS
Tugas kalian adalah:
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)
Rename setiap variabel diatas kedalam bahasa indonesia.
Rename kategori variabel “Regionname” kedalam bahasa Indonesia.
Lakukan pengecekan Missing Value dan pengendalian
Buatlah Visualisasi Data secara lengkap untuk mendapatkan informasi penting yang terkandung dalam Data_Perumahan_Melbourne.xlsx.
Nomor 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)
setwd("C:/Users/arifi/Documents/Kuliah/sems 1/algoritma dan struktur data/UAS")
halaman_1 = read_excel("Data_Perumahan_Melbourne.xlsx", sheet="Tipe A")
halaman_1$Type = "A"
halaman_2 = read_excel("Data_Perumahan_Melbourne.xlsx", sheet="Tipe B")
halaman_2$Type = "B"
halaman_3 = read_excel("Data_Perumahan_Melbourne.xlsx", sheet="Tipe C")
halaman_3$Type = "C"
wiw = rbind(halaman_1,halaman_2)
df = rbind(wiw, halaman_3)
gabung = 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)
gabungNomor 2
# 2. Rename setiap variabel diatas kedalam bahasa indonesia.
names(gabung) = c("Tipe",
"Subur",
"Harga",
"Metode",
"Agen",
"Tanggal_terjual",
"Jarak_dari_CBD",
"Tidur",
"Kamar_Mandi",
"Mobil",
"Luas_Tanah",
"Tahun_Dibuat",
"Wilayah")
gabungNomor 3
# 3. Rename kategori variabel "Regionname" kedalam bahasa Indonesia.
wiluyuh = factor(c(gabung$Wilayah))
library("dplyr")
df %>%
group_by(gabung$Wilayah)%>%
summarise(n_distinct(gabung$Wilayah))levels(wiluyuh) <- list(Utara_M= "Northern Metropolitan",
Selatan_M="Southern Metropolitan",
Barat_M= "Western Metropolitan",
Timur_M= "Eastern Metropolitan",
Tenggara_M = "South-Eastern Metropolitan",
Utara_V= "Northern Victoria",
Barat_V= "Western Victoria",
Timur_V= "Eastern Victoria")
gabung$Wilayah = wiluyuh
gabungNomor 4
# 4. Lakukan pengecekan Missing Value dan pengendalian
# cek missing value : menghilangkan NA
# menghilangkan NA karena jika memasukkan mean atau rata" bisa tidak akurat
# jika menggunakan mean bisa akurat atau tidak akurat sama sekali
NO_NA = na.omit(gabung)
library(prob) # mencari berapa banyak NA (pengendalian) auto
WITH_NA = setdiff(gabung, NO_NA) # settdiff(a,b) ada di a tp bukan b
summary(gabung) # liat NA ada di bagian mana saja## Tipe Subur 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
## Agen Tanggal_terjual Jarak_dari_CBD Tidur
## 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
## Kamar_Mandi Mobil Luas_Tanah Tahun_Dibuat
## 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
## Wilayah
## Selatan_M :11836
## Utara_M : 9557
## Barat_M : 6799
## Timur_M : 4377
## Tenggara_M: 1739
## (Other) : 546
## NA's : 3
# mencari berapa banyak NA (pengendalian) manual
NA_harga = gabung[is.na(gabung$Harga),]
NA_tidur = gabung[is.na(gabung$Tidur),]
NA_mandi = gabung[is.na(gabung$Kamar_Mandi),]
NA_mobil = gabung[is.na(gabung$Mobil),]
NA_jarak =gabung[is.na(gabung$Jarak_dari_CBD),]
NA_luas = gabung[is.na(gabung$Luas_Tanah),]
NA_tahun = gabung[is.na(gabung$Tahun_Dibuat),]
NA_wilayah = gabung[is.na(gabung$Wilayah),]
#union = atau
NA_df = union(NA_harga,
union(NA_tidur,
union(NA_mandi,
union(NA_mobil,
union(NA_jarak,
union(NA_luas ,
union(NA_tahun,NA_wilayah)))))))
NO_NA # data tidak ada NAWITH_NA # data dengan NANA_df # data dengan NANotes : isi With_NA dan NA_df merupakan data frame yang sama.
Nomor 5
- Buatlah Visualisasi Data secara lengkap untuk mendapatkan informasi penting yang terkandung dalam Data_Perumahan_Melbourne.xlsx.
perbandingan data NA dengan tidak NA
# buat data banding NA dengan tidak
library(ggplot2)
library(scales)
# length() buat cari banyaknya data
a= length(NA_df$Tipe)
b =length(NO_NA$Tipe)
tipe = c("NA", "Tidak NA")
frekuensi = c(a,b)
df_frekNA = data.frame("Tipe" = tipe,
"Frekuensi" =frekuensi)
NAatauTidak = ggplot(df_frekNA,
aes(x = Tipe,
y = Frekuensi)) +
geom_bar(stat = "identity",
fill = rainbow(2),
color= "azure4") +
geom_text(aes(label=Frekuensi), vjust =1.6, color="white", size = 3.5)+
theme_minimal()+
labs(x = "Tipe Data",
y = "Frecuency",
title = "Banyaknya data NA atau tidak NA",
subtitle = "membandingkan data NA atau tidak dari data gabung")
NAatauTidak dilihat yipe data yang NA lebih banyak daripada yang tidak memiliki NA
bandingkan Tipe rumah ABC sebelum dan sesudah NA
# tipe
g_tipe <- gabung %>%
count(Tipe)
g_type <- g_tipe%>%
arrange(desc(Tipe)) %>%
mutate(prop = round(n / sum(g_tipe$n) *100))%>%
mutate(ypos = cumsum(prop)- 0.5*prop)
mycols = c("#B958A5", "#FF5677", "#4C3F91")
ggplot(g_type, aes(x="", y= prop, fill=Tipe))+
geom_bar(width=1, stat="identity", color="white") +
coord_polar("y", start = 0) +
geom_text(aes(y= ypos,label =prop), color="white")+
scale_fill_manual(values = mycols)+
theme_void()+
labs(title = "Perbandingan tipe data ABC pada data gabung",
subtitle = "data gabung = 34 ribu data") di data seluruhnya (gabung), A memiliki 69 bagian, B 10 bagian, dan C 21 bagian. Jadi B<C<A
Notes
mulai dari grafik dibawah ini menggunakan data yang tidak ada NA atau NO_NA.
membandingkan Tipe ABC
no_Tipe <- NO_NA %>%
count(Tipe)
no_type <- no_Tipe%>%
arrange(desc(Tipe)) %>%
mutate(prop = round(n / sum(g_tipe$n) *100))%>%
mutate(ypos = cumsum(prop)- 0.5*prop)
#Data NO_NA menjadi data utama. No_NA adalah data yang tidak memiliki na.
ggplot(no_type, aes(x="", y= prop, fill=Tipe))+
geom_bar(width=1, stat="identity", color="white") +
coord_polar("y", start = 0) +
geom_text(aes(y= ypos,label =prop), color="white")+
scale_fill_manual(values = mycols)+
theme_void()+
labs(title = "Tipe Data ABC")Setelah dihilangkan NA nya, tipe rumah A sebanyak 22/30 bagian, B sebnayak 2/30 bagian, dan C 6/30 bagian. jadi c<B<A
tahun dibangun
# Pengelompokan data kapan rumah dibangun
library(ggplot2)
tahundibuat <- NO_NA %>%
count(Tahun_Dibuat)
# membuat data sample jadi data kelompok.
T1196 = subset(tahundibuat, subset = Tahun_Dibuat < 1750)
T1800_1849 = subset(tahundibuat, subset = Tahun_Dibuat <= 1850 & Tahun_Dibuat >=1750)
T1850_1899 = subset(tahundibuat, subset = Tahun_Dibuat < 1900 & Tahun_Dibuat >= 1850)
T1900_1949 = subset(tahundibuat, subset = Tahun_Dibuat < 1950 & Tahun_Dibuat >= 1900)
T1950_1999 = subset(tahundibuat, subset = Tahun_Dibuat < 2000 & Tahun_Dibuat >=1950 )
T_2000_an = subset(tahundibuat, subset = Tahun_Dibuat >= 2000)
tahun= c("1196", "1800 hingga 1849", "1850 hingga 1899", "1900 hingga 1949", "1950 hingga 1999", "2000 hingga 2019")
jumlah = c(sum(T1196$n), sum(T1800_1849$n), sum(T1850_1899$n), sum(T1900_1949$n), sum(T1950_1999$n), sum(T_2000_an$n))
tahun_dibuat = data.frame(tahun, jumlah)
tahun <- tahun_dibuat%>%
arrange(desc(tahun)) %>%
mutate(prop = round(jumlah / sum(tahun_dibuat$jumlah) *100))%>%
mutate(ypos = cumsum(prop)- 0.5*prop)
ggplot(tahun, aes(x="", y= prop, fill=tahun))+
geom_bar(width=1, stat="identity", color="white") +
coord_polar("y", start = 0) +
geom_text(aes(y= ypos,label =prop), color="white")+
scale_fill_manual(values = rainbow(6))+
theme_void()+
labs(title = "Data Tahun Dibuat") pada grafik di atas, 50% dari rumah yang dijual dibangun pada tahun 1950-1999. Lalu, menyusul pada tahun 2000-2019 25%. Selanjutnya, tahun 1900-1949 21%, serta tahun 1950-1899 4%. lalu mengapa rumah yang dibangun tahun 1196 tidak muncul? itu tidak muncul di grafik karena nilai pada tahun 1196 terlalu kecil. saat di cek, pada tahun 1196 hanya terdapat 1 rumah dari keseluruhan. Dari grafik di atas juga dapat disimpulkan gedung-gedung yang dijual banyak gedung-gedung yang sudah tua (75%), mungkin dibutuhnya renovasi rumah jika terdapat kendala pada rumah tersebut.
wilayah dgn luas tanah
#hub antara wilayah dengan luas tanah
warna = c("#B958A5", "#4C3F91", "#B958A5", "#FF5677", "#EDD2F3", "#FFFCDC", "#FFAFAF", "#EC255A")
ggplot(NO_NA, aes(x = Wilayah, fill = Luas_Tanah)) +
theme_minimal() +
geom_bar(position = position_dodge(preserve = "single"), fill =warna)+
labs(title = "Wilayah dengan luas tanah",
x = "Wilayah",
y = "luas tanah",
subtitle = "hubungan") dari grafik bisa disimpulkan luas tanah yang paling besar adalah Metropolitan Selatan. rumah di wilayah victoria bisa dikatakan rumahnya kecil.
Wilayah
# Wilayah
no_wilayah <- NO_NA %>%
count(Wilayah)
warna = c("#B958A5", "#4C3F91", "#B958A5", "#FF5677", "#EDD2F3", "#FFFCDC", "#FFAFAF", "#EC255A")
ggplot(no_wilayah,
aes(x = Wilayah, y=n)) +
geom_bar(stat = "identity",
fill = warna,
color= "azure4") +
geom_text(aes(label=n), vjust=-0.3, size=3.5)+
theme_minimal()+
labs(x = "wilayah",
y = "berapa banyak rumah",
title = "Wilayah") dari grafik di atas, bisa dilihat metropolitan selatan merupakan rumah yang paling banyak dijual. jika dibagi menjadi metropolitan dan victoria, metropolitan rumahnya banyak yang jual dan lebih luas daripada wilayah victoria. Sepertinya metropolitan merupakan
#melihat apakah rumah yang berada di victoria sedikit karena mahal atau tidak
uv = subset(NO_NA, subset = Wilayah == "Utara_V")
bv = subset(NO_NA, subset = Wilayah == "Barat_V")
tv = subset(NO_NA, subset = Wilayah == "Timur_V")
victoria = rbind(uv,bv,tv)
um= subset(NO_NA, subset = Wilayah == "Utara_M")
bm=subset(NO_NA,subset= Wilayah == "Barat_M")
tm=subset(NO_NA,subset= Wilayah == "Timur_M")
tengm=subset(NO_NA,subset= Wilayah == "Tenggara_M")
sm =subset(NO_NA,subset=Wilayah == "Selatan_M")
metro = rbind(um,bm,tm,tengm,sm)
h_victoria = mean(victoria$Harga)
h_metro = mean(metro$Harga)
wil = c("victoria","metropolitan")
rat = c(h_victoria, h_metro)
met_vic = data.frame(wil,rat)
ggplot(met_vic,
aes(x = wil,
y = rat)) +
geom_bar(stat = "identity",
fill = c("pink", "yellow"),
color= "azure4") +
geom_text(aes(label=rat), vjust =1.6, color="black", size = 3.5)+
theme_minimal()+
labs(x = "wilayah",
y = "rata-rata",
title = "bandingkan nilai rata-rata") bisa disimpulkan kalau rumah yang di metropolitan emang lebih mahal, lebih luas, dan lebih ramai peminat daripada wilayah victoria. metropolitan sepertinya daerah kota.
kamar dengan jarak dari CBD
library(ggplot2)
library(scales)
ggplot(NO_NA, aes(x = Tidur,
y = Kamar_Mandi,
color = Jarak_dari_CBD )) +
geom_point() +
theme_minimal() +
labs(title = "hubungan jarak dengan kamar yang ada di dalamnya",
x = "Kamar Tidur",
y = "Kamar Mandi") dilihat dari grafik mau banyaknya kamar yang ada, jaraknya itu dekat dengan CBD. jika kamar mandi naik, maka kamar tidur juga akan meningkat. Rumah yang besar/ kecil kebanyakan dekat dengan CBD.
mobil mewah dengan wilayah
plotdata <- NO_NA %>%
group_by(Wilayah) %>%
dplyr::summarize(mean_mobil = round(mean(Mobil), digits =3))
# plot gaji rata-rata dengan cara yang lebih menarik
colors <- c("#CD534CFF", "#EFC000FF", "#0073C2FF","#4C3F91","#FF5677", "#9145B6", "#B958A5", "#F999B7")
ggplot(plotdata,
aes(x = factor(Wilayah,
labels = plotdata$Wilayah),
y = mean_mobil)) +
geom_bar(stat = "identity", fill = colors) +
geom_text(aes(label = mean_mobil),
vjust = -0.25) +
theme_minimal() +
labs(title = "Rerata mobil mewah dengan Wilayah",
subtitle = "",
x = "wilayah",
y = "banyaknya mobil mewah yang dipunyai") dilihat dari grafik, orang yang tinggal di metropolitan, memiliki mobil sport car yg lebih dikit. kalau dilihat juga, rumah orang yang tinggal di victoria memiliki rata" 2 sport car. di metropolitan punya 1. mungkin bisa disimpulkan oang yang tinggal di victoria merupakan tempat tinggal atau daerah yang baru. dikatakan seperti itu karena harga rumah di victoria lebih murah, luas tanah lebih sedikit, tetpai total unitnya lebih sedikit.
menurut saya ornag yang tinggal di daerah victoria pandai memilih tempat tinggal, bisa jadi karena harga tanah masih murah, bisa dijadikan investasi. orang yang memiliki sportcar biasanya pemasukannya sudah lebih dari 3 digit (ratusan juta), jadi menurut saya daerah victoria bisa dijadikan daerah yang masa depannya oke.
hubungan jarak dengan harga
ggplot(NO_NA, aes(x = Jarak_dari_CBD,
y = Harga,
color = Tipe )) +
geom_point() +
theme_minimal() +
labs(title = "hubungan jarak dengan harga") hubungan dari scatter plot diatas adalah harga rumah yang lebih murah itu tidak selalu dekat dengan CBD. dilihat dari rentang harganya, tipe C nilainya yang paling stabil, lalu ada b, dan A yang paling bervariasi dari harga dan jarak dari CBD.
tipe berdasarkan harga
ggplot(NO_NA, aes(x = Tipe,
y = Harga)) +
geom_boxplot(notch = TRUE,
fill = rainbow(3),
alpha = .7) +
theme_minimal() +
labs(title = "Tipe berdasarkan harga") + coord_flip() dari boxplot di atas, dapat dilihat tipe A memiliki banyak sekali pencilan. tipe b yang pencilannya yang paling sedikit. jika dilihat, maka akan terbentuk golongan. tipe C untuk kelas menengah bawah, B menangah, dan A menengah ke atas. Rumah yang tipe A banyak harganya yang lebih tinggi atau overprice. bisa dikatakan harga rumah di tipe B dan C lebih stabil dibandingkan tipe A.
Hubungan Antara harga, wilayah, dan tipe.
harga_baru = subset(NO_NA, subset = Harga <= 5000000)
ggplot(harga_baru,
aes(x = Harga,
fill = Tipe)) +
geom_density(alpha = 0.4) +
theme_minimal() +
labs(title = "Hubungan antara Harga dengan Tipe") Dari grafik di atas, bisa disimpulkan kalau rumah tipe A rumahnya dengan range paling tinggi, tipe B menengah, dan tipe C yang paling murah. dilihat juga dari harganya yang pasti C tipe rumah yg termurah. cara menentukan B atau A yang lebih mahal bisa dilihat dari tingginya density A dan B, dan interval dari titik puncak ke titik maksimal.
library(ggridges)
ggplot(harga_baru,
aes(x = Harga ,
y = Wilayah,
fill = Tipe)) +
geom_density_ridges(alpha = 0.4) +
theme_ridges() +
labs("Wilayah, Harga, dan Tipe") +
theme(legend.position = "none") A= pink, B= hijau, C = Biru
Rupanya dari grafik, wilayah _V atau victoria merupakan tipe rumah A saja. sementara itu, bagian _M atau metropolitan terdapat semua tipe rumah (ABC). jika dilihat dari grafik ini, penyebaran data tipe A itu hanya mahal di metropolitan, sedangkan di victoria harganya masih bisa dijangkau oleh orang yang kelasnya menengah ke bawah.
hubungan antara mobil dengan wilayah
library(ggridges)
ggplot(NO_NA,
aes(x = Mobil,
y = Wilayah,
fill = Wilayah )) +
geom_density_ridges(alpha = 0.7) +
theme_ridges() +
labs(title = "hubungan mobil dengan wilayah") +
theme(legend.position = "none") penyebaran data orang yang memiliki mobil berdasarkan wilayah. jika dilihat orang yang memiliki rumah di wilayah victoria hampir semuanya mampu membeli sport car yang lebih dari 1, dan speertinya di titik 2 lebih tinggi daripada di metropolitan. tetapi di wilayah tenggara dan timur metropolitan sepertinya orang yang tinggal di sana memiliki penghasilan yang lumayan elit.
Agen yang menjual rumah terbanyak (top 20)
sales <- NO_NA %>%
count(Agen)
sales$rank = rank(desc(sales$n))
sales # liat rank semua salessep = subset(sales, subset = rank <= 20)
# bukan_top10 = setdiff(sales, sep)
#
# others = data.frame("Agen" = "Others",
# "n" = sum(bukan_top10$n),
# "rank" = 21)
#
# total_agen = rbind(sep, others)
#bikin cleaveland plot
ggplot(sep,
aes(x= n,
y=reorder(Agen, n))) +
geom_point(color="pink",
size = 2) +
geom_segment(aes(x = 40,
xend = n,
y = reorder(Agen, n),
yend = reorder(Agen, n)),
color = "azure3") +
labs (x = "banyaknya rumah di jual",
y = "",
title = "Top 20 Agent",
subtitle = "20 Agen yang menjual rumah terbanyak") +
theme_minimal() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank()) Dari grafik di atas, agen yang paling banyak menjual rumah adalah Nelson, yang kedua Jellis, dan yang ketiga adalah Barry.
Banyaknya Daerah Suburb (Top 20)
tanah_subur <- NO_NA %>%
count(Subur) %>%
mutate(angka = n/sum(n),
persen = paste0(round(angka*100, digits = 3), "%"))
tanah_subur$rank = rank(desc(tanah_subur$n))
yup = subset(tanah_subur, subset = rank <= 20)
yupggplot(yup,
aes(x = Subur,
y = n)) +
geom_bar(stat = "identity",
fill = rainbow(20),
color= "azure4") +
geom_text(aes(label = persen),
hjust = -0.2) +
theme_minimal()+
labs(x = "Tanah",
y = "Banyaknya",
title = "Daerah") +
coord_flip() Diliat dari grafik, Persen (%) dari grafik hanya kecil karena datanya sangat besar dan banyak lokasi rumah. daerah yang terbanyak di reservoir, richmond, dan di brunswick.