library(dplyr)
## Warning: package 'dplyr' was built under R version 4.1.2
## 
## 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
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 stringr 1.4.0
## v tidyr   1.1.4     v forcats 0.5.1
## v readr   2.1.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::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggplot2)

Import Data

studentperf <- read.csv("C:/Users/ASUS/Downloads/DataTugas2.csv")

colnames(studentperf)[1] <- "Jenis Kelamin"
colnames(studentperf)[2] <- "Ras/Etnis"
colnames(studentperf)[3] <- "Pendidikan Orang Tua"
colnames(studentperf)[4] <- "Makan Siang"
colnames(studentperf)[5] <- "Kursus"
colnames(studentperf)[6] <- "Skor Matematika"
colnames(studentperf)[7] <- "Skor Membaca"
colnames(studentperf)[8] <- "Skor Menulis"

head(studentperf)
##   Jenis Kelamin Ras/Etnis Pendidikan Orang Tua  Makan Siang    Kursus
## 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
##   Skor Matematika Skor Membaca Skor Menulis
## 1              72           72           74
## 2              69           90           88
## 3              90           95           93
## 4              47           57           44
## 5              76           78           75
## 6              71           83           78

Data Jenis Kelamin Siswa

studentperf$`Jenis Kelamin`<- as.factor(studentperf$`Jenis Kelamin`)
studentperf %>%
  count(`Jenis Kelamin`) %>%
  mutate(`Jenis Kelamin` = fct_reorder(`Jenis Kelamin`, n , .desc = F)) %>%
  ggplot(aes(x=`Jenis Kelamin`, y=n, fill=`Jenis Kelamin`)) + 
  scale_fill_manual(values = c("#adad85", "#8a8a5c")) + 
  ggtitle("Jenis Kelamin Siswa") +
  labs(y="Jumlah Siswa", x="Jenis Kelamin") + 
  theme(plot.title = element_text(hjust = 0.5)) + geom_bar(stat = 'identity')

Barplot jenis kelamin siswa di atas menunjukkan bahwa siswa yang berjenis kelamin laki-laki (male) berjumlah lebih sedikit dibandingkan dengan siswa yang berjenis kelamin perempuan (female).

Data Ras/Etnis Siswa

studentperf$`Ras/Etnis` <- as.factor(studentperf$`Ras/Etnis`)
studentperf %>%
  count(`Ras/Etnis`) %>%
  ggplot(aes(x = `Ras/Etnis`, y=n, fill=`Ras/Etnis`)) +
  scale_fill_manual(values = c("#ad8585", "#ad9985", "#99ad85", "#8599ad", "#9985ad")) +
  ggtitle("Ras/Etnis Siswa") +
  labs(y="Jumlah Siswa", x="Ras/Etnis") +
  theme(plot.title = element_text(hjust = 0.5)) + geom_bar(stat = 'identity')

Barplot di atas memberi informasi tentang ras/etnis siswa yang berasal dari lima grup yang berbeda, yaitu grup A, grup B, grup C, grup D, dan grup E. Dapat ditarik kesimpulan bahwa siswa dengan ras grup C memiliki frekuensi terbesar, diikuti dengan ras grup D sebagai frekuensi terbesar kedua, grup B, grup E, dan grup A dengan frekuensi terkecil.

Data Tingkat Pendidikan Orang Tua

studentperf$`Pendidikan Orang Tua` <- as.factor(studentperf$`Pendidikan Orang Tua`)
studentperf %>%
  count(`Pendidikan Orang Tua`) %>%
  mutate(`Pendidikan Orang Tua`= fct_reorder(`Pendidikan Orang Tua`, n, .desc = T)) %>%
  ggplot(aes(x = `Pendidikan Orang Tua`, y=n, fill=`Pendidikan Orang Tua`)) +
  scale_fill_manual(values = c("#663300", "#b35900", "#e67300", "#ff8c1a", "#ffa64d", "#ffcc99")) +
  ggtitle("Tingkat Pendidikan Orang Tua") +
  labs(y="Frekuensi", x="Tingkat Pendidikan Orang Tua") +
  theme(plot.title = element_text(hjust = 0.5), axis.text.x = element_text(angle = 30, vjust = 0.8)) + geom_bar(stat = 'identity')

