เทคนิคที่ 109 · PYTHON / JAVASCRIPT

กลุ่มคำWord Cloud

ดึงดูดสายตาได้ดี แต่อ่านค่าได้แย่ที่สุด

1
พื้นฐานควรรู้ก่อน · ไม่ต้องมีพื้นฐาน
ลองเล่น

01ภาพรวมของกราฟนี้

Word cloud แสดงคำด้วยขนาดที่แปรตามความถี่ จุดแข็งเดียวคือดึงดูดสายตาและสื่อ "หัวข้อโดยรวม" ได้เร็ว ส่วนข้อเสียมีหลายข้อและร้ายแรง คำยาวกินพื้นที่มากกว่าคำสั้นที่ความถี่เท่ากัน ตำแหน่งไม่มีความหมาย และเทียบขนาดตัวอักษรได้แย่กว่าความยาวแท่งมาก

เปรียบเทียบให้เห็นภาพ

เหมือนป้ายโฆษณาที่ตัวใหญ่สะดุดตา แต่บอกไม่ได้ว่าใหญ่กว่ากันกี่เท่า

ใช้ที่ไหนบ้าง — ภาพเปิดของรายงานเพื่อบอกหัวข้อโดยรวม หรือสื่อสารกับผู้ชมทั่วไปที่ต้องการความรู้สึกมากกว่าตัวเลข

สร้างอย่างไร

  1. ขั้นที่ 1★ ตัดคำหยุดออกให้หมดก่อน
  2. ขั้นที่ 2รวมคำที่มีรูปต่างกันแต่ความหมายเดียวกัน
  3. ขั้นที่ 3ให้พื้นที่ของคำแปรตามความถี่ ไม่ใช่ความสูงตัวอักษร
  4. ขั้นที่ 4ใส่ตารางอันดับคำประกอบเสมอ

ตัวอย่างคลาสสิก · ข้อวิจารณ์ต่อ word cloud ในวงการแสดงข้อมูล

ผู้เชี่ยวชาญด้านการแสดงข้อมูลหลายคนวิจารณ์ word cloud ซ้ำ ๆ ว่ามันเข้ารหัสค่าด้วยช่องทางที่อ่านแย่ที่สุด และยังปนตัวแปรที่ไม่เกี่ยวข้องอย่างความยาวของคำเข้าไปด้วย ข้อสรุปที่ตรงกันคือมันเหมาะกับการตกแต่งมากกว่าการวิเคราะห์ และควรมีกราฟแท่งวางคู่เสมอ

Wikipedia · Tag cloud

02อธิบายภาษาคนเข้าใจง่าย ๆ

Word cloud เป็นภาพที่พบบ่อยที่สุดแบบหนึ่งในการแสดงข้อมูลข้อความ และก็เป็นภาพที่ถูกวิจารณ์หนักที่สุดด้วย

ข้อเสียข้อแรกมาจากตัวอักษรเอง คำที่ยาวกว่ากินพื้นที่มากกว่าคำสั้นที่มีความถี่เท่ากัน ทำให้คำยาวดูสำคัญกว่าโดยอัตโนมัติ

ข้อที่สองคือตำแหน่งของคำไม่มีความหมายเลย คำที่อยู่ตรงกลางไม่ได้สำคัญกว่าคำที่อยู่ขอบ แต่ผู้อ่านเกือบทุกคนคิดว่าใช่

ข้อที่สามคือคนเทียบขนาดตัวอักษรได้แย่กว่าเทียบความยาวของแท่งมาก คำที่มีความถี่ต่างกันสองเท่าอาจดูแทบไม่ต่างกันเลย

สิ่งที่มันทำได้ดีจริงคือดึงดูดสายตาและสื่อ "เรื่องนี้พูดถึงอะไร" ได้ในเสี้ยววินาที ซึ่งมีค่าในบริบทของการเล่าเรื่องกับผู้ชมทั่วไป

ข้อสรุปที่ตรงไปตรงมาคือ ถ้าคำถามคือคำไหนพบบ่อยกว่ากันเท่าไร ให้ใช้กราฟแท่งเสมอ และถ้าจะใช้ word cloud ก็ควรมีตารางอันดับคำวางคู่ไว้

03ข้อมูลที่ต้องใช้

รูปทรงของข้อมูลตารางแบบยาว (หนึ่งแถวหนึ่งสังเกต)
จำนวนมิติที่เข้ารหัสได้2 มิติ
จำนวนแถวที่เหมาะ30–120 คำขั้นต่ำ 10 แถว
เส้นฐานศูนย์ไม่เกี่ยวข้องขนาดเริ่มจากศูนย์โดยธรรมชาติ

คอลัมน์ที่ต้องเตรียม

