กราฟการกระจาย: histplot และ kdeplot
แสดงรูปร่างของการกระจายข้อมูลตัวเลขด้วย sns.histplot และซ้อนการประมาณความหนาแน่นแบบเคอร์เนลด้วย sns.kdeplot
กราฟการกระจาย: histplot และ kdeplot เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
Seaborn และแผนภูมิการแจกแจง
Seaborn เป็นไลบรารีแสดงภาพข้อมูลเชิงสถิติที่สร้างขึ้นบน Matplotlib โดยมีส่วนเชื่อมต่อระดับสูง ซึ่งช่วยสร้างแผนภูมิที่สวยงามและให้ข้อมูลได้ด้วยโค้ดเพียงเล็กน้อย สิ่งแรก ๆ ที่ควรทำความเข้าใจเกี่ยวกับชุดข้อมูลใด ๆ คือรูปร่างของการแจกแจง และ histplot กับ kdeplot ของ Seaborn คือเครื่องมือหลักสำหรับงานนี้
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Load a built-in dataset
tips = sns.load_dataset('tips')
print(tips.head())การสร้างฮิสโตแกรมพื้นฐานด้วย histplot
sns.histplot(data, x='column') สร้างฮิสโตแกรมของตัวแปรตัวเลข Seaborn จะเลือกจำนวนช่วงที่เหมาะสมโดยอัตโนมัติ โดยใช้กฎของ Sturges เป็นค่าเริ่มต้น คุณสามารถปรับจำนวนช่วงด้วยพารามิเตอร์ bins หรือปล่อยให้ Seaborn เลือกโดยอัตโนมัติ ความสูงของแท่งแต่ละแท่งแสดงจำนวนข้อสังเกตในช่วงนั้น
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Basic histogram of total bill amounts
sns.histplot(data=tips, x='total_bill')
plt.title('Distribution of Total Bill')
plt.xlabel('Total Bill ($)')
plt.show()การควบคุม Bins และพารามิเตอร์ Stat
พารามิเตอร์ bins ควบคุมจำนวนแท่งที่ฮิสโตแกรมแสดง ยิ่งมีช่วงมากก็ยิ่งเห็นรายละเอียดปลีกย่อยมากขึ้น แต่อาจดูคล้ายมีสัญญาณรบกวน พารามิเตอร์ stat เปลี่ยนความหมายของแกน y ได้แก่ 'count' (ค่าเริ่มต้น), 'density' (ความหนาแน่นของความน่าจะเป็น), 'probability' (สัดส่วนของข้อสังเกต) หรือ 'percent' การเลือก stat='density' ทำให้เปรียบเทียบฮิสโตแกรมจากชุดข้อมูลที่มีขนาดต่างกันได้
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
# Count histogram with 20 bins
sns.histplot(data=tips, x='total_bill', bins=20, ax=axes[0])
axes[0].set_title('Count (20 bins)')
# Density histogram
sns.histplot(data=tips, x='total_bill', stat='density', ax=axes[1])
axes[1].set_title('Density')
plt.tight_layout()
plt.show()การซ้อน KDE บนฮิสโตแกรม
การกำหนด kde=True ใน histplot จะซ้อนเส้นโค้งการประมาณความหนาแน่นแบบเคอร์เนล (KDE) บนฮิสโตแกรม KDE คือการประมาณการแจกแจงความน่าจะเป็นพื้นฐานแบบต่อเนื่องที่ราบเรียบ การใช้ร่วมกันมีประสิทธิภาพมาก: ฮิสโตแกรมแสดงจำนวนข้อมูลดิบในแต่ละช่วง ขณะที่ KDE แสดงรูปร่างโดยรวมและตรวจจับยอดหลายยอด (การมีหลายฐานนิยม)
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Histogram with KDE overlay
sns.histplot(data=tips, x='total_bill', kde=True, bins=25, color='steelblue')
plt.title('Bill Distribution with KDE Overlay')
plt.xlabel('Total Bill ($)')
plt.show()การใช้ kdeplot แยกต่างหาก
sns.kdeplot() วาดเฉพาะเส้นโค้งความหนาแน่นที่ราบเรียบ โดยไม่มีแท่งฮิสโตแกรม วิธีนี้เหมาะเมื่อเปรียบเทียบการแจกแจงหลายชุดบนแกนเดียวกัน เพราะฮิสโตแกรมที่ซ้อนทับกันอาจทำให้สับสน ขณะที่เส้นโค้ง KDE ที่ซ้อนทับกันยังอ่านได้ชัดเจน พารามิเตอร์ fill=True จะแรเงาพื้นที่ใต้เส้นโค้ง ทำให้แยกกลุ่มต่าง ๆ ด้วยสายตาได้ง่ายขึ้น
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# KDE plot for lunch vs dinner bills
sns.kdeplot(data=tips, x='total_bill', hue='time', fill=True, alpha=0.5)
plt.title('Bill Distribution: Lunch vs Dinner')
plt.xlabel('Total Bill ($)')
plt.show()พารามิเตอร์ hue สำหรับการเปรียบเทียบกลุ่ม
ทั้ง histplot และ kdeplot รับพารามิเตอร์ hue ซึ่งแบ่งข้อมูลตามคอลัมน์หมวดหมู่และวาดแต่ละกลุ่มด้วยสีที่แตกต่างกัน ทำให้เปรียบเทียบการแจกแจงระหว่างกลุ่มได้ง่าย เมื่อใช้ histplot ร่วมกับ hue ให้กำหนด stat='density' เพื่อให้เปรียบเทียบกลุ่มที่มีขนาดต่างกันได้อย่างเป็นธรรม
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Compare tip distributions by smoker status
sns.histplot(
data=tips,
x='tip',
hue='smoker',
stat='density',
common_norm=False,
bins=20,
alpha=0.6
)
plt.title('Tip Distribution by Smoker Status')
plt.show()แบนด์วิดท์ใน KDE: พารามิเตอร์ bw_adjust
KDE มีพารามิเตอร์ปรับแต่งที่เรียกว่าแบนด์วิดท์ ซึ่งควบคุมความราบเรียบของเส้นโค้ง แบนด์วิดท์ขนาดเล็กทำให้เส้นโค้งขรุขระและปรับเข้ากับข้อมูลมากเกินไป ส่วนแบนด์วิดท์ขนาดใหญ่ทำให้เส้นโค้งราบเรียบเกินไปและบดบังลักษณะที่มีอยู่จริง Seaborn ใช้ bw_adjust (ค่าเริ่มต้น 1.0) เป็นตัวคูณของแบนด์วิดท์ที่เลือกโดยอัตโนมัติ ค่าต่ำกว่า 1 เพิ่มความขรุขระ ส่วนค่ามากกว่า 1 เพิ่มความราบเรียบ
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
bw_values = [0.3, 1.0, 3.0]
for ax, bw in zip(axes, bw_values):
sns.kdeplot(data=tips, x='total_bill', bw_adjust=bw, ax=ax)
ax.set_title(f'bw_adjust={bw}')
plt.tight_layout()
plt.show()การแจกแจงแบบ 2 มิติด้วย histplot และ kdeplot
ทั้ง histplot และ kdeplot รองรับการพล็อตแบบสองมิติโดยส่งพารามิเตอร์ x และ y พร้อมกัน ฮิสโตแกรม 2 มิติแสดงตารางความถี่ที่ใช้สีแทนค่า ส่วน KDE 2 มิติแสดงเส้นชั้นความหนาแน่นเท่ากัน แผนภูมิเหล่านี้ช่วยให้เห็นการแจกแจงร่วมของตัวแปรตัวเลขสองตัว และดูได้ว่าตัวแปรมีความสัมพันธ์กันหรือไม่
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 2D histogram
sns.histplot(data=tips, x='total_bill', y='tip', ax=axes[0])
axes[0].set_title('2D Histogram')
# 2D KDE contour plot
sns.kdeplot(data=tips, x='total_bill', y='tip', fill=True, ax=axes[1])
axes[1].set_title('2D KDE Contours')
plt.tight_layout()
plt.show()การปรับรูปลักษณ์ด้วยธีมของ Seaborn
Seaborn มีธีมในตัวผ่าน sns.set_theme(style=) สไตล์ที่มีให้ใช้ ได้แก่ 'darkgrid', 'whitegrid', 'dark', 'white' และ 'ticks' นอกจากนี้ยังสามารถกำหนดชุดสีด้วย palette= หรือ sns.set_palette() การตั้งค่าเหล่านี้มีผลกับการพล็อตทั้งหมดที่ตามมาในเซสชัน ทำให้สร้างรูปลักษณ์ที่สอดคล้องกันได้ง่าย
import seaborn as sns
import matplotlib.pyplot as plt
# Apply a clean whitegrid theme
sns.set_theme(style='whitegrid', palette='muted')
tips = sns.load_dataset('tips')
sns.histplot(data=tips, x='total_bill', kde=True, bins=20)
plt.title('Styled Distribution Plot')
plt.show()
# Reset to defaults when done
sns.reset_defaults()การตีความรูปร่างของการแจกแจง
เมื่ออ่านกราฟการแจกแจง ให้พิจารณาคุณลักษณะสำคัญสี่ประการ จุดศูนย์กลาง: ข้อมูลกระจุกตัวอยู่ที่ใด (ค่าเฉลี่ย/มัธยฐาน) การกระจาย: การแจกแจงกว้างมากน้อยเพียงใด (ส่วนเบี่ยงเบนมาตรฐาน) ความเบ้: หางของการแจกแจงยาวไปทางขวา (ความเบ้เป็นบวก) หรือทางซ้าย (ความเบ้เป็นลบ) จำนวนยอด: การแจกแจงมียอดเดียว (ยูนิโมดัล) หรือมีมากกว่าหนึ่งยอด (ไบโมดัล/มัลติโมดัล) การแจกแจงแบบไบโมดัลมักบ่งชี้ว่ามีกลุ่มย่อยที่ซ่อนอยู่สองกลุ่ม ซึ่งควรแยกออกจากกัน
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Simulate a bimodal distribution
np.random.seed(42)
data = np.concatenate([
np.random.normal(loc=20, scale=3, size=300),
np.random.normal(loc=45, scale=5, size=200)
])
sns.histplot(data, kde=True, bins=40)
plt.title('Bimodal Distribution — Two Hidden Groups')
plt.xlabel('Value')
plt.show()displot: ฟังก์ชันการแจกแจงระดับรูปภาพ
sns.displot() เป็นตัวห่อหุ้มระดับรูปภาพที่สร้าง Figure ของตนเอง และรองรับการแบ่งเป็นช่องตามแถวและคอลัมน์โดยใช้พารามิเตอร์ col= และ row= ระบุ kind='hist', kind='kde' หรือ kind='ecdf' เพื่อสลับชนิดของกราฟ ECDF (ฟังก์ชันการแจกแจงสะสมเชิงประจักษ์) มีประโยชน์เป็นพิเศษ เพราะแสดงสัดส่วนของข้อมูลที่มีค่าน้อยกว่าค่าแต่ละค่าโดยไม่ต้องเลือกช่วงชั้นข้อมูล
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Faceted KDE by day of week
sns.displot(
data=tips,
x='total_bill',
col='day',
col_wrap=2,
kind='kde',
fill=True
)
plt.suptitle('Bill Distributions by Day', y=1.02)
plt.show()ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับกราฟการแจกแจงของ Seaborn จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า sns.histplot สร้างฮิสโตแกรมที่ปรับแต่งช่วงชั้นข้อมูลและพารามิเตอร์สถิติได้, sns.kdeplot วาดเส้นโค้งความหนาแน่นแบบเรียบซึ่งเหมาะสำหรับการเปรียบเทียบกลุ่ม และ พารามิเตอร์ hue แบ่งกราฟทั้งสองชนิดตามตัวแปรเชิงหมวดหมู่เพื่อให้เปรียบเทียบเคียงข้างกันได้ บทถัดไปเราจะสำรวจกราฟเปรียบเทียบข้อมูลเชิงหมวดหมู่ เช่น กราฟกล่อง กราฟแท่ง และกราฟไวโอลิน
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “กราฟการกระจาย: histplot และ kdeplot” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “กราฟการกระจาย: histplot และ kdeplot” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “กราฟการกระจาย: histplot และ kdeplot”
แสดงรูปร่างของการกระจายข้อมูลตัวเลขด้วย sns.histplot และซ้อนการประมาณความหนาแน่นแบบเคอร์เนลด้วย sns.kdeplot คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “กราฟการกระจาย: histplot และ kdeplot” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กราฟการกระจาย: histplot และ kdeplot
- กราฟหมวดหมู่: boxplot, barplot, violinplot
- กราฟกระจายและกราฟคู่
- ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์