Barplot di atas memberi informasi tentang tingkat pendidikan orang tua siswa yang terdiri dari enam kategori, yaitu some college, D3, SMA, some high school, S1, dan S2. Barplot ditampilkan secara berurutan mulai dari frekuensi yang paling tinggi ke frekuensi yang paling rendah. Tingkat pendidikan orang tua siswa dengan frekuensi tertinggi adalah some college dengan jumlah 226 orang dan yang terendah adalah lulusan S2 dengan jumlah 59 orang.

Data Makan Siang Siswa

studentperf$`Makan Siang` <- as.factor(studentperf$`Makan Siang`)
studentperf %>%
  count(`Makan Siang`) %>%
  mutate(`Makan Siang` = fct_reorder(`Makan Siang`, n, .desc = F)) %>%
  ggplot(aes(x=`Makan Siang`, y=n, fill=`Makan Siang`)) +
  scale_fill_manual(values = c("#adad85", "#8a8a5c")) +
  ggtitle("Makan Siang") +
  labs(y="Jumlah Siswa", x="Makan Siang") +
  theme(plot.title = element_text(hjust = 0.5)) + geom_bar(stat = 'identity')

Barplot di atas merupakan hasil visualisasi dari data makan siang siswa. Dapat dilihat bahwa siswa yang makan siangnya berada pada kategori free/reduced memiliki frekuensi yang lebih rendah daripada siswa yang makan siangnya berada pada kategori standard.

Data Kursus Persiapan Ujian Siswa

studentperf$Kursus <- as.factor(studentperf$Kursus)
studentperf %>%
  count(Kursus) %>%
  mutate(Kursus = fct_reorder(Kursus, n, .desc = T)) %>%
  ggplot(aes(x=Kursus, y=n, fill=Kursus)) +
  scale_fill_manual(values = c("#75a3a3", "#b3cccc")) +
  ggtitle("Kursus Persiapan Ujian") +
  labs(y="Jumlah Siswa", x="Kursus Persiapan Ujian") +
  theme(plot.title = element_text(hjust = 0.5)) + geom_bar(stat = 'identity')

Barplot di atas memberi informasi tentang kursus persiapan ujian yang diikuti oleh siswa. Didapatkan kesimpulan bahwa lebih dari 600 siswa belum mengikuti kursus untuk persiapan ujian (none) dan lebih dari 350 siswa sudah mengikuti kursus persiapan ujian (completed).

Data Skor Matematika Siswa

ggplot(studentperf, aes(x=`Skor Matematika`)) +
  geom_dotplot(dotsize=0.3) +
  scale_y_continuous(NULL, breaks = NULL) +
  ggtitle("Skor Matematika Siswa") +
  labs(x="Skor Matematika") + 
  theme(plot.title = element_text(hjust = 0.5))
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.

library(vioplot)
## Warning: package 'vioplot' was built under R version 4.1.2
## Loading required package: sm
## Warning: package 'sm' was built under R version 4.1.2
## Package 'sm', version 2.2-5.7: type help(sm) for summary information
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.1.2
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
skormtk <- studentperf$`Skor Matematika`
vioplot(skormtk,
        col = "#4b3c77",
        rectCol = "#c4bbdd",
        lineCol = "black",
        colMed = "#8a77bb",
        border = "black",
        plotCentre = "points")

Visualisasi di atas menyajikan data skor Matematika siswa dalam bentuk dotplot dan violin plot. Dari visualisasi tersebut, dapat dilihat bahwa skor Matematika terendah yang didapatkan oleh siswa bernilai 0 serta skor tertinggi bernilai 100. Melalui violin plot di atas, dapat ditarik kesimpulan bahwa skor Matematika terbanyak yang diperoleh siswa berada pada rentang nilai 60 - 80.

Data Skor Membaca Siswa

ggplot(studentperf, aes(x=`Skor Membaca`)) +
  geom_dotplot(dotsize=0.3) +
  scale_y_continuous(NULL, breaks = NULL) +
  ggtitle("Skor Membaca Siswa") +
  labs(x="Skor Membaca") + 
  theme(plot.title = element_text(hjust = 0.5))
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.

