資料讀取與前處理

# 若未安裝套件,請先反白執行以下兩行安裝
# install.packages("haven")
# install.packages("ggplot2")

# 載入套件
library(haven)
library(ggplot2)

# 讀取 PISA 2022 的 sav 資料檔
data <- read_sav("PISA_tawian2022_trimmed_lab.sav")

# 將類別變項的數值標籤轉為文字 (例如將 1, 2 轉為 Female, Male)
data$Gender <- as_factor(data$Gender)
data$WORKPAY <- as_factor(data$WORKPAY)

1. WORKPAY (課前或課後有酬工作) 圖表

# 繪製 WORKPAY 長條圖 (Bar Chart)
# 若含有缺失值(NA),可視需求加入 na.rm=TRUE 或先過濾
ggplot(subset(data, !is.na(WORKPAY)), aes(x = WORKPAY)) +
  geom_bar(fill = "coral", color = "black") +
  labs(title = "Working for Pay Frequency", x = "Work Frequency", y = "Frequency (Count)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋轉 X 軸文字以免重疊

2. Gender (學生標準化性別) 圖表

# 繪製 Gender 長條圖 (Bar Chart)
ggplot(data, aes(x = Gender)) +
  geom_bar(fill = "steelblue", color = "black") +
  labs(title = "Gender Distribution", x = "Gender", y = "Frequency (Count)") +
  theme_minimal()

3. PV1MATH (數學成就分數) 圖表

# 繪製 PV1MATH 直方圖 (Histogram)
ggplot(data, aes(x = PV1MATH)) +
  # binwidth 可依照資料全距自行調整適當的區間寬度
  geom_histogram(binwidth = 20, fill = "seagreen", color = "black") +
  labs(title = "PV1MATH Score Distribution", x = "Math Achievement Score", y = "Frequency") +
  theme_minimal()