คอลัมน์ทำหน้าที่ชนิดเข้ารหัสด้วยจำนวนค่าที่เหมาะหมายเหตุ
wordคำข้อความtext20–200 คำ★ ต้องตัดคำหยุดออกก่อน
countความถี่จำนวนนับsizeบวกเท่านั้นควบคุมขนาดตัวอักษร

ต้องเตรียมข้อมูลอย่างไรก่อนวาด

  1. ★ ตัดคำหยุดออกให้หมด ไม่อย่างนั้นภาพจะเต็มไปด้วยคำว่า "ที่" และ "และ"
  2. รวมรูปคำที่ความหมายเดียวกัน
  3. ตัดสินใจว่าจะตัดที่ความถี่เท่าไร

ค่าที่หายไป — คำที่ถูกตัดออกด้วยเกณฑ์ความถี่ต้องระบุจำนวนไว้ในคำอธิบาย

สเกลของแกน — ★ พื้นที่ของคำควรแปรตามความถี่ ซึ่งแปลว่าความสูงตัวอักษรแปรตามรากที่สอง

กราฟจะเริ่มพังเมื่อไร

เกิน 200 คำ คำเล็กอ่านไม่ออกและกินที่โดยเปล่าประโยชน์

หน้าตาไฟล์ที่ต้องเตรียม

word,count
ส่งเร็ว,331
ราคา,179

04อ่านแล้วเห็นอะไร

สิ่งที่เห็นได้จากภาพ

  • คำที่โดดเด่นที่สุดสองสามคำ
  • ความรู้สึกโดยรวมว่าข้อความชุดนี้พูดถึงอะไร
  • คำที่ไม่คาดคิดว่าจะปรากฏในชุดข้อมูลนี้

สิ่งที่กราฟนี้ตอบไม่ได้

  • ★ เทียบความถี่ระหว่างคำได้แย่มาก เพราะคนอ่านขนาดตัวอักษรไม่แม่น
  • ★ คำยาวกินพื้นที่มากกว่าคำสั้นที่ความถี่เท่ากัน
  • ตำแหน่งของคำไม่มีความหมายใด ๆ
  • บริบทของการใช้คำนั้น

อ่านตามลำดับนี้

  1. ดูคำที่ใหญ่ที่สุดสองสามคำเท่านั้น
  2. ไม่พยายามเทียบคำที่ขนาดใกล้เคียงกัน
  3. ดูตารางอันดับคำที่วางคู่ไว้เพื่ออ่านค่าจริง

คำถามที่ตอบได้

  • ข้อความชุดนี้พูดถึงเรื่องอะไรโดยรวม
  • คำไหนเด่นที่สุด

สัญญาณว่ามีอะไรผิด

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

05เหมาะกับการนำเสนอแบบไหน

ผู้ชมที่เหมาะผู้ชมทั่วไปที่ต้องการความรู้สึกมากกว่าตัวเลข
เวลาที่ผู้ชมต้องใช้ทันที
ขนาดเล็กสุดที่ยังอ่านได้400×300 px
สื่อสารกับคนทั่วไป
สไลด์ผู้บริหาร
รายงานเชิงวิเคราะห์อ่านค่าไม่ได้ จึงไม่มีประโยชน์ในงานวิเคราะห์
สิ่งพิมพ์คำเล็กมักหลุดขนาดที่พิมพ์แล้วอ่านได้

ทำอย่างไรให้คนอ่านได้ข้อสรุปโดยไม่ต้องบรรยาย

  1. ★ วางกราฟแท่งหรือตารางอันดับคำไว้คู่กันเสมอ
  2. ระบุว่าตัดคำหยุดอะไรออกบ้าง
  3. ไม่หมุนคำให้เอียงเกินสี่สิบห้าองศา

รูปแบบชื่อกราฟที่ควรใช้

คำที่พบบ่อยใน <แหล่งข้อมูล> โดย <คำ> พบมากที่สุด <จำนวน> ครั้ง

06เอาไปใช้ต่อ

โค้ดทุกชิ้นอ่านไฟล์ word-cloud-sample.csv ชุดเดียวกับที่ Playground ใช้ และตัวเลขในโค้ดเปลี่ยนตามค่าที่คุณปรับด้านล่าง

# ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*"
# ดาวน์โหลด word-cloud-sample.csv จากหน้านี้ แล้ววางไว้ข้างสคริปต์
import matplotlib
matplotlib.use("Agg")   # รันแบบไม่มีหน้าจอ ถ้ารันในเครื่องตัวเองลบบรรทัดนี้ได้
import matplotlib.pyplot as plt
import pandas as pd
from wordcloud import WordCloud  # pip install wordcloud

C1, C2, C3 = "#2a78d6", "#eb6834", "#1baf7a"   # palette ของคลัง เปลี่ยนเป็นสีองค์กรได้
INK, SURFACE = "#0b0b0b", "#fcfcfb"

