Tugas Pengantar Sains Data A

1.Pendahuluan

Data Dictionary (coloumn description)

  • Gender: Gender of the student (male/female)
  • EthnicGroup: Ethnic group of the student (group A to E)
  • ParentEduc: Parent(s) education background (from some_highschool to master’s degree)
  • LunchType: School lunch type (standard or free/reduced)
  • TestPrep: Test preparation course followed (completed or none)
  • ParentMaritalStatus: Parent(s) marital status (married/single/widowed/divorced)
  • PracticeSport: How often the student parctice sport (never/sometimes/regularly))
  • IsFirstChild: If the child is first child in the family or not (yes/no)
  • NrSiblings: Number of siblings the student has (0 to 7)
  • TransportMeans: Means of transport to school (schoolbus/private)
  • WklyStudyHours: Weekly self-study hours(less that 5hrs; between 5 and 10hrs; more than 10hrs)
  • MathScore: math test score(0-100)
  • ReadingScore: reading test score(0-100)
  • WritingScore: writing test score(0-100)

2. Import Data

Data yang digunakan : kaggle

Expanded_data_with_more_features <- read.csv("C:/Users/User/Downloads/Expanded_data_with_more_features.csv/Expanded_data_with_more_features.csv")

#menampilkan struktur data
str(Expanded_data_with_more_features)
## '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 ...
#menampilkan 6 baris pertama data
head(Expanded_data_with_more_features)
##   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

3. Pertanyaan

1.Periksa distribusi dari variabel math, reading dan writing score, cek apakah ada outlier

2.Apa yang dimaksud dengan outlier? jelaskan cara memeriksa dan menanggulanginya?

3.Jam belajar manakah per minggu yang paling banyak dilakukan oleh student

4.Periksa perbedaan nilai student (math, writing, reading) per ethnic

5.cek korelasi antar variabel math, reading, and writing score menggunakan corelation heatmap

6.Periksa perbedaan antara nilai student per PracticeSport. Apakah rata-rata math score pada siswa menunjukkan nilai yang tinggi pada student yang sering berolahraga

4. Jawaban

1.

# Load library yang dibutuhkan
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.3.3
# Baca data
df <- read.csv("Expanded_data_with_more_features.csv")

df_long <- df %>%
  pivot_longer(cols = c(MathScore, ReadingScore, WritingScore),
               names_to = "Subject", values_to = "Score")

# Buat boxplot
ggplot(df_long, aes(x = Subject, y = Score, fill = Subject)) +
  geom_boxplot() +
  theme_minimal() +
  ggtitle("Boxplot Nilai Ujian: Math, Reading, Writing") +
  ylab("Score") +
  xlab("Subject") +
  theme(legend.position = "none")

1. Math Score (Merah)

  • Median (garis tengah kotak): sekitar 65–70, artinya setengah siswa mendapat nilai di atas dan setengahnya di bawah nilai itu.

  • Sebaran nilai (box dan whiskers): cukup lebar → menunjukkan variasi nilai yang tinggi antar siswa.

  • Banyak outlier di bawah (titik-titik hitam): menandakan ada banyak siswa yang nilainya rendah sekali (bahkan ada yang 0).

  • Insight: Mata pelajaran matematika punya penyebaran nilai paling luas dan banyak siswa dengan nilai sangat rendah.

2. Reading Score (Hijau)

  • Median: sekitar 70–75, sedikit lebih tinggi dari Math → artinya siswa secara umum lebih baik dalam membaca.

  • Whiskers lebih panjang ke bawah tapi ada lebih sedikit outlier dibanding Math → artinya masih ada nilai rendah, tapi tidak seekstrem Math.

  • Insight: Kemampuan membaca siswa cukup bagus secara umum, meskipun tetap ada sebagian kecil yang tertinggal.

