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
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 บรรทัด — “มากที่สุด” ของคุณนับจากอะไร และทำอกนับแบบนั้น)
[มากที่สุดคือการยืมครับเพราะยิ่งนิสิตยืมเยอะหนังสือที่ต้องมีก็ต้องเยอะด้วย จากที่ผู้อำนวยการห้องสมุดต้องการตัดสินใจเรื่องการเพิ่มงบให้กับการซื้อหนังสือให้กับคณะในผมจึงเสนอข้อมูลโดยใช้กราฟเส้นเพื่อเปรียบเทียบว่าแต่ละคณะมีนิสิตยืมสมุดเท่าใดเพื่อให้ทราบว่านิสิตคณะใดยืมหนังสือมากที่สุด]
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 บรรทัด — แนะนำเดือนไหน เพราะอะไร)
เสนอเดือนที่ควรจัดกิจกรรมมากที่สุดคือเดือนมิถุนายนจากกราฟที่ได้แสดงให้เห็นว่าเป็นเดือนที่มีแนวโน้มการยืมหนังสือต่ำสุดจึงอนุมานได้ว่าเป็นช่วงที่ไม่มีการสอบหรือนิสิตยังไม่ต้องอ่านหนังสือ
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)
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 ถูกไหม
เป็นตัวเลขที่ถูกต้องครับโดยดูจา
ข้อสรุปนี้มีปัญหาอะไร (พร้อมตัวเลขยืนยัน)
คณะเ๓สัชพึงพอใจในห้องสมุดจริง
prompt ที่ใช้ (คัดลอกมาเต็ม ๆ อย่างน้อย 1 อัน)
สิ่งที่แก้จากที่ AI ให้มา และทำไมต้องแก้
ถ้า knit ไม่ผ่าน เขียนไว้ตรงนี้ว่าติดตรงไหน