Visualisasi Numerik & Kategorik Penyakit Tidak Menular di Indonesia
KELOMPOK 1
Anggota kelompok :
Muhammad Ariq Rafiansyah (3338240017)
Rizky Putra Hendrawan (3338240033)
Nais Fanisa Cahyani (3338240038)
Adrian Wijaya Kusuma (3338240043)
Numerik
Input Data
setwd("D:/Coolyeah/Mata Kuliah/Semester 4/Eksplorasi dan Visualisasi Data/Tugas Kelompok")
library(ggplot2)
library(readxl)
list.files()## [1] "data evd penyakit fikss.xlsx"
## [2] "Data Kesehatan_edited.xlsx"
## [3] "Jumlah Kasus Penyakit Gagal Ginjal Berdasarkan Kabupaten.xlsx"
## [4] "jumlah_kasus_penyakit_tidak_menular_berdasarkan_jenisnya_menuru.xlsx"
## [5] "jumlah_kasus_penyakit_tidak_menular_berdasarkan_jenisnya_menuru_metadata.pdf"
## [6] "Karawang SHP"
## [7] "Penyebab Kematian di Indonesia yang Dilaporkan .xlsx"
## [8] "Raw Data.csv"
## [9] "Rplot.pdf"
## [10] "SHP Karawang"
## [11] "Sleep health and lifestyle dataset.xlsx.csv"
## [12] "static"
## [13] "Testing Data Kategorik 2.R"
## [14] "Testing Data Kategorik.R"
## [15] "Visualisasi-Kategorik-Penyakit-Tidak-Menular-Krw.html"
## [16] "Visualisasi-Numerik---Kategorik-Penyakit-Tidak-Menular-Indonesia.html"
## [17] "Visualisasi-Numerik---Kategorik-Penyakit-Tidak-Menular-Indonesia.Rmd"
## [18] "Visualisasi-Numerik---Kategorik-Penyakit-Tidak-Menular-Indonesia_files"
## [19] "Visualisasi Kategorik Penyakit Tidak Menular Karawang.Rmd"
## [20] "Visualisasi Kategorik Penyakit Tidak Menular Krw.Rmd"
## [21] "Visualisasi Kategorik PTM Karawang.Rmd"
## [22] "Visualisasi Numerik & Kategorik Penyakit Tidak Menular Indonesia.Rmd"
Alasan Pemilihan Data
Data ini dipilih karena memuat informasi numerik mengenai probabilitas kematian akibat penyakit tidak menular (Non-Communicable Diseases / NCDs) di Indonesia, yaitu sebesar 24,2% pada tahun 2019. Karena fokus data ini berupa data kuantitatif yang tersusun berdasarkan waktu, data tersebut sesuai untuk digunakan dalam analisis dan visualisasi numerik.
Melalui data ini, berbagai bentuk visualisasi numerik seperti histogram, density plot, boxplot, violin plot, QQ plot, scatter plot, dan line plot dapat diterapkan untuk mengeksplorasi karakteristik data secara lebih mendalam. Histogram dan density plot dapat digunakan untuk melihat distribusi data, boxplot dan violin plot untuk menunjukkan sebaran serta variasi data, QQ plot untuk menilai pola distribusi data, scatter plot untuk melihat hubungan antarvariabel numerik, dan line plot untuk menampilkan tren perubahan data dari tahun ke tahun.
Selain itu, data ini berasal dari World Health Organization (WHO), sehingga memiliki tingkat kredibilitas yang tinggi dan dapat dipertanggungjawabkan sebagai sumber data resmi di bidang kesehatan. Oleh karena itu, data ini dinilai tepat untuk digunakan dalam visualisasi numerik karena tidak hanya memuat data kuantitatif yang jelas, tetapi juga memungkinkan analisis distribusi, penyebaran, hubungan, dan tren data secara informatif.
Histogram
Histogram pada studi kasus ini digunakan untuk melihat distribusi atau sebaran nilai variabel RATE_PER_100_N, yaitu rate kematian akibat penyakit tidak menular per 100 penduduk di Indonesia. Melalui histogram, dapat diketahui rentang nilai yang muncul, frekuensi kemunculan masing-masing nilai, serta kecenderungan data apakah terkonsentrasi pada rentang tertentu atau tersebar luas.
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N)) +
geom_histogram(bins = 30)ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N)) +
geom_histogram(bins = 30, color = "white")library(scales)
ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N)) +
geom_histogram(bins = 30, color = "white", fill = "pink") +
scale_x_continuous(labels = comma) +
scale_y_continuous(labels = comma) +
labs(x = "Rate_per_100_N",
y = "Frekuensi")INTERPRETASI
Pada histogram, sumbu X menunjukkan nilai RATE_PER_100_N atau rate kematian per 100 penduduk, sedangkan sumbu Y menunjukkan frekuensi, yaitu banyaknya data yang berada pada rentang nilai tertentu.
Berdasarkan histogram, terlihat bahwa nilai RATE_PER_100_N berada pada kisaran sekitar 21 hingga 29 per 100 penduduk. Sebagian besar data tampak terkonsentrasi pada rentang 27–29, yang menunjukkan bahwa nilai rate kematian pada kisaran tersebut paling sering muncul dalam dataset. Sementara itu, terdapat juga beberapa data pada rentang 21–25, namun frekuensinya lebih sedikit dibandingkan rentang 27–29.
Secara umum, distribusi data tidak sepenuhnya simetris, karena penyebaran frekuensi lebih banyak berada pada nilai yang relatif tinggi. Hal ini menunjukkan bahwa sebagian besar observasi dalam dataset memiliki rate kematian akibat penyakit tidak menular per 100 penduduk yang cenderung berada pada kisaran menengah ke tinggi, khususnya di sekitar 27–29.
KESIMPULAN
Berdasarkan histogram variabel RATE_PER_100_N, dapat disimpulkan bahwa sebagian besar nilai rate kematian akibat penyakit tidak menular dalam dataset ini berada pada kisaran 27–29 per 100 penduduk. Hal ini menunjukkan bahwa nilai rate kematian dalam data cenderung terkonsentrasi pada rentang tersebut dan merupakan nilai yang paling sering muncul.
Selain itu, terdapat juga beberapa nilai yang berada pada kisaran 21–25, namun frekuensinya lebih sedikit dibandingkan dengan rentang 27–29. Hal ini menunjukkan bahwa meskipun terdapat observasi dengan rate kematian yang lebih rendah, jumlahnya tidak dominan dalam dataset.
Secara keseluruhan, histogram menunjukkan bahwa distribusi RATE_PER_100_N cenderung terkonsentrasi pada nilai yang relatif lebih tinggi, khususnya pada kisaran 27–29 per 100 penduduk.
Density Plot
Density plot pada studi kasus ini digunakan untuk melihat distribusi atau sebaran nilai variabel RATE_PER_100_N, yaitu rate kematian akibat penyakit tidak menular per 100 penduduk di Indonesia. Melalui density plot, dapat diketahui pola kepadatan data, rentang nilai yang muncul, serta kecenderungan data apakah terkonsentrasi pada nilai tertentu atau menyebar pada beberapa rentang nilai.
ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N)) +
geom_density(fill = "pink", alpha = 0.7) +
scale_x_continuous(labels = comma) +
scale_y_continuous(labels = comma) +
labs(x = "Rate kematian per 100 penduduk")INTERPRETASI
Density plot pada gambar ini digunakan untuk melihat distribusi nilai RATE_PER_100_N secara keseluruhan. Berbeda dengan histogram yang menampilkan frekuensi dalam bentuk batang, density plot menunjukkan kepadatan data dalam bentuk kurva halus sehingga pola persebaran data dapat terlihat lebih jelas.
Pada grafik ini, sumbu X menunjukkan nilai rate kematian per 100 penduduk, sedangkan sumbu Y menunjukkan density atau kepadatan data. Semakin tinggi kurva pada suatu nilai, semakin besar konsentrasi data pada nilai tersebut.
Berdasarkan grafik, terlihat bahwa nilai RATE_PER_100_N berada pada kisaran sekitar 21 hingga 28,5 per 100 penduduk. Kepadatan tertinggi tampak pada rentang 27–28, yang menunjukkan bahwa sebagian besar data terkonsentrasi pada kisaran tersebut. Selain itu, masih terdapat kepadatan yang lebih rendah pada sekitar 23–25, sehingga distribusi data tidak hanya terpusat pada satu nilai.
Secara umum, density plot ini menunjukkan bahwa distribusi RATE_PER_100_N cenderung lebih padat pada nilai yang relatif tinggi, khususnya di sekitar 27–28 per 100 penduduk.
KESIMPULAN
Berdasarkan density plot secara keseluruhan, dapat disimpulkan bahwa sebagian besar nilai rate kematian akibat penyakit tidak menular per 100 penduduk terkonsentrasi pada kisaran 27–28, sedangkan sebagian kecil lainnya berada pada kisaran yang lebih rendah, yaitu sekitar 23–25.
Density Plot Berdasarkan jenis kelamin
ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N, fill = DIM_SEX, color = DIM_SEX)) +
geom_density(alpha = 0.7) +
scale_x_continuous(labels = comma) +
scale_y_continuous(labels = comma) +
labs(x = "Rate kematian per 100 penduduk")INTERPRETASI
Density plot pada gambar ini digunakan untuk membandingkan distribusi nilai RATE_PER_100_N berdasarkan kategori jenis kelamin (DIM_SEX). Dengan grafik ini, dapat dilihat apakah distribusi rate kematian antara laki-laki dan perempuan berada pada kisaran yang sama atau berbeda.
Pada grafik ini:
- warna merah muda mewakili FEMALE
- warna biru kehijauan mewakili MALE
Sumbu X menunjukkan rate kematian per 100 penduduk, sedangkan sumbu Y menunjukkan density atau kepadatan data.
Berdasarkan grafik, terlihat bahwa distribusi FEMALE lebih banyak berada pada kisaran sekitar 21–25, dengan puncak kepadatan sekitar 24–25. Sementara itu, distribusi MALE cenderung berada pada kisaran yang lebih tinggi, yaitu sekitar 27–28, dengan puncak kepadatan di sekitar rentang tersebut.
Tumpang tindih antara kedua kurva terlihat sangat kecil, yang menunjukkan bahwa nilai rate kematian antara laki-laki dan perempuan memiliki perbedaan yang cukup jelas. Secara visual, rate kematian pada laki-laki cenderung lebih tinggi dibandingkan perempuan.
KESIMPULAN
Berdasarkan density plot menurut jenis kelamin, dapat disimpulkan bahwa laki-laki memiliki rate kematian akibat penyakit tidak menular per 100 penduduk yang cenderung lebih tinggi dibandingkan perempuan. Nilai pada kelompok laki-laki terkonsentrasi di sekitar 27–28, sedangkan kelompok perempuan lebih terkonsentrasi pada kisaran 21–25.
Density Ridge Plot Berdasarkan jenis kelamin
library(ggridges)
ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N, y= DIM_SEX,fill = DIM_SEX)) +
geom_density_ridges() +
labs(x = "Rate kematian per 100 penduduk", y = "Jenis Kelamin")## Picking joint bandwidth of 0.49
INTERPRETASI
Density ridge plot pada gambar ini juga digunakan untuk melihat distribusi nilai RATE_PER_100_N berdasarkan jenis kelamin, tetapi dengan tampilan yang dipisahkan per kelompok agar pola masing-masing kategori terlihat lebih jelas.
Pada grafik ini:
- sumbu X menunjukkan rate kematian per 100 penduduk
- sumbu Y menunjukkan jenis kelamin
- bentuk kurva pada masing-masing baris menunjukkan kepadatan data untuk tiap kelompok
Berdasarkan ridge plot, terlihat bahwa kelompok FEMALE memiliki distribusi yang lebih terkonsentrasi pada kisaran sekitar 20–25, dengan puncak kepadatan di sekitar 24–25. Sebaliknya, kelompok MALE memiliki distribusi yang lebih dominan pada kisaran 27–30, dengan puncak utama di sekitar 28.
Karena kedua kelompok ditampilkan terpisah, perbedaan distribusi keduanya menjadi lebih mudah dilihat dibandingkan plot sebelumnya. Grafik ini menegaskan bahwa kelompok laki-laki memiliki rate kematian yang lebih tinggi, sedangkan kelompok perempuan cenderung berada pada nilai yang lebih rendah.
KESIMPULAN
Berdasarkan density ridge plot, dapat disimpulkan bahwa terdapat perbedaan distribusi rate kematian akibat penyakit tidak menular antara laki-laki dan perempuan. Distribusi laki-laki terkonsentrasi pada nilai yang lebih tinggi, yaitu sekitar 27–30, sedangkan distribusi perempuan terkonsentrasi pada kisaran 20–25.
Boxplot
Boxplot pada studi kasus ini digunakan untuk melihat distribusi atau sebaran nilai variabel RATE_PER_100_N, yaitu rate kematian akibat penyakit tidak menular per 100 penduduk di Indonesia. Melalui boxplot, dapat diketahui nilai tengah data, sebaran data, rentang nilai, serta ada atau tidaknya pencilan (outlier) dalam dataset.
Pada boxplot, garis di dalam kotak menunjukkan median atau nilai tengah data, sedangkan batas bawah dan batas atas kotak menunjukkan kuartil pertama (Q1) dan kuartil ketiga (Q3). Garis di luar kotak menunjukkan rentang data minimum dan maksimum yang masih berada dalam batas sebaran normal. Dengan menggunakan boxplot, dapat diketahui apakah data terkonsentrasi pada rentang tertentu, menyebar luas, atau memiliki pencilan.
ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N)) +
geom_boxplot()+
coord_flip()INTERPRETASI
Boxplot pada gambar ini digunakan untuk melihat ringkasan sebaran data variabel RATE_PER_100_N secara keseluruhan. Melalui boxplot, dapat diketahui nilai minimum, kuartil bawah, median, kuartil atas, dan nilai maksimum, sehingga pola penyebaran data lebih mudah diamati.
Pada grafik ini, garis di dalam kotak menunjukkan median, yaitu nilai tengah data. Batas bawah dan atas kotak menunjukkan kuartil 1 dan kuartil 3, sedangkan garis di luar kotak menunjukkan rentang data minimum dan maksimum yang masih termasuk dalam sebaran normal.
Berdasarkan boxplot, terlihat bahwa median nilai RATE_PER_100_N berada di sekitar 25 per 100 penduduk. Sebagian besar data berada pada kisaran sekitar 23 hingga 28, yang ditunjukkan oleh panjang kotak. Nilai minimum berada di sekitar 21, sedangkan nilai maksimum berada di sekitar 28,5.
Secara umum, boxplot ini menunjukkan bahwa distribusi data cukup lebar, dengan sebagian besar nilai berada pada kisaran menengah hingga tinggi. Selain itu, tidak terlihat adanya pencilan yang mencolok pada boxplot keseluruhan.
KESIMPULAN
Berdasarkan boxplot keseluruhan, dapat disimpulkan bahwa nilai RATE_PER_100_N memiliki median sekitar 25 per 100 penduduk, dengan sebagian besar data terkonsentrasi pada kisaran 23–28. Hal ini menunjukkan bahwa rate kematian akibat penyakit tidak menular dalam dataset cenderung berada pada rentang menengah ke tinggi.
Boxplot Berdasarkan jenis kelamin
ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N, y = DIM_SEX)) +
geom_boxplot()ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N, y = DIM_SEX, fill = DIM_SEX)) +
geom_boxplot()ggplot(data = penyakit_tidak_menular, mapping = aes(x = RATE_PER_100_N, y = DIM_SEX, fill = DIM_SEX)) +
geom_boxplot() +
theme(legend.position = "none")INTERPRETASI
Boxplot pada gambar ini digunakan untuk membandingkan distribusi nilai RATE_PER_100_N berdasarkan jenis kelamin (DIM_SEX). Dengan boxplot ini, dapat dilihat perbedaan median, sebaran data, dan kemungkinan pencilan antara kelompok FEMALE dan MALE.
Berdasarkan grafik, terlihat bahwa kelompok FEMALE memiliki median sekitar 23–24 per 100 penduduk, dengan sebagian besar data berada pada kisaran sekitar 22 hingga 25. Sementara itu, kelompok MALE memiliki median yang lebih tinggi, yaitu sekitar 27,5–28, dengan sebagian besar data berada pada kisaran 27 hingga 28.
Perbedaan posisi kotak antara kedua kelompok menunjukkan bahwa distribusi rate kematian pada laki-laki cenderung lebih tinggi dibandingkan perempuan. Selain itu, pada kelompok MALE terlihat adanya satu pencilan di nilai yang lebih rendah, sekitar 23, yang berada cukup jauh dari kumpulan data utama laki-laki. Hal ini menunjukkan adanya satu observasi laki-laki dengan nilai rate kematian yang jauh lebih rendah dibandingkan sebagian besar observasi lainnya.
KESIMPULAN
Berdasarkan boxplot menurut jenis kelamin, dapat disimpulkan bahwa kelompok laki-laki memiliki rate kematian akibat penyakit tidak menular yang lebih tinggi dibandingkan perempuan. Nilai pada kelompok MALE terkonsentrasi pada kisaran 27–28, sedangkan kelompok FEMALE berada pada kisaran 22–25. Selain itu, terdapat satu pencilan pada kelompok laki-laki yang menunjukkan adanya observasi dengan nilai lebih rendah dari pola umum kelompok tersebut.
Violin Plot
Plot ini dibentuk dengan menggabungkan antara Density
Plot dengan boxplot dengan fungsi
geom_violin(). Violin Plot pada studi
kasus ini ingin Melihat sebaran dan kepadatan data rate kematian pada
tiap kategori jenis kelamin.
Dengan violin plot, kita bisa melihat apakah data terkonsentrasi pada nilai tertentu atau menyebar luas. Hasilnya sebagai berikut.
library(scales)
ggplot(data = penyakit_tidak_menular,
aes(x = DIM_SEX, y = RATE_PER_100_N)) +
geom_violin(fill="green", alpha=0.5) +
geom_boxplot(fill="blue", width=0.1)INTERPRETASI
isualisasi Violin Plot ini memberikan gambaran komprehensif mengenai distribusi dan densitas angka kematian (RATE_PER_100_N) yang dikelompokkan berdasarkan jenis kelamin. Bentuk luar “biola” menunjukkan bahwa kelompok Perempuan (Female) memiliki sebaran data yang lebih rendah dan terkonsentrasi secara merata pada rentang angka 21 hingga 25. Sebaliknya, kelompok Laki-laki (Male) memiliki kepadatan data yang jauh lebih tinggi, dengan bagian “perut” biola yang melebar di angka kematian 27 hingga 28. Kehadiran Boxplot biru di bagian dalam mempertegas bahwa nilai median kelompok laki-laki berada signifikan di atas kelompok perempuan. Selain itu, adanya “ekor” panjang ke bawah pada sisi laki-laki mengindikasikan keberadaan pencilan (outlier) atau penurunan angka kematian yang sangat drastis pada titik observasi tertentu, yang menunjukkan variabilitas data laki-laki lebih ekstrem dibandingkan perempuan.
QQ-Plot
Plot ini berguna untuk memeriksa apakah sebaran data (sebaran empirik) memiliki bentuk yang sama dengan sebaran tertentu yang dispesifikan (sebaran hipotetik). pada kasus ini kita ingin melihat pola sebaran apakah variabel numerik RATE_PER_100_N mengikuti pola distribusi normal dengan membandingkan data asli (titik biru) terhadap garis referensi ideal (garis merah).
ggplot(data = penyakit_tidak_menular, aes(sample = RATE_PER_100_N)) +
stat_qq(col="blue", cex=0.9) +
stat_qq_line(col="red", lwd=1)INTERPRETASI
Secara visual, data dinyatakan berdistribusi normal jika seluruh titik biru menempel ketat pada garis merah, namun pada plot ini terlihat titik-titik tersebut mulai menjauh dan melengkung di bagian ujung bawah dan atas. Penyimpangan ini menandakan adanya nilai-nilai ekstrem atau ketidakteraturan pola angka kematian pada tahun-tahun tertentu yang tidak simetris layaknya kurva lonceng. Oleh karena itu, dapat disimpulkan bahwa data angka kematian tersebut tidak berdistribusi normal, sehingga diperlukan pendekatan statistik yang lebih fleksibel untuk pengolahan data selanjutnya.
Scatter plot
Untuk membuat scatter plot menggunakan ggplot2 kita
dapat menggunakan geom_point(). Misalnya kita ingin melihat
pola sebaran antara DIM_TIME dan RATE_PER_100_N.
Hasilnya sebagai berikut.
ggplot(data = penyakit_tidak_menular, mapping = aes(x = DIM_TIME, y = RATE_PER_100_N)) +
geom_point()INTERPRETASI
Visualisasi Scatter Plot ini menyajikan hubungan bivariat antara variabel numerik waktu (DIM_TIME) dan angka kematian (RATE_PER_100_N). Secara statistik, munculnya dua jalur tren yang terpisah secara konsisten mengindikasikan adanya heterogenitas dalam data, di mana satu kumpulan data memiliki nilai mean (rata-rata) yang jauh lebih tinggi dibandingkan kumpulan data lainnya pada setiap titik waktu. Fenomena ini menunjukkan bahwa meskipun variabel yang diplot adalah numerik, terdapat pengaruh variabel kategorik (jenis kelamin) yang menciptakan stratifikasi atau pembagian lapisan data. Jalur bagian atas mencerminkan kelompok dengan risiko kematian yang lebih besar dan fluktuasi yang lebih dinamis, sementara jalur bawah menunjukkan kelompok dengan tingkat kematian yang lebih rendah dan cenderung lebih stabil. Hal ini membuktikan bahwa faktor biologis atau sosial terkait jenis kelamin merupakan prediktor yang signifikan dalam menentukan variabilitas angka kematian dari tahun ke tahun, sehingga analisis lebih lanjut memerlukan pendekatan per kelompok (group-based analysis) untuk mendapatkan akurasi yang lebih tinggi.
Kita juga dapat memberikan warna untuk setiap titik. Misalnya pola sebaran antara DIM_TIME dan RATE_PER_100_N berdasarkan kategori jenis kelamin (DIM_SEX). Hasilnya sebagai berikut.
ggplot(data = penyakit_tidak_menular, mapping = aes(x = DIM_TIME, y = RATE_PER_100_N, color = DIM_SEX)) +
geom_point()INTERPRETASI
Visualisasi Scatter Plot ini menyajikan hubungan bivariat antara variabel numerik waktu (DIM_TIME) dan angka kematian (RATE_PER_100_N) dengan penambahan dimensi kategorik berupa jenis kelamin (DIM_SEX). Melalui pemberian warna, terlihat jelas adanya stratifikasi atau pemisahan data menjadi dua jalur tren yang berbeda secara konsisten, di mana kelompok Laki-laki (Male) menempati jalur atas dengan tingkat risiko kematian yang lebih tinggi dan sempat mengalami fluktuasi kenaikan hingga sekitar tahun 2010. Sebaliknya, kelompok Perempuan (Female) berada pada jalur bawah yang menunjukkan angka kematian lebih rendah dengan tren penurunan yang jauh lebih stabil dan signifikan dari tahun ke tahun. Munculnya celah (gap) yang lebar di antara kedua kelompok ini membuktikan bahwa faktor jenis kelamin merupakan prediktor yang sangat kuat dalam menentukan variabilitas data, sehingga sebaran angka kematian tidak berkumpul pada satu titik rata-rata melainkan terbagi secara tegas berdasarkan kategori biologis tersebut.
Line chart
Plot ini digunakan untuk melihat trend data berdasarkan perubahan waktu. Artinya pada Line Chart cocok untuk data-data deret waktu.
Line chart Dasar
Untuk membuat bentuk Line Chart sederhana dengan menggunakan fungsi
geom_line(). Misalnya kita akan membuat trend banyaknya
kasus kematian pada penyakit tidak menular INDONESIA.
Hasilnya sebagai berikut.
ggplot(data = penyakit_tidak_menular, aes(x=DIM_TIME,y=RATE_PER_100_N, color = DIM_SEX)) +
geom_line() +
labs(x="waktu", y="banyaknya kasus tahunan") INTERPRETASI
Visualisasi Line Chart ini secara efektif menggambarkan tren angka kematian (RATE_PER_100_N) di Indonesia dari tahun 2000 hingga 2021 dengan memisahkan alur data berdasarkan jenis kelamin. Penggunaan variabel numerik pada kedua sumbu memungkinkan kita melihat pola perubahan yang kontinu, di mana terdapat perbedaan risiko yang sangat kontras antara kedua kelompok. Kelompok laki-laki (Male) menempati posisi angka kematian yang jauh lebih tinggi dan sempat mengalami fluktuasi kenaikan hingga mencapai puncaknya di sekitar tahun 2010 sebelum akhirnya menurun secara signifikan. Sebaliknya, kelompok perempuan (Female) menunjukkan tren penurunan yang jauh lebih konsisten, stabil, dan berada pada level yang lebih rendah sepanjang periode observasi. Pemisahan garis yang mulus ini membuktikan bahwa faktor jenis kelamin merupakan prediktor yang kuat dalam menentukan variabilitas angka kematian, serta menunjukkan bahwa program kesehatan masyarakat telah berhasil menurunkan angka kematian pada kedua kelompok meskipun dengan kecepatan yang berbeda.
Area Plot
Untuk menambah estetika dapat dilakukan dengan mengarsir daerah di
bawah plot deret waktu. Plot seperti ini disebut Area
Plot dengan menggunakan fungsi geom_area().
Hasilnya sebagai berikut.
ggplot(data = penyakit_tidak_menular, aes(x = DIM_TIME, y = RATE_PER_100_N, fill = DIM_SEX)) +
geom_area(alpha = 0.1, position = "identity") +
geom_line(aes(color = DIM_SEX), linewidth = 1) +
theme_minimal() +
labs(x = "Waktu", y = "Banyaknya Kasus Tahunan")INTERPRETASI
Line Chart dan Area Plot memberikan perspektif volume dan arah tren yang lebih jelas. Penggunaan geom_area dengan transparansi (alpha = 0.1) dan posisi identity memungkinkan kita melihat akumulasi besaran kasus secara visual tanpa menutupi perbedaan tren antar kedua kelompok. Arsir area tersebut menonjolkan “ruang risiko” yang lebih besar pada kelompok laki-laki dibandingkan perempuan sepanjang dua dekade terakhir. Secara keseluruhan, visualisasi ini membuktikan bahwa meskipun angka kematian akibat penyakit tidak menular di Indonesia menunjukkan tren penurunan secara umum, terdapat kesenjangan gender yang nyata di mana laki-laki tetap berada pada tingkat risiko yang lebih tinggi secara konsisten.
Multiple Line Chart
Pada plot ini dapat digunakan untuk membandingkan trend data deret waktu pada beberapa wilayah/kelompok. Misalnya kita akan membuat perbandingan angka kematian berdasarkan tentang batas bawah (NL) dan batas atas (NU). Hasilnya sebagai berikut.
ggplot(data = penyakit_tidak_menular, aes(x=DIM_TIME)) +
geom_line(aes(y = RATE_PER_100_NL, color = DIM_SEX), lwd = 1.2) +
geom_line(aes(y = RATE_PER_100_NU, color = DIM_SEX), lty = "dashed") +
labs(x = "tahun ", y = "banyaknya kasus tahunan")INTERPRETASI
Visualisasi Multiple Line Chart ini menyajikan perbandingan tren angka kematian berdasarkan rentang estimasi batas bawah (NL) dan batas atas (NU) yang dipisahkan menurut jenis kelamin. Terlihat adanya stratifikasi yang jelas di mana kelompok laki-laki (Male) memiliki profil angka kematian yang jauh lebih tinggi dibandingkan kelompok perempuan (Female), baik pada batas bawah maupun batas atasnya. Penggunaan garis putus-putus (lty = “dashed”) pada variabel NU membantu membedakan batas estimasi secara visual. Tren menunjukkan bahwa kedua kelompok mengalami penurunan yang sangat signifikan setelah tahun 2010, namun jarak (gap) antar garis tetap lebar, membuktikan bahwa faktor jenis kelamin memberikan pengaruh yang sangat stabil terhadap variabilitas angka kematian selama dua dekade terakhir.
Untuk menambahkan nama kelompok digunakan fungsi
geom_text(). Hasilnya sebagai berikut.
ggplot(data = penyakit_tidak_menular, aes(x = DIM_TIME, color = DIM_SEX)) +
geom_line(aes(y = RATE_PER_100_NL), lwd = 1.2, linetype = "solid") +
geom_line(aes(y = RATE_PER_100_NU), lwd = 1.2, linetype = "dashed") +
xlim(min(penyakit_tidak_menular$DIM_TIME), max(penyakit_tidak_menular$DIM_TIME) + 5) +
# Tambah teks keterangan di ujung garis (Direct Labeling)
# Keterangan untuk Laki-laki (Male)
geom_text(data = subset(penyakit_tidak_menular, DIM_TIME == max(DIM_TIME) & DIM_SEX == "MALE"),
aes(y = RATE_PER_100_NU, label = "Male (NU: Putus-putus)"),
size = 4, hjust = -0.1) +
# Keterangan untuk Perempuan (Female)
geom_text(data = subset(penyakit_tidak_menular, DIM_TIME == max(DIM_TIME) & DIM_SEX == "FEMALE"),
aes(y = RATE_PER_100_NL, label = "Female (NL: Garis Biasa)"),
size = 4, hjust = -0.1) +
labs(x = "waktu", y = "banyaknya kasus tahunan") +
theme_minimal() +
theme(legend.position = "none") # Menghilangkan legenda agar bersih seperti contoh dosenINTERPRETASI
Visualisasi Multiple Line Chart ini menyajikan perbandingan tren angka kematian yang bersifat full numerik dengan membedakan indikator berdasarkan jenis garis dan warna. Melalui pemetaan warna, kelompok Laki-laki (Male) dan Perempuan (Female) dibedakan secara otomatis, di mana kelompok laki-laki secara konsisten menunjukkan angka kematian yang lebih tinggi. Untuk memperjelas struktur estimasi, garis putus-putus merepresentasikan Batas Atas (NU), sedangkan garis biasa (solid) merepresentasikan Batas Bawah (NL). Penempatan label teks secara langsung di ujung kanan grafik, yang memberikan kejelasan bahwa meskipun terdapat rentang estimasi (jarak antara NL dan NU), kedua kelompok jenis kelamin menunjukkan tren penurunan angka kematian yang sinkron menuju tahun 2020.
Kategorik
Input Data
Data yang digunakan pada studi kasus ini adalah data jumlah kasus penyakit tidak menular (PTM) berdasarkan jenisya di wilayah Kabupaten Karawang. Sebelumnya telah divisualisasikan data penyakit tidak menular di Indonesia, kemudian untuk data kali ini lebih spesifik pada salah satu daerah di Jawa Barat, yaitu Karawang.
Alasan Penggunaan Data
Data PTM di wilayah Karawang dipilih karena penyakit tidak menular merupakan salah satu penyebab kematian terbanyak di Indonesia, termasuk di tingkat kabupaten. Dengan mem-visualisasikan data ini dapat menjadi alasan pengambilan keputusan untuk perencanaan program kesehatan berdasarkan prioritas jenis penyakit tidak menular yang paling banyak tersebar di wilayah Karawang.
##
## 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
## [1] "D:/Coolyeah/Mata Kuliah/Semester 4/Eksplorasi dan Visualisasi Data/Tugas Kelompok"
Bar Chart
Bar chart digunakan untuk menunjukkan jumlah kasus dari setiap jenis penyakit tidak menular di Kabupaten Karawang. Hasilnya sebagai berikut.
ggplot(data = data, mapping = aes(x = penyakit_tidak_menular, y = jumlah)) +
geom_bar(stat = "identity")Secara default, geom_bar() menggunakan
stat = "count", yang berarti ia akan menghitung jumlah
observasi (frekuensi) untuk setiap kategori dari variabel yang
disebutkan pada sumbu x dan menampilkannya sebagai tinggi batang. Namun,
ketika Anda menggunakan stat = "identity", Anda memberitahu
ggplot2 untuk menggunakan nilai yang sudah ada di data
sebagai tinggi batang, bukan menghitung frekuensi.
Bar Chart dengan tabel frekuensi
Untuk menggunakan bar chart dengan perintah
stat = "identity", kita harus membuat tabel frekuensi di
setiap kategori.
Membuat tabel frekuensi
Tabel frekuensi dapat dibuat dengan menggunakan perintah
table(). Misalnya kita akan membuat tabel frekuensi
berdasarkan variabel kualitas potongan berlian (cut).
data_penyakit <- data %>%
group_by(penyakit_tidak_menular) %>%
summarise(jumlah = sum(jumlah))
data_penyakit## # A tibble: 5 × 2
## penyakit_tidak_menular jumlah
## <chr> <dbl>
## 1 DIABETES 34709
## 2 HIPERTENSI 124791
## 3 JANTUNG 0
## 4 KANKER PAYUDARA 136
## 5 KANKER RAHIM 64
Modifikasi Bar Chart
Untuk Menambahkan judul menggunakan perintah labs(),
memberikan warna pada grafik menggunakan perintah fill, dan
memberikan label pada setiap batang menggunakan perintah
geom_text(). Hasilnya sebagai berikut.
ggplot(data_penyakit, aes(x = reorder(penyakit_tidak_menular, jumlah), y = jumlah)) +
geom_col(fill = "orange", alpha = 0.8) +
geom_text(aes(label = jumlah), vjust = -0.3, size = 4) +
labs(
x = "Jenis Penyakit Tidak Menular",
y = "Jumlah Kasus",
title = "Frekuensi Penyakit Tidak Menular di Karawang"
)Interpretasi
Berdasarkan visualisasi bar chart, dapat terlihat bahwa Hipertensi dengan jumlah kasus 124791 adalah jenis penyakit tidak menular dengan jumlah kasus tertinggi di Kabupaten Karawang, kemudian diikuti oleh Diabetes dengan jumlah kasus 34709 dan Kanker Payudara dengan jumlah kasus 136.
Perbedaan yang cukup signifikan diantara jenis-jenis penyakit ini menunjukkan bahwa pola peyakit tidak menullar di Karawang didominasi oleh penyakit yang sangat berkaitan dengan gaya hidup.
Kesimpulan
Penyakit Tidak Menular yang paling dominan terdapat pada wilayah kabupaten Karawang. Berdasarkan hasil tersebut, dibutuhkan pencegahan yang dapat dilakukan oleh seluruh puskesmas di kabupaten Karawang. Edukasi gaya hidup sehat, seperti edukasi pola makan sehat, rutin berolahraga dan pemeriksaan tekanan darah berkala.
Needle Chart
jenis diagram batang yang menampilkan data dalam bentuk garis vertikal tipis seperti jarum (needle) yang membentang dari sumbu horizontal ke titik data tertentu. Needle Chart sering digunakan untuk menggambarkan tren data diskrit, perubahan nilai dari waktu ke waktu, atau perbandingan antara kategori tertentu. Misal akan membuat grafik perbandingan jumlah jenis penyakit tidak menular di wilayah Kabupaten Karawang. Hasilnya sebagai berikut.
ggplot(data_penyakit,
mapping = aes(x = reorder(penyakit_tidak_menular, jumlah), y = jumlah)) +
geom_segment(aes(x = reorder(penyakit_tidak_menular, jumlah),
xend = reorder(penyakit_tidak_menular, jumlah),
y = 0,
yend = jumlah),
color = "orange") +
geom_point(color = "coral", size = 4, alpha = 0.6) +
geom_text(aes(label = jumlah), vjust = -1.0) +
coord_flip() +
labs(
y="Jumlah Kasus",
x="Jenis Penyakit Tidak Menular",
title="Frekuensi Penyakit Tidak Menular di Karawang")Interpretasi
Pada bar diatas ditunjukkan jumlah kasus penyakit tidak menular di wilayah Kabupaten Karawang. Hipertensi mendominasi dengan jumlah kasus 124791, disusul dengan 34709 kasus, kemudian kanker payudara 136 kasus, dan yang terakhir adalah kanker rahim dengan jumlah kasus 64. Sedangkan jenis penyakit tidak menular yang tidak memiliki penderita adalah penyakit jantung
Kesimpulan
Jumlah kasus yang ditampilkan tidak memiliki perbedaan yang signifikan dengan chart sebelumnya, yang dimana menunjukkan bahwa Hipertensi adalah penyakit tidak menular yang paling banyak ditemukan, disusul dengan Diabetes. Jenis kanker dan jantung lebih jarang ditemukan dibandingkan jenis penyakit lainnya. Kondisi ini menandakan bahwa penyakit berbasis gaya hidup menjadi tantangan kesehatan umum di wilayah Karawang. Kasus-kasus ini dapat dicegah dengan edukasi seperti sosialisasi gaya hidup sehat dan pola makan bergizi.
Grouped Bar Chart
Untuk membuat kelompok/grup pada bar chart dapat menambahkan perintah
mapping. Misalnya kita akan membuat grafik jumlah kasus
penyakit tidak menular berdasarkan puskesmas. Hasilnya sebagai
berikut.
Var_PTM<-data %>%
filter(jumlah>0) %>%
group_by(nama_puskesmas) %>%
summarise(variasi=n_distinct(penyakit_tidak_menular),
total_kasus=sum(jumlah))%>%
arrange(desc(variasi),desc(total_kasus))%>%
slice_head(n=10) %>%
pull(nama_puskesmas)
data_filter<- data %>%
filter(nama_puskesmas %in% Var_PTM) %>%
mutate(nama_puskesmas=factor(nama_puskesmas, levels=Var_PTM))
ggplot(data=data_filter, mapping= aes(x = nama_puskesmas, y= jumlah, fill= as.factor(penyakit_tidak_menular)))+
geom_bar(position="dodge",stat="identity")+
labs(
x="Nama Puskesmas(Kecamatan)",
y="Jumlah Kasus",
fill="Jenis Penyakit Tidak Menular",
title="10 Puskesmas dengan Variasi Jenis PTM Terbanyak di Karawang"
)+
scale_fill_brewer(palette="Oranges")+
theme_light()+
theme(axis.text.x = element_text(angle=45,hjust = 1))Interpretasi
Grouped bar chart menujukkan 10 puskesmas di Kabupaten Karawang dengan jenis penyakit tidak menular yang bervariasi. Pada 10 puskesmas tersebut, tercatat kasus Hipertensi menjadi jenis PTM dengan jumlah kasus tertinggi di setiap puskesmas.
Kesimpulan
Setiap puskesmas memiliki distribusi PTM yang berbeda-beda sehingga penanganan prioritas tidak bisa diseragamkan. Pemetaan ini dapat menjadi alat pengambilan keputusan berdasarkan prioritas wilayah dengan kasus PTM tertinggi dan menyesuaikan program edukasi dengan kondisi masing-masing puskesmas
Stacked Bar Chart
Untuk membuat tampilan menumpuk pada kelompok/grup bar chart dapat
digunakan perintah position = "stack". Hasilnya sebagai
berikut.
ggplot(data=data_filter, mapping= aes(x = nama_puskesmas, y= jumlah, fill= as.factor(penyakit_tidak_menular)))+
geom_bar(position="stack",stat="identity")+
labs(
x="Nama Puskesmas(Kecamatan)",
y="Jumlah Kasus",
fill="Jenis Penyakit Tidak Menular",
title="10 Puskesmas dengan Variasi Jenis PTM Terbanyak di Karawang"
)+
scale_fill_brewer(palette="Oranges")+
theme_light()+
theme(axis.text.x = element_text(angle=45,hjust = 1))Interpretasi
Chart Stacked Bar ini menunjukkan komposisi total kasus PTM di 10 puskesmas yang secara kumulatif terpilih. Semakin cerah warna dan semakin tebal bar, menunjukkan dominasi dari jenis penyakit tidak menular tersebut.
Kesimpulan
Stacked Bar memperkua hasil dari temuan sebelumnya bahwa terdapat distribusi beban tidak merata pada jumlah kasus di antara puskesmas karawang. Puskesmas dengan jumlah kasus tertinggi pastinya memerlukan fasilitas, dana, dan sumber daya manusia yang lebih dibandingkan puskesmas lainnya
Pie Chart
Untuk membuat pie chart, pertama kita harus menyiapkan data dengan meringkas menjadi tabel frekuensi. Misalnya akan membuat pie chart persentase jumlah kasus berdasarkan jenis penyakit tidak menular.
library(dplyr)
df_PTM <- data %>%
group_by(penyakit_tidak_menular) %>%
summarise(counts = sum(jumlah))
df_PTM## # A tibble: 5 × 2
## penyakit_tidak_menular counts
## <chr> <dbl>
## 1 DIABETES 34709
## 2 HIPERTENSI 124791
## 3 JANTUNG 0
## 4 KANKER PAYUDARA 136
## 5 KANKER RAHIM 64
Selanjutnya mengitung posisi label teks sebagai jumlah kumulatif proporsi.
df_PTM <- df_PTM %>%
arrange(desc(penyakit_tidak_menular)) %>%
mutate(prop = round(counts*100/sum(counts), 1),
lab.ypos = cumsum(prop) - 0.5*prop)
head(df_PTM, 4)## # A tibble: 4 × 4
## penyakit_tidak_menular counts prop lab.ypos
## <chr> <dbl> <dbl> <dbl>
## 1 KANKER RAHIM 64 0 0
## 2 KANKER PAYUDARA 136 0.1 0.05
## 3 JANTUNG 0 0 0.1
## 4 HIPERTENSI 124791 78.1 39.1
Setelah itu, kita dapat membuat grafik Pie Chart dengan perintah
geom_bar() dan coord_polar(). Hasilnya sebagai
berikut.
ggplot(df_PTM, aes(x = "", y = prop, fill = penyakit_tidak_menular)) +
geom_bar(width = 1, stat = "identity", color = "white") +
geom_text(aes(y = lab.ypos, label = prop), color = "white")+
coord_polar("y", start = 0)+
ggpubr::fill_palette("jco")+
labs(fill="Jenis PTM",
title = "Persentase Jumlah Kasus Berdasarkan Jenis PTM")## <theme> List of 144
## $ line : <ggplot2::element_blank>
## $ rect : <ggplot2::element_rect>
## ..@ fill : chr "#00000000"
## ..@ colour : logi NA
## ..@ linewidth : num 0
## ..@ linetype : num 1
## ..@ linejoin : chr "round"
## ..@ inherit.blank: logi TRUE
## $ text : <ggplot2::element_text>
## ..@ family : chr ""
## ..@ face : chr "plain"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : chr "black"
## ..@ size : num 11
## ..@ hjust : num 0.5
## ..@ vjust : num 0.5
## ..@ angle : num 0
## ..@ lineheight : num 0.9
## ..@ margin : <ggplot2::margin> num [1:4] 0 0 0 0
## ..@ debug : logi FALSE
## ..@ inherit.blank: logi TRUE
## $ title : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : NULL
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi TRUE
## $ point : <ggplot2::element_blank>
## $ polygon : <ggplot2::element_blank>
## $ geom : <ggplot2::element_geom>
## ..@ ink : chr "black"
## ..@ paper : chr "#00000000"
## ..@ accent : chr "#3366FF"
## ..@ linewidth : num 0.5
## ..@ borderwidth: num 0.5
## ..@ linetype : int 1
## ..@ bordertype : int 1
## ..@ family : chr ""
## ..@ fontsize : num 3.87
## ..@ pointsize : num 1.5
## ..@ pointshape : num 19
## ..@ colour : NULL
## ..@ fill : NULL
## $ spacing : 'simpleUnit' num 5.5points
## ..- attr(*, "unit")= int 8
## $ margins : <ggplot2::margin> num [1:4] 5.5 5.5 5.5 5.5
## $ aspect.ratio : NULL
## $ axis.title : <ggplot2::element_blank>
## $ axis.title.x : NULL
## $ axis.title.x.top : NULL
## $ axis.title.x.bottom : NULL
## $ axis.title.y : NULL
## $ axis.title.y.left : NULL
## $ axis.title.y.right : NULL
## $ axis.text : <ggplot2::element_blank>
## $ axis.text.x : NULL
## $ axis.text.x.top : NULL
## $ axis.text.x.bottom : NULL
## $ axis.text.y : NULL
## $ axis.text.y.left : NULL
## $ axis.text.y.right : NULL
## $ axis.text.theta : NULL
## $ axis.text.r : NULL
## $ axis.ticks : NULL
## $ axis.ticks.x : NULL
## $ axis.ticks.x.top : NULL
## $ axis.ticks.x.bottom : NULL
## $ axis.ticks.y : NULL
## $ axis.ticks.y.left : NULL
## $ axis.ticks.y.right : NULL
## $ axis.ticks.theta : NULL
## $ axis.ticks.r : NULL
## $ axis.minor.ticks.x.top : NULL
## $ axis.minor.ticks.x.bottom : NULL
## $ axis.minor.ticks.y.left : NULL
## $ axis.minor.ticks.y.right : NULL
## $ axis.minor.ticks.theta : NULL
## $ axis.minor.ticks.r : NULL
## $ axis.ticks.length : 'rel' num 0
## $ axis.ticks.length.x : NULL
## $ axis.ticks.length.x.top : NULL
## $ axis.ticks.length.x.bottom : NULL
## $ axis.ticks.length.y : NULL
## $ axis.ticks.length.y.left : NULL
## $ axis.ticks.length.y.right : NULL
## $ axis.ticks.length.theta : NULL
## $ axis.ticks.length.r : NULL
## $ axis.minor.ticks.length : NULL
## $ axis.minor.ticks.length.x : NULL
## $ axis.minor.ticks.length.x.top : NULL
## $ axis.minor.ticks.length.x.bottom: NULL
## $ axis.minor.ticks.length.y : NULL
## $ axis.minor.ticks.length.y.left : NULL
## $ axis.minor.ticks.length.y.right : NULL
## $ axis.minor.ticks.length.theta : NULL
## $ axis.minor.ticks.length.r : NULL
## $ axis.line : NULL
## $ axis.line.x : NULL
## $ axis.line.x.top : NULL
## $ axis.line.x.bottom : NULL
## $ axis.line.y : NULL
## $ axis.line.y.left : NULL
## $ axis.line.y.right : NULL
## $ axis.line.theta : NULL
## $ axis.line.r : NULL
## $ legend.background : <ggplot2::element_blank>
## $ legend.margin : <ggplot2::margin> num [1:4] 0 0 0 0
## $ legend.spacing : NULL
## $ legend.spacing.x : NULL
## $ legend.spacing.y : NULL
## $ legend.key : NULL
## $ legend.key.size : 'simpleUnit' num 1.2lines
## ..- attr(*, "unit")= int 3
## $ legend.key.height : NULL
## $ legend.key.width : NULL
## $ legend.key.spacing : 'rel' num 1
## $ legend.key.spacing.x : NULL
## $ legend.key.spacing.y : NULL
## $ legend.key.justification : NULL
## $ legend.frame : <ggplot2::element_blank>
## $ legend.ticks : NULL
## $ legend.ticks.length : 'rel' num 0.2
## $ legend.axis.line : NULL
## $ legend.text : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : 'rel' num 0.8
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi TRUE
## $ legend.text.position : NULL
## $ legend.title : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : NULL
## ..@ hjust : num 0
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi TRUE
## $ legend.title.position : NULL
## $ legend.position : chr "right"
## $ legend.position.inside : NULL
## $ legend.direction : NULL
## $ legend.byrow : NULL
## $ legend.justification : NULL
## $ legend.justification.top : NULL
## $ legend.justification.bottom : NULL
## $ legend.justification.left : NULL
## $ legend.justification.right : NULL
## $ legend.justification.inside : NULL
## [list output truncated]
## @ complete: logi TRUE
## @ validate: logi TRUE
Interpretasi
Pie Chart menunjukkan hasil sebaran kasus penyakit tidak menular didominasi oleh penyakit Hipertensi sebesar 78.1%, kemudian disusul oleh Diabetes sebesai 21.7%. Diikuti oleh penyakit-penyakit lainnya dengan proporsi yang sangat kecil.
Kesimpulan
Secara keseluruhan, penyakit tidak menular yang terdapat di wilayah Karawang didominasi oleh Hipertensi dan Diabetes, keduanya adalah jenis penyakit yang merupakan bersumber dari gaya hidup. Penyakit tersebut dapat dicegah dengan adanya edukasi ataupun pengarahan dari pihak puskesmas untuk mengajak masyarakat untuk lebih memperhatikan gaya hidup dan pola makan. Program-program seperti pendeteksi penyakit sejak dini, konseling gizi, edukasi penyakit tidak menular pun harus lebih ditingkatkan untuk mengurangi angka kasus penyakit-penyakit ini.
Peta Spasial
Pada pembuatan peta spasial, yang perlu disiapkan adalah data excel dan peta SHP. Download data excel disini, kemudian bisa download data SHP disini
## Linking to GEOS 3.13.1, GDAL 3.11.4, PROJ 9.7.0; sf_use_s2() is TRUE
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ lubridate 1.9.4 ✔ tibble 3.3.0
## ✔ purrr 1.2.0 ✔ tidyr 1.3.1
## ✔ readr 2.1.6
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ readr::col_factor() masks scales::col_factor()
## ✖ purrr::discard() masks scales::discard()
## ✖ 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
Import Data Excel dan SHP
Pertama, kita import data excel dan peta SHP menggunakan perintah
read_xlsx() dan read_sf(). Data Excel
#Set Working Directory
setwd("D:/Coolyeah/Mata Kuliah/Semester 4/Eksplorasi dan Visualisasi Data/Tugas Kelompok")
#Import Data PTM Excel
data_PTM=read_xlsx("jumlah_kasus_penyakit_tidak_menular_berdasarkan_jenisnya_menuru.xlsx")
#Import Data SHP Karawang
shp_karawang=read_sf("SHP Karawang/ADMINISTRASI_AR_KECAMATAN.shp")Selanjutnya gabungkan data excel ke dalam data SHP dengan perintah
left_join(). Dalam proses penggabungan ini menggunakan
variabel kunci ID. Artinya dalam data excel dan peta
SHP ada variabel ID sehingga kedua data tersebut dapat
digabungkan. Variabel ID merupakan kode angka untuk
mewakili setiap lokasi/wilayah yang akan dipetakan.
#Filter hanya penyakit HIPERTENSI yang digunakan
data_PTM = data_PTM%>%
filter(penyakit_tidak_menular == "HIPERTENSI")
data_PTM$nama_puskesmas=toupper(data_PTM$nama_puskesmas)
shp_karawang$WADMKC=toupper(shp_karawang$WADMKC)
#Menggabungkan data SHP dan Excel
gabung_KRW=left_join(shp_karawang,data_PTM,by=c("WADMKC"="nama_puskesmas"))
head(gabung_KRW)## Simple feature collection with 6 features and 35 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 107.125 ymin: -6.625 xmax: 107.625 ymax: -6.384551
## Geodetic CRS: WGS 84
## # A tibble: 6 × 36
## NAMOBJ FCODE REMARK METADATA SRS_ID KDBBPS KDCBPS KDCPUM KDEBPS KDEPUM KDPBPS
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Jonggol BA03… <NA> TASWIL1… SRGI … <NA> <NA> 32.01… <NA> <NA> <NA>
## 2 Cariu BA03… <NA> TASWIL1… SRGI … <NA> <NA> 32.01… <NA> <NA> <NA>
## 3 Tanjun… BA03… <NA> TASWIL1… SRGI … <NA> <NA> 32.01… <NA> <NA> <NA>
## 4 Cikalo… BA03… <NA> TASWIL1… SRGI … <NA> <NA> 32.03… <NA> <NA> <NA>
## 5 Kalija… BA03… <NA> TASWIL1… SRGI … <NA> <NA> 32.13… <NA> <NA> <NA>
## 6 Pabuar… BA03… <NA> TASWIL1… SRGI … <NA> <NA> 32.13… <NA> <NA> <NA>
## # ℹ 25 more variables: KDPKAB <chr>, KDPPUM <chr>, LUASWH <dbl>, TIPADM <int>,
## # WADMKC <chr>, WADMKD <chr>, WADMKK <chr>, WADMPR <chr>, WIADKC <chr>,
## # WIADKK <chr>, WIADPR <chr>, WIADKD <chr>, UUPP <chr>, SHAPE_Leng <dbl>,
## # SHAPE_Area <dbl>, geometry <MULTIPOLYGON [°]>, id <dbl>,
## # kode_provinsi <dbl>, nama_provinsi <chr>, kode_kabupaten_kota <dbl>,
## # nama_kabupaten_kota <chr>, penyakit_tidak_menular <chr>, jumlah <dbl>,
## # satuan <chr>, tahun <dbl>
Pemetaan data Spasial
Selanjutnya dilakukan pemetaan dengan perintah
geom_sf(). Misal akan dipetakan kasus penyakit tidak
Menular di Karawang pada tingkat Kecamatan. Hasilnya adalah sebagai
berikut.
#Pemetaan Kasus Penyakit Tidak Menular di Karawang
plot_ptm=ggplot(data=gabung_KRW)+
geom_sf(aes(fill=jumlah))+
scale_fill_distiller(palette="YlOrRd",direction=1)+
labs(title="Peta Sebaran Kasus PTM Hipertensi per Kecamatan",
subtitle = "Kabupaten Karawang 2023",
fill = "Jumlah Kasus Hipertensi")+
theme_minimal()
plot_ptmPemetaan data interaktif
library(tmap)
library(mapview)
mapview(gabung_KRW,zcol="jumlah",layer.name="Jumlah Kasus PTM Hipertensi")Interpretasi
Pada peta spasial ataupun interaktif telah ditunjukkan variasi jumlah kasus di setiap daerah. Kecamatan yang ditandai dengan warna gelap menunjukkan jumlah kasus hipertensi tinggi sekitar 5000 kasus. Sementara wilayah dengan warna terang memiliki jumlah kasus relatif rendah berkisar 1000-2000. Untuk wilayah abu-abu adalah wilayah yang tidak memiliki kecocokan data antara Excel dengan SHP.
Kesimpulan
Hasil pemetaan peta kasus Penyakit Tidak Menular khususnya jenis Hipertensi berhasil menujukkan pola distribusi yang tidak merata antar kecamatan. Kecamatan dengan beban tinggi ataupun warna gelap menjadi prioritas puskesmas sekitar untuk segera menangani kasus penyakit tersebut.
Terima kasih sudah membaca blog ini. Semoga bermanfaat. ^_^