NIM : 16231014
Berikut merupakan data yang digunakan pada soal, dan dibawah adalah kodingannya untuk mengimport data dengan menggunakan Rstudio:
data<- read.csv("C:/Users/ASUS/OneDrive/Hardiven/Semester 4/Sains Data/Tugas Minggu 6/Expanded_data_with_more_features.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
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 ...
Dalam mengetahui distribusi pada sebuah variabel, bisa menggunakan visualisasi histogram untuk mencari apakah data berdistribusi normal atau tidak. berikut merupakan kodingannya:
library(ggplot2)
library(gridExtra)
p1 <- ggplot(data, aes(x = MathScore)) +
geom_histogram(binwidth = 5, fill = "blue", alpha = 0.5, color = "black") +
geom_density(color = "red", size = 1) +
labs(title = "Distribusi Math Score", x = "Math Score", y = "Frequency") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
p2 <- ggplot(data, aes(x = ReadingScore)) +
geom_histogram(binwidth = 5, fill = "green", alpha = 0.5, color = "black") +
geom_density(color = "red", size = 1) +
labs(title = "Distribusi Reading Score", x = "Reading Score", y = "Frequency") +
theme_minimal()
p3 <- ggplot(data, aes(x = WritingScore)) +
geom_histogram(binwidth = 5, fill = "purple", alpha = 0.5, color = "black") +
geom_density(color = "red", size = 1) +
labs(title = "Distribusi Writing Score", x = "Writing Score", y = "Frequency") +
theme_minimal()
grid.arrange(p1, p2, p3, ncol = 3)
Pada visualisasi yang diperoleh didapatkan bahwa distribusi pada
variabel
math score,Reading score,dan
Writing Score memiliki distribusi yang tidak normal karna
grafik lebih condong ke sekalah kanan yang bisa dinyatakan bahwa setiap
variabel memiliki distrbusi tidak normal.
cek outliear:
p4 <- ggplot(data, aes(y = MathScore, x = "Math")) +
geom_boxplot(fill = "blue", alpha = 0.5) +
labs(title = "Boxplot Math Score", x = "", y = "Score") +
theme_minimal()
p5 <- ggplot(data, aes(y = ReadingScore, x = "Reading")) +
geom_boxplot(fill = "green", alpha = 0.5) +
labs(title = "Boxplot Reading Score", x = "", y = "Score") +
theme_minimal()
p6 <- ggplot(data, aes(y = WritingScore, x = "Writing")) +
geom_boxplot(fill = "purple", alpha = 0.5) +
labs(title = "Boxplot Writing Score", x = "", y = "Score") +
theme_minimal()
grid.arrange(p4, p5, p6, ncol = 3)
Pada gambar yang diperoleh pada setiap variabel
Math score,
reading score, dan Writing score didapatkan
bahwa terdapat data-data yang berasa di outlier dan outlier didapat
dilihat terdapat dibawah dari whisker menunjukkan outlier.
Outlier adalah data yang memiliki nilai yang sangat berbeda atau jauh dari sebagian besar data lainnya dalam suatu dataset. Outlier bisa terjadi karena kesalahan pengukuran, kesalahan input data, atau memang merupakan bagian dari variasi alami dalam data.
Cara Memeriksa Outlier:
Cara Menanggulangi Outlier:
Dalam menentukan jam belajar mana yang paling banyak dilakukan oleh
student, kita dapat menghitung frekuensi kategori pada data tersebut
dengan memilih variabel WklyStudyHours, dapat lihat pada
kodingan berikut:
study_hours <- names(which.max(table(data$WklyStudyHours)))
study_hours
## [1] "5 - 10"
Jadi, Kategori jam Belajar student yang paling banyak dilakukan
adalah "5-10" jam.
Dalam mengetahui perbedaan dari nilai student (math, writing, dan reading) per ethnic, dilakukan perhitungan untuk mengetahui nilai rata-rata variabel pada data dengan setiap kategori group pada variabel ethnic group. dilakukan perhitungan dengan R yaitu:
ethnic_scores <- aggregate(cbind(MathScore, ReadingScore, WritingScore) ~ EthnicGroup, data = data, FUN = mean)
ethnic_scores
## EthnicGroup MathScore ReadingScore WritingScore
## 1 66.18587 68.91576 67.90054
## 2 group A 62.99189 66.78774 65.25192
## 3 group B 63.49022 67.32046 65.89513
## 4 group C 64.69572 68.43823 66.99924
## 5 group D 67.66640 70.38225 70.89084
## 6 group E 75.29894 74.25142 72.67706
dan diperoleh hasil seperti diatas, sehingga dapat dilihat pada nilai para student terdapat beberapa student yang tidak memiliki group ethnisnya
dan berikut visualisasinya dengan menggunakan column chart agar dapat diketahui perbedaan nilai dari math, reading, dan writing scorenya lebih mudah:
library(ggplot2)
library(tidyr)
ethnic_scores_long <- pivot_longer(ethnic_scores, cols = -EthnicGroup, names_to = "Subject", values_to = "AverageScore")
ggplot(ethnic_scores_long, aes(x = EthnicGroup, y = AverageScore, fill = Subject)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Perbandingan Nilai Math, Reading, dan Writing per Ethnic Group",
x = "Ethnic Group", y = "Rata-rata Nilai") +
theme_minimal() +
scale_fill_manual(values = c("blue", "red", "green"))
dan pada visualisasi yang diperoleh dapat dilihat bahwa group E memiliki nilai rata-rata yang keseluruhannya menduduki nilai paling tinggi mulai dari nilai math, reading, dan writing score dari pada group lainnya, dan dilihat group A memiliki nilai yang lebih kecil dari group-group lainnya.
dalam membuat corelation heatmap digunakan R dalam membuatnya dengan
bantuan library ggplot2 .Berikut kodingan yang
dilakukan:
library(ggplot2)
library(reshape2)
##
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
##
## smiths
library(tidyr)
score_data <- data[, c("MathScore", "ReadingScore", "WritingScore")]
cor_matrix <- cor(score_data, use = "complete.obs")
melted_cor <- melt(cor_matrix)
ggplot(melted_cor, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white") +
geom_text(aes(label = round(value, 2)), color = "black", size = 5) +
scale_fill_gradient2(low = "blue", mid = "white", high = "red", midpoint = 0.5) +
labs(title = "Correlation Heatmap", x = "", y = "") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
dan diperoleh Hasil heatmap menunjukkan bahwa MathScore, ReadingScore, dan WritingScore memiliki korelasi positif yang kuat satu sama lain. Korelasi tertinggi terdapat antara ReadingScore dan WritingScore (0,95), menunjukkan hubungan sangat erat. MathScore juga berkorelasi cukup tinggi dengan ReadingScore (0,82) dan WritingScore (0,81).