Pandas & NumPy Academy · บทเรียน

กราฟหมวดหมู่: boxplot, barplot, violinplot

เปรียบเทียบการกระจายระหว่างกลุ่มด้วยกราฟกล่องและกราฟไวโอลิน และแสดงค่าเฉลี่ยของกลุ่มพร้อมแถบค่าคลาดเคลื่อนด้วย barplot

บทเรียน 2 จาก 413 ขั้นตอน

กราฟหมวดหมู่: boxplot, barplot, violinplot เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องใช้กราฟเปรียบเทียบข้อมูลเชิงหมวดหมู่

เมื่อคุณต้องการเปรียบเทียบตัวแปรเชิงตัวเลขระหว่างหมวดหมู่ต่าง ๆ เช่น ทิปที่ได้รับในแต่ละวันของสัปดาห์ หรือราคาสินค้าแยกตามแบรนด์ คุณจำเป็นต้องใช้กราฟเฉพาะทาง Seaborn มีกราฟเปรียบเทียบข้อมูลเชิงหมวดหมู่ที่สำคัญสามชนิด ได้แก่ boxplot, barplot และ violinplot แต่ละชนิดเผยให้เห็นแง่มุมที่แตกต่างกันของการแจกแจง และเหมาะกับเป้าหมายการวิเคราะห์ที่แตกต่างกัน

import seaborn as sns
import matplotlib.pyplot as plt

# Load the tips dataset — a classic Seaborn example
tips = sns.load_dataset('tips')
print(tips.groupby('day')['total_bill'].describe())

กราฟกล่องด้วย sns.boxplot

กราฟกล่องสรุปการแจกแจงด้วยค่าสถิติห้าค่า ได้แก่ ค่าต่ำสุด ควอไทล์ที่หนึ่ง (Q1) มัธยฐาน ควอไทล์ที่สาม (Q3) และค่าสูงสุด (ไม่นับค่าผิดปกติ) กล่องครอบคลุมตั้งแต่ Q1 ถึง Q3 (พิสัยระหว่างควอไทล์, IQR) เส้นภายในกล่องคือมัธยฐาน และหนวดกราฟยื่นไปถึง 1.5×IQR จุดที่อยู่นอกหนวดกราฟจะแสดงแยกเป็นค่าผิดปกติ กราฟกล่องเหมาะอย่างยิ่งสำหรับตรวจดูความเบ้และค่าผิดปกติได้อย่างรวดเร็ว

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.boxplot(data=tips, x='day', y='total_bill', order=['Thur', 'Fri', 'Sat', 'Sun'])
plt.title('Total Bill Distribution by Day')
plt.xlabel('Day')
plt.ylabel('Total Bill ($)')
plt.show()

การเพิ่ม Hue ให้กราฟกล่อง

พารามิเตอร์ hue แบ่งแต่ละหมวดหมู่ออกเป็นกลุ่มย่อยและแสดงเคียงข้างกันด้วยสีที่แตกต่างกัน ตัวอย่างเช่น การเพิ่ม hue='smoker' ให้กราฟกล่องที่แสดงบิลแยกตามวัน จะแสดงกล่องสองกล่องต่อวัน ได้แก่ กล่องสำหรับผู้สูบบุหรี่และผู้ไม่สูบบุหรี่ วิธีนี้ทำให้เปรียบเทียบตัวแปรสามตัวได้อย่างชัดเจนโดยไม่ต้องแบ่งเป็นช่อง ใช้คำอธิบายสัญลักษณ์เพื่อให้กราฟอ่านง่าย

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.boxplot(
    data=tips,
    x='day',
    y='total_bill',
    hue='smoker',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='Set2'
)
plt.title('Bill by Day and Smoker Status')
plt.legend(title='Smoker')
plt.show()

กราฟแท่งด้วย sns.barplot

sns.barplot() แสดงค่าเฉลี่ยของตัวแปรเชิงตัวเลขในแต่ละหมวดหมู่ พร้อมแถบความคลาดเคลื่อนที่แสดงช่วงความเชื่อมั่น 95% โดยค่าเริ่มต้น (คำนวณด้วยการสุ่มตัวอย่างซ้ำใน Seaborn รุ่นเก่า หรือคำนวณจากค่าคลาดเคลื่อนมาตรฐานในรุ่นใหม่) กราฟแท่งต่างจากฮิสโตแกรมตรงที่สรุปแต่ละกลุ่มเป็นค่าเดียว จึงเหมาะเมื่อคุณสนใจค่าเฉลี่ยและความไม่แน่นอนของค่า มากกว่ารูปร่างการแจกแจงทั้งหมด

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Show mean tip per day with 95% CI
sns.barplot(
    data=tips,
    x='day',
    y='tip',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='Blues_d',
    errorbar='ci'
)
plt.title('Average Tip by Day (with 95% CI)')
plt.ylabel('Average Tip ($)')
plt.show()

