Data Preparation di R
#1. Import Data
#impor data file csv (sesuaikan simpan dimana)
datakesehatan <- read.csv("C:/Users/dahayu/Downloads/data_kesehatan.csv")
#menampilkan baris awal
head(datakesehatan,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 (datakesehatan)
## '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(datakesehatan)
## 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
#3. Missing Value
# cek missing value
colSums(is.na(datakesehatan))
## 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
#4. Select Data
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(datakesehatan, 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
#5. Filter and Sort Data
#Filter data pasien perempuan
data_perempuan <- filter(datakesehatan, 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 (descending: tua -> muda)
data_perempuan_dsc <- arrange(data_perempuan, desc(umur))
head(data_perempuan_dsc, 5)
## 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
## 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. Rename and Mutate
data_rename <- rename(datakesehatan, id_pasien = id)
head(data_rename, 10)
## X id_pasien 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
#tambahkan kolom proporsi
data_mutate <- mutate(datakesehatan, BMI = berat_badan / (tinggi_badan / 100)^2)
head(data_mutate, 5)
## 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
## 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
#7. Join data
extra <- data.frame(jenis_kelamin = c("Laki-laki", "Perempuan"),
lokasi_pemeriksaan = c("Puskesmas A", "Puskesmas B"))
data_joined <- left_join(datakesehatan, extra, by = "jenis_kelamin")
head(data_joined, 5)
## 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
## tekanan_diastolik kolesterol skor_kesehatan lokasi_pemeriksaan
## 1 69.13882 181.3293 100.00000 Puskesmas B
## 2 73.34697 209.6954 100.00000 Puskesmas B
## 3 87.14848 176.3801 88.52949 Puskesmas B
## 4 75.68339 172.1841 100.00000 Puskesmas A
## 5 82.27615 138.6886 100.00000 Puskesmas B
#8. Group and Summarize
# Hitung total umur vs skor kesehatan
data_summary <- datakesehatan %>%
group_by(umur, skor_kesehatan) %>%
summarise(total = n())
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by umur and skor_kesehatan.
## ℹ Output is grouped by umur.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(umur, skor_kesehatan))` for per-operation grouping
## (`?dplyr::dplyr_by`) instead.
head(data_summary, 10)
## # A tibble: 10 × 3
## # Groups: umur [6]
## umur skor_kesehatan total
## <int> <dbl> <int>
## 1 18 100 1
## 2 19 91.3 1
## 3 19 93.7 1
## 4 20 75.4 1
## 5 20 99.8 1
## 6 20 100 1
## 7 21 80.2 1
## 8 22 85.4 1
## 9 23 96.1 1
## 10 23 97.3 1
#9. split data
# Buat indeks sampling 70%
set.seed(123)
index <- sample(1:nrow(datakesehatan), floor(0.7 * nrow(datakesehatan)))
train_data <- datakesehatan[index, ]
test_data <- datakesehatan[-index, ]
nrow(train_data)
## [1] 140
nrow(test_data)
## [1] 60