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 คะแนน)

library(tidyverse)
graphics.off()

# 2. ตั้งค่าใช้ฟอนต์ Tahoma (ฟอนต์มาตรฐานของ Windows ที่มีภาษาไทยแน่นอน)
windowsFonts(ThaiFont = windowsFont("Tahoma"))

month_levels <- c("ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", 
                  "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค.")
lib <- lib %>%
  mutate(month = factor(month, levels = month_levels))
ggplot(lib, aes(x = month, y = borrows, color = faculty, group = faculty)) +
  geom_line(linewidth = 1) +                  # เส้นแนวโน้ม
  geom_point(size = 2.5) +                    # จุดข้อมูลในแต่ละเดือน
  labs(
    title = "แนวโน้มจำนวนการยืมหนังสือของแต่ละคณะในรอบปี",
    x = "month",
    y = "จำนวนการยืม (ครั้ง)",
    color = "คณะ"
  ) +
  theme_minimal(base_family = "TH Sarabun Chula") + # เปลี่ยนชื่อฟอนต์ตามที่มีในเครื่องเพื่อรองรับภาษาไทย
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    axis.text.x = element_text(angle = 0),
    legend.position = "bottom")

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

[มากที่สุดคือการยืมครับเพราะยิ่งนิสิตยืมเยอะหนังสือที่ต้องมีก็ต้องเยอะด้วย จากที่ผู้อำนวยการห้องสมุดต้องการตัดสินใจเรื่องการเพิ่มงบให้กับการซื้อหนังสือให้กับคณะในผมจึงเสนอข้อมูลโดยใช้กราฟเส้นเพื่อเปรียบเทียบว่าแต่ละคณะมีนิสิตยืมสมุดเท่าใดเพื่อให้ทราบว่านิสิตคณะใดยืมหนังสือมากที่สุด]


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

lib_total <- lib %>%
  mutate(month = factor(month, levels = month_levels)) %>%
  group_by(month) %>%
  summarise(total_borrows = sum(borrows, na.rm = TRUE))

ggplot(lib_total, aes(x = month, y = total_borrows, group = 1)) +
  geom_line(color = "#1f77b4", linewidth = 1.2) +                  # เส้นกราฟ
  geom_point(color = "#1f77b4", size = 3) +                       # จุดข้อมูล
  geom_text(aes(label = total_borrows), vjust = -0.8, size = 3.5) + # แสดงตัวเลขยอดรวมเหนือจุด
  labs(
    title = "มิถุนายนควรเป็นเดือนที่มีการจัดกิจกรรมมากที่สุด",
    x = "เดือน",
    y = "จำนวนการยืมรวม (ครั้ง)"
  ) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.15))) +   # เว้นพื้นที่ด้านบนให้ตัวเลขไม่ตกขอบ
  theme_minimal(base_family = "TH Sarabun Chula") +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    axis.text = element_text(size = 12),
    axis.title = element_text(size = 14)
  )

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

เสนอเดือนที่ควรจัดกิจกรรมมากที่สุดคือเดือนมิถุนายนจากกราฟที่ได้แสดงให้เห็นว่าเป็นเดือนที่มีแนวโน้มการยืมหนังสือต่ำสุดจึงอนุมานได้ว่าเป็นช่วงที่ไม่มีการสอบหรือนิสิตยังไม่ต้องอ่านหนังสือ


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

library(shiny)
# สรุปข้อมูลจำนวนนิสิตรายคณะ (ไม่ให้ซ้ำตามเดือน)
faculty_students <- lib %>%
  distinct(faculty, students) %>%
  arrange(desc(students))

# 2. ส่วนการจัดวางหน้าตา Dashboard (UI)
ui <- fluidPage(
  titlePanel("รายงานจำนวนนิสิตจำแนกตามคณะ"),
  
  sidebarLayout(
    sidebarPanel(
      width = 3,
      # [เงื่อนไขที่ 1] ตัวกรองคณะ 1 อัน
      selectInput(
        inputId = "selected_faculty",
        label = "เลือกคณะ (ตัวกรอง):",
        choices = c("ทั้งหมด", unique(faculty_students$faculty)),
        selected = "ทั้งหมด"
      )
    ),
    
    mainPanel(
      width = 9,
      fluidRow(
        # [เงื่อนไขที่ 2] กราฟ 1 ใบ
        column(width = 12, 
               plotOutput("student_plot", height = "320px")
        )
      ),
      hr(),
      fluidRow(
        # [เงื่อนไขที่ 3] ตาราง 1 ใบ
        column(width = 12, 
               h4("ตารางแสดงข้อมูลจำนวนนิสิต"),
               DTOutput("student_table")
        )
      )
    )
  )
)

# 3. ส่วนการประมวลผล (Server)
server <- function(input, output) {
  
  # กรองข้อมูลตามตัวเลือกในตัวกรอง
  filtered_data <- reactive({
    if (input$selected_faculty == "ทั้งหมด") {
      faculty_students
    } else {
      faculty_students %>% filter(faculty == input$selected_faculty)
    }
  })
  
  # สร้างกราฟ 1 ใบ (Bar Chart แสดงจำนวนนิสิต)
  output$student_plot <- renderPlot({
    ggplot(filtered_data(), aes(x = reorder(faculty, -students), y = students, fill = faculty)) +
      geom_col(show.legend = FALSE, width = 0.6) +
      geom_text(aes(label = scales::comma(students)), vjust = -0.5, size = 4) +
      labs(
        title = "จำนวนนิสิตแยกตามคณะ",
        x = "คณะ",
        y = "จำนวนนิสิต (คน)"
      ) +
      scale_y_continuous(labels = scales::comma, expand = expansion(mult = c(0, 0.15))) +
      theme_minimal(base_family = "TH Sarabun Chula") +
      theme(
        plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
        axis.text = element_text(size = 12)
      )
  })
  
  # สร้างตาราง 1 ใบ
  output$student_table <- renderDT({
    datatable(
      filtered_data(),
      colnames = c("คณะ", "จำนวนนิสิต (คน)"),
      options = list(pageLength = 5, dom = 't'),
      rownames = FALSE
    )
  })
}
shinyApp(ui = ui, server = server)
Shiny applications not supported in static R Markdown documents


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

ggplot(lib, aes(x = faculty, y = satisfaction, fill = faculty)) +
  stat_summary(fun = mean, geom = "col") + # วาดแท่งกราฟ
  stat_summary(
    fun = mean, 
    geom = "text", 
    aes(label = sprintf("%.2f", after_stat(y))), # แสดงตัวเลขทศนิยม 2 ตำแหน่ง
    vjust = -0.5, # ปรับตำแหน่งตัวเลขให้อยู่เหนือแท่ง
    size = 4, 
    family = "sarabun"
  ) +
  scale_y_continuous(limits = c(0, 5.5)) + # ขยายเพดานแกน Y เพื่อไม่ให้ตัวเลขหลุดขอบกราฟ
  labs(
    title = "ความพึงพอใจเฉลี่ยแยกตามคณะ",
    x = "คณะ",
    y = "คะแนนเฉลี่ย (เต็ม 5)"
  ) +
  theme_minimal(base_family = "sarabun") +
  theme(
    legend.position = "none",
    plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
    axis.text.x = element_text(size = 10, angle = 15, hjust = 1)
  )

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

เป็นตัวเลขที่ถูกต้องครับโดยดูจา

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

คณะเ๓สัชพึงพอใจในห้องสมุดจริง


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

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

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



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