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")