กราฟไวโอลินด้วย sns.violinplot

กราฟไวโอลินผสานกราฟกล่องเข้ากับเส้นโค้ง KDE ที่สะท้อนทั้งสองด้าน ความกว้างของไวโอลินในแต่ละค่าบนแกน y แสดงความหนาแน่นของข้อมูล ณ จุดนั้น ส่วนที่กว้างมีข้อมูลจำนวนมาก ส่วนที่แคบมีข้อมูลจำนวนน้อย กราฟไวโอลินถ่ายทอดข้อมูลได้มากกว่ากราฟกล่อง เพราะแสดงได้ว่าการแจกแจงเป็นแบบยูนิโมดัลหรือมัลติโมดัล แต่ต้องมีข้อมูลมากพอจึงจะมีความหมาย (ควรมี n > 20 ต่อกลุ่ม)

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.violinplot(
    data=tips,
    x='day',
    y='total_bill',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    palette='pastel',
    inner='quartile'  # show quartile lines inside the violin
)
plt.title('Bill Distribution by Day — Violin Plot')
plt.show()

พารามิเตอร์ inner ของ violinplot

พารามิเตอร์ inner ของ violinplot ควบคุมสิ่งที่วาดไว้ภายในรูปไวโอลิน ตัวเลือกต่าง ๆ ได้แก่ 'box' (กราฟกล่องขนาดเล็ก), 'quartile' (เส้นแนวนอนที่ Q1 มัธยฐาน และ Q3), 'point' (จุดข้อมูลแต่ละจุด) และ 'stick' (ขีดตั้งสำหรับข้อมูลแต่ละรายการ) การตั้งค่า inner=None จะแสดงเฉพาะขอบเขตความหนาแน่นโดยไม่มีเครื่องหมายภายใน ทำให้ดูสะอาดที่สุดสำหรับการเปรียบเทียบเคียงข้างกัน

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

sns.violinplot(data=tips, x='smoker', y='tip',
               inner='box', ax=axes[0])
axes[0].set_title('inner="box"')

sns.violinplot(data=tips, x='smoker', y='tip',
               inner='point', ax=axes[1])
axes[1].set_title('inner="point"')

plt.tight_layout()
plt.show()

การรวมกราฟจุดกระจายกับกราฟกล่อง/กราฟไวโอลิน

การเพิ่ม sns.stripplot() ไว้ด้านบนของกราฟกล่องหรือกราฟไวโอลิน จะแสดงจุดข้อมูลแต่ละจุดเป็นจุดกลม ช่วยไม่ให้ค่าผิดปกติและกลุ่มตัวอย่างขนาดเล็กถูกซ่อนไว้ ตั้งค่า jitter=True เพื่อกระจายจุดในแนวนอน ไม่ให้จุดทั้งหมดซ้อนทับกัน และตั้งค่า alpha เพื่อทำให้จุดโปร่งแสงบางส่วนเมื่อมีจุดจำนวนมาก

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

ax = sns.boxplot(data=tips, x='day', y='tip',
                 order=['Thur', 'Fri', 'Sat', 'Sun'],
                 palette='Set3', width=0.5)

# Overlay individual points
sns.stripplot(data=tips, x='day', y='tip',
              order=['Thur', 'Fri', 'Sat', 'Sun'],
              color='black', alpha=0.3, jitter=True, size=3, ax=ax)

plt.title('Tip Distribution with Raw Points')
plt.show()

การเลือกระหว่าง boxplot, barplot และ violinplot

ใช้กราฟกล่องเมื่อต้องการดูมัธยฐาน IQR และค่าผิดปกติ โดยมีขนาดกลุ่มตัวอย่างปานกลาง ใช้กราฟแท่งเมื่อผู้ชมสนใจค่าเฉลี่ยและช่วงความเชื่อมั่น ซึ่งพบได้บ่อยในรายงานและแดชบอร์ด ใช้กราฟไวโอลินเมื่อต้องการเผยให้เห็นรูปร่างการแจกแจงทั้งหมด โดยเฉพาะการแจกแจงแบบมัลติโมดัล สำหรับชุดข้อมูลขนาดเล็ก (n < 30 ต่อกลุ่ม) ควรเลือกใช้กราฟกล่องร่วมกับกราฟจุดกระจายแทนกราฟไวโอลิน เพราะเส้นโค้ง KDE จะไม่น่าเชื่อถือเมื่อมีจุดข้อมูลน้อย

