Final Project Mata Kuliah Visualisasi Data Eksploratori

Kelompok 8: 1. Riska Karina T. (5052241028) 2. Shafa Agnia R. (5052241029) 3. Annisa Maulida Z. (5052241038)

Dataset

Dataset yang digunakan adalah “Student’s Social Media Addiction” yang bersumber dari kaggle: https://www.kaggle.com/datasets/adilshamim8/social-media-addiction-vs-relationships

Data yang diambil dalam dataset ini menggunakan metode survei di mana masing-masing responden telah mengisi tes kuis “Bergen Social Media Addiction Scale” untuk mengetahui skala kecanduan media sosial dan skala kesehatan mentalnya.

Tujuan utama kami menggunakan dataset ini adalah untuk mengetahui hubungan antara kehidupan digital kita, kesehatan mental, dan dampaknya di dunia nyata.

data <- read.csv("C:/Users/user/Downloads/Students Social Media Addiction.csv")
head(data)
##   Student_ID Age Gender Academic_Level    Country Avg_Daily_Usage_Hours
## 1          1  19 Female  Undergraduate Bangladesh                   5.2
## 2          2  22   Male       Graduate      India                   2.1
## 3          3  20 Female  Undergraduate        USA                   6.0
## 4          4  18   Male    High School         UK                   3.0
## 5          5  21   Male       Graduate     Canada                   4.5
## 6          6  19 Female  Undergraduate  Australia                   7.2
##   Most_Used_Platform Affects_Academic_Performance Sleep_Hours_Per_Night
## 1          Instagram                          Yes                   6.5
## 2            Twitter                           No                   7.5
## 3             TikTok                          Yes                   5.0
## 4            YouTube                           No                   7.0
## 5           Facebook                          Yes                   6.0
## 6          Instagram                          Yes                   4.5
##   Mental_Health_Score Relationship_Status Conflicts_Over_Social_Media
## 1                   6     In Relationship                           3
## 2                   8              Single                           0
## 3                   5         Complicated                           4
## 4                   7              Single                           1
## 5                   6     In Relationship                           2
## 6                   4         Complicated                           5
##   Addicted_Score
## 1              8
## 2              3
## 3              9
## 4              4
## 5              7
## 6              9

Analisis

