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
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 เล่มในปีการศึกษา
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 บรรทัด — แนะนำเดือนไหน เพราะอะไร)
#> ห้องสมุดควรจัดอีเว้นท์ เดือนมิถุนายน เพราะดูจากกราฟแล้วพบว่ายอดยืมหนังสือของห้องสมุดในเดือนมิถุนายนน้อยมากที่สุด ดังนั้นควรจัดอีเว้นท์เพื่อกระตุ้นให้นิสิตมาใช้ห้องสมุดในเดือนมิถุนายน
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))
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 คนเท่านั้น ดังนั้นทำให้คะแนนที่สูงเกินปกติเกิดจากความคิดเห็นของคนกลุ่มน้อยมากๆ ไม่สามารถนำไปประเมินภาพรวมได้
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 ไม่ผ่าน เขียนไว้ตรงนี้ว่าติดตรงไหน