กราฟหมวดหมู่: boxplot, barplot, violinplot
เปรียบเทียบการกระจายระหว่างกลุ่มด้วยกราฟกล่องและกราฟไวโอลิน และแสดงค่าเฉลี่ยของกลุ่มพร้อมแถบค่าคลาดเคลื่อนด้วย barplot
กราฟหมวดหมู่: 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กราฟการกระจาย: histplot และ kdeplot
- กราฟหมวดหมู่: boxplot, barplot, violinplot
- กราฟกระจายและกราฟคู่
- ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์