catplot: อินเทอร์เฟซระดับรูปภาพ

sns.catplot() เป็นตัวห่อหุ้มระดับรูปภาพสำหรับกราฟข้อมูลเชิงหมวดหมู่ทั้งหมด ระบุ kind='box', 'bar', 'violin', 'strip', 'swarm', 'count' หรือ 'point' เพื่อสลับชนิดของกราฟ ข้อได้เปรียบสำคัญคือพารามิเตอร์ col และ row ซึ่งสร้างตารางกราฟย่อยโดยอัตโนมัติ เช่น สร้างแผงแยกตามเพศหรือช่วงเวลาในแต่ละวันโดยไม่ต้องสร้าง plt.subplots ด้วยตนเอง

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Faceted box plots: separate panel per time of day
sns.catplot(
    data=tips,
    x='day',
    y='total_bill',
    col='time',
    kind='box',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    height=5,
    aspect=0.8
)
plt.suptitle('Bill by Day, Faceted by Time', y=1.02)
plt.show()

กราฟนับจำนวนสำหรับตารางความถี่

sns.countplot() แสดงจำนวนข้อมูลที่อยู่ในแต่ละหมวดหมู่ หรือกล่าวได้ว่าเป็นกราฟแท่งของจำนวนข้อมูล โดยเทียบเท่ากับการเรียก value_counts() แล้วนำผลไปสร้างกราฟ ใช้กราฟนี้เพื่อแสดงความไม่สมดุลของคลาสในชุดข้อมูล ความถี่ของค่าเชิงหมวดหมู่ หรือขนาดกลุ่มตัวอย่างของแต่ละกลุ่มก่อนทำการเปรียบเทียบการแจกแจง เรียงแท่งตามความถี่ด้วย order=df['col'].value_counts().index

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Count by day, sorted by frequency
day_order = tips['day'].value_counts().index

sns.countplot(data=tips, x='day', order=day_order, palette='viridis')
plt.title('Number of Observations per Day')
plt.ylabel('Count')
plt.show()

กราฟจุดสำหรับเปรียบเทียบผลกระทบ

sns.pointplot() วาดค่าเฉลี่ยของแต่ละหมวดหมู่เป็นจุดและเชื่อมจุดเหล่านั้นด้วยเส้น ทำให้มองเห็นแนวโน้มของหมวดหมู่ที่เรียงลำดับได้ง่าย แถบความคลาดเคลื่อนแสดงช่วงความเชื่อมั่น กราฟนี้มีประโยชน์เป็นพิเศษเมื่อแกน x แทนกลุ่มที่เรียงลำดับ เช่น ช่วงอายุหรือระดับการศึกษา และคุณต้องการเน้นทิศทางกับขนาดของการเปลี่ยนแปลงระหว่างกลุ่ม ไม่ใช่เพียงค่าเฉลี่ยที่แยกจากกัน

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.pointplot(
    data=tips,
    x='day',
    y='tip',
    hue='smoker',
    order=['Thur', 'Fri', 'Sat', 'Sun'],
    dodge=True,
    capsize=0.1
)
plt.title('Mean Tip by Day and Smoker Status')
plt.show()

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับกราฟข้อมูลเชิงหมวดหมู่ของ Seaborn จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า sns.boxplot สรุปการแจกแจงด้วยมัธยฐาน IQR และค่าผิดปกติ, sns.barplot แสดงค่าเฉลี่ยของกลุ่มพร้อมแถบความคลาดเคลื่อนของช่วงความเชื่อมั่น และ sns.violinplot เผยให้เห็นรูปร่างการแจกแจงทั้งหมด รวมถึงการแจกแจงแบบมัลติโมดัล บทถัดไปเราจะสำรวจกราฟกระจายและกราฟคู่เพื่อแสดงความสัมพันธ์ระหว่างตัวแปรเชิงตัวเลข

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “กราฟหมวดหมู่: boxplot, barplot, violinplot” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “กราฟหมวดหมู่: boxplot, barplot, violinplot” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “กราฟหมวดหมู่: boxplot, barplot, violinplot”

เปรียบเทียบการกระจายระหว่างกลุ่มด้วยกราฟกล่องและกราฟไวโอลิน และแสดงค่าเฉลี่ยของกลุ่มพร้อมแถบค่าคลาดเคลื่อนด้วย barplot คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “กราฟหมวดหมู่: boxplot, barplot, violinplot” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม

ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. กราฟการกระจาย: histplot และ kdeplot
  2. กราฟหมวดหมู่: boxplot, barplot, violinplot
  3. กราฟกระจายและกราฟคู่
  4. ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์
← กลับไปที่ Pandas & NumPy Academy