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

dataframe <- read.csv("C:/Users/Asus/Downloads/StudentsPerformance.csv")
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

total <- table(dataframe$gender)
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

plotdata <- dataframe %>%
  group_by(race.ethnicity, gender) %>%
  dplyr::summarize(n = n()) %>%
  mutate(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

total <- table(dataframe$race.ethnicity)
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.

x1 <- dataframe %>% 
    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")

x1 %>% 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",
    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

jumlah <- table(x1$race.ethnicity)
persentase <- data.frame(jumlah/total)
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 <- dataframe%>%mutate(rataan=(math.score+reading.score+writing.score)/3)
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

total <- table(dataframe$parental.level.of.education)
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

df <- dataframe %>% 
    group_by(parental.level.of.education) %>%
    summarise(testmean= (mean(math.score)+mean(writing.score)+
                           mean(reading.score))/3)
   
df %>% ggplot(data = ., aes(x = parental.level.of.education, y = testmean, 
    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

total <- table(dataframe$test.preparation.course)
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

dataframe %>% group_by(test.preparation.course) %>%
    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

dataframe %>% group_by(test.preparation.course) %>%
    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.

Bar Chart Nilai Ujian Menulis Siswa Berdasarkan Tingkat Pendidikan Orang Tua

dataframe %>% group_by(test.preparation.course) %>%
    summarise(mathMean = mean(math.score),readingMean =  mean(reading.score),
              writingMean = mean(writing.score)) %>%
    ggplot(data = ., aes(x = test.preparation.course, y = writingMean,fill=test.preparation.course)) +geom_bar(stat = "identity",color="black")+
  labs(title="Bar Chart Rata-rata Nilai Menulis Berdasarkan Kursus Persiapan Ujian",x="Kursus Persiapan Ujian",y="Rata-Rata Nilai Menulis",
       fill="Kursus Persiapan Ujian")+
  scale_fill_manual(values=c( "yellow", "orange"))+theme_dark()

Berdasarkan Barplot di atas dapat disimpulkan bahwa kelompok siswa yang mengikuti kursus persiapan ujian memiliki nilai rataan ujian menulis yang lebih tinggi daripada yang tidak mengikuti.

Kesimpulan dari plot di atas hanyalah dugaan, perlu dilakukan analisis lebih lanjut apakah Kursus Persiapan Ujian berpengaruh signifikan terhadap Nilai Ujian Siswa. Dapat menggunakan uji T untuk mengetahui perbedaan pada kedua kelompok siswa tersebut.

Visualiasai dan Eksplorasi Variabel Lunch

Barchart Total Siswa Berdasarkan Porsi Makan Siang

total <- table(dataframe$lunch)
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

dataframe %>% group_by(lunch) %>%
    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.