df = pd.read_csv("word-cloud-sample.csv")
df["count"] = pd.to_numeric(df["count"], errors="coerce")
NOTE = "length"   # ← ค่าจาก Playground

fig, ax = plt.subplots(figsize=(7.6, 4.2), facecolor=SURFACE)
ax.set_facecolor(SURFACE)

freq = dict(zip(df["word"], df["count"]))
wc = WordCloud(width=900, height=500, background_color="#fcfcfb",
               colormap="Blues", prefer_horizontal=0.95,   # ไม่หมุนคำมาก
               font_path="THSarabunNew.ttf",               # ฟอนต์ไทยจำเป็น
               random_state=42).generate_from_frequencies(freq)
ax.imshow(wc, interpolation="bilinear")
ax.set_axis_off()
ax.set_title("คำที่พบบ่อย — ดูตารางอันดับประกอบเพื่ออ่านค่าจริง", loc="left", fontsize=9)

ax.spines[["top", "right"]].set_visible(False)   # ลดเส้นที่ไม่ได้ให้ข้อมูล
fig.tight_layout()
fig.savefig("word-cloud.png", dpi=160)
print("เขียน word-cloud.png แล้ว ·", len(df), "แถว")

ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*" · ทดสอบกับเวอร์ชัน 3.10

07ลองเล่นเพื่อเข้าใจ

ข้อมูลตัวอย่าง · 14 แถว · seed 457● คำนวณใหม่ในเบราว์เซอร์ทันทีที่ปรับค่า
คำยาวได้เปรียบ
ส่งเร็ว · 331 ครั้งส่งเร็วราคา · 179 ครั้งราคาคุณภาพ · 126 ครั้งคุณภาพบริการ · 95.0 ครั้งบริการแพ็กเกจ · 89.0 ครั้งแพ็กเกจคุ้มค่า · 62.0 ครั้งคุ้มค่าสวย · 61.0 ครั้งสวยช้า · 54.0 ครั้งช้าใช้ง่าย · 54.0 ครั้งใช้ง่ายพัง · 48.0 ครั้งพังแนะนำ · 45.0 ครั้งแนะนำร้านตอบไว · 45.0 ครั้งร้านตอบไวประทับใจ · 33.0 ครั้งประทับใจผิดรุ่น · 26.0 ครั้งผิดรุ่น

ขนาดตัวอักษรไม่ได้แปรตามความถี่อย่างตรงไปตรงมา — คำยาวกินพื้นที่มากกว่าคำสั้นที่ความถี่เท่ากัน

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

คำที่พบบ่อยที่สุดส่งเร็ว · 331
จำนวนคำที่แสดง14
อัตราส่วนคำแรก:คำสุดท้าย12.7×
ดูข้อมูลเป็นตาราง (14 แถว)
word cloud 14 คำ คำที่พบบ่อยที่สุดคือ ส่งเร็ว
คำความถี่
ส่งเร็ว331
ราคา179
คุณภาพ126
บริการ95.0
แพ็กเกจ89.0
คุ้มค่า62.0
สวย61.0
ช้า54.0
ใช้ง่าย54.0
พัง48.0
แนะนำ45.0
ร้านตอบไว45.0
ประทับใจ33.0
ผิดรุ่น26.0

ลองแล้วจะเห็นอะไร

  • สังเกตอะไร: หาคำยาวกับคำสั้นที่ความถี่ใกล้เคียงกัน จะเห็นว่าคำยาวกินพื้นที่มากกว่ามาก — นี่คือการบิดที่ติดมากับรูปแบบนี้

ข้อควรระวัง

  1. ★ ใช้ตอบคำถามเชิงปริมาณ ทั้งที่อ่านค่าได้แย่ที่สุดแบบหนึ่ง
  2. ไม่ตัดคำหยุดออก ทำให้ภาพเต็มไปด้วยคำที่ไม่มีความหมาย
  3. ใช้ความสูงตัวอักษรแปรตรงกับความถี่ ทำให้คำเด่นดูใหญ่เกินจริงมาก
  4. หมุนคำเอียงหลายทิศเพื่อความสวยงาม ซึ่งทำให้อ่านยากขึ้นโดยไม่ได้อะไรกลับมา

เมื่อไหร่ไม่ควรใช้กราฟนี้

  • ต้องเทียบความถี่ของคำใช้แทน: word-frequency-bar
  • ต้องดูว่าคำถูกใช้ในบริบทไหนใช้แทน: kwic-view
  • ต้องเทียบคำข้ามเอกสารหลายชุดใช้แทน: term-document-heatmap

กราฟที่เกี่ยวข้อง

เทคนิคถัดไป · แท่งความถี่คำ