str(lib)
## 'data.frame':    72 obs. of  6 variables:
##  $ faculty     : chr  "ศึกษาศาสตร์" "ศึกษาศาสตร์" "ศึกษาศาสตร์" "ศึกษาศาสตร์" ...
##  $ month       : chr  "ม.ค." "ก.พ." "มี.ค." "เม.ย." ...
##  $ borrows     : int  652 880 668 421 517 227 262 644 903 708 ...
##  $ students    : int  3200 3200 3200 3200 3200 3200 3200 3200 3200 3200 ...
##  $ satisfaction: num  4.1 3.8 3.4 3.6 4 3.9 4 4 3.9 3.4 ...
##  $ responses   : int  200 202 158 170 162 69 70 241 267 182 ...
head(lib)
##     faculty month borrows students satisfaction responses
## 1 ศึกษาศาสตร์  ม.ค.     652     3200          4.1       200
## 2 ศึกษาศาสตร์  ก.พ.     880     3200          3.8       202
## 3 ศึกษาศาสตร์  มี.ค.     668     3200          3.4       158
## 4 ศึกษาศาสตร์ เม.ย.     421     3200          3.6       170
## 5 ศึกษาศาสตร์  พ.ค.     517     3200          4.0       162
## 6 ศึกษาศาสตร์  มิ.ย.     227     3200          3.9        69


ข้อ 1 — คณะไหนใช้ห้องสมุดมากที่สุด (3 คะแนน)

faculty_total <- lib %>%
  group_by(faculty) %>%
  summarise(
  total_borrows = sum(borrows, na.rm = TRUE)) %>%
  arrange(desc(total_borrows))

ggplot(faculty_total,
       aes(x = reorder(faculty, total_borrows),
           y = total_borrows)) +
  geom_col(
    fill = "#404040",
    width = 0.7) +
  geom_text(
    aes(label = total_borrows),
    hjust = -0.15,
    size = 3.5) +
  coord_flip() +
  scale_y_continuous(
    expand = expansion(mult = c(0, 0.12))) +
  labs(title = "คณะที่มีการยืมหนังสือมากที่สุดคือคณะวิทยาศาสตร์ จำนวนการยืม 7393 เล่ม",
       x = "คณะ",
       y = "จำนวนเล่มที่ยืม") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(
        size = 16,
        face = "bold"),
    axis.text = element_text(
      color = "black"),
    axis.title = element_text(
      face = "bold"),
    panel.grid.major.y = element_blank(),
    panel.grid.minor = element_blank())

คำตอบ (3–4 บรรทัด — “มากที่สุด” ของคุณนับจากอะไร และทำไมเลือกนับแบบนั้น)

#> นับจากจำนวนการยืมหนังสือของแต่ละคณะ เพื่อดูว่าแต่ละคณะมีใช้บริการห้องสมุดมากน้อยแค่ไหน #> จากกราฟสรุปได้ว่าคณะที่ใช้บริการห้องสมุดมากที่สุด คือ คณะวิทยาศาสตร์ มียอดยืมหนังสือ 7393 เล่มในปีการศึกษา


ข้อ 2 — ควรจัดกิจกรรมเดือนไหน (3 คะแนน)

month_order <- c("ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.",
                 "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.",
                 "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค.")

monthly_borrow <- lib %>%
  group_by(month) %>%
  summarise(Total_Borrows = sum(borrows, na.rm = TRUE)) %>%
  mutate(month = factor(month, levels = month_order)) %>%
  arrange(month)

ggplot(monthly_borrow,
       aes(x = month, y = Total_Borrows)) +
  geom_col(fill = "#404040",
           width = 0.7) +
  geom_text(
    aes(label = Total_Borrows),
    vjust = -0.3,
    size = 3.5) +
  scale_y_continuous(
    expand = expansion(mult = c(0, 0.10))) +
  labs(title = "เดือนมิถุนายนเป็นเดือนที่มียอดยืมหนังสือรวมน้อยที่สุด",
       x = "เดือน",
       y = "จำนวนหนังสือที่ยืม") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(
        size = 16,
        face = "bold"),
    axis.text.x = element_text(
          color = "black",
          angle = 0,
          hjust = 1),
    axis.text.y = element_text(
          color = "black"),
    axis.title  = element_text(
           face = "bold"),
    panel.grid.major.x = element_blank(),
    panel.grid.minor = element_blank())

