Membaca Data

malaria <- read.csv("C:/#2 SEMESTER 4 IPB UNIVERSITY/#MATA KULIAH/VISUALISASI DATA/PRAK/data.jabarprov.go.id/malaria.csv",)
str(malaria)
## 'data.frame':    189 obs. of  8 variables:
##  $ id                 : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ kode_provinsi      : int  32 32 32 32 32 32 32 32 32 32 ...
##  $ nama_provinsi      : chr  "JAWA BARAT" "JAWA BARAT" "JAWA BARAT" "JAWA BARAT" ...
##  $ kode_kabupaten_kota: int  3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 ...
##  $ nama_kabupaten_kota: chr  "KABUPATEN BOGOR" "KABUPATEN SUKABUMI" "KABUPATEN CIANJUR" "KABUPATEN BANDUNG" ...
##  $ jumlah_kasus       : int  0 66 0 1 5 59 0 0 11 0 ...
##  $ satuan             : chr  "ORANG" "ORANG" "ORANG" "ORANG" ...
##  $ tahun              : int  2016 2016 2016 2016 2016 2016 2016 2016 2016 2016 ...

Cleaning Data

#melakukan subset data
Tahun_2016 <- subset(malaria,tahun==2016)
Tahun_2017 <- subset(malaria,tahun==2017)
Tahun_2018 <- subset(malaria,tahun==2018)
Tahun_2019 <- subset(malaria,tahun==2019)
Tahun_2020 <- subset(malaria,tahun==2020)
Tahun_2021 <- subset(malaria,tahun==2021)
Tahun_2022 <- subset(malaria,tahun==2022)

#Rata-rata jumlah kasus malaria pertahun di provinsi Jawa Barat
rata_list <- lapply(list(Tahun_2016, Tahun_2017, Tahun_2018, Tahun_2019, Tahun_2020, Tahun_2021, Tahun_2022), function(data) {
  rata <- mean(data$jumlah_kasus)
  return(rata)
})

names(rata_list) <-(2016:2022)
rata_list
## $`2016`
## [1] 9.259259
## 
## $`2017`
## [1] 4.666667
## 
## $`2018`
## [1] 8
## 
## $`2019`
## [1] 8.62963
## 
## $`2020`
## [1] 12.18519
## 
## $`2021`
## [1] 6.703704
## 
## $`2022`
## [1] 18.44444

1. Visualisasi Nilai

a. Line Chart Rata-rata Kasus Malaria Pertahun Provinsi Jawa Barat

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.2
#membuat data frame
malaria2 <-data.frame(
  Tahun = c(2016, 2017, 2018, 2019, 2020, 2021, 2022),
  Rata_rata = c(9.25, 4.67, 8, 8.62, 12.18, 6.7, 18.44)
)
# Membuat grafik line chart
grafik <- ggplot(data = malaria2, aes(x = Tahun, y = Rata_rata)) +
  geom_line(color="red",size=2) +
  geom_point(color="blue",size=3)+
  geom_text(aes(label = Rata_rata), vjust = -0.5, color = "black", size = 3,nudge_y =0.5 )+
  labs(x = "Tahun", y = "Rata-rata") +
  ggtitle("Rata-rata Malaria per Tahun")+theme_minimal()+
  theme(panel.grid.major = element_line(colour = "gray", linetype = "dashed"),  
        panel.grid.minor = element_blank(),
         plot.title = element_text(hjust = 0.5),) + 
  scale_color_manual(values = c("red", "blue"), name = "Data Type") +
  scale_x_continuous(breaks = malaria2$Tahun)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Menampilkan grafik
print(grafik)

Berdasarkan grafik diatas terlihat rata-rata penyakit malaria dari tahun ke tahun mengalami peningkatan yang cukup signikan. Peningkatan rata-rata penyakit malaria paling tinggi yaitu tahun 2021 (6,7) ke tahun 2022 (18,44)

b. Bar Chart Top 10 Kabupaten/Kota dengan Jumlah Kasus Malaria Tertinggi Tahun 2016-2022

library(ggplot2)
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
kasus <- malaria %>% mutate(Ranking=rank(jumlah_kasus))
top10_kasus <-kasus %>%
  top_n(10, wt=jumlah_kasus) %>%
  arrange(desc(jumlah_kasus))

top10_kasus1 <- top10_kasus[,c(5:6,8:9)]
top10_kasus1
##      nama_kabupaten_kota jumlah_kasus tahun Ranking
## 1             KOTA DEPOK          209  2022   189.0
## 2             KOTA DEPOK          187  2020   188.0
## 3     KABUPATEN SUKABUMI           66  2016   187.0
## 4  KABUPATEN TASIKMALAYA           59  2016   186.0
## 5     KABUPATEN SUKABUMI           43  2019   183.5
## 6            KOTA CIMAHI           43  2020   183.5
## 7            KOTA CIMAHI           43  2021   183.5
## 8            KOTA CIMAHI           43  2022   183.5
## 9           KOTA BANDUNG           41  2022   181.0
## 10            KOTA BOGOR           39  2022   180.0
colors <- c("red","yellow","blue","orange","navy")