skorbaca <- studentperf$`Skor Membaca`
vioplot(skorbaca,
        col = "#36597c",
        rectCol = "#cad9e8",
        lineCol = "black",
        colMed = "#5f8cb9",
        border = "black",
        plotCentre = "points")

Visualisasi di atas menyajikan data skor membaca siswa dalam bentuk dotplot dan violin plot. Dari visualisasi tersebut, dapat dilihat bahwa skor membaca terendah yang didapatkan oleh siswa bernilai sedikit dibawah 20 serta skor tertinggi bernilai 100. Melalui violin plot di atas, dapat ditarik kesimpulan bahwa skor siswa dalam membaca paling banyak berada pada rentang 60 - 80.

Data Skor Menulis Siswa

ggplot(studentperf, aes(x=`Skor Menulis`)) +
  geom_dotplot(dotsize=0.3) +
  scale_y_continuous(NULL, breaks = NULL) +
  ggtitle("Skor Menulis Siswa") +
  labs(x="Skor Menulis") + 
  theme(plot.title = element_text(hjust = 0.5))
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.

skortulis <- studentperf$`Skor Menulis`
vioplot(skortulis,
        col = "#5b6a2f",
        rectCol = "#ccd8a6",
        lineCol = "black",
        colMed = "#9ab14e",
        border = "black",
        plotCentre = "points")

Visualisasi di atas menyajikan data skor menulis siswa dalam bentuk dotplot dan violin plot. Dari visualisasi tersebut, dapat dilihat bahwa skor menulis terendah yang didapatkan oleh siswa berada di antara rentang 0 - 20, serta skor tertinggi bernilai 100. Melalui violin plot di atas, dapat ditarik kesimpulan bahwa skor menulis terbanyak yang diperoleh siswa berada pada rentang nilai 60 - 80.

Boxplot Perbandingan Skor Siswa Laki-Laki dan Perempuan

ggplot(studentperf,  aes(x=`Jenis Kelamin`, y=`Skor Matematika`, fill=`Jenis Kelamin`)) + 
  ggtitle("Skor Matematika Siswa") +
  scale_fill_manual(values = c("#ba9cc9", "#5388ac")) +
  theme(plot.title = element_text(hjust = 0.5)) +
geom_boxplot() 

ggplot(studentperf,  aes(x=`Jenis Kelamin`, y=`Skor Membaca`, fill=`Jenis Kelamin`)) + 
  ggtitle("Skor Membaca Siswa") +
  scale_fill_manual(values = c("#ba9cc9", "#5388ac")) +
  theme(plot.title = element_text(hjust = 0.5)) +
geom_boxplot() 

ggplot(studentperf,  aes(x=`Jenis Kelamin`, y=`Skor Menulis`, fill=`Jenis Kelamin`)) + 
  ggtitle("Skor Menulis Siswa") +
  scale_fill_manual(values = c("#ba9cc9", "#5388ac")) +
  theme(plot.title = element_text(hjust = 0.5)) +
geom_boxplot() 

Berdasarkan ketiga boxplot di atas, dapat dilihat bahwa rata-rata skor Matematika siswa laki-laki lebih tinggi daripada siswa perempuan. Akan tetapi, siswa perempuan lebih unggul dalam skor membaca dan menulis.

Rata-Rata Skor Matematika Siswa Berdasarkan Tingkat Pendidikan Orang Tua

studentperf %>%
  group_by(`Pendidikan Orang Tua`) %>%
  summarise(averagemtk = mean(`Skor Matematika`)) %>%
  ggplot(aes(x=`Pendidikan Orang Tua`, y=averagemtk)) +
  geom_point(size=5, col="orange") +
  geom_segment(aes(x=`Pendidikan Orang Tua`, xend=`Pendidikan Orang Tua`, y=0, yend=averagemtk)) +
  geom_label(aes(`Pendidikan Orang Tua`, averagemtk+1, label=signif(averagemtk, 4)), nudge_x = 0.4, size=3) +
  ggtitle("Rata-Rata Skor Matematika Siswa Berdasarkan Tingkat Pendidikan Orang Tua") +
  labs(x="Tingkat Pendidikan Orang Tua", y="Rata-Rata Skor") +
 theme(plot.title = element_text(hjust = 0.5), axis.text.x = element_text(angle = 25, vjust = 0.8))