Hal-hal yang kami analisis, yaitu Apa saja hal-hal yang memengaruhi Kecanduan Media Sosial Addicted_Score siswa, lalu apa dampaknya terhadap Kesehatan Mental Mental_Health_Score , Performa Akademik Affects_Academic_Performance, Jam Tidur Sleep_Hours_Per_Night. Kemudian, apakah ada pengaruh dari status hubungan `Relationship_Status’

Memanggil Package

library(dplyr)
## 
## 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)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ ggplot2   3.5.2     ✔ stringr   1.5.1
## ✔ lubridate 1.9.4     ✔ tibble    3.2.1
## ✔ purrr     1.0.4     ✔ tidyr     1.3.1
## ── 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)

Menggunakan library dplyr untuk memanipulasi data, tidyverse untuk membersihkan data, dan ggplot untuk membuat visualisasi data

Preprocessing Data

1. Cek missing value

colSums(is.na(data))
##                   Student_ID                          Age 
##                            0                            0 
##                       Gender               Academic_Level 
##                            0                            0 
##                      Country        Avg_Daily_Usage_Hours 
##                            0                            0 
##           Most_Used_Platform Affects_Academic_Performance 
##                            0                            0 
##        Sleep_Hours_Per_Night          Mental_Health_Score 
##                            0                            0 
##          Relationship_Status  Conflicts_Over_Social_Media 
##                            0                            0 
##               Addicted_Score 
##                            0

Tidak terdapat missing value pada dataset

2. Cek data types

str(data)
## 'data.frame':    705 obs. of  13 variables:
##  $ Student_ID                  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Age                         : int  19 22 20 18 21 19 23 20 18 21 ...
##  $ Gender                      : chr  "Female" "Male" "Female" "Male" ...
##  $ Academic_Level              : chr  "Undergraduate" "Graduate" "Undergraduate" "High School" ...
##  $ Country                     : chr  "Bangladesh" "India" "USA" "UK" ...
##  $ Avg_Daily_Usage_Hours       : num  5.2 2.1 6 3 4.5 7.2 1.5 5.8 4 3.3 ...
##  $ Most_Used_Platform          : chr  "Instagram" "Twitter" "TikTok" "YouTube" ...
##  $ Affects_Academic_Performance: chr  "Yes" "No" "Yes" "No" ...
##  $ Sleep_Hours_Per_Night       : num  6.5 7.5 5 7 6 4.5 8 6 6.5 7 ...
##  $ Mental_Health_Score         : int  6 8 5 7 6 4 9 6 7 7 ...
##  $ Relationship_Status         : chr  "In Relationship" "Single" "Complicated" "Single" ...
##  $ Conflicts_Over_Social_Media : int  3 0 4 1 2 5 0 2 1 1 ...
##  $ Addicted_Score              : int  8 3 9 4 7 9 2 8 5 4 ...

Tipe data pada dataset sudah sesuai

4. Cek outlier

#ambil kolom numerik untuk visualisasi boxplot
data_num_long <- data %>%
  select(where(is.numeric)) %>%
  select(-Student_ID) %>%
  pivot_longer(cols = everything(),
               names_to = "variabel",
               values_to = "nilai")

#boxplot
ggplot(data_num_long, aes(x = variabel, y = nilai)) +
  geom_boxplot(fill = "lavender") +
  labs(title = "Boxplot Variabel Numerik",
       x = "Variabel",
       y = "Nilai") +
   scale_x_discrete(labels = c(
    "Addicted_Score" = "Skor\nKecanduan",
    "Age" = "Usia",
    "Avg_Daily_Usage_Hours" = "Jam Penggunaan\nSosial Media",
    "Conflicts_Over_Social_Media" = "Konflik\nSosial Media",
    "Mental_Health_Score" = "Skor\nKesehatan Mental",
    "Sleep_Hours_Per_Night" = "Jam Tidur\nPer Malam"
  )) +
  theme_minimal()

Terdapat outlier pada Jam Penggunaan Media Sosial Avg_Daily_Usage_Hours. Namun, outlier tersebut masih relevan dan tergolong valid karena masih berada di dekat garis whisker boxplot sehingga outlier dipertahankan.

5. Cek logical inconsistences

data %>%
 filter(Sleep_Hours_Per_Night < 0 | Avg_Daily_Usage_Hours < 0)
##  [1] Student_ID                   Age                         
##  [3] Gender                       Academic_Level              
##  [5] Country                      Avg_Daily_Usage_Hours       
##  [7] Most_Used_Platform           Affects_Academic_Performance
##  [9] Sleep_Hours_Per_Night        Mental_Health_Score         
## [11] Relationship_Status          Conflicts_Over_Social_Media 
## [13] Addicted_Score              
## <0 rows> (or 0-length row.names)

Tidak terdapat logical inconsistences dalam dataset pada variabel Jam Tidur Sleep_Hours_Per_Night dan Jam Penggunaan Media Sosial Avg_Daily_Usage_Hours yang negatif.

Visualisasi

Distribusi Skor Kecanduan Media Sosial dan Skor Kesehatan Mental

#distribusi skor kecanduan media sosial
ggplot(data, aes(x = Addicted_Score)) +
  geom_histogram(binwidth = 1, fill = "steelblue", color = "black") +
  labs(title = "Distribusi Skor Kecanduan Media Sosial",
       x = "Skor Kecanduan Media Sosial", y = "Jumlah Siswa") +
 theme_minimal()

Mayoritas siswa berada di skor tengah, sekitar 7.0, yang tergolong tinggi. Distribusi condong ke kanan (right-skewed), menandakan bahwa sebagian besar responden memiliki skor kecanduang yang tinggi.

ggplot(data, aes(x = Mental_Health_Score)) +
  geom_histogram(binwidth = 1, fill = "red3", color = "black") +
  labs(title = "Distribusi Skor Kesehatan Mental",
       x = "Skor Kesehatan Mental", y = "Jumlah Siswa") +
 theme_minimal()

Puncak distribusi ini berada di 6. Distribui sedikit condong ke kiri (left-skewed), yang berarti lebih banyak siswa yang memilki skor di bawah rata-rata daripada di atasnya, tetapi puncaknya berada di nilai tegah. Ini menunjukan kondisi mental yang cenderung sedang.

Hubungan Antara Skor Kecanduan Media Sosial, Skor Kesehatan Mental, Jam Tidur, dan Jam Penggunaan Media Sosial

#ambil kolom yang numerik buat cek korelasi
data_heatmap <- data %>%
  select(where(is.numeric)) %>%
  select(-Student_ID, -Age, -Conflicts_Over_Social_Media)

#matriks korelasi
cor <- cor(data_heatmap)
cor_df <- as.data.frame(cor) %>%
  rownames_to_column(var = "variabel 1")

#ubah matriks korelasi jadi format long untuk visualisasi heatmap
cor_long <- cor_df %>%
  pivot_longer(cols = -`variabel 1`,
               names_to = "variabel 2",
               values_to = "korelasi")

#visualisasi heatmap
ggplot(cor_long, aes(x=`variabel 1`, y=`variabel 2`, fill=korelasi)) +
  geom_tile(col='white', lwd=0.5) +
  geom_text(aes(label=round(korelasi, 2)), size=3.5, color='white', lwd=2) +
  labs(title = "Korelasi Antar Variabel Numerik", x ="Variabel", y="Variabel") +
  scale_fill_gradient2(low='red3', mid='white', high='blue3', midpoint=0, limit=c(-1,1)) +
  scale_x_discrete(labels = c(
    "Addicted_Score" = "Skor\nKecanduan",
    "Avg_Daily_Usage_Hours" = "Jam\nPenggunaan\nSosial Media",
    "Mental_Health_Score" = "Skor\nKesehatan\nMental",
    "Sleep_Hours_Per_Night" = "Jam Tidur"
  )) +
  scale_y_discrete(labels = c(
    "Addicted_Score" = "Skor\nKecanduan",
    "Avg_Daily_Usage_Hours" = "Jam\nPenggunaan\nSosial Media",
    "Mental_Health_Score" = "Skor\nKesehatan\nMental",
    "Sleep_Hours_Per_Night" = "Jam Tidur"
  )) +
  theme_minimal()
## Warning in geom_text(aes(label = round(korelasi, 2)), size = 3.5, color =
## "white", : Ignoring unknown parameters: `linewidth`

Angka korelasi paling tinggi dari variabel yang berbeda yaitu -0.95 menunjukkan korelasi negatif yang sangat kuat antara Skor Kecanduan Addicted_Score dan Skor Kesehatan Mental Mental_Heath_Score. Dari sini, kami berasumsi bahwa semakin seseorang candu terhadap media sosial, hampir pasti kesehatan mentalnya semakin menurun.

Kemudian di urutan kedua, yaitu korelasi antara Jam Penggunaan Media Sosial Avg_Daily_Usage_Hours dan Skor Kecanduan Addicted_Score yang berkorelasi positif 0.83 di mana kami berasumsi bahwa semakin lama jam penggunaan media sosialnya, kemungkinan semakin tinggi skor kecanduannya.

Di urutan ketiga, terdapat korelasi antara Skor Kesehatan Mental Mental_Heath_Score dan Jam Penggunaan Media Sosial Avg_Daily_Usage_Hours yang berkorelasi negatif -0.8. Dari sini, kami berasumsi bahwa semakin lama waktu yang digunakan dalam menggunakan media sosial, kemungkinan semakin rendah skor kesehatan mentalnya.

Pada urutan keempat, yakni korelasi antara Jam Penggunaan Media Sosial Avg_Daily_Usage_Hours dan Jam Tidur Sleep_Hours_Per_Night yang berkorelasi negatif -0.79 di mana kami berasumsi bahwa semakin lama mereka bermain media sosial, kemungkinan semakin sedikit waktu mereka untuk beristirahat.

ggplot(data, aes(x = Avg_Daily_Usage_Hours, y = Sleep_Hours_Per_Night)) +
  geom_point(color = "steelblue", size = 2) +
  geom_smooth(method = 'lm', color = "red3", linewidth = 1) +
  labs(title = "Hubungan Jam Penggunaan Media Sosial dan Jam Tidur per Hari",
       x = "Jam Penggunaan Media Sosial", y = "Jumlah Tidur") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

Grafik Hubungan Jam Penggunaan Media Sosial Avg_Daily_Usage_Hours dengan Jam Tidur Sleep_Hours_Per_Night menunjukkan tren menurun, yang berarti semakin lama jam penggunaan media sosial, maka semakin sedikit waktu tidurnya. Hal ini memvalidasi korelasi antarkedua variabel sebesar -0.79.

ggplot(data, aes(x = Addicted_Score, y = Mental_Health_Score)) +
  geom_point(color = "steelblue", size = 2.5) +
  geom_smooth(method = 'lm', color = "red3", linewidth = 1) +
  labs(title = "Hubungan Skor Kecanduan Media Sosial dan Skor Kesehatan Mental",
       x = "Skor Kecanduan Media Sosial", y = "Skor Kesehatan Mental") +
  theme_minimal() +
  scale_fill_brewer(palette="Set1")
## `geom_smooth()` using formula = 'y ~ x'

Grafik Hubungan Skor Kecanduan Media Sosial Avg_Daily_Usage_Hours dengan Skor Kesehatan Mental Mental_Heath_Score menunjukkan tren menurun pula yang berarti semakin tinggi skor kecanduan media sosial, maka semakin rendah skor kesehatan mentalnya. Hal ini memvalidasi korelasi antarkedua variabel sebesar -0.95.

Distribusi Skor Kecanduan Media Sosial berdasarkan Gender dan Efeknya terhadap Performa Akademik

ggplot(data, aes(x = Addicted_Score, fill = Affects_Academic_Performance)) +
  geom_bar(position = "dodge") +
  labs(
    title = "Jumlah Responden berdasarkan Addicted Score dan Gender",
    x = "Skor Kecanduan Media Sosial",
    y = "Jumlah Siswa"
    ) +
  theme_minimal() +
  scale_fill_brewer(palette="Set1")

Grafik Distribusi Skor Kecanduan berdasarkan Gender menunjukkan bahwa baik responden Laki-Laki (Male) maupun Perempuan (Female) memiliki distribusi Skor Kecanduan Media Sosial Avg_Daily_Usage_Hours yang tinggi. Meskipun ada sedikit perbedaan di setiap bar, secara umum, kedua gender sama-sama rentan terhadap kecanduan media sosial dengan skor yang tinggi.

# Hitung total skor kecanduan per kelompok
summary <- data %>%
  group_by(Affects_Academic_Performance, Gender) %>%
  summarise(mean_addicted = mean(Addicted_Score)) %>%
  group_by(Affects_Academic_Performance) %>%
  mutate(persen = mean_addicted / sum(mean_addicted) * 100)
## `summarise()` has grouped output by 'Affects_Academic_Performance'. You can
## override using the `.groups` argument.
summary
## # A tibble: 4 × 4
## # Groups:   Affects_Academic_Performance [2]
##   Affects_Academic_Performance Gender mean_addicted persen
##   <chr>                        <chr>          <dbl>  <dbl>
## 1 No                           Female          4.49   48.9
## 2 No                           Male            4.69   51.1
## 3 Yes                          Female          7.58   50.8
## 4 Yes                          Male            7.33   49.2
#visualisasi
ggplot(summary, aes(x = Affects_Academic_Performance, y = mean_addicted, fill = Gender)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(persen), "%")),
            position = position_stack(vjust = 0.5), color = "white", size = 4) +
  labs(title = "Rata-Rata Skor Kecanduan dan Proporsi Gender terhadap Performa Akademik",
       x = "Dampak Akademik", y = "Rata-Rata Skor Kecanduan") +
  theme_minimal() +
  scale_fill_brewer(palette="Set1")

Bar “Yes” jauh lebih tinggi, yang berarti total skor kecanduan dari kelompok yang merasakan dampak negatif pada akademik jauh lebih besar daripada kelompok yang tidak merasakannya. Ini adalah bukti kuat bahwa kecanduan media sosial secara langsung dirasakan mengganggu performa akademik.

Melihat proporsi gender di dalam bar “Yes”, kita melihat bahwa baik Perempuan (52%) maupun Laki-Laki (48%) sama-sama mengisi porsi yang besar. Ini menunjukkan bahwa ketika tingkat kecanduan sudah tinggi hingga berdampak pada akademik, hal itu terjadi pada kedua gender secara signifikan

Peran Status Hubungan dalam Siklus Media Sosial dan Siklus Tidur

ggplot(data, aes(x = Avg_Daily_Usage_Hours, 
                 y = Sleep_Hours_Per_Night,
                 color = Gender)) +
  geom_point(alpha = 0.7, size = 1.5) +
  facet_wrap(~ Relationship_Status) +
  labs(title = "Hubungan Jam Tidur dan Penggunaan Media Sosial berdasarkan Status Hubungan",
       x = "Jam Media Sosial / Hari",
       y = "Jam Tidur / Malam",
       color = "Gender") +
 theme_minimal()

Siswa yang sedang dalam hubungan mungkin memiliki pendorong tambahan untuk menggunakan media sosial hingga larut malam.

Status hubungan yang “rumit” hampir tidak ada yang berada di zona sehat. Mereka seolah terjebak di tengah-tengah pusaran masalah.

Kelompok Single menunjukkan bahwa tanpa adanya tekanan spesifik dari hubungan, kecanduan media sosial tetap menjadi masalah besar yang memengaruhi individu secara luas dan beragam.