Visualisasi data merupakan upaya menyampaikan informasi yang terkandung pada data agar lebih mudah dipahami oleh orang lain. Dalam mempersiapkan bahan visualisasi, seseorang perlu memahami dengan baik bagaimana mentrasformasi data (baik yang berupa data mentah maupun statistik ringkasan hasil analisis) menjadi suatu tampilan visual sedemikian rupa sehingga informasi yang ingin disampaikan dapat diterima dengan tepat dan mudah oleh siapapun yang melihatnya.
Pada tugas praktikum 2 ini, data yang digunakan adalah data performa dari siswa yang memiliki delapan jenis peubah dan seribu entri. Peubah tersebut antara lain gender, ras/etnis, tingkat pendidikan orang tua, makan siang, bimbel untuk menghadapi ujian, skor matematika, skor membaca, dan skor menulis.
Library yang digunakan adalah data.table dan tidyverse. Library tidyverse merupakan salah satu package yang berfungsi untuk pengolahan data import dan export data, membuat visualisasi data, dan juga permodelan data.
#memanggil library
library(data.table)
## Warning: package 'data.table' was built under R version 4.1.2
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.2
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.6 v dplyr 1.0.7
## v tidyr 1.1.4 v stringr 1.4.0
## v readr 2.1.2 v forcats 0.5.1
## Warning: package 'ggplot2' was built under R version 4.1.2
## Warning: package 'tibble' was built under R version 4.1.2
## Warning: package 'tidyr' was built under R version 4.1.2
## Warning: package 'readr' was built under R version 4.1.2
## Warning: package 'purrr' was built under R version 4.1.2
## Warning: package 'stringr' was built under R version 4.1.2
## Warning: package 'forcats' was built under R version 4.1.2
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::between() masks data.table::between()
## x dplyr::filter() masks stats::filter()
## x dplyr::first() masks data.table::first()
## x dplyr::lag() masks stats::lag()
## x dplyr::last() masks data.table::last()
## x purrr::transpose() masks data.table::transpose()
Dalam menginput data, digunakan fungsi setwd(). Fungsi ini digunakan untuk merubah atau menentukan dimana working directory yang akan kita gunakan.
#menginput data
setwd("D://Kuliah//Semester 4//STA1262 Visualisasi Data//Tugas 2")
DataSource <- read.csv("Data.csv")
#memanggil data
head(DataSource)
## gender race.ethnicity parental.level.of.education lunch
## 1 female group B bachelor's degree standard
## 2 female group C some college standard
## 3 female group B master's degree standard
## 4 male group A associate's degree free/reduced
## 5 male group C some college standard
## 6 female group B associate's degree standard
## test.preparation.course math.score reading.score writing.score
## 1 none 72 72 74
## 2 completed 69 90 88
## 3 none 90 95 93
## 4 none 47 57 44
## 5 none 76 78 75
## 6 none 71 83 78
Bar chart atau diagram batang merupakan diagram yang sudah dikenal luas penggunaannya oleh masyarakat. Pada dasarnya, bar chart ini berbentuk batang-batang yang disusun tegak berdampingan satu dengan yang lain. Tinggi dari batang proporsional dengan nilai data yang digambarkan. Kondisi dengan nilai data yang semakin besar akan ditampilkan dalam bentuk batang yang semakin tinggi, dan sebaliknya.
Sebelumnya, mengganti nama variable dengan menggunakan library data.table:
#mengganti nama variable
setnames(DataSource,"parental.level.of.education","eduparent")
Berikut contoh syntax yang dapat digunakan melalui library ggplot2:
#barplot
ggplot(DataSource, aes(x=reorder(eduparent, -table(eduparent)[eduparent]), fill=eduparent)) +
geom_bar() +
scale_fill_manual(values=c("#FF6363", "#FFAB76", "#FFFDA2",
"#BAFFB4", "#77E4D4", "#998CEB")) +
labs(title = "Frekuensi Tingkat Pendidikan Orang Tua",
x = "Tingkat Pendidikan Orang Tua",
y = "Frekuensi") +
theme(plot.title = element_text(hjust = 0.3))
Interpretasi: Dari bar chart di atas, dapat disimpulkan bahwa frekuensi tingkat pendidikan dari orang tua siswa paling banyak terdapat pada tingkat some college. Kemudian secara berturut-turut diikuti oleh tingkat pendidikan associate’s degree (setara D3), high school (SMP), some high school (SMA), bachelor’s degree (setara S1), dan dengan frekuensi paling sedikit terdapat pada tingkat master’s degree (setara S2).
Violin plot diperoleh dari gabungan density plot dan boxplot. Badan biola dibangun dari density plot dan pencerminannya sehingga terkesan membentuk badan biola yang simetris. Di tengah biola ditambahkan boxplot yang menyerupai senar biolanya.
#mendefinisikan variable baru
NewTable <-
mutate(DataSource, value = (math.score+writing.score+reading.score)/3)
#memanggil data dari variable baru
head(NewTable)
## gender race.ethnicity eduparent lunch test.preparation.course
## 1 female group B bachelor's degree standard none
## 2 female group C some college standard completed
## 3 female group B master's degree standard none
## 4 male group A associate's degree free/reduced none
## 5 male group C some college standard none
## 6 female group B associate's degree standard none
## math.score reading.score writing.score value
## 1 72 72 74 72.66667
## 2 69 90 88 82.33333
## 3 90 95 93 92.66667
## 4 47 57 44 49.33333
## 5 76 78 75 76.33333
## 6 71 83 78 77.33333
Berikut contoh syntax yang dapat digunakan melalui library ggplot2:
#violin plot
ggplot(NewTable, aes(x=eduparent, y=value, fill(eduparent))) +
geom_violin(aes(fill=eduparent), trim=FALSE) +
geom_boxplot(width=0.3) +
scale_fill_manual(values=c("#FF6363", "#FFAB76", "#FFFDA2",
"#BAFFB4", "#77E4D4", "#998CEB")) +
labs(title = "Sebaran Nilai Rata-Rata berdasarakan Tingkat Pendidikan Orang Tua",
x = "Tingkat Pendidikan Orang Tua",
y = "Nilai") +
theme(plot.title = element_text(hjust = 0.5), legend.position="right")
Interpretasi: Dari violin plot di atas dapat dilihat sebaran dari nilai rata-rata tiga ujian (matematika, membaca, dan menulis) yang dikelompokkan berdasarkan tingkat pendidikan orang tua. Semakin cembung violin plot, maka kepadatan dari datanya akan semakin besar. Dapat terlihat bahwa pada tingkat pendidikan master’s degree mempunyai kepadatan data yang paling sedikit dan pada tingkat pendidikan high school mempunyai kepadatan data yang paling besar. Dapat terlihat juga nilai pencilan paling rendah terdapat pada plot berwarna ungu atau pada tingkat pendidikan high school. Selain itu, berdasarkan boxplot dapat diamati pula bahwa nilai median tertinggi berada pada plot berwarna hijau muda atau pada tingkat pendidikan master’s degree.
Dot plot atau plot titik merupakan penayangan grafik dwi-dimensi dari objek yang menujukkan karakteristik kuantitatifnya. Satu sumbu (sumbu datar) mencantumkan nilai kuantitatif yang akan diplotkan. Sumbu lainnya (sumbu tegak) menunjukkan label yang berhubungan dengan setiap nilai numeriknya.
Berikut contoh syntax yang dapat digunakan melalui library ggplot2:
#dot plot
ggplot(NewTable, aes(x = value)) +
geom_dotplot(dotsize=0.2) +
scale_y_continuous(NULL, breaks=NULL) +
theme(plot.title = element_text(hjust = 0.5)) +
labs(title = "Sebaran Nilai Rata-Rata Siswa", x="Nilai Rata-Rata")
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
Interpretasi: Berdasarkan dot plot di atas, dapat diketahui sebaran nilai rata-rata dari ketiga ujian (matematika, membaca, dan menulis) mayoritas berada pada rentang 60-80. Tidak sedikit pula siswa yang mendapatkan nilai pada rentang 80-100. Walaupun demikian, masih terdapat nilai yang berada cukup jauh dari rentang tersebut, yakni terdapat pada rentang 0-25.
Penyajian dengan batang yang ditampilkan secara berkelompok dapat pula dilakukan dengan menumpuk batang-batang tersebut. Batang dari satu kategori di kelompok yang sama diletakkan di atas barang dari kategori lainnya. Penyajian ini dikenal sebagai stacked-bar chart.
Berikut contoh syntax yang dapat digunakan melalui library ggplot2:
#stacked-bar chart
ggplot(DataSource, aes(x=reorder(race.ethnicity, -table(race.ethnicity)[race.ethnicity]), fill=eduparent)) +
geom_bar() +
scale_fill_manual(values=c("#FF6363", "#FFAB76", "#FFFDA2",
"#BAFFB4","#77E4D4", "#998CEB")) +
theme(plot.title = element_text(hjust = 0.5), legend.position="right") +
labs(title= "Sebaran Ras/Etnis berdasarkan Pendidikan Orang Tua", x="Ras/Etnis", y="Frekuensi")
Interpretasi: Dari Stacked-Bar chart di atas, dapat diketahui sebaran bahwa pada grup C memiliki frekuensi yang paling banyak dan grup A memiliki frekuensi yang paling sedikit dibandingkan dengan grup-grup yang lain. Pada grup A, tingkat pendidikan some high school memiliki frekuensi yang paling banyak. Pada grup B, tingkat pendidikan associate’s degree memiliki frekuensi yang paling banyak. Pada grup C, tingkat pendidikan associate’s degree memiliki frekuensi yang paling banyak. Padaa grup D, tingkat pendidikan some college memiliki frekuensi yang paling banyak. Sedangkan pada grup E, tingkat pendidikan associate’s degree memiliki frekuensi yang paling banyak. Walaupun begitu, tingkat pendidikan master’s degree memiliki frekuensi yang paling sedikit di semua grup.
Plot alternatif dari bar chart adalah lollipop chart. Seperti namanya, plot ini terinspirasi dari permen lolipop.
Berikut contoh syntax yang dapat digunakan melalui library ggplot2:
#membuat variable baru
DataSource %>%
group_by(gender) %>%
summarise(rerata = mean((math.score+writing.score+reading.score)/3)) %>%
#lollipop chart
ggplot(aes(x=gender, y=rerata)) +
geom_point(size = 7, colour = c("#FF6363","#FFAB76")) +
geom_segment(aes(x=gender, xend=gender, y=0, yend=rerata), color=c("#FF6363","#FFAB76"))+
geom_label(aes(gender, rerata+1, label = signif(rerata,3)),
colour = "black", nudge_x =0.15, size=5) +
labs( y= "Rata-rata Nilai", x="Jenis Kelamin") +
theme(axis.text.x = element_text(angle=20, vjust=0.3, color="black")) +
ggtitle("Rata-rata Nilai Berdasarkan Jenis Kelamin") +
theme(plot.title = element_text(hjust = 0.5))
Interpretasi: Berdasarkan lollipop chart di atas, didapatkan informasi bahwa siswa berjenis kelamin perempuan memiliki rata-rata dari tiga skor (matematika, membaca, dan menulis) lebih tinggi dengan nilai 69.6 daripada siswa berjenis kelamin laki-laki yang memiliki nilai 65.8. Hal ini menunjukkan bahwa mayoritas siswa perempuan lebih unggul daripada siswa laki-laki dalam bidang matematika, membaca, dan menulis.