Berdasarkan lollipop chart hubungan antara tingkat pendidikan orang tua dengan rata-rata nilai Matematika siswa di atas, diperoleh informasi bahwa rata-rata nilai Matematika tertinggi didapatkan oleh siswa yang orang tuanya merupakan lulusan S2, diikuti dengan S1, D3, some college, some high school, serta yang terendah adalah siswa yang orang tuanya merupakan lulusan SMA. Hal ini menunjukkan bahwa tingkat pendidikan orang tua memiliki pengaruh positif terhadap rata-rata skor Matematika siswa. Siswa yang tingkat pendidikan orang tuanya lebih tinggi cenderung mendapatkan skor Matematika yang tinggi pula.

Rata-Rata Skor Membaca Siswa Berdasarkan Tingkat Pendidikan Orang Tua

studentperf %>%
  group_by(`Pendidikan Orang Tua`) %>%
  summarise(averagebaca = mean(`Skor Membaca`)) %>%
  ggplot(aes(x=`Pendidikan Orang Tua`, y=averagebaca)) +
  geom_point(size=5, col="orange") +
  geom_segment(aes(x=`Pendidikan Orang Tua`, xend=`Pendidikan Orang Tua`, y=0, yend=averagebaca)) +
  geom_label(aes(`Pendidikan Orang Tua`, averagebaca+1, label=signif(averagebaca, 4)), nudge_x = 0.4, size=3) +
  ggtitle("Rata-Rata Skor Membaca Siswa Berdasarkan Tingkat Pendidikan Orang Tua") +
  labs(x="Tingkat Pendidikan Orang Tua", y="Rata-Rata Skor") +
 theme(plot.title = element_text(hjust = 0.5), axis.text.x = element_text(angle = 25, vjust = 0.8))

Berdasarkan lollipop chart hubungan antara tingkat pendidikan orang tua dengan rata-rata nilai membaca siswa di atas, diperoleh informasi bahwa rata-rata nilai membaca tertinggi didapatkan oleh siswa yang orang tuanya merupakan lulusan S2, diikuti dengan S1, D3, some college, some high school, serta yang terendah adalah siswa yang orang tuanya merupakan lulusan SMA. Hal ini menunjukkan bahwa tingkat pendidikan orang tua memiliki pengaruh positif terhadap rata-rata skor membaca siswa. Siswa yang tingkat pendidikan orang tuanya lebih tinggi cenderung mendapatkan skor membaca yang tinggi pula.

Rata-Rata Skor Menulis Siswa Berdasarkan Tingkat Pendidikan Orang Tua

studentperf %>%
  group_by(`Pendidikan Orang Tua`) %>%
  summarise(averagetulis = mean(`Skor Menulis`)) %>%
  ggplot(aes(x=`Pendidikan Orang Tua`, y=averagetulis)) +
  geom_point(size=5, col="orange") +
  geom_segment(aes(x=`Pendidikan Orang Tua`, xend=`Pendidikan Orang Tua`, y=0, yend=averagetulis)) +
  geom_label(aes(`Pendidikan Orang Tua`, averagetulis+1, label=signif(averagetulis, 4)), nudge_x = 0.4, size=3) +
  ggtitle("Rata-Rata Skor Menulis Siswa Berdasarkan Tingkat Pendidikan Orang Tua") +
  labs(x="Tingkat Pendidikan Orang Tua", y="Rata-Rata Skor") +
 theme(plot.title = element_text(hjust = 0.5), axis.text.x = element_text(angle = 25, vjust = 0.8))

Berdasarkan lollipop chart hubungan antara tingkat pendidikan orang tua dengan rata-rata nilai menulis siswa di atas, diperoleh informasi bahwa rata-rata nilai menulis tertinggi didapatkan oleh siswa yang orang tuanya merupakan lulusan S2, diikuti dengan S1, D3, some college, some high school, serta yang terendah adalah siswa yang orang tuanya merupakan lulusan SMA. Hal ini menunjukkan bahwa tingkat pendidikan orang tua memiliki pengaruh positif terhadap rata-rata skor menulis siswa. Siswa yang tingkat pendidikan orang tuanya lebih tinggi cenderung mendapatkan skor menulis yang tinggi pula.