Tugas 2 Visualisasi Data
Retrieve Data
Data yang digunakan pada publikasi kali ini adalah data student performance
yang merupakan data siswa Amerika Serikat. Data terdiri dari delapan peubah, yaitu jenis kelamin, ras/etnis, tingkat pendidikan orang tua, makan siang, kursus persiapan ujian, skor matematika, skor membaca, dan skor menulis.
Memanggil Library
Package yang digunakan adalah ggplot2
, dan dplyr
,namun di sini saya cukup memanggil package tidyverse
yang sudah mencakup ggplot2
dan dplyr
.Selain itu saya juga menggunakan library scales
. Jika belum menginstall package tersebut segera download dengan syntax install.packages("nama_packages")
install.packages("tidyverse")
library(tidyverse)
library(scales)
Deklarasi Data Frame
<- read.csv("C:/Users/Asus/Downloads/StudentsPerformance.csv")
dataframe colnames(dataframe)
## [1] "gender" "race.ethnicity"
## [3] "parental.level.of.education" "lunch"
## [5] "test.preparation.course" "math.score"
## [7] "reading.score" "writing.score"
head(dataframe)
## 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
Visualiasasi dan Eksplorasi Data
Eksplorasi dan Visualisasi Peubah Gender
Barplot Total Siswa Berdasarkan Gender
<- table(dataframe$gender)
total total
##
## female male
## 518 482
ggplot(dataframe,aes(x=gender,fill=gender))+
geom_bar(width = 0.7,color="black") +
labs(title="Total Siswa")+
theme_dark()+scale_fill_brewer(palette = "YlOrRd")
Jumlah siswa laki-laki dan perempuan secara keseluruhan hampir sama sehingga saya akan mengelompokan gender berdasarkan ras/etnis agar lebih merinci.
Stacked Bar Chart Proporsi Gender Siswa Berdasarkan Ras/Etnis
<- dataframe %>%
plotdata group_by(race.ethnicity, gender) %>%
::summarize(n = n()) %>%
dplyrmutate(pct = n/sum(n),
lbl = scales::percent(pct))
## `summarise()` has grouped output by 'race.ethnicity'. You can override using the `.groups` argument.
ggplot(plotdata,
aes(x = race.ethnicity,
y = pct,
fill = gender)) +
geom_bar(stat = "identity",
position = "fill",color="black") +
scale_y_continuous(breaks = seq(0, 1, .1),
label = percent)+
geom_text(aes(label = lbl),
size = 3,
position = position_stack(vjust = 0.5)) +
scale_fill_brewer(palette = "Spectral") +
theme_minimal() + # use a minimal theme
labs(y = "Percent",
fill = "Gender",
x = "Ras/Etnis",
title = "Bar Chart Proporsi Gender berdasarkan Ras/Etnis") +
theme_dark()
Berdasarkan barplot di atas proporsi gender laki-laki pada grup A, D, dan E lebih besar dari proporsi gender perempuan.
Eksplorasi dan Visualisasi Nilai Ujian Berdasarkan Kelompok Ras/Etnis
Bar Chart Total Siswa Berdasarkan Ras/Etnis
<- table(dataframe$race.ethnicity)
total total
##
## group A group B group C group D group E
## 89 190 319 262 140
ggplot(dataframe,aes(x=race.ethnicity,fill=race.ethnicity))+
geom_bar(width = 0.7,color="black") +
labs(title="Total Siswa")+
theme_dark()+scale_fill_brewer(palette = "Blues")
Kelompok Ras C mendominasi dengan jumlah 319 siswa disusul kelompok ras D. Kelompok ras A adalah kelompok ras Minoritas di dalam sekolah tersebut.
Barchart Nilai Ujian Berdasarkan Kelompok Ras/Etnis
%>%
dataframe group_by(race.ethnicity) %>%
summarise(mathMean = mean(math.score),readingMean = mean(reading.score),
writingMean = mean(writing.score)) %>% ggplot(data = ., aes(x = race.ethnicity, y = mathMean,
fill = race.ethnicity)) + geom_bar(stat = "identity",color="black") +
labs(title="Barchart Nilai Ujian Matematika Berdasarkan Kelompok Ras/Etnis",
x= "Kelompok Ras/Etnis",y ="Rata-rata Nilai Matematika") +theme_dark()+scale_fill_brewer(palette = "Blues")
%>%
dataframe group_by(race.ethnicity) %>%
summarise(mathMean = mean(math.score),readingMean = mean(reading.score),
writingMean = mean(writing.score)) %>% ggplot(data = ., aes(x = race.ethnicity, y = readingMean,
fill = race.ethnicity)) + geom_bar(stat = "identity",color="black") +
labs(title="Barchart Nilai Ujian Membaca Berdasarkan Kelompok Ras/Etnis",
x= "Kelompok Ras/Etnis",y ="Rata-rata Nilai Membaca") +theme_dark()+scale_fill_brewer(palette = "Greys")
%>%
dataframe group_by(race.ethnicity) %>%
summarise(mathMean = mean(math.score),readingMean = mean(reading.score),
writingMean = mean(writing.score)) %>% ggplot(data = ., aes(x = race.ethnicity, y = writingMean,
fill = race.ethnicity)) + geom_bar(stat = "identity",color="black") +
labs(title="Barchart Nilai Ujian Menulis Berdasarkan Kelompok Ras/Etnis",
x= "Kelompok Ras/Etnis",y ="Rata-rata Nilai Menulis")+theme_dark()+scale_fill_brewer(palette = "RdPu")
Secara umum visualisasi tersebut tidak menunjukan terdapat perbedaan nilai yang cukup besar dari kelima kelompok ras .Namun Kelompok E memiliki rata-rata nilai terbaik dari setiap pelajaran daripada kelompok dari ras lain walaupun populasi dari kelompok ras E bukan kelompok yang mendominasi secara jumlah.
Selanjutnya saya akan meninjau nilai perkelompok ras yang memiliki rata-rata ketiga pelajaran lebih 80.
<- dataframe %>%
x1 group_by(race.ethnicity) %>%
filter((math.score + writing.score + reading.score)/3 > 80 )
table(x1$race.ethnicity)
##
## group A group B group C group D group E
## 10 34 54 53 43
ggplot(dataframe,aes(x=race.ethnicity,fill=race.ethnicity))+
geom_bar(width = 0.7,color="black") +
labs(title="Total Siswa")+
theme_dark()+scale_fill_brewer(palette = "Blues")
%>% ggplot() + geom_bar(aes(x1$race.ethnicity,fill = x1$race.ethnicity),color="black") +labs(title="Barchart Siswa dengan Nilai Rata-Rata > 80",x="Kelompok Ras/Etnis",
x1 y="Total Siswa")+theme_dark()+scale_fill_brewer(palette = "Diamond\nclarity")
## Warning in pal_name(palette, type): Unknown palette Diamond
## clarity
Kelompok Ras C dan kelompok Ras D memimpin jika ditinjau dari segi jumlah. Namun akan lebih valid jika yang ditampilkan adalah persentase proporsi dari setiap kelompok ras
<- table(x1$race.ethnicity)
jumlah <- data.frame(jumlah/total)
persentase persentase
## Var1 Freq
## 1 group A 0.1123596
## 2 group B 0.1789474
## 3 group C 0.1692790
## 4 group D 0.2022901
## 5 group E 0.3071429
plot(persentase)
Ternyata Proporsi kelompok ras E memimpin dengan persentase proporsi 30,71 % disusul dengan Kelompok Ras D dan C. Insight yang dapat diambil dari visualisasi ini adalah Kelompok ras lain (khususnya kelompok ras A) cenderung tertinggal dengan kelompok ras E sehingga sekolah perlu meninjau ulang metode pembelajaran yang cocok untuk kelima kelompok ras ataupun memberikan perlakuan khusus kepada siswa dengan nilai rendah pada setiap kelompok ras.
Boxplot Persebaran Nilai Matematika Berdasarkan Ras/Etnis
<- dataframe%>%mutate(rataan=(math.score+reading.score+writing.score)/3)
dataframe ggplot(dataframe, mapping=aes(x=race.ethnicity, y=rataan, fill=race.ethnicity))+geom_boxplot()+ labs(title="Boxplot Persebaran Nilai Matematika Berdasarkan Ras/Etnis",x="Ras/Etnis",y="Rataan Nilai",fill="Ras/Etnis")+coord_flip()+scale_fill_brewer(palette="Blues")+theme_grey()
Pada kelompok ras B,C,D,E terdapat siswa yang memiliki nilai pencilan bawah pada distribusi nilai tiap kelompok. Hal ini menunjukkan masih ada kesenjangan antar tiap siswa pada tiap kelompok ras. Kelompok ras A cenderung memiliki distribusi nilai yang normal. Kelompok E memiliki beberapa nilai pencilan bawah namun tidak terlalu jauh dari Pagar Dalam Bawah sehingga masih dapat dikategorikan pencilan minor.
Eksplorasi dan Visualisasi Tingkat Pendidikan Orang Tua
Bar Chart Total Variabel Parental Level of Education
<- table(dataframe$parental.level.of.education)
total total
##
## associate's degree bachelor's degree high school master's degree
## 222 118 196 59
## some college some high school
## 226 179
ggplot(dataframe,aes(x=parental.level.of.education,fill=parental.level.of.education))+
geom_bar(width = 0.7,color="black") +
labs(title="Total Siswa Berdasarkan Tingkat Pendidikan Orang Tua")+
theme_dark()+scale_fill_brewer(palette = "GnBu")+labs(x="Tingkat Pendidikan Orang Tua",y="jumlah",fill="Tingkat Pendidikan Orang Tua")
Mayoritas siswa memiliki orang tua dengan pendidikan some college dan associate’s degree dan hanya sedikit siswa yang orang tuanya memiliki pendidikan magister.
Bar Chart Rataan Nilai Ujian Siswa Berdasarkan Pendidikan Orang Tua
<- dataframe %>%
df group_by(parental.level.of.education) %>%
summarise(testmean= (mean(math.score)+mean(writing.score)+
mean(reading.score))/3)
%>% ggplot(data = ., aes(x = parental.level.of.education, y = testmean,
df fill = parental.level.of.education)) + geom_bar(stat = "identity",color="black") +
labs(title="Rata-Rata Nilai Siswa ",subtitle = "Berdasarkan Tingkat Pendidikan Orang Tua",x=" Tingkat Pendidikan Orang Tua",
y="Rata-Rata Ujian",fill="Tingkat Pendidikan Orang Tua")+theme_dark()+scale_fill_brewer(palette = "Oranges")
Kelompok Siswa yang memiliki orang tua dengan pendidikan Magister memiliki nilai rata-rata ujian tertinggi daripada kelompok siswa lain. Diduga terdapat adanya indikasi pengaruh Tingkat Pendidikan Orang Tua terhadap skor siswa. Dapat dilakukan analisis lanjut dengan menggunakan Uji F dan Tabel ANOVA.
Visualisasi dan Eksplorasi Variabel Test Preparation
Bar Chart Total Siswa Berdasarkan Kursus Persiapan Ujian
<- table(dataframe$test.preparation.course)
total total
##
## completed none
## 358 642
ggplot(dataframe,aes(x=test.preparation.course,fill=test.preparation.course))+
geom_bar(width = 0.7,color="black") +
labs(title="Total Siswa Berdasarkan Kursus Persiapan Ujian")+
theme_dark()+scale_fill_brewer(palette = "YlOrRd")+labs(x="Kursus Persiapan Ujian",y="jumlah",fill="Kursus Persiapan Ujian")
Terdapat 358 siswa yang telah mengikuti kursus persiapan ujian dan 642 siswa yang tidak mengikuti kursus persiapan ujian. Akan ditinjau lebih lanjut apakah kelompok siswa yang mengikuti kursus persiapan ujian memiliki rataan nilai yang lebih tinggi .
BarChart Nilai Matematika Siswa Berdasarkan Tingkat Pendidikan Orang Tua
%>% group_by(test.preparation.course) %>%
dataframe summarise(mathMean = mean(math.score),readingMean = mean(reading.score),
writingMean = mean(writing.score)) %>%
ggplot(data = ., aes(x = test.preparation.course, y = mathMean,fill=test.preparation.course)) +geom_bar(stat = "identity",color="black")+
labs(title="Bar Chart Rata-rata Nilai Matematika Berdasarkan Kursus Persiapan Ujian",x="Kursus Persiapan Ujian",y="Rata-Rata Nilai Matematika",
fill="Kursus Persiapan Ujian")+
scale_fill_manual(values=c( "slateblue4", "green3")) +theme_dark()
Berdasarkan Barplot di atas dapat disimpulkan bahwa kelompok siswa yang mengikuti kursus persiapan ujian memiliki nilai rataan matematika yang lebih tinggi daripada yang tidak mengikuti.
Bar Chart Nilai Ujian Membaca Siswa Berdasarkan Tingkat Pendidikan Orang Tua
%>% group_by(test.preparation.course) %>%
dataframe summarise(mathMean = mean(math.score),readingMean = mean(reading.score),
writingMean = mean(writing.score)) %>%
ggplot(data = ., aes(x = test.preparation.course, y = readingMean,fill=test.preparation.course)) +geom_bar(stat = "identity",color="black")+
labs(title="Bar Chart Rata-rata Nilai Membaca Berdasarkan Kursus Persiapan Ujian",x="Kursus Persiapan Ujian",y="Rata-Rata Nilai Membaca",
fill="Kursus Persiapan Ujian")+scale_fill_manual(values=c( "blue", "red")) +theme_dark()
Berdasarkan Barplot di atas dapat disimpulkan bahwa kelompok siswa yang mengikuti kursus persiapan ujian memiliki nilai rataan ujian membaca yang lebih tinggi daripada yang tidak mengikuti.
Visualiasai dan Eksplorasi Variabel Lunch
Barchart Total Siswa Berdasarkan Porsi Makan Siang
<- table(dataframe$lunch)
total total
##
## free/reduced standard
## 355 645
ggplot(dataframe,aes(x=lunch,fill=lunch))+
geom_bar(width = 0.7,color="black") +
labs(title="Total Siswa Berdasarkan Porsi Makan Siang")+
scale_fill_brewer(palette = "Oranges")+theme_dark()
Berdasarkan plot di atas terdapat 645 siswa yang mendapatkan porsi makan siang standar dan 355 siswa yang mendapatkan porsi makan siang yang dikurangi.
Bar Chart Rataan Nilai Siswa Berdasarkan Porsi Makan Siang
%>% group_by(lunch) %>%
dataframe summarise(mathMean = mean(math.score),readingMean = mean(reading.score),
writingMean = mean(writing.score)) %>% mutate(meantest=(mathMean+readingMean+writingMean)/3) %>%
ggplot(data = ., aes(x = lunch, y = meantest,fill=lunch)) +geom_bar(stat = "identity",color="black")+labs(title="Bar Chart Rataan Nilai Siswa Berdasarkan Porsi Makan Siang",x="Makan Siang",y="Rata-Rata Nilai ",fill="Makan Siang")+scale_fill_brewer(palette = "Oranges")+theme_dark()
Rata nilai siswa yang mendapatkan porsi standar makan siang lebih tinggi daripada siswa yang mendapatkan porsi yang terkurangi. Diduga variabel Lunch berpengaruh pada skor ujian siswa. Perlu dilakan Uji T untuk mengetahui adanya perbedaan yang signifikan.
Visualisasi dan Eksplorasi Nilai Rataan Ujian
hist(dataframe$rataan, freq=FALSE, col="steelblue")
ggplot(dataframe, mapping=aes(x=gender, y=rataan, fill=gender))+geom_boxplot()+ labs(title="Boxplot Persebaran Rataan Nilai Ujian Berdasarkan Gender",x="Gender",y="Rataan Nilai",fill="Ras/Etnis")+coord_flip()+scale_fill_brewer(palette="Oranges")+theme_grey()
ggplot(dataframe, mapping=aes(x=lunch, y=rataan, fill=lunch))+geom_boxplot()+ labs(title="Boxplot Persebaran Rataan Nilai Ujian Berdasarkan Porsi Makan Siang",x="Porsi Makan Siang",y="Rataan Nilai",fill="Porsi Makan Siang")+coord_flip()+scale_fill_brewer(palette="Oranges")+theme_grey()
Berikut adalah plot untuk melihat persebaran data dari variabel Rataan Nilai Ujian. Data cenderung menjulur ke kiri dengan adanya indikasi pencilan bawah. Jika dilihat dari boxplot yang telah dikategorikan berdasarkan gender terdapat banyak nilai pencilan pada siswa perempuan .Pusat data dari kategori perempuan lebih tinggi daripada laki-laki. Kategori Laki-laki cenderung menyebar secara normal. Pada Boxplot yang telah dikategorikan berdasarkan Porsi Makan Siang Pusat data Kelompok dengan porsi makan siang standard lebih besar daripada porsi makan siang yang terkurangi.