Ở phần thực hành này, ta sẽ làm việc với bộ dữ liệu diabetes.csv.
library(readr); library(readxl)
diabetes_metadata <- read_excel("Dataset/diabetes_metadata.xlsx")
diabetes <- as.data.frame(read_csv("Dataset/diabetes.csv"))## Parsed with column specification:
## cols(
## Pregnancies = col_double(),
## Glucose = col_double(),
## BloodPressure = col_double(),
## SkinThickness = col_double(),
## Insulin = col_double(),
## BMI = col_double(),
## DiabetesPedigreeFunction = col_double(),
## Age = col_double(),
## Outcome = col_double()
## )
Sử dụng apply(), sapply(), và apply() để trích xuất giá trị nhỏ nhất và lớn nhất ở mỗi biến số của bộ diabetes. Đầu ra của 3 hàm này có gì khác biệt?
Gợi ý: Để xuất ra giá trị nhỏ nhất và lớn nhất, ta sử dụng hàm range(). Đầu ra của hàm số này là một vector có 2 thành phần lần lượt là số min và số max.
Đáp án
Sử dụng hàm summary để kiểm lại kết quả.
## Pregnancies Glucose BloodPressure SkinThickness
## Min. : 0.000 Min. : 0.0 Min. : 0.00 Min. : 0.00
## 1st Qu.: 1.000 1st Qu.: 99.0 1st Qu.: 62.00 1st Qu.: 0.00
## Median : 3.000 Median :117.0 Median : 72.00 Median :23.00
## Mean : 3.845 Mean :120.9 Mean : 69.11 Mean :20.54
## 3rd Qu.: 6.000 3rd Qu.:140.2 3rd Qu.: 80.00 3rd Qu.:32.00
## Max. :17.000 Max. :199.0 Max. :122.00 Max. :99.00
## Insulin BMI DiabetesPedigreeFunction Age
## Min. : 0.0 Min. : 0.00 Min. :0.0780 Min. :21.00
## 1st Qu.: 0.0 1st Qu.:27.30 1st Qu.:0.2437 1st Qu.:24.00
## Median : 30.5 Median :32.00 Median :0.3725 Median :29.00
## Mean : 79.8 Mean :31.99 Mean :0.4719 Mean :33.24
## 3rd Qu.:127.2 3rd Qu.:36.60 3rd Qu.:0.6262 3rd Qu.:41.00
## Max. :846.0 Max. :67.10 Max. :2.4200 Max. :81.00
## Outcome
## Min. :0.000
## 1st Qu.:0.000
## Median :0.000
## Mean :0.349
## 3rd Qu.:1.000
## Max. :1.000
Tỉ lệ giá trị 0 ở mỗi biến số là bao nhiêu?
## Pregnancies Glucose BloodPressure
## 0.144531250 0.006510417 0.045572917
## SkinThickness Insulin BMI
## 0.295572917 0.486979167 0.014322917
## DiabetesPedigreeFunction Age Outcome
## 0.000000000 0.000000000 0.651041667
## Pregnancies Glucose BloodPressure
## 0.144531250 0.006510417 0.045572917
## SkinThickness Insulin BMI
## 0.295572917 0.486979167 0.014322917
## DiabetesPedigreeFunction Age Outcome
## 0.000000000 0.000000000 0.651041667
Hãy impute các giá trị 0 với số trung vị.
Hãy phân nhóm BMI thành
| BMI | Tình trạng dinh dưỡng |
|---|---|
| <18.5 | Suy dinh dưỡng |
| 18.5 - <25 | Bình thường |
| 25 - <30 | Thừa cân |
| Từ 30 trở lên | Béo phì |
Hãy phân tuổi thành các nhóm 21-40, 41-60, 61-81
Hãy tính trung bình Glucose theo cặp nhóm BMI và nhóm tuổi.
impDiabetes$BMIgroup <- "Normal"
impDiabetes$BMIgroup[impDiabetes$BMI < 18.5] <- "Undernutrition"
impDiabetes$BMIgroup[impDiabetes$BMI >= 25 & impDiabetes$BMI < 30] <- "Overweight"
impDiabetes$BMIgroup[impDiabetes$BMI >= 30] <- "Obese"
impDiabetes$BMIgroup <- as.factor(impDiabetes$BMIgroup) # Level được tự động sắp xếp theo Alphabet
impDiabetes$BMIgroup <- factor(impDiabetes$BMIgroup, levels = c("Undernutrition","Normal","Overweight", "Obese"))impDiabetes$AgeGroup <- "21-40"
impDiabetes$AgeGroup[impDiabetes$Age > 40 & impDiabetes$Age < 61] <- "41-60"
impDiabetes$AgeGroup[impDiabetes$Age > 60] <- "60-81"
impDiabetes$AgeGroup <- factor(impDiabetes$AgeGroup)## 21-40 41-60 60-81
## Undernutrition 43.37500 NA NA
## Normal 65.06173 52.75000 30.50000
## Overweight 72.79433 94.86538 46.25000
## Obese 112.40374 108.05691 42.95833
## 21-40 41-60 60-81
## Undernutrition 95.2500 NA NA
## Normal 105.6543 124.2222 112.3333
## Overweight 113.2199 127.9231 137.7500
## Obese 123.5230 132.4309 141.8333