#Tugas Visualisasi #Import Data #Diberi data dari kaggle sebagai berikut : #Student exam scores [Extended Data] ( https://www.kaggle.com/datasets/desalegngeb/students-exam-scores?resource=download )
chooseCRANmirror(graphics = FALSE, ind = 1)
install.packages("tidyverse")
## package 'tidyverse' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\AJENG\AppData\Local\Temp\RtmpY7G2Pv\downloaded_packages
install.packages("ggplot2")
## package 'ggplot2' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\AJENG\AppData\Local\Temp\RtmpY7G2Pv\downloaded_packages
install.packages("dplyr")
## package 'dplyr' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\AJENG\AppData\Local\Temp\RtmpY7G2Pv\downloaded_packages
install.packages("rmarkdown")
## package 'rmarkdown' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\AJENG\AppData\Local\Temp\RtmpY7G2Pv\downloaded_packages
install.packages("knitr")
## package 'knitr' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\AJENG\AppData\Local\Temp\RtmpY7G2Pv\downloaded_packages
install.packages("DT")
## package 'DT' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\AJENG\AppData\Local\Temp\RtmpY7G2Pv\downloaded_packages
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'purrr' was built under R version 4.3.3
## Warning: package 'dplyr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ 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
library(ggplot2)
library(dplyr)
library(rmarkdown)
## Warning: package 'rmarkdown' was built under R version 4.3.3
library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
library(DT)
## Warning: package 'DT' was built under R version 4.3.3
data <- read.csv("C:\\Users\\AJENG\\Downloads\\TUGAS PSD RMD\\Expanded_data.csv")
head(data)
## X Gender EthnicGroup ParentEduc LunchType TestPrep
## 1 0 female bachelor's degree standard none
## 2 1 female group C some college standard
## 3 2 female group B master's degree standard none
## 4 3 male group A associate's degree free/reduced none
## 5 4 male group C some college standard none
## 6 5 female group B associate's degree standard none
## ParentMaritalStatus PracticeSport IsFirstChild NrSiblings TransportMeans
## 1 married regularly yes 3 school_bus
## 2 married sometimes yes 0
## 3 single sometimes yes 4 school_bus
## 4 married never no 1
## 5 married sometimes yes 0 school_bus
## 6 married regularly yes 1 school_bus
## WklyStudyHours MathScore ReadingScore WritingScore
## 1 < 5 71 71 74
## 2 5 - 10 69 90 88
## 3 < 5 87 93 91
## 4 5 - 10 45 56 42
## 5 5 - 10 76 78 75
## 6 5 - 10 73 84 79
#Ekplorasi data
str(data)
## 'data.frame': 30641 obs. of 15 variables:
## $ X : int 0 1 2 3 4 5 6 7 8 9 ...
## $ Gender : chr "female" "female" "female" "male" ...
## $ EthnicGroup : chr "" "group C" "group B" "group A" ...
## $ ParentEduc : chr "bachelor's degree" "some college" "master's degree" "associate's degree" ...
## $ LunchType : chr "standard" "standard" "standard" "free/reduced" ...
## $ TestPrep : chr "none" "" "none" "none" ...
## $ ParentMaritalStatus: chr "married" "married" "single" "married" ...
## $ PracticeSport : chr "regularly" "sometimes" "sometimes" "never" ...
## $ IsFirstChild : chr "yes" "yes" "yes" "no" ...
## $ NrSiblings : int 3 0 4 1 0 1 1 1 3 NA ...
## $ TransportMeans : chr "school_bus" "" "school_bus" "" ...
## $ WklyStudyHours : chr "< 5" "5 - 10" "< 5" "5 - 10" ...
## $ MathScore : int 71 69 87 45 76 73 85 41 65 37 ...
## $ ReadingScore : int 71 90 93 56 78 84 93 43 64 59 ...
## $ WritingScore : int 74 88 91 42 75 79 89 39 68 50 ...
summary(data)
## X Gender EthnicGroup ParentEduc
## Min. : 0.0 Length:30641 Length:30641 Length:30641
## 1st Qu.:249.0 Class :character Class :character Class :character
## Median :500.0 Mode :character Mode :character Mode :character
## Mean :499.6
## 3rd Qu.:750.0
## Max. :999.0
##
## LunchType TestPrep ParentMaritalStatus PracticeSport
## Length:30641 Length:30641 Length:30641 Length:30641
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## IsFirstChild NrSiblings TransportMeans WklyStudyHours
## Length:30641 Min. :0.000 Length:30641 Length:30641
## Class :character 1st Qu.:1.000 Class :character Class :character
## Mode :character Median :2.000 Mode :character Mode :character
## Mean :2.146
## 3rd Qu.:3.000
## Max. :7.000
## NA's :1572
## MathScore ReadingScore WritingScore
## Min. : 0.00 Min. : 10.00 Min. : 4.00
## 1st Qu.: 56.00 1st Qu.: 59.00 1st Qu.: 58.00
## Median : 67.00 Median : 70.00 Median : 69.00
## Mean : 66.56 Mean : 69.38 Mean : 68.42
## 3rd Qu.: 78.00 3rd Qu.: 80.00 3rd Qu.: 79.00
## Max. :100.00 Max. :100.00 Max. :100.00
##
sum(is.na(data))
## [1] 1572
colSums(is.na(data))
## X Gender EthnicGroup ParentEduc
## 0 0 0 0
## LunchType TestPrep ParentMaritalStatus PracticeSport
## 0 0 0 0
## IsFirstChild NrSiblings TransportMeans WklyStudyHours
## 0 1572 0 0
## MathScore ReadingScore WritingScore
## 0 0 0
NO 1. Periksa distribusi dari variabel math, reading dan writing score, cek apakah ada outlier
#Memeriksa distribusi dari variabel math, reading dan writing score
par(mfrow = c(1, 3)) # Membagi tampilan menjadi 3 grafik
hist(data$MathScore, main = "Distribusi Skor Matematika", xlab = "Skor Matematika", col = "pink", border = "maroon")
hist(data$ReadingScore, main = "Distribusi Skor Membaca", xlab = "Skor Membaca", col = "pink", border = "maroon")
hist(data$WritingScore, main = "Distribusi Skor Menulis", xlab = "Skor Menulis", col = "pink", border = "maroon")
#Pengecekan apakah ada outlier
par(mfrow = c(1, 3))
boxplot(data$MathScore, main = "Outlier Skor Matematika", col = "maroon")
boxplot(data$ReadingScore, main = "Outlier Skor Membaca", col = "maroon")
boxplot(data$WritingScore, main = "Outlier Skor Menulis", col = "maroon")
INTEPRETASI
Berdasarkan kedua gambar di atas,
analisis dapat dilakukan terhadap distribusi nilai dan keberadaan
outlier pada skor matematika, membaca, dan menulis siswa.
Gambar
pertama menunjukkan histogram distribusi skor matematika, membaca, dan
menulis. Dari histogram tersebut, terlihat bahwa distribusi nilai
cenderung mengikuti pola distribusi normal dengan puncak yang berada
pada rentang skor 60-80. Skor matematika, membaca, dan menulis memiliki
pola yang mirip, dengan mayoritas siswa mendapatkan nilai di sekitar
nilai rata-rata dan jumlah siswa yang mendapatkan skor sangat rendah
atau sangat tinggi lebih sedikit. Ini menunjukkan bahwa secara umum,
skor siswa tidak terlalu bervariasi secara ekstrem.
Gambar kedua menunjukkan boxplot dari skor matematika dan membaca
untuk mendeteksi keberadaan outlier. Dari boxplot ini, terlihat bahwa
terdapat beberapa nilai yang jatuh di luar whisker, yang ditandai dengan
titik-titik di bawah boxplot. Nilai-nilai ini dapat dikategorikan
sebagai outlier, yang menunjukkan adanya siswa yang memiliki skor jauh
lebih rendah dibandingkan mayoritas siswa lainnya. Outlier ini perlu
dianalisis lebih lanjut apakah disebabkan oleh faktor eksternal seperti
kesalahan pengisian data atau memang merupakan representasi dari siswa
dengan kemampuan yang jauh lebih rendah dibandingkan lainnya.
Secara keseluruhan, analisis ini menunjukkan bahwa distribusi nilai
siswa cenderung normal dengan beberapa siswa yang memiliki skor jauh
lebih rendah dibandingkan mayoritas. Outlier yang ditemukan perlu
diperiksa lebih lanjut untuk menentukan apakah perlu dilakukan
penanganan seperti normalisasi data atau dibiarkan sebagai bagian dari
variasi alami dalam performa akademik siswa.
Outliner adalah data yang memiliki nilai ekstrem dan jauh berbeda
dari mayoritas data lainnya dalam suatu dataset. Outlier bisa muncul
karena berbagai alasan, seperti kesalahan input data, variasi alami,
atau adanya kondisi khusus yang memengaruhi data tersebut. Misalnya,
dalam data nilai ujian siswa, jika sebagian besar siswa mendapatkan
nilai antara 80 hingga 100, tetapi ada satu siswa yang mendapatkan nilai
30, maka nilai 30 tersebut dianggap sebagai outlier karena sangat
berbeda dari nilai lainnya.
Outlier dapat memengaruhi hasil
analisis statistik karena dapat menyebabkan rata-rata menjadi bias atau
distribusi data menjadi tidak normal. Oleh karena itu, penting untuk
mendeteksi outlier dengan metode seperti boxplot, Interquartile Range
(IQR), atau Z-score. Setelah outlier ditemukan, langkah selanjutnya
adalah menganalisis apakah data tersebut memang valid atau hanya
merupakan kesalahan. Jika merupakan kesalahan input, outlier bisa
diperbaiki atau dihapus, tetapi jika memang valid, maka bisa dilakukan
transformasi data atau pendekatan lain untuk mengurangi dampaknya dalam
analisis.
table(data$WklyStudyHours)
##
## < 5 > 10 5 - 10
## 955 8238 5202 16246
ggplot(data, aes(x = WklyStudyHours)) +
geom_bar(fill = "maroon") +
labs(title = "Distribusi Jam Belajar", x = "Jam Belajar per Minggu", y = "Jumlah Siswa")
INTEPRETASI
Gambar di atas menunjukkan distribusi
jumlah siswa berdasarkan jam belajar per minggu. Dari diagram batang
tersebut, terlihat bahwa mayoritas siswa menghabiskan waktu belajar
antara 5 hingga 10 jam per minggu, dengan jumlah siswa
dalam kategori ini jauh lebih banyak dibandingkan kategori
lainnya.
Kategori “< 5 jam” juga memiliki jumlah siswa
yang cukup signifikan, meskipun lebih sedikit dibandingkan kategori
“5 - 10 jam”. Sementara itu, kategori “> 10
jam” memiliki jumlah siswa yang lebih sedikit dibandingkan
kategori lainnya, yang menunjukkan bahwa hanya sedikit siswa yang
belajar lebih dari 10 jam dalam seminggu.
Dari hasil ini, dapat disimpulkan bahwa sebagian besar siswa
belajar dalam rentang waktu yang moderat, yaitu 5 - 10 jam per minggu.
Hal ini mungkin mencerminkan kebiasaan belajar yang cukup seimbang
antara kegiatan akademik dan non-akademik. Siswa yang belajar kurang
dari 5 jam per minggu kemungkinan memiliki risiko yang lebih tinggi
dalam pencapaian akademik yang rendah, sedangkan siswa yang belajar
lebih dari 10 jam per minggu mungkin lebih fokus pada akademik tetapi
jumlahnya relatif sedikit.
data %>%
group_by(EthnicGroup) %>%
summarise(MeanMath = mean(MathScore, na.rm = TRUE),
MeanReading = mean(ReadingScore, na.rm = TRUE),
MeanWriting = mean(WritingScore, na.rm = TRUE)) %>%
pivot_longer(cols = -EthnicGroup, names_to = "Subject", values_to = "Score") %>%
ggplot(aes(x = EthnicGroup, y = Score, fill = Subject)) +
geom_bar(stat = "identity", position = "dodge")
labs(title = "Rata-rata Skor Berdasarkan Ethnic", x = "Ethnic", y = "Rata-rata Skor")
## $x
## [1] "Ethnic"
##
## $y
## [1] "Rata-rata Skor"
##
## $title
## [1] "Rata-rata Skor Berdasarkan Ethnic"
##
## attr(,"class")
## [1] "labels"
INTEPRETASI
Gambar di atas menunjukkan
perbandingan rata-rata skor matematika, membaca, dan menulis berdasarkan
kelompok etnis. Tiga warna dalam diagram batang merepresentasikan mata
pelajaran yang berbeda: merah untuk matematika (MeanMath), hijau
untuk membaca (MeanReading), dan biru untuk menulis
(MeanWriting).
Dari grafik, terlihat bahwa setiap kelompok
etnis memiliki pola yang relatif mirip, di mana skor membaca dan menulis
cenderung lebih tinggi dibandingkan dengan skor matematika. Secara umum,
kelompok E memiliki rata-rata skor tertinggi di semua
mata pelajaran dibandingkan kelompok etnis lainnya, sedangkan kelompok
A memiliki rata-rata skor terendah.
Perbedaan antar kelompok etnis ini dapat mencerminkan berbagai
faktor seperti akses terhadap pendidikan, lingkungan belajar, atau
kebiasaan akademik yang berbeda di antara kelompok tersebut. Namun,
perbedaan ini tidak terlalu ekstrem, menunjukkan bahwa mayoritas siswa
dari berbagai kelompok memiliki kemampuan yang relatif seimbang dalam
ketiga mata pelajaran tersebut.
Kesimpulannya, kelompok etnis berperan dalam distribusi skor
akademik, dengan kelompok E unggul dalam semua mata
pelajaran, sementara kelompok A memiliki rata-rata skor
yang lebih rendah. Analisis lebih lanjut dapat dilakukan untuk memahami
faktor-faktor yang memengaruhi perbedaan ini, seperti latar belakang
sosial-ekonomi atau akses ke sumber daya pendidikan.
library(tidyverse)
corr_matrix <- cor(data[, c("MathScore", "ReadingScore", "WritingScore")], use = "complete.obs")
corr_long <- as.data.frame(as.table(corr_matrix))
# Membuat heatmap korelasi
ggplot(corr_long, aes(Var1, Var2, fill = Freq)) +
geom_tile() +
geom_text(aes(label = round(Freq, 2)), color = "white", size = 5) +
scale_fill_gradient2(low = "blue", mid = "white", high = "red", midpoint = 0) +
labs(title = "Correlation Heatmap", x = "", y = "") +
theme_minimal()
INTEPRETASI
Gambar di atas merupakan
heatmap korelasi yang menunjukkan hubungan antara tiga
variabel akademik yaitu: MathScore (Skor Matematika),
ReadingScore (Skor Membaca), dan WritingScore (Skor
Menulis).
Dari heatmap ini, terlihat bahwa semua korelasi bernilai positif
dan cukup tinggi, yang berarti bahwa jika nilai dalam satu mata
pelajaran tinggi, maka nilai dalam mata pelajaran lain juga cenderung
tinggi.
- Korelasi tertinggi terdapat antara ReadingScore dan
WritingScore (0.95), menunjukkan bahwa siswa yang memiliki
kemampuan membaca yang baik biasanya juga memiliki kemampuan menulis
yang baik.
- Korelasi antara MathScore dan ReadingScore adalah
0.82, yang juga cukup tinggi, tetapi tidak sekuat hubungan
antara membaca dan menulis. Ini menunjukkan bahwa kemampuan membaca bisa
sedikit mempengaruhi performa dalam matematika.
- Korelasi antara MathScore dan WritingScore adalah
0.81, yang berarti bahwa meskipun ada hubungan antara
keterampilan matematika dan menulis, hubungan ini lebih lemah
dibandingkan dengan korelasi membaca-menulis.
Dari hasil ini, dapat disimpulkan bahwa ada hubungan yang kuat
antara keterampilan membaca dan menulis, yang mungkin disebabkan oleh
keterampilan linguistik yang sama. Sementara itu, keterampilan
matematika juga berkorelasi dengan keduanya, tetapi dengan tingkat
hubungan yang sedikit lebih rendah.Hal ini dapat digunakan dalam
strategi pendidikan, misalnya dengan menekankan pembelajaran membaca
untuk membantu meningkatkan keterampilan menulis siswa. Namun,
matematika tetap memiliki karakteristik yang berbeda meskipun
berkorelasi dengan dua keterampilan lainnya.