Algoritma & Struktur Data
~ Ujian Tengah Semester ~
| Kontak | : \(\downarrow\) |
| clara.evania@student.matanauniversity.ac.id | |
| https://www.instagram.com/claraevania/ | |
| RPubs | https://rpubs.com/claradellaevania/ |
Kasus 1
Asumsikan Anda telah mengumpulkan beberapa kumpulan data dari perusahaan ABC Property seperti yang dapat kita lihat pada tabel berikut:
Id <- (1:10000)
Marketing_Name <- rep(c("Angel","Sherly","Vanessa","Irene","Julian",
"Jeffry","Nikita","Kefas","Siana","Lala",
"Fallen","Ardifo","Kevin","Juen","Jerrel",
"Imelda","Widi","Theodora","Elvani","Jonathan",
"Sofia","Abraham","Siti","Niko","Sefli",
"Bene", "Diana", "Pupe", "Andi", "Tatha",
"Endri", "Monika", "Hans", "Debora","Hanifa",
"James", "Jihan", "Friska","Ardiwan", "Bakti",
"Anthon","Amry", "Wiwik", "Bastian", "Budi",
"Leo","Simon","Matius","Arry", "Eliando"), 200)
Work_Exp <- rep(c(1.3,2.4,2.5,3.6,3.7,4.7,5.7,6.7,7.7,7.3,
5.3,5.3,10,9.3,3.3,3.3,3.4,3.4,3.5,5.6,
3.5,4.6,4.6,5.7,6.2,4.4,6.4,6.4,3.5,7.5,
4.6,3.7,4.7,4.3,5.2,6.3,7.4,2.4,3.4,8.2,
6.4,7.2,1.5,7.5,10,4.5,6.5,7.2,7.1,7.6),200)
City <- sample(c("Jakarta","Bogor","Depok","Tengerang","Bekasi"),10000, replace = T)
Cluster <- sample(c("Victoria","Palmyra","Winona","Tiara", "Narada",
"Peronia","Lavesh","Alindra","Sweethome", "Asera",
"Teradamai","Albasia", "Adara","Neon","Arana",
"Asoka", "Primadona", "Mutiara","Permata","Alamanda" ), 10000, replace=T)
Price <- sample(c(7000:15000),10000, replace = T)
Date_Sales <- sample(seq(as.Date("2018/01/01"), by = "day", length.out = 1000),10000, replace = T)
Advertisement <- sample(c(1:20), 10000, replace = T)
Data <- data.frame(Id,
Marketing_Name,
Work_Exp,
City,
Cluster,
Price,
Date_Sales,
Advertisement)
library(DT)
datatable(Data)Soal 1
Kategorikan variabel Harga pada dataset di atas menjadi tiga kelompok sebagai berikut:
- \(\text{High} > 12000\)
- \(10000 \le \text{Medium} \le 12000\)
- \(\text{Low} < 10000\)
Tetapkan ke dalam variabel baru yang disebut Kelas dengan menggunakan fungsi kontrol If, else if, dan else.
R
library(DT)
datatable(Data)
kategori = Vectorize(function(Price)
{
if (Price>12000){
print('High')}
else if (Price>=10000 & Price<=12000){
print('Medium')}
else{print('Low')}
})
Data$Kelas = kategori(Data$Price) datatable(Data)Soal 2
Kategorikan variabel Harga pada dataset di atas menjadi enam kelompok sebagai berikut:
- Booking_fee nya 5 % jika \(\text{Price} < 8000\)
- Booking_fee nya 6 % jika \(8000 \le \text{Price} < 9000\)
- Booking_fee nya 7 % jika \(9000 \le \text{Price} < 10000\)
- Booking_fee nya 8 % jika \(10000 \le \text{Price} < 11000\)
- Booking_fee nya 9 % jika \(11000 \le \text{Price} < 13000\)
- Booking_fee nya 10 % jika \(13000 \le \text{Price} \le 15000\)
Tetapkan ke dalam variabel baru yang disebut Booking_fee dengan menggunakan fungsi kontrol If, else if, dan else.
R
library(DT)
datatable(Data)
Category1 <- Vectorize(function(Price)
{
if (Price<8000){
print('5%')}
else if (Price<9000 & Price>=8000){
print('6%')}
else if (Price<10000 & Price>=9000){
print('7%')}
else if (Price<11000 & Price>=10000){
print('8%')}
else if (Price<13000 & Price>=11000){
print('9%')}
else if (Price<=15000 & Price>=13000){
print('10%')}
})
Data$Booking_Fee <-Category1(Data$Price)datatable(Data)Soal 3
Menurut kumpulan data akhir yang telah Anda buat pada soal no 2, saya berasumsi bahwa Anda telah bekerja sebagai pemasaran di perusahaan ABC Property, bagaimana Anda dapat mengumpulkan semua informasi tentang penjualan Anda dengan menggunakan pernyataan for.
R
library(DT)
marketing = "Jeffry"
for (x in "Jeffry"){
sales <-(subset(Data, Marketing_Name == x))
}
datatable(sales)Soal 4
Jika Anda akan mendapatkan bonus 2% dari Booking fee per unit sebagai pemasaran dan juga mendapatkan bonus tambahan 1% jika Anda telah bekerja di perusahaan ini selama lebih dari 3 tahun. Silakan hitung total bonus dengan menggunakan pernyataan if, for, dan break.
R
library(DT)
datatable(Data)
y <- subset(Data, subset=(Marketing_Name == "Jeffry"))
Kategori1 <- Vectorize(function(Price)
{
if (Price<8000){
print(0.05*Price)}
else if (Price<9000 & Price >=8000){
print(0.06*Price)}
else if (Price<10000 & Price >=9000){
print(0.07*Price)}
else if (Price<11000 & Price >=10000){
print(0.08*Price)}
else if (Price<13000 & Price >=11000){
print(0.09*Price)}
else if (Price<=15000 & Price >=13000){
print(0.1*Price)}
})
y$total_Booking_Fee <-Kategori1(y$Price)
Bonus_1 <- ((0.02+
ifelse(y$Work_Exp>3, 0.01 , 0))* y$total_Booking_Fee)
y$Bonus<- Bonus_1datatable(y)TotalBonus <- sum(Bonus_1)
TotalBonus## [1] 5440.188
Soal 5
Pada bagian ini, Anda diharapkan dapa membuat fungsi yang dapat menjawab setiap penyataan dibawah ini dengan melibatkan setiap fungsi kontrol yang dipelajari pada pertemuan 7.
- Siapa nama marketing pemasaran terbaik?
- Kota dan Cluster mana yang paling menguntungkan?
- Hitung total biaya iklan Anda, jika Anda harus membayarnya $4 setiap kali iklan.
- Hitung rata-rata biaya iklan untuk setiap marketing di Perusahaan tersebut.
- Hitung Total Pendapatan (dalam Bulanan)
R
Nama Marketing Pemasaran Terbaik
Marketing_Sales <- aggregate(Price ~ Marketing_Name,
data = Data,
sum)
Best_Marketing <- Marketing_Sales[
order(Marketing_Sales$Price,
decreasing = T),] %>%
head (1) %>%
print()## Marketing_Name Price
## 12 Budi 2274699
Kota dan Cluster yang paling menguntungkan
library(dplyr)
Kota_Cluster <- aggregate(Price ~ City + Cluster,
data = Data,
sum)
Untung_Kota_Cluster <- Kota_Cluster [
order(Kota_Cluster$Price, decreasing = T),] %>%
head(1)%>%
print()## City Cluster Price
## 10 Tengerang Alamanda 1349636
Total biaya iklan, jika harus membayarnya $4 setiap kali iklan
Data$Advertisement <- as.numeric(Data$Advertisement)
Data$BiayaAdvertisement <- Data$Advertisement * 4
TotalBiaya <- sum(Data$BiayaAdvertisement)
paste("Total biaya iklan adalah", TotalBiaya)## [1] "Total biaya iklan adalah 417056"
Rata-rata biaya iklan untuk setiap marketing di Perusahaan tersebut
Marketing_Rata2Iklan <- aggregate(BiayaAdvertisement ~ Marketing_Name,
data = Data, mean)
library(DT)
datatable(Marketing_Rata2Iklan)Total Pendapatan (dalam Bulanan)
Advertisement.average_A <- aggregate(Advertisement ~ Marketing_Name, data = Data, sum)
Advertisement_average <- Advertisement.average_A[
order(Advertisement.average_A$Advertisement,
decreasing = T),] %>%
head (1) %>%
print()## Marketing_Name Advertisement
## 10 Bastian 2370
Kasus 2
Misalkan Anda memiliki proyek riset pasar untuk mempertahankan beberapa pelanggan potensial di perusahaan Anda. Mari kita asumsikan Anda bekerja di perusahaan asuransi ABC. Untuk melakukannya, Anda ingin mengumpulkan kumpulan data berikut:
- Marital_Status : menetapkan status perkawinan acak (“Ya”, “Tidak”)
- Address : berikan alamat acak (JABODETABEK)
- Work_Location : menetapkan lokasi kerja secara acak (JABODETABEK)
- Age : menetapkan urutan angka acak (dari 19 hingga 60)
- Academic : menetapkan tingkat akademik acak (“J.School”, “H.School”, “Sarjana”, “Magister”, “Phd”)
- Job : 10 pekerjaan acak untuk setiap tingkat akademik
- Grade : 5 nilai acak untuk setiap Pekerjaan
- Income : tetapkan pendapatan yang mungkin untuk setiap Pekerjaan
- Spending : tetapkan kemungkinan pengeluaran untuk setiap Pekerjaan
- Number_of_children: menetapkan nomor acak di antara 0 dan 10 (sesuai dengan status perkawinan)
- Private_vehicle : menetapkan kemungkinan kendaraan pribadi untuk setiap orang (“Mobil”, “sepeda motor”, “Umum”)
- Home : “Sewa”, “Milik”, “Kredit”
Soal 1
Tolong berikan saya kumpulan data tentang informasi 50000 pelanggan yang mengacu pada setiap variabel di atas!
R
Marital_Status <- sample(c("Ya","Tidak"),50000,
T)
Address <- sample(c("Jakarta",
"Bogor",
"Depok",
"Tangerang",
"Bekasi"),50000,
T)
Work_Location <- sample(c("Jakarta",
"Bogor",
"Depok",
"Tangerang",
"Bekasi"),50000,
T)
Age <- sample(19:60,50000,
T)
Academic <- sample(c("J.School",
"H.School",
"Sarjana",
"Magister",
"Phd"),50000,T)
Job <- ifelse (Academic=="J.School",
sample(c("Pramusaji", "Cleaning Service",
"Staff Gudang","Customer Service",
"Buruh","Security","Packing Barang",
"Office Boy/Girl","Sopir","ART")),
ifelse(Academic=="H.School",
sample(c("Sales Marketing", "Penulis",
"Pengusaha", "Pengajar Bimbel",
"Agen Asuransi", "Polisi",
"Pramugara/i", "Kasir",
"Back Office", "AnakBuahKapal")),
ifelse(Academic=="Sarjana",
sample(c("Pengajar", "Chef",
"Pilot", "Konsultan",
"StaffKantor", "Masinis",
"HRD", "Artist",
"Akuntan", "Ahli Jaringan")),
ifelse(Academic=="Magister",
sample(c("Psikolog", "Aktuaris",
"DirekturPerusahaan",
"Dokter",
"PNS",
"Enterpreneur",
"Notaris", "Jaksa",
"DataScientist",
"Supervisor")),
sample(c("Manager", "Hakim",
"CEO", "President",
"Mentri", "Specialist",
"Rektor", "Dosen",
"DataAnalyst", "Ilmuwan
Data"))
))))
Grade <- sample(c("A",
"B",
"C",
"D",
"E"),
50000,
T)
Gaji_Function <- function(x,y){
# Basic_Salary based on Academic
J.School <- sample(c(500000:1000000))
H.School <- sample(c(1100000,10000000))
Sarjana <- sample(c(101000000,25000000))
Magister <- sample(c(25100000,35000000))
Phd <- sample(c(35100000,50000000))
Basic_Gaji<-ifelse(x=="J.School",
J.School,
ifelse(x=="H.School",
H.School,
ifelse(x=="Sarjana",
Sarjana,
ifelse(x=="Magister",
Magister,
Phd))))
# ExtraGaji berdasarkan Grade sesuai dengan Pengalaman dan Kemampuan
A <- 1.2
B <- 1.4
C <- 1.6
D <- 1.8
E <- 2
ExtraGaji <- ifelse(y=="A",
A,
ifelse(y=="B",
B,
ifelse(y=="C",
C,
ifelse(y=="D",
D,
E))))
result <- round(Basic_Gaji * ExtraGaji, digits = -3)
return(result)
}
Income <- Gaji_Function(Academic, Grade)
Spending <- 0.80*Income
Number_of_Children <- ifelse(Marital_Status=="Ya",
sample(c(0:10)),
0)
# Persyaratan untuk dapat memiliki sepeda motor adalah jumlah tabungan 12 bulan lebih dari 25.000.000 dan persyaratan untuk dapat memiliki mobil adalah jumlah tabungan 36 bulan lebih dari 150.000.000
Private_Vehicle <- ifelse(36*0.20*Income >= 150000000,
sample(c("Mobil", "Sepeda Motor", "Umum")),
ifelse(12*0.20*Income >= 25000000,
sample(c("Sepeda Motor", "Umum")),
"Umum"))
Home <- sample(c("Sewa", "Milik", "Kredit"),50000, T)
DataPelanggan <- data.frame(Marital_Status,
Address,
Work_Location,
Age,
Academic,
Job,
Grade,
Income,
Spending,
Number_of_Children,
Private_Vehicle,
Home)
library(DT)
datatable(DataPelanggan)Soal 2
Ringkasan Statistik penting seperti apa yang bisa Anda dapatkan dari kumpulan data Anda?
R
Pelanggan= function(x)
{
min = min(x)
max = max(x)
median = x[median.default(x)]
modus = x[which.max(x)]
mean = round(sum(x)/length(x),digits=2)
varian = (sum((x-mean)^2)/length(x)-1)
sd = sqrt(sum((x-mean)^2)/(length(x)-1))
return(cat(c
("Minimum=", min,"\n",
"Maksimum=", max,"\n",
"Median=", median,"\n",
"Modus=", modus, "\n",
"Varian=", varian,"\n",
"StanDev=", sd, "\n",
)))
}summary(DataPelanggan)## Marital_Status Address Work_Location Age
## Length:50000 Length:50000 Length:50000 Min. :19.00
## Class :character Class :character Class :character 1st Qu.:29.00
## Mode :character Mode :character Mode :character Median :39.00
## Mean :39.49
## 3rd Qu.:50.00
## Max. :60.00
## Academic Job Grade Income
## Length:50000 Length:50000 Length:50000 Min. : 600000
## Class :character Class :character Class :character 1st Qu.: 1760000
## Mode :character Mode :character Mode :character Median : 40160000
## Mean : 45548524
## 3rd Qu.: 63000000
## Max. :202000000
## Spending Number_of_Children Private_Vehicle Home
## Min. : 480000 Min. : 0.000 Length:50000 Length:50000
## 1st Qu.: 1408000 1st Qu.: 0.000 Class :character Class :character
## Median : 32128000 Median : 0.000 Mode :character Mode :character
## Mean : 36438820 Mean : 2.481
## 3rd Qu.: 50400000 3rd Qu.: 5.000
## Max. :161600000 Max. :10.000
# Pengeluaran,Pemasukan dan Home merupakan objek yang paling penting
# Dikarenakan Pengeluaran mempengaruhi pemasukan perusahaan (jikalau terlalu boros)
# Pemasukan diharuskan menyertakan pemasukan pelanggan dengan biaya asuransinya
# Home dikarenakan jika rumahnya milik tidak ada tanggungan lain, namun jika rumahnya sewa/kredit akan mempengaruhi pembayaran asuransiSoal 3
Menurut perhitungan dan analisis Anda, pelanggan mana yang potensial untuk Anda pertahankan?
R
categori= Vectorize(function(Income)
{
if (Income > 5000000){
print('Yes')}
else {
print('No')}
})
DataPelanggan$dipertahankan = categori(DataPelanggan$Income)subset(DataPelanggan,select = c(6,8,13)) %>% datatable()