#1. imprort data
databaru<-read.csv("C:/Users/ACER/OneDrive/Documents/Pengantar Sains Data/data_kesehatan.csv")
#menampilkan baris awal
head(databaru,10)
## X id umur jenis_kelamin tinggi_badan berat_badan gula_darah
## 1 1 1 33 Perempuan 159.5587 62.85027 80.08403
## 2 2 2 59 Perempuan 152.9881 54.73592 79.20090
## 3 3 3 39 Perempuan 156.1915 66.84162 99.64040
## 4 4 4 64 Laki-laki 173.8024 54.83932 97.35650
## 5 5 5 67 Perempuan 164.0242 62.21020 49.01314
## 6 6 6 20 Perempuan 150.0967 61.15284 120.81147
## 7 7 7 45 Perempuan 157.9015 59.39500 104.99451
## 8 8 8 64 Laki-laki 165.8377 55.87974 148.32415
## 9 9 9 47 Perempuan 156.7671 62.21052 113.70396
## 10 10 10 42 Perempuan 161.3638 58.73365 91.06081
## tekanan_sistolik tekanan_diastolik kolesterol skor_kesehatan
## 1 129.2978 69.13882 181.3293 100.00000
## 2 108.6373 73.34697 209.6954 100.00000
## 3 132.7729 87.14848 176.3801 88.52949
## 4 108.7811 75.68339 172.1841 100.00000
## 5 129.4536 82.27615 138.6886 100.00000
## 6 136.4499 92.94946 183.7165 75.39378
## 7 105.1734 85.78335 264.3624 80.21044
## 8 136.6199 93.64673 219.6911 59.51184
## 9 112.6570 62.98420 240.2672 76.40171
## 10 124.4153 77.19324 217.4490 95.02224
#2.struktur data
#melihat struktur data
str(databaru)
## 'data.frame': 200 obs. of 11 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ umur : int 33 59 39 64 67 20 45 64 47 42 ...
## $ jenis_kelamin : chr "Perempuan" "Perempuan" "Perempuan" "Laki-laki" ...
## $ tinggi_badan : num 160 153 156 174 164 ...
## $ berat_badan : num 62.9 54.7 66.8 54.8 62.2 ...
## $ gula_darah : num 80.1 79.2 99.6 97.4 49 ...
## $ tekanan_sistolik : num 129 109 133 109 129 ...
## $ tekanan_diastolik: num 69.1 73.3 87.1 75.7 82.3 ...
## $ kolesterol : num 181 210 176 172 139 ...
## $ skor_kesehatan : num 100 100 88.5 100 100 ...
#ringkasan statistik
summary(databaru)
## X id umur jenis_kelamin
## Min. : 1.00 Min. : 1.00 Min. :18.00 Length :200
## 1st Qu.: 50.75 1st Qu.: 50.75 1st Qu.:32.00 N.unique : 2
## Median :100.50 Median :100.50 Median :43.00 N.blank : 0
## Mean :100.50 Mean :100.50 Mean :44.31 Min.nchar: 9
## 3rd Qu.:150.25 3rd Qu.:150.25 3rd Qu.:56.00 Max.nchar: 9
## Max. :200.00 Max. :200.00 Max. :70.00
## tinggi_badan berat_badan gula_darah tekanan_sistolik
## Min. :143.1 Min. :39.94 Min. : 49.01 Min. : 85.29
## 1st Qu.:159.4 1st Qu.:57.82 1st Qu.: 86.74 1st Qu.:108.77
## Median :165.1 Median :63.35 Median :100.44 Median :119.92
## Mean :165.8 Mean :64.75 Mean :101.01 Mean :119.53
## 3rd Qu.:171.7 3rd Qu.:72.17 3rd Qu.:111.90 3rd Qu.:129.62
## Max. :186.9 Max. :96.92 Max. :163.68 Max. :170.86
## tekanan_diastolik kolesterol skor_kesehatan
## Min. : 53.05 Min. : 98.56 Min. : 45.45
## 1st Qu.: 74.21 1st Qu.:172.44 1st Qu.: 84.30
## Median : 81.64 Median :190.25 Median : 92.92
## Mean : 80.64 Mean :191.80 Mean : 89.61
## 3rd Qu.: 87.18 3rd Qu.:216.47 3rd Qu.:100.00
## Max. :102.84 Max. :288.72 Max. :100.00
# cek missing value
colSums(is.na(databaru))
## X id umur jenis_kelamin
## 0 0 0 0
## tinggi_badan berat_badan gula_darah tekanan_sistolik
## 0 0 0 0
## tekanan_diastolik kolesterol skor_kesehatan
## 0 0 0
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data_pilihan <-select(databaru, umur, jenis_kelamin, gula_darah, kolesterol)
head(data_pilihan)
## umur jenis_kelamin gula_darah kolesterol
## 1 33 Perempuan 80.08403 181.3293
## 2 59 Perempuan 79.20090 209.6954
## 3 39 Perempuan 99.64040 176.3801
## 4 64 Laki-laki 97.35650 172.1841
## 5 67 Perempuan 49.01314 138.6886
## 6 20 Perempuan 120.81147 183.7165
#filter data pasien perempuan
data_perempuan <-filter(databaru, jenis_kelamin == "Perempuan")
head(data_perempuan)
## X id umur jenis_kelamin tinggi_badan berat_badan gula_darah tekanan_sistolik
## 1 1 1 33 Perempuan 159.5587 62.85027 80.08403 129.2978
## 2 2 2 59 Perempuan 152.9881 54.73592 79.20090 108.6373
## 3 3 3 39 Perempuan 156.1915 66.84162 99.64040 132.7729
## 4 5 5 67 Perempuan 164.0242 62.21020 49.01314 129.4536
## 5 6 6 20 Perempuan 150.0967 61.15284 120.81147 136.4499
## 6 7 7 45 Perempuan 157.9015 59.39500 104.99451 105.1734
## tekanan_diastolik kolesterol skor_kesehatan
## 1 69.13882 181.3293 100.00000
## 2 73.34697 209.6954 100.00000
## 3 87.14848 176.3801 88.52949
## 4 82.27615 138.6886 100.00000
## 5 92.94946 183.7165 75.39378
## 6 85.78335 264.3624 80.21044
#urutkan berdasarkan umur (ascending; muda -> tua)
data_perempuan_asc <-arrange(data_perempuan, umur)
head(data_perempuan_asc)
## X id umur jenis_kelamin tinggi_badan berat_badan gula_darah
## 1 74 74 18 Perempuan 158.5639 67.22813 88.35197
## 2 35 35 19 Perempuan 160.1156 58.46580 118.71207
## 3 143 143 19 Perempuan 164.2250 46.51267 101.38473
## 4 6 6 20 Perempuan 150.0967 61.15284 120.81147
## 5 113 113 21 Perempuan 165.2948 60.80736 148.48978
## 6 15 15 23 Perempuan 157.5179 62.21498 95.77506
## tekanan_sistolik tekanan_diastolik kolesterol skor_kesehatan
## 1 115.8018 78.55389 169.9797 100.00000
## 2 116.9422 53.04671 185.0664 91.28614
## 3 111.2691 79.23829 185.8415 93.74989
## 4 136.4499 92.94946 183.7165 75.39378
## 5 130.7502 87.61310 155.9962 80.16160
## 6 117.9579 83.07390 174.0120 100.00000
#urutkan berdasarkan umur (ascending; tua -> muda)
data_perempuan_dsc <-arrange(data_perempuan, desc(umur))
head(data_perempuan_dsc)
## X id umur jenis_kelamin tinggi_badan berat_badan gula_darah
## 1 87 87 69 Perempuan 165.4886 51.69495 82.16957
## 2 11 11 68 Perempuan 162.9534 39.93666 155.94782
## 3 104 104 68 Perempuan 164.5064 73.11242 71.98425
## 4 118 118 68 Perempuan 161.8601 44.59884 90.92707
## 5 5 5 67 Perempuan 164.0242 62.21020 49.01314
## 6 111 111 67 Perempuan 159.4158 80.60360 87.50143
## tekanan_sistolik tekanan_diastolik kolesterol skor_kesehatan
## 1 116.02074 74.12914 165.4848 100.00000
## 2 123.02756 80.65068 224.3279 48.51474
## 3 125.31528 86.27069 246.0597 88.18862
## 4 94.45553 86.82315 160.2581 100.00000
## 5 129.45360 82.27615 138.6886 100.00000
## 6 140.13936 77.61751 157.8476 88.14031
#tambahkan kolom baru dengan mutate()
data_mutate <- mutate(databaru, BMI = berat_badan / (tinggi_badan /100)^2)
head(data_mutate)
## X id umur jenis_kelamin tinggi_badan berat_badan gula_darah tekanan_sistolik
## 1 1 1 33 Perempuan 159.5587 62.85027 80.08403 129.2978
## 2 2 2 59 Perempuan 152.9881 54.73592 79.20090 108.6373
## 3 3 3 39 Perempuan 156.1915 66.84162 99.64040 132.7729
## 4 4 4 64 Laki-laki 173.8024 54.83932 97.35650 108.7811
## 5 5 5 67 Perempuan 164.0242 62.21020 49.01314 129.4536
## 6 6 6 20 Perempuan 150.0967 61.15284 120.81147 136.4499
## tekanan_diastolik kolesterol skor_kesehatan BMI
## 1 69.13882 181.3293 100.00000 24.68689
## 2 73.34697 209.6954 100.00000 23.38607
## 3 87.14848 176.3801 88.52949 27.39884
## 4 75.68339 172.1841 100.00000 18.15435
## 5 82.27615 138.6886 100.00000 23.12309
## 6 92.94946 183.7165 75.39378 27.14402
#tambahkan kolom proporsi
data_mutate <- mutate(databaru, Proporsi = umur / sum(umur))
head(data_mutate)
## X id umur jenis_kelamin tinggi_badan berat_badan gula_darah tekanan_sistolik
## 1 1 1 33 Perempuan 159.5587 62.85027 80.08403 129.2978
## 2 2 2 59 Perempuan 152.9881 54.73592 79.20090 108.6373
## 3 3 3 39 Perempuan 156.1915 66.84162 99.64040 132.7729
## 4 4 4 64 Laki-laki 173.8024 54.83932 97.35650 108.7811
## 5 5 5 67 Perempuan 164.0242 62.21020 49.01314 129.4536
## 6 6 6 20 Perempuan 150.0967 61.15284 120.81147 136.4499
## tekanan_diastolik kolesterol skor_kesehatan Proporsi
## 1 69.13882 181.3293 100.00000 0.003723344
## 2 73.34697 209.6954 100.00000 0.006656888
## 3 87.14848 176.3801 88.52949 0.004400316
## 4 75.68339 172.1841 100.00000 0.007221031
## 5 82.27615 138.6886 100.00000 0.007559517
## 6 92.94946 183.7165 75.39378 0.002256572
# Buat data tambahan
extra <- data.frame(
umur = 18:70,
kelompok_umur = c(
rep("18-30", 13),
rep("31-50", 20),
rep("51-70", 20)
)
)
# Join ke dataset databaru
databaru_joined <- left_join(databaru, extra, by = "umur")
# Lihat hasil
head(databaru_joined)
## X id umur jenis_kelamin tinggi_badan berat_badan gula_darah tekanan_sistolik
## 1 1 1 33 Perempuan 159.5587 62.85027 80.08403 129.2978
## 2 2 2 59 Perempuan 152.9881 54.73592 79.20090 108.6373
## 3 3 3 39 Perempuan 156.1915 66.84162 99.64040 132.7729
## 4 4 4 64 Laki-laki 173.8024 54.83932 97.35650 108.7811
## 5 5 5 67 Perempuan 164.0242 62.21020 49.01314 129.4536
## 6 6 6 20 Perempuan 150.0967 61.15284 120.81147 136.4499
## tekanan_diastolik kolesterol skor_kesehatan kelompok_umur
## 1 69.13882 181.3293 100.00000 31-50
## 2 73.34697 209.6954 100.00000 51-70
## 3 87.14848 176.3801 88.52949 31-50
## 4 75.68339 172.1841 100.00000 51-70
## 5 82.27615 138.6886 100.00000 51-70
## 6 92.94946 183.7165 75.39378 18-30
data_summary <- databaru %>%
group_by(umur, jenis_kelamin) %>%
summarise(total = n())
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by umur and jenis_kelamin.
## ℹ Output is grouped by umur.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(umur, jenis_kelamin))` for per-operation grouping
## (`?dplyr::dplyr_by`) instead.
head(data_summary, 100)
## # A tibble: 91 × 3
## # Groups: umur [52]
## umur jenis_kelamin total
## <int> <chr> <int>
## 1 18 Perempuan 1
## 2 19 Perempuan 2
## 3 20 Laki-laki 2
## 4 20 Perempuan 1
## 5 21 Perempuan 1
## 6 22 Laki-laki 1
## 7 23 Laki-laki 1
## 8 23 Perempuan 4
## 9 24 Laki-laki 3
## 10 25 Laki-laki 5
## # ℹ 81 more rows
set.seed(123)
# Buat indeks sampling 70%
index <- sample(1:nrow(databaru), 0.7 * nrow(databaru))
# Bagi data menjadi data training dan testing
train_data <- databaru[index, ]
test_data <- databaru[-index, ]
# Cek jumlah data
nrow(train_data)
## [1] 140
nrow(test_data)
## [1] 60