ggplot(top10_kasus1, aes(x = nama_kabupaten_kota, y = jumlah_kasus, fill = as.factor(tahun))) +
  geom_bar(stat = "identity", position = "dodge")+
  labs(title = "Top 10 Kabupaten/Kota dengan Jumlah Kasus Malaria Tertinggi Tahun 2016-2022",
       x = "Kabupaten/Kota",
       y = "Jumlah Kasus",
       fill = "Tahun") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 0, hjust = 3))+
  coord_flip()+
  theme(plot.title = element_text(size = 11,hjust = 1),legend.position = "bottom", panel.background = element_rect(fill = "lightblue"))+
 scale_fill_manual(values = colors)

2. Visualisasi Sebaran

a. Boxplot Top 10 Kabupaten/Kota dengan Jumlah Kasus Malaria Tertinggi Tahun 2018-2022

library(dplyr)

top10_list <- lapply(list(Tahun_2018, Tahun_2019, Tahun_2020, Tahun_2021, Tahun_2022), function(data) {
  data %>%
    arrange(desc(jumlah_kasus)) %>%
    head(10)
})

top10lah <- do.call(rbind, top10_list)
Top10 <-top10lah[,c(5:6,8)]
Top10
##      nama_kabupaten_kota jumlah_kasus tahun
## 1     KABUPATEN SUKABUMI           36  2018
## 2  KABUPATEN TASIKMALAYA           27  2018
## 3           KOTA BANDUNG           23  2018
## 4            KOTA CIMAHI           22  2018
## 5            KOTA BEKASI           19  2018
## 6      KABUPATEN CIREBON           18  2018
## 7             KOTA BOGOR           14  2018
## 8      KABUPATEN BANDUNG            9  2018
## 9       KABUPATEN CIAMIS            8  2018
## 10    KABUPATEN SUMEDANG            8  2018
## 11    KABUPATEN SUKABUMI           43  2019
## 12   KABUPATEN INDRAMAYU           36  2019
## 13            KOTA BOGOR           31  2019
## 14 KABUPATEN PANGANDARAN           25  2019
## 15          KOTA BANDUNG           24  2019
## 16 KABUPATEN TASIKMALAYA           20  2019
## 17           KOTA CIMAHI           11  2019
## 18       KABUPATEN BOGOR            9  2019
## 19       KABUPATEN GARUT            5  2019
## 20     KABUPATEN CIREBON            5  2019
## 21            KOTA DEPOK          187  2020
## 22           KOTA CIMAHI           43  2020
## 23   KABUPATEN INDRAMAYU           19  2020
## 24            KOTA BOGOR           18  2020
## 25    KABUPATEN SUKABUMI           11  2020
## 26          KOTA BANDUNG            8  2020
## 27 KABUPATEN TASIKMALAYA            7  2020
## 28           KOTA BEKASI            7  2020
## 29       KABUPATEN BOGOR            6  2020
## 30 KABUPATEN PANGANDARAN            4  2020
## 31           KOTA CIMAHI           43  2021
## 32   KABUPATEN INDRAMAYU           19  2021
## 33            KOTA DEPOK           19  2021
## 34            KOTA BOGOR           18  2021
## 35 KABUPATEN TASIKMALAYA           15  2021
## 36     KABUPATEN BANDUNG           12  2021
## 37      KOTA TASIKMALAYA           10  2021
## 38          KOTA BANDUNG            8  2021
## 39    KABUPATEN SUKABUMI            7  2021
## 40       KABUPATEN BOGOR            5  2021
## 41            KOTA DEPOK          209  2022
## 42           KOTA CIMAHI           43  2022
## 43          KOTA BANDUNG           41  2022
## 44            KOTA BOGOR           39  2022
## 45 KABUPATEN TASIKMALAYA           29  2022
## 46    KABUPATEN SUKABUMI           28  2022
## 47           KOTA BEKASI           25  2022
## 48       KABUPATEN BOGOR           11  2022
## 49   KABUPATEN INDRAMAYU           10  2022
## 50       KABUPATEN GARUT            9  2022
library(ggplot2)
ggplot(Top10, aes(x = tahun, y = jumlah_kasus, fill = factor(tahun))) +
  geom_boxplot() +
  scale_fill_manual(values = c("#999999", "#E69F00","red","orange","green"), name = "Tahun")+
  labs(x = "Tahun", y = "Jumlah Kasus", title = "Top 10 kabupaten/kota dengan Jumlah Kasus Malaria Tertinggi berdasarkan Tahun",color = "Statistik") +
  theme_minimal()+
  theme(plot.title = element_text(size = 11,hjust = 1),legend.position = "bottom", panel.background = element_rect(fill = "lightblue"))+
  stat_summary(fun = "mean", geom = "point", shape = 18, size = 3, color = "blue", position = position_nudge(0.2)) +  # Menambahkan titik rata-rata
  stat_summary(fun = "median", geom = "point", shape = 8, size = 3, color = "black", position = position_nudge(-0.2)) +  # Menambahkan titik median
  stat_summary(fun.data = "mean_cl_normal", geom = "errorbar", width = 0.2, color = "blue") +  # Menambahkan error bar untuk rata-rata
  stat_summary(fun.data = "median_hilow", geom = "errorbar", width = 0.2, color = "black")+# Menambahkan error bar untuk median
  guides(color = guide_legend(title = "Statistik", override.aes = list(shape = c(18, 8), size = c(3, 3), color = c("blue", "black"))))

