library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'tidyr' was built under R version 4.5.2
## Warning: package 'readr' was built under R version 4.5.3
## Warning: package 'purrr' was built under R version 4.5.2
## Warning: package 'forcats' was built under R version 4.5.3
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.5.1
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
datars <- read.csv("hospital_dataset.csv")
head(datars)
## Nama Tanggal_Lahir Tensi Skin_Stiffness_N_per_mm
## 1 Michael Anderson 01/04/1957 112/67 0.69
## 2 N/A 20/09/1975 140 / 91 1.50
## 3 Tan Wei Ming 12/04/1965 134/72 0.76
## 4 Shen Yi-Ching 11/09/1980 120/79 1.92
## 5 Kung Mei-Lin 22/08/1985 99/77 0.81
## 6 Ho Chuan-Wei 10/08/1962 149/65 0.61
## Microcirculation_PU Suhu_Tubuh_Celcius Penyakit Peak_Plantar_Pressure_kPa
## 1 42.0 37.6 Non-Diabetic 294.0
## 2 41.9 36.5°C Non-Diabetic NA
## 3 26.3 37.5 Non-Diabetic 431.8
## 4 NA 37.0 Diabetic 577.5
## 5 25.5 36.0 Diabetic 502.3
## 6 42.2 36.8 Non-Diabetic 201.4
glimpse(datars)
## Rows: 700
## Columns: 8
## $ Nama <chr> "Michael Anderson", "N/A", "Tan Wei Ming", "…
## $ Tanggal_Lahir <chr> "01/04/1957", "20/09/1975", "12/04/1965", "1…
## $ Tensi <chr> "112/67", "140 / 91", "134/72", "120/79", "9…
## $ Skin_Stiffness_N_per_mm <dbl> 0.69, 1.50, 0.76, 1.92, 0.81, 0.61, 1.04, 2.…
## $ Microcirculation_PU <dbl> 42.0, 41.9, 26.3, NA, 25.5, 42.2, 2.0, 9.5, …
## $ Suhu_Tubuh_Celcius <chr> "37.6", "36.5°C", "37.5", "37.0", "36.0", "3…
## $ Penyakit <chr> "Non-Diabetic", "Non-Diabetic", "Non-Diabeti…
## $ Peak_Plantar_Pressure_kPa <dbl> 294.0, NA, 431.8, 577.5, 502.3, 201.4, 512.8…
summary(datars)
## Nama Tanggal_Lahir Tensi
## Length:700 Length:700 Length:700
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## Skin_Stiffness_N_per_mm Microcirculation_PU Suhu_Tubuh_Celcius
## Min. : -2.180 Min. : -32.50 Length:700
## 1st Qu.: 0.700 1st Qu.: 18.00 Class :character
## Median : 1.100 Median : 27.70 Mode :character
## Mean : 1.342 Mean : 35.58
## 3rd Qu.: 1.595 3rd Qu.: 39.00
## Max. :150.000 Max. :5000.00
## NA's :37 NA's :50
## Penyakit Peak_Plantar_Pressure_kPa
## Length:700 Min. : -100.0
## Class :character 1st Qu.: 268.6
## Mode :character Median : 384.3
## Mean : 991.9
## 3rd Qu.: 508.5
## Max. :99999.0
## NA's :43
colSums(is.na(datars))
## Nama Tanggal_Lahir Tensi
## 0 0 0
## Skin_Stiffness_N_per_mm Microcirculation_PU Suhu_Tubuh_Celcius
## 37 50 0
## Penyakit Peak_Plantar_Pressure_kPa
## 0 43
data_clean <- datars %>% drop_na()
df_clean <- datars %>% drop_na(Nama)
df_isimedian <- datars %>%
mutate(Microcirculation_PU = replace_na(Microcirculation_PU, median(Microcirculation_PU)))
df_duplicate <- datars %>% distinct()
datars$Microcirculation_PU <- as.numeric(as.character(datars$"Microcirculation_PU"))
Q1 <- quantile(datars$Microcirculation_PU, 0.25, na.rm = TRUE)
Q3 <- quantile(datars$Microcirculation_PU, 0.75, na.rm = TRUE)
IQR_val <- Q3 - Q1
batas_bawah <- Q1 - 1.5 * IQR_val
batas_atas <- Q3 + 1.5 * IQR_val
df_outliers <- datars %>%
filter(Microcirculation_PU >= batas_bawah & Microcirculation_PU <= batas_atas)
datars %>% count(Penyakit)
## Penyakit n
## 1 45
## 2 1 2
## 3 DIABETIC 3
## 4 DM 5
## 5 Diabetic 294
## 6 Healthy 1
## 7 NON-DIABETIC 1
## 8 No 3
## 9 Non-Diabetic 334
## 10 Normal 1
## 11 Sakit 1
## 12 Sehat 1
## 13 Tidak 3
## 14 Yes 2
## 15 diabetic 2
## 16 non-diabetic 2
df_consistent <- datars %>%
mutate(
Penyakit = str_to_title(trimws(Penyakit)),
status = recode(Penyakit,
"1" = "Diabetic",
"DM" = "Diabetic",
"DIABETIC" = "Diabetic",
"Healthy" = "Non-Diabetic",
"No" = "Non-Diabetic")
)
df_consistent %>% count(Penyakit)
## Penyakit n
## 1 45
## 2 1 2
## 3 Diabetic 299
## 4 Dm 5
## 5 Healthy 1
## 6 No 3
## 7 Non-Diabetic 337
## 8 Normal 1
## 9 Sakit 1
## 10 Sehat 1
## 11 Tidak 3
## 12 Yes 2
write_csv(df_clean, "data_bersih.csv")
ggplot(df_clean, aes(x = Penyakit)) +
geom_bar(fill = "steelblue") +
theme_minimal() +
labs(title = "Distribusi Kategori Penyakit",
x = "Kategori",
y = "Jumlah")