คำตอบ (2 บรรทัด — แนะนำเดือนไหน เพราะอะไร)

#> ห้องสมุดควรจัดอีเว้นท์ เดือนมิถุนายน เพราะดูจากกราฟแล้วพบว่ายอดยืมหนังสือของห้องสมุดในเดือนมิถุนายนน้อยมากที่สุด ดังนั้นควรจัดอีเว้นท์เพื่อกระตุ้นให้นิสิตมาใช้ห้องสมุดในเดือนมิถุนายน


ข้อ 3 — หน้าที่ผู้อ่านกดดูเองได้ (4 คะแนน)

shared_df <- SharedData$new(lib)

filter_select(id = "faculty_filter",
           label = "เลือกคณะ:",
      sharedData = shared_df,
           group = ~faculty,
        multiple = TRUE)
plot_ly(shared_df, 
        x = ~month, 
        y = ~borrows, 
    color = ~faculty,
     type = 'bar') %>%
  layout(xaxis = list(title = "เดือน",
 categoryorder = "array", 
 categoryarray = c('ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 
                   'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.')),
    yaxis = list(title = "จำนวนการยืม (เล่ม)"),
    barmode = 'group',
    hovermode = "closest")
datatable(shared_df,
          colnames = c("คณะ", "เดือน", "จำนวนการยืม", "จำนวนนิสิต", "ความพึงพอใจ", "ผู้ตอบแบบสอบถาม"),
          options = list(
          pageLength = 6,
          dom = 'tip',
          autoWidth = TRUE))


ข้อ 4 — ตรวจข้อสรุปของผู้บริหาร (3 คะแนน)

summary_df <- lib %>%
  group_by(faculty) %>%
  summarise(avg_sat = mean(satisfaction, na.rm = TRUE),
            total_resp = sum(responses, na.rm = TRUE))

scale_factor <- 440

ggplot(summary_df, aes(x = faculty)) +
  geom_bar(aes(y = avg_sat, fill = ifelse(faculty == "เภสัชศาสตร์", "เภสัชศาสตร์ (คะแนนสูงแต่ผู้ตอบต่ำมาก)", "คณะอื่น ๆ")), 
  stat = "identity", width = 0.38, position = position_nudge(x = -0.2)) +
  geom_bar(aes(y = total_resp / scale_factor), 
           stat = "identity", width = 0.38, position = position_nudge(x = 0.2), fill = "#d62728", 
           alpha = 0.85) +
  geom_text(aes(y = avg_sat + 0.18, label = sprintf("%.2f", avg_sat)), 
           position = position_nudge(x = -0.2), fontface = "bold", color = "#1f77b4", size = 4) +
  geom_text(aes(y = (total_resp / scale_factor) + 0.18, label = paste0(total_resp, " คน")), 
            position = position_nudge(x = 0.2), fontface = "bold", color = "#d62728", size = 3.8) +
  scale_y_continuous(
    name = "คะแนนความพึงพอใจเฉลี่ย (เต็ม 5)",
    limits = c(0, 5.8),
    sec.axis = sec_axis(~ . * scale_factor, name = "จำนวนผู้ตอบแบบสอบถามรวม (คน)")) +
    scale_fill_manual(values = c("คณะอื่น ๆ" = "#1f77b4", "เภสัชศาสตร์ (คะแนนสูงแต่ผู้ตอบต่ำมาก)" = "#2ca02c")) +
  labs(title = "เปรียบเทียบความพึงพอใจเฉลี่ย และ จำนวนผู้ตอบแบบสอบถามรายคณะ (ปี 2568)",
       subtitle = "ข้อสังเกต: คณะเภสัชศาสตร์มีคะแนนสูงสุด (4.74) แต่มีกลุ่มตัวอย่างเพียง 32 คน ต่างจากคณะอื่นที่มีผู้ตอบหลักร้อยถึงพันคน",
       x = "คณะ",
       fill = "กลุ่มข้อมูล") +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
    plot.subtitle = element_text(color = "darkred", face = "bold", size = 10, hjust = 0.5),
    axis.title.y.left = element_text(color = "#1f77b4", face = "bold", size = 11),
    axis.title.y.right = element_text(color = "#d62728", face = "bold", size = 11),
    axis.text.x = element_text(face = "bold", size = 10),
    legend.position = "bottom")