b. Density plot Sebaran Kasus Malaria Tertinggi Tahun 2020-2022

d <- rbind(subset(Top10, tahun==2020),
           subset(Top10, tahun==2021),
           subset(Top10, tahun==2022))
ggplot(d)+
  geom_density(aes(x=jumlah_kasus,fill = factor(tahun), color= factor(tahun)),alpha = 0.5, size = 1.2)+
  labs(title = "Sebaran Kasus Malaria Tertinggi Tahun 2020-2022",
       x="Jumlah Kasus",
       y="Frekuensi")+theme_minimal()+scale_fill_manual(values = c("red", "orange", "navy"))+scale_color_manual(values = c("black", "orange", "navy"))+theme(panel.grid.major = element_line(color = "lightblue"))

3. Visualisasi Proporsi

a. Treemap Proporsi Kasus Malaria di Jawa Barat Tahun 2016-2022

library(treemap)
## Warning: package 'treemap' was built under R version 4.3.2
# Pastikan 'jumlah_kasus' adalah numerik
malaria$jumlah_kasus <- as.numeric(malaria$jumlah_kasus)

# Hitung jumlah kasus Malaria untuk setiap kabupaten/kota
aggregated_data <- aggregate(jumlah_kasus ~ nama_kabupaten_kota, data = malaria, FUN = sum)

# Hitung total jumlah kasus Malaria di semua kabupaten/kota
total_cases <- sum(aggregated_data$jumlah_kasus)

# Hitung proporsi relatif setiap kabupaten/kotanya
aggregated_data$proporsi <- aggregated_data$jumlah_kasus / total_cases * 100

tm <- treemap(aggregated_data,
              index = "nama_kabupaten_kota",
              vSize = "proporsi", 
              vColor = "proporsi",  
              title = "  Proporsi Kasus Malaria di Jawa Barat Tahun 2016-2022",
              fontsize.labels = c(12),  
              fontsize.title = 11,  
              palette = "Reds"
)

# 3 kota dengan proporsi paling tinggi
top_3_proporsi <- head(aggregated_data[order(aggregated_data$proporsi, decreasing = TRUE), ], 3)
top_3_proporsi
##      nama_kabupaten_kota jumlah_kasus proporsi
## 25            KOTA DEPOK          440 24.00436
## 16    KABUPATEN SUKABUMI          195 10.63830
## 18 KABUPATEN TASIKMALAYA          190 10.36552

b. Donut plot Proporsi Kasus Malaria per Tahun

# Pastikan 'jumlah_kasus' adalah dalam bentuk numerik
malaria$jumlah_kasus <- as.numeric(malaria$jumlah_kasus)

# Hitung jumlah kasus Malaria untuk setiap tahun
aggregated_data <- aggregate(jumlah_kasus ~ tahun, data = malaria, FUN = sum)

# Hitung total jumlah kasus Malaria di seluruh dataset
total_cases <- sum(aggregated_data$jumlah_kasus)

# Hitung proporsi relatif kasus Malaria untuk setiap tahun
aggregated_data$proporsi <- aggregated_data$jumlah_kasus / total_cases * 100

#  tahun dengan proporsi tertinggi
top_7_proporsi <- head(aggregated_data[order(aggregated_data$proporsi, decreasing = TRUE), ], 7)
top_7_proporsi
##   tahun jumlah_kasus  proporsi
## 7  2022          498 27.168576
## 5  2020          329 17.948718
## 1  2016          250 13.638843
## 4  2019          233 12.711402
## 3  2018          216 11.783961
## 6  2021          181  9.874523
## 2  2017          126  6.873977
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
data <- top_7_proporsi

# Plot diagram donat 3D
plot_ly(data, labels = ~tahun, values = ~proporsi, type = 'pie', hole = 0.6) %>%
  layout(title = "Proporsi Kasus Malaria per Tahun", 
         scene = list(aspectmode = "cube", 
                      xaxis = list(title = ""),
                      yaxis = list(title = ""),
                      zaxis = list(title = "")))