3. Writing Score (Biru)

  • Median: sekitar 70, mirip dengan Reading.

  • Box mirip dengan Reading tapi jumlah outliernya hampir sama dengan Math → ada banyak siswa yang kesulitan menulis.

  • Insight: Nilai menulis cenderung lebih stabil dari Math, tapi jumlah siswa dengan nilai sangat rendah tetap tinggi.

2.

Outlier adalah nilai yang sangat berbeda atau jauh dari mayoritas data lainnya.

Cara memeriksa outlier

  • Dengan Visualisasi (Boxplot) Boxplot itu seperti grafik kotak yang nunjukin sebaran data. Titik-titik di luar garis (disebut “whiskers”) biasanya adalah outlier.

  • Dengan Statistik (IQR) Data dibagi menjadi 4 bagian (kuartil). Nilai yang jauh di bawah atau di atas dari kebanyakan data dianggap outlier. Biasanya, jika nilainya lebih kecil dari batas bawah atau lebih besar dari batas atas, itu outlier.

Cara Menanggulangi

  • Outlier adalah nilai yang menyimpang jauh dari mayoritas data lainnya dan dapat memengaruhi hasil analisis. Untuk menanggulanginya, adalah mengidentifikasi outlier menggunakan metode seperti boxplot, Z-score, atau IQR. Setelah terdeteksi, perlu mengecek penyebabnya, apakah karena kesalahan input, kondisi ekstrem, atau kasus khusus. Penanganan outlier bisa dilakukan dengan menghapus data yang tidak valid, mengganti nilai ekstrem dengan nilai mendekati (winsorizing), melakukan transformasi data, atau memisahkan analisis khusus untuk outlier. Namun, jika outlier mencerminkan kondisi nyata dan penting dalam konteks data, maka bisa dibiarkan tetap ada dengan catatan khusus dalam interpretasi.

3

# Load library
library(ggplot2)

# Baca file CSV
data <- read.csv("Expanded_data_with_more_features.csv")

# Hitung jumlah siswa berdasarkan kategori WklyStudyHours tanpa dplyr
jam_belajar_table <- table(data$WklyStudyHours)
jam_belajar_df <- as.data.frame(jam_belajar_table)
colnames(jam_belajar_df) <- c("WklyStudyHours", "Jumlah_Siswa")

# Urutkan dari jumlah siswa terbanyak
jam_belajar_df <- jam_belajar_df[order(-jam_belajar_df$Jumlah_Siswa), ]