ตัวเลข 4.7 ถูกไหม

#> ถูกต้อง

ข้อสรุปนี้มีปัญหาอะไร (พร้อมตัวเลขยืนยัน)

#> ดูจากกราฟคณะเภสัชมีความพึงพอใจเฉลี่ยสูงถึง 4.74 แต่คนตอบแบบสองถามมีเพียง 32 คน หรือ เดือนละประมาณ 2-4 คนเท่านั้น ดังนั้นทำให้คะแนนที่สูงเกินปกติเกิดจากความคิดเห็นของคนกลุ่มน้อยมากๆ ไม่สามารถนำไปประเมินภาพรวมได้


ข้อ 5 — บันทึกการใช้ AI (2 คะแนน)

prompt ที่ใช้ (คัดลอกมาเต็ม ๆ อย่างน้อย 1 อัน)

shared_df <- SharedData$new(lib)

filter_select(id = "faculty_filter",
           label = "เลือกคณะ:",
      sharedData = shared_df,
           group = ~faculty,
        multiple = TRUE)

plot_ly(shared_df, 
        x = ~Month, 
        y = ~Borrows,                  ## ตัวพิมพ์ใหญ่ กับตัวพิมพ์เล็ก
    color = ~Faculty,
     type = 'bar') %>%
  layout(xaxis = list(title = "เดือน",
 categoryorder = "array", 
 categoryarray = c("มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน",   ## เดือนในข้อมูลเป็นตัวย่อ
  "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม",
  "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม")
    yaxis = list(title = "จำนวนการยืม (เล่ม)"),   
    barmode = 'group',
    hovermode = "closest")

datatable(shared_df,
          colnames = c("คณะ", "เดือน", "จำนวนการยืม", "จำนวนนิสิต", "ความพึงพอใจ", "ผู้ตอบแบบสอบถาม"),
          options = list(
          pageLength = 6,
          dom = 'tip',
          autoWidth = TRUE))

สิ่งที่แก้จากที่ AI ให้มา และทำไมต้องแก้

monthly_borrow <- lib %>% group_by(month) %>% summarise( Total_Borrows = sum(borrows, na.rm = TRUE) ) %>% arrange(month)

ggplot(monthly_borrow, aes(x = factor(month), y = Total_Borrows)) + geom_col( fill = “#404040”, width = 0.7 ) + geom_text( aes(label = Total_Borrows), vjust = -0.3, size = 3.5 ) + scale_x_discrete( labels = c( “ม.ค.”, “ก.พ.”, “มี.ค.”, “เม.ย.”, “พ.ค.”, “มิ.ย.”, “ก.ค.”, “ส.ค.”, “ก.ย.”, “ต.ค.”, “พ.ย.”, “ธ.ค.” ) ) + scale_y_continuous( expand = expansion(mult = c(0, 0.10)) ) + labs( title = “ยอดยืมหนังสือในแต่ละเดือน”, subtitle = “จำนวนหนังสือที่ถูกยืมรวมในแต่ละเดือน”, x = “เดือน”, y = “จำนวนหนังสือที่ยืม” ) + theme_minimal(base_size = 14) + theme( plot.title = element_text( size = 16, face = “bold” ), plot.subtitle = element_text( size = 11, color = “grey40” ), axis.text.x = element_text( color = “black” ), axis.text.y = element_text( color = “black” ), axis.title = element_text( face = “bold” ), panel.grid.major.x = element_blank(), panel.grid.minor = element_blank() )


## error เนื่องจากตัวอักษรเล็กกับใหญ่ และจากข้อมูลเดือนเป็นตัวย่อ แต่ตอนแรกเขียนเดือนเต็มๆ เลยรันไม่ออก —

ถ้า knit ไม่ผ่าน เขียนไว้ตรงนี้ว่าติดตรงไหน