email : ?_?
ntraktir : https://trakteer.id/contekansial
nyawer :
https://saweria.co/contekansial
github :
https://bit.ly/origin-AL-GitHub
youtube :
https://bit.ly/origin-AL-youtube
Jika kamu memliki data.frame berikut :
AL. <- data.frame(a = c(11, 22, 33), b = c(44, 55, 66), c = c(77, 88, 99))
Bagaimana kamu memunculkan output berikut di R console ?
[1] 44 55 66
[1] 22
[1] 99
Begini :
AL. <- data.frame(a = c(11, 22, 33), b = c(44, 55, 66), c = c(77, 88, 99)) #membuat variabel yang berisi dataframe
AL. a b c
1 11 44 77
2 22 55 88
3 33 66 99
AL.[[2]] #akses kolom kedua[1] 44 55 66
AL.[[1]][[2]] #akses kolom pertama, baris kedua[1] 22
AL.[[3]][[3]] #akses kolom ketiga, baris ketiga[1] 99
Silakan mengisi bagian ... dengan syntax yang
sesuai, sehingga diperoleh output yang diharapkan !
A <- c("merah", "jingga", "hitam", "hijau", "biru", "ungu")
L <- A...
L
output
[1] "biru" "hitam" "merah"
Begini :
A <- c("merah", "jingga", "hitam", "hijau", "biru", "ungu") #membuat variabel yang berisi vektor
L <- A[c(5,3,1)] #akses indeks ke-n
L[1] "biru" "hitam" "merah"
Variabel AL adalah suatu factor :
AL <- ...
AL
... dengan syntax yang tepat sehingga
dihasilkan output berikut :[1] anggur duku apel panda sirsak mangga
Levels: anggur apel duku mangga panda sirsak
AL, jika output yang diharapkan adalah berikut ini
:[1] anggur duku apel anggur sirsak mangga
Levels: anggur apel duku mangga panda sirsak
Begini :
AL <- factor(c("anggur", "duku", "apel", "panda", "sirsak", "mangga")) #membuat variabel berisi factor
AL[1] anggur duku apel panda sirsak mangga
Levels: anggur apel duku mangga panda sirsak
AL[4] <- "anggur" #mengganti isian factor
AL[1] anggur duku apel anggur sirsak mangga
Levels: anggur apel duku mangga panda sirsak
Jika terdapat function :
tambah_angka <- function(A, L) {
A + L
}
dimana A dan L = 4. Bagaimana
kamu menggunakan function tersebut sehingga mendapatkan
output berikut :
[1] 8
Notes : Pada bagian function,
dituliskan dulu (A = ..., L = ...)
Begini :
#membuat fungsi penambahan angka
tambah_angka <- function(A, L) {
A + L
}
#menggunakan fungsi dengan isian angka 4
tambah_angka(4, 4)[1] 8
Buatlah sebuah “Fungsi R”, dimana fungsi tersebut dapat digunakan untuk mengganti missing value dari suatu vector dengan nilai mean dari vector tersebut !
Vector dengan missing value (input) :
AL <- c(1, 3, 5, 7, 9, 2, NA, 4, 6, 8, NA)
AL
[1] 1 3 5 7 9 2 NA 4 6 8 NA
ganti.mean <- ...
AL <- ganti.mean(AL)
AL
vector sesudah missing value diganti dengan nilai mean (output) :
[1] 1 3 5 7 9 2 5 4 6 8 5
Begini :
#membuat variabel dataset
AL <- c(1, 3, 5, 7, 9, 2, NA, 4, 6, 8, NA)
AL [1] 1 3 5 7 9 2 NA 4 6 8 NA
#membuat fungsi
ganti.mean <- function(i) { #nama fungsi usahakan beda dengan variabel dataset
i[is.na(i)] <- mean(i, na.rm=TRUE); #cari nilai NA, jika ada ganti dengan nilai mean
i #simpan nilai
}
#menggunakan fungsi
AL <- ganti.mean(AL)
AL [1] 1 3 5 7 9 2 5 4 6 8 5
Sebagai seorang data scientist di suatu organisasi
lingkungan hidup, kamu diminta untuk melakukan analisa terhadap data
hasil observasi dari beberapa pohon cherry. Dataset
hasil observasi disimpan di link
file. Proses analisa dilakukan dengan R. Adapun
tahap - tahap yang perlu dilakukan adalah sebagai berikut :
readr.Begini :
library(readr)
Pohon_AL <- read_csv("https://storage.googleapis.com/dqlab-dataset/trees.csv", show_col_types = FALSE)
Pohon_AL# A tibble: 31 × 3
Girth Height Volume
<dbl> <dbl> <dbl>
1 8.3 70 10.3
2 8.6 65 10.3
3 8.8 63 10.2
4 10.5 72 16.4
5 10.7 81 18.8
6 10.8 83 19.7
7 11 66 15.6
8 11 75 18.2
9 11.1 80 22.6
10 11.2 75 19.9
# … with 21 more rows
Girth,
seharusnya nama kolom tersebut adalah Diameter.Girth/ Diameter adalah inch,
seharusnya adalah ft, sehingga perlu ditambahkan kolom
(diameter.ft) yang berisi hasil konversi inch - ft
(1 inch = 0.08333 ft).Begini :
#menampilkan nama kolom
names(Pohon_AL)[1] "Girth" "Height" "Volume"
#menampilkan tipe data
str(Pohon_AL)spc_tbl_ [31 × 3] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ Girth : num [1:31] 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
$ Height: num [1:31] 70 65 63 72 81 83 66 75 80 75 ...
$ Volume: num [1:31] 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
- attr(*, "spec")=
.. cols(
.. Girth = col_double(),
.. Height = col_double(),
.. Volume = col_double()
.. )
- attr(*, "problems")=<externalptr>
#mengubah nama kolom
names(Pohon_AL)[1] <- "Diameter"
#membuat kolom baru (diameter.ft)
Pohon_AL$diameter.ft <- Pohon_AL$Diameter*0.08333 #konversi inch ke ft
#menampilkan beberapa baris data
head(Pohon_AL)# A tibble: 6 × 4
Diameter Height Volume diameter.ft
<dbl> <dbl> <dbl> <dbl>
1 8.3 70 10.3 0.692
2 8.6 65 10.3 0.717
3 8.8 63 10.2 0.733
4 10.5 72 16.4 0.875
5 10.7 81 18.8 0.892
6 10.8 83 19.7 0.900
#menampilkan hasil Statistik
summary(Pohon_AL) Diameter Height Volume diameter.ft
Min. : 8.30 Min. :63 Min. :10.20 Min. :0.6916
1st Qu.:11.05 1st Qu.:72 1st Qu.:19.40 1st Qu.:0.9208
Median :12.90 Median :76 Median :24.20 Median :1.0750
Mean :13.25 Mean :76 Mean :30.17 Mean :1.1040
3rd Qu.:15.25 3rd Qu.:80 3rd Qu.:37.30 3rd Qu.:1.2708
Max. :20.60 Max. :87 Max. :77.00 Max. :1.7166
#mengecek missing value
is.na(Pohon_AL) Diameter Height Volume diameter.ft
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE
[6,] FALSE FALSE FALSE FALSE
[7,] FALSE FALSE FALSE FALSE
[8,] FALSE FALSE FALSE FALSE
[9,] FALSE FALSE FALSE FALSE
[10,] FALSE FALSE FALSE FALSE
[11,] FALSE FALSE FALSE FALSE
[12,] FALSE FALSE FALSE FALSE
[13,] FALSE FALSE FALSE FALSE
[14,] FALSE FALSE FALSE FALSE
[15,] FALSE FALSE FALSE FALSE
[16,] FALSE FALSE FALSE FALSE
[17,] FALSE FALSE FALSE FALSE
[18,] FALSE FALSE FALSE FALSE
[19,] FALSE FALSE FALSE FALSE
[20,] FALSE FALSE FALSE FALSE
[21,] FALSE FALSE FALSE FALSE
[22,] FALSE FALSE FALSE FALSE
[23,] FALSE FALSE FALSE FALSE
[24,] FALSE FALSE FALSE FALSE
[25,] FALSE FALSE FALSE FALSE
[26,] FALSE FALSE FALSE FALSE
[27,] FALSE FALSE FALSE FALSE
[28,] FALSE FALSE FALSE FALSE
[29,] FALSE FALSE FALSE FALSE
[30,] FALSE FALSE FALSE FALSE
[31,] FALSE FALSE FALSE FALSE
Apakah data hasil observasi ketiga variabel (Height, Volume, diameter.ft) terdistribusi normal ?
Gunakan Shapiro-Wilk’s method untuk mengevaluasi normality dari setiap variabel.
Begini :
#uji normalitas kolom Height
shapiro.test(Pohon_AL$Height)
Shapiro-Wilk normality test
data: Pohon_AL$Height
W = 0.96545, p-value = 0.4034
#uji normalitas kolom Volume
shapiro.test(Pohon_AL$Volume)
Shapiro-Wilk normality test
data: Pohon_AL$Volume
W = 0.88757, p-value = 0.003579
#uji normalitas kolom diameter.ft
shapiro.test(Pohon_AL$diameter.ft)
Shapiro-Wilk normality test
data: Pohon_AL$diameter.ft
W = 0.94117, p-value = 0.08893
Jika nilai p > 0.05, maka distribusi
data nya normal. Hasil uji tampak bahwa kolom Volume data
nya belum normal.
Buatlah visualisasi sederhana yang menjelaskan distribusi
Volume dari dataset yang sudah dikerjakan
sebelumnya.
Untuk menyelesaikan soal ini, diminta untuk menggunakan
density plot dari standar R-base.
Begini:
plot(density(Pohon_AL$Volume))Bagaimanakah hubungan antara Volume batang pohon
Cherry dengan diameter dan ketinggian (height) ?
Gunakan pula visualisasi sederhana untuk menjelaskan hubungan tersebut.
Begini :
#menggunakan Regresi untuk mencari huubungan antara Volume dengan Tinggi dan Diameter(ft)
lm(formula = Volume ~ Height + diameter.ft, data = Pohon_AL) #perhatikan posisi kolom dalam dataset di rumus Regresi nya
Call:
lm(formula = Volume ~ Height + diameter.ft, data = Pohon_AL)
Coefficients:
(Intercept) Height diameter.ft
-57.9877 0.3393 56.5002
#melihat hubungan antara diameter.ft terhadap volume
plot(Pohon_AL$diameter.ft, Pohon_AL$Volume)#melihat hubungan antara height terhadap volume
plot(Pohon_AL$Height, Pohon_AL$Volume)Selanjutnya, kamu diminta untuk menganalisa efek pemberian obat tidur terhadap peningkatan lamanya waktu tidur dari sekelompok mahasiswa. Berikut preview dari observasi tersebut :
| extra | group | ID |
|---|---|---|
| 0.7 | 1 | 1 |
| -1.6 | 1 | 2 |
| -0.2 | 1 | 3 |
| -1.2 | 1 | 4 |
| -0.1 | 1 | 5 |
| 3.4 | 1 | 6 |
extra = peningkatan waktu tidur dalam satuan jam (hour) - numeric
group = jenis treatment/dosis obat yang diberikan - factor
ID = ID mahasiswa yang diobservasi -
factor
Jika diasumsikan data hasil observasi tersebut terdistribusi normal, lakukanlah uji hipotesis untuk mengetahui apakah terdapat perbedaan efek antara group 1 dan group 2.
Begini :
#set library yang dibutuhkan
library("readr")
library("dplyr")
#membuat variabel dataset
Tidur_AL <- read_csv('https://storage.googleapis.com/dqlab-dataset/sleep.csv', show_col_types = FALSE)
Tidur_AL# A tibble: 20 × 3
extra group ID
<dbl> <dbl> <dbl>
1 0.7 1 1
2 -1.6 1 2
3 -0.2 1 3
4 -1.2 1 4
5 -0.1 1 5
6 3.4 1 6
7 3.7 1 7
8 0.8 1 8
9 0 1 9
10 2 1 10
11 1.9 2 1
12 0.8 2 2
13 1.1 2 3
14 0.1 2 4
15 -0.1 2 5
16 4.4 2 6
17 5.5 2 7
18 1.6 2 8
19 4.6 2 9
20 3.4 2 10
#simpan data dalam 2 data.frame/vector berbeda
group1 <- filter(Tidur_AL, Tidur_AL$group == 1)
group2 <- filter(Tidur_AL, Tidur_AL$group == 2)
#melakukan t-test
t_test <- t.test(group1$extra, group2$extra)
t_test
Welch Two Sample t-test
data: group1$extra and group2$extra
t = -1.8608, df = 17.776, p-value = 0.07939
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.3654832 0.2054832
sample estimates:
mean of x mean of y
0.75 2.33
#cara 2
library("tidyverse")
library(readr)
Bobo_AL <- read_csv('https://storage.googleapis.com/dqlab-dataset/sleep.csv', show_col_types = FALSE)
#langsung t-test tanpa membagi data
t_test <- t.test(extra ~ group, data = Bobo_AL)
t_test
Welch Two Sample t-test
data: extra by group
t = -1.8608, df = 17.776, p-value = 0.07939
alternative hypothesis: true difference in means between group 1 and group 2 is not equal to 0
95 percent confidence interval:
-3.3654832 0.2054832
sample estimates:
mean in group 1 mean in group 2
0.75 2.33
Jika nilai p > 0.05, maka terima H0.
Nilai p = 0.08, artinya tidak ada perbedaan efek antara
grup 1 dan grup 2.
Menggunakan data di sebelumnya dan library
ggplot, buatlah R syntax yang jika
dijalankan akan menghasilkan output berupa boxplot
!
Begini :
#set library yang digunakan
library("ggplot2")
#membuat boxplot
ggplot(Tidur_AL, aes(x=as.character(group), y=extra, fill=as.character(group))) + geom_boxplot()Dataset menyajikan informasi terkait biaya listrik rumah tangga di suatu negara.
Dari data tersebut kamu ingin mengetahui faktor - faktor yang memengaruhi total biaya listrik di setiap rumah tangga.
Buatlah model sederhana yang dapat menjelaskan bagaimana pengaruh
num_people dan housearea terhadap
amount_paid !
Begini :
#set library yang dibutuhkan
library(readr)
#membuat variabel dataset
tagihan.listrik <- read_csv("https://storage.googleapis.com/dqlab-dataset/electric_bill.csv", show_col_types = FALSE)
head(tagihan.listrik, 9)# A tibble: 9 × 10
num_rooms num_pe…¹ house…² is_ac is_tv is_flat ave_m…³ num_c…⁴ is_ur…⁵ amoun…⁶
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 3 3 743. 1 1 1 9676. 2 0 560.
2 1 5 953. 0 1 0 35065. 1 1 633.
3 3 1 761. 1 1 1 22292. 0 0 512.
4 0 5 861. 1 1 0 12139. 0 0 333.
5 1 8 732. 0 1 0 17230. 2 1 658.
6 0 5 837. 0 1 1 24662. 2 1 793.
7 4 5 679. 0 1 0 28184. 1 1 570.
8 3 4 1045. 0 0 1 16913. 2 1 585.
9 2 4 714. 1 0 0 26058. 0 1 653.
# … with abbreviated variable names ¹num_people, ²housearea,
# ³ave_monthly_income, ⁴num_children, ⁵is_urban, ⁶amount_paid
#membuat Regresi untuk mencari hubungan
lm(amount_paid ~ num_people + housearea, data=tagihan.listrik)
Call:
lm(formula = amount_paid ~ num_people + housearea, data = tagihan.listrik)
Coefficients:
(Intercept) num_people housearea
482.920 4.834 0.118
Dalam membuat model machine learning, dataset perlu
dibagi ke dalam Training dan Testing set. Salah satu
library yang digunakan adalah caret.
Dengan menggunakan Iris dataset
dan library caret, buatlah syntax untuk
membagi dataset tersebut ke dalam training set
(80%) dan testing set (20%) !
Begini :
#set library yang dibutuhkan
library(readr)
library(caret)
set.seed(123)
iris.AL <- read_csv("https://storage.googleapis.com/dqlab-dataset/iris.csv", show_col_types = FALSE)
head(iris.AL, 9)# A tibble: 9 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <chr>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
#membagi dataset
trainIndex <- createDataPartition(iris.AL$Species, p=0.8, list=FALSE)
training <- iris.AL[trainIndex, ]
testing <- iris.AL[-trainIndex, ]
dim(training)[1] 120 5
dim(testing)[1] 30 5
tail(training, 30)# A tibble: 30 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <chr>
1 5.8 2.8 5.1 2.4 virginica
2 6.5 3 5.5 1.8 virginica
3 7.7 3.8 6.7 2.2 virginica
4 7.7 2.6 6.9 2.3 virginica
5 6.9 3.2 5.7 2.3 virginica
6 5.6 2.8 4.9 2 virginica
7 7.7 2.8 6.7 2 virginica
8 6.3 2.7 4.9 1.8 virginica
9 6.7 3.3 5.7 2.1 virginica
10 7.2 3.2 6 1.8 virginica
# … with 20 more rows
testing# A tibble: 30 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <chr>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 5.4 3.9 1.7 0.4 setosa
4 5.7 4.4 1.5 0.4 setosa
5 4.6 3.6 1 0.2 setosa
6 5.5 4.2 1.4 0.2 setosa
7 4.9 3.1 1.5 0.2 setosa
8 4.9 3.6 1.4 0.1 setosa
9 5 3.5 1.6 0.6 setosa
10 5.1 3.8 1.6 0.2 setosa
# … with 20 more rows
Dataset menyajikan informasi terkait profil customer yang pernah membeli mobil keluaran terbaru.
Dataset ini perlu dibagi ke dalam training set dan testing set, dan buatlah machine learning model dengan menggunakan Decision Tree untuk memprediksi customer yang tertarik membeli mobil keluaran terbaru, serta evaluasi performance dari kedua model tersebut.
Begini :
#set library yang dibutuhkan
library(caret)
library(rpart)
library(readr)
set.seed(123) #membuat pengacakan konsisten
#membuat variabel dataset
beli.AL <- read_csv("https://storage.googleapis.com/dqlab-dataset/suv_data.csv", show_col_types = FALSE)
head(beli.AL, 9)# A tibble: 9 × 4
Gender Age EstimatedSalary Purchased
<chr> <dbl> <dbl> <dbl>
1 Male 19 19000 0
2 Male 35 20000 0
3 Female 26 43000 0
4 Female 27 57000 0
5 Male 19 76000 0
6 Male 27 58000 0
7 Female 27 84000 0
8 Female 32 150000 1
9 Male 25 33000 0
#membagi data ke training dan testing
trainIndex <- createDataPartition(beli.AL$Purchased, p=0.8, list=FALSE)
training <- beli.AL[trainIndex, ]
testing <- beli.AL[-trainIndex, ]
#membuat model dengan decision tree
pohon_kep <- rpart(Purchased ~ ., data = training, method="class")
prediksi <- predict(pohon_kep, newdata = testing, type = "class")
#evaluasi performance dengan data testing
testing.beli <- factor(testing$Purchased)
#menampilkan hasil evaluasi model
hasil.eval <- confusionMatrix(prediksi,testing.beli)
hasil.evalConfusion Matrix and Statistics
Reference
Prediction 0 1
0 53 1
1 5 21
Accuracy : 0.925
95% CI : (0.8439, 0.972)
No Information Rate : 0.725
P-Value [Acc > NIR] : 7.53e-06
Kappa : 0.822
Mcnemar's Test P-Value : 0.2207
Sensitivity : 0.9138
Specificity : 0.9545
Pos Pred Value : 0.9815
Neg Pred Value : 0.8077
Prevalence : 0.7250
Detection Rate : 0.6625
Detection Prevalence : 0.6750
Balanced Accuracy : 0.9342
'Positive' Class : 0