# Tampilkan hasil
print(jam_belajar_df)
##   WklyStudyHours Jumlah_Siswa
## 4         5 - 10        16246
## 2            < 5         8238
## 3           > 10         5202
## 1                         955
# Visualisasikan dengan bar chart
ggplot(jam_belajar_df, aes(x = WklyStudyHours, y = Jumlah_Siswa, fill = WklyStudyHours)) +
  geom_bar(stat = "identity", width = 0.6) +
  labs(
    title = "Kategori Jam Belajar Siswa per Minggu",
    x = "Jam Belajar per Minggu",
    y = "Jumlah Siswa"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

Grafik tersebut menunjukkan jumlah siswa dalam tiga kategori waktu belajar per minggu:

< 5 jam/minggu Jumlah siswa yang belajar kurang dari 5 jam adalah paling sedikit. Ini menunjukkan hanya sebagian kecil siswa yang belajar sangat minim dalam seminggu.

5 - 10 jam/minggu Ini adalah kategori terbanyak, jumlah siswanya jauh lebih tinggi dibandingkan dua kategori lainnya. Artinya, mayoritas siswa berada di kelompok ini, yang artinya mereka memiliki kebiasaan belajar moderat, tidak terlalu sedikit, juga belum sangat intensif.

lebih dari 10 jam/minggu Jumlah siswa yang belajar lebih dari 10 jam perminggu cukup banyak, tapi masih lebih sedikit dari yang 5- 10 jam. Menunjukkan bahwa sebagian siswa memang punya waktu belajar tinggi, tapi bukan mayoritas.

4.

# Load library ggplot2 saja
library(ggplot2)

# Baca data
data <- read.csv("Expanded_data_with_more_features.csv")

# Ubah nama kolom jadi EthnicGroup
colnames(data)[colnames(data) == "race.ethnicity"] <- "EthnicGroup"

# Plot Math Score per Ethnic Group
ggplot(data, aes(x = EthnicGroup, y = MathScore)) +
  geom_boxplot(fill = "skyblue") +
  labs(title = "Math Score per Ethnic Group", x = "Ethnic Group", y = "Math Score") +
  theme_minimal()

# Plot Reading Score per Ethnic Group
ggplot(data, aes(x = EthnicGroup, y = ReadingScore)) +
  geom_boxplot(fill = "lightgreen") +
  labs(title = "Reading Score per Ethnic Group", x = "Ethnic Group", y = "Reading Score") +
  theme_minimal()

# Plot Writing Score per Ethnic Group
ggplot(data, aes(x = EthnicGroup, y = WritingScore)) +
  geom_boxplot(fill = "plum") +
  labs(title = "Writing Score per Ethnic Group", x = "Ethnic Group", y = "Writing Score") +
  theme_minimal()

- Intrepetasi Math Score

Berdasarkan boxplot Math Score per Ethnic Group pada gambar, dapat disimpulkan bahwa Group E memiliki nilai matematika tertinggi secara keseluruhan dibanding kelompok etnis lainnya, terlihat dari median (garis tengah boxplot) yang paling tinggi dan distribusi nilai yang cenderung lebih tinggi juga. Sementara itu, Group B dan Group C memiliki median nilai matematika yang lebih rendah, menunjukkan bahwa siswa dari kelompok ini cenderung memiliki performa yang lebih rendah dalam matematika dibanding kelompok lain. Selain itu, semua kelompok memiliki outlier di sisi bawah, artinya ada beberapa siswa di setiap kelompok yang nilainya jauh lebih rendah dari mayoritas. Namun secara keseluruhan, distribusi nilai cukup merata, dengan Group E unggul dan Group B/C agak tertinggal dari segi performa matematika.

- Intrepetasi Reading Score

Berdasarkan boxplot Reading Score per Ethnic Group, terlihat bahwa Group E kembali memiliki nilai membaca tertinggi secara keseluruhan, ditandai dengan median yang paling tinggi di antara semua kelompok etnis. Disusul oleh Group D dan Group A yang juga memiliki distribusi nilai membaca yang cukup baik. Sebaliknya, Group B dan Group C memiliki median yang paling rendah, menunjukkan bahwa rata-rata siswa dari kelompok ini memiliki performa membaca yang lebih rendah. Meskipun terdapat outlier (nilai sangat rendah) di semua kelompok, persebaran nilai secara umum menunjukkan tren serupa dengan skor matematika, yaitu Group E unggul, sementara Group B dan C cenderung tertinggal.

- Intrepetasi Writing Score

Berdasarkan boxplot Writing Score per Ethnic Group, terlihat bahwa Group E konsisten memiliki nilai tertinggi, dengan median skor menulis yang paling tinggi dibanding kelompok lain. Group D dan Group A juga menunjukkan performa menulis yang baik, meskipun sedikit di bawah Group E. Sementara itu, Group B dan Group C kembali menjadi kelompok dengan skor menulis terendah, dengan median yang paling rendah. Outlier masih muncul di semua kelompok, namun secara umum pola persebaran nilai menulis ini serupa dengan pola pada skor matematika dan membaca. Hal ini menunjukkan bahwa perbedaan performa antar kelompok etnis cukup konsisten di seluruh aspek akademik.

5.

# Install dan load ggplot2
if (!require("ggplot2")) install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)

# Baca data dari CSV
data <- read.csv("Expanded_data_with_more_features.csv")

# Ambil kolom nilai
scores <- data[, c("MathScore", "ReadingScore", "WritingScore")]

# Hitung matriks korelasi
cor_matrix <- cor(scores)

# Konversi ke data frame untuk visualisasi
cor_df <- as.data.frame(as.table(cor_matrix))  # dari matriks ke data frame

# Plot heatmap korelasi pakai ggplot2
ggplot(cor_df, aes(Var1, Var2, fill = Freq)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(low = "#6D9EC1", high = "#E46726", mid = "white",
                       midpoint = 0, limit = c(-1,1), space = "Lab",
                       name = "Correlation") +
  geom_text(aes(label = round(Freq, 2)), color = "black", size = 5) +
  theme_minimal() +
  labs(title = "Correlation Heatmap of Exam Scores",
       x = "", y = "") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Intrepetasi

Berdasarkan heatmap korelasi antara MathScore, ReadingScore, dan WritingScore, terlihat bahwa terdapat hubungan yang sangat kuat antara ReadingScore dan WritingScore dengan nilai korelasi sebesar 0.95, menunjukkan bahwa siswa yang memiliki kemampuan membaca yang baik cenderung juga memiliki kemampuan menulis yang tinggi. Selain itu, MathScore juga menunjukkan korelasi yang cukup kuat dengan ReadingScore (0.82) dan WritingScore (0.81), yang mengindikasikan bahwa meskipun keterampilan matematika berhubungan dengan kemampuan bahasa, kaitannya tidak sekuat antara membaca dan menulis. Secara keseluruhan, korelasi yang tinggi antar ketiga skor ini menunjukkan bahwa siswa yang unggul dalam satu bidang umumnya juga unggul dalam bidang lainnya, dan hal ini dapat dimanfaatkan untuk merancang intervensi pendidikan yang terintegrasi.

6.

# Load library
library(ggplot2)

# Baca file
data <- read.csv("Expanded_data_with_more_features.csv")

# Hitung rata-rata MathScore per PracticeSport tanpa dplyr
mean_math <- aggregate(MathScore ~ PracticeSport, data = data, FUN = mean)

# Tambahkan jumlah siswa per kategori juga (opsional, untuk info tambahan)
count_students <- as.data.frame(table(data$PracticeSport))
colnames(count_students) <- c("PracticeSport", "Jumlah_Siswa")

# Gabungkan ke satu data frame
summary_data <- merge(mean_math, count_students, by = "PracticeSport")

# Cetak tabel
print(summary_data)
##   PracticeSport MathScore Jumlah_Siswa
## 1                66.63708          631
## 2         never  64.17108         4004
## 3     regularly  67.83916        10793
## 4     sometimes  66.27483        15213
# Visualisasi rata-rata MathScore per kategori PracticeSport
ggplot(summary_data, aes(x = PracticeSport, y = MathScore, fill = PracticeSport)) +
  geom_bar(stat = "identity", width = 0.6) +
  labs(
    title = "Rata-rata Nilai Matematika Berdasarkan Frekuensi Olahraga",
    x = "Frekuensi Olahraga",
    y = "Rata-rata Math Score"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

Intrepetasi

Berdasarkan visualisasi di atas, dapat dilihat bahwa rata-rata nilai matematika (Math Score) siswa bervariasi tergantung pada frekuensi olahraga mereka. Siswa yang berolahraga secara teratur (regularly) memiliki rata-rata nilai matematika tertinggi dibandingkan dengan siswa yang hanya kadang-kadang (sometimes) atau tidak pernah berolahraga (never). Sementara itu, siswa yang tidak pernah berolahraga justru memiliki rata-rata nilai matematika yang sedikit lebih tinggi dari yang hanya kadang-kadang berolahraga, namun tetap lebih rendah dibandingkan mereka yang rutin berolahraga. Hal ini menunjukkan adanya indikasi bahwa kebiasaan olahraga secara rutin mungkin berkaitan positif dengan performa akademik, khususnya dalam mata pelajaran matematika. Namun, untuk memastikan apakah perbedaan ini signifikan secara statistik, perlu dilakukan uji lebih lanjut seperti ANOVA.