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

กราฟการกระจาย: histplot และ kdeplot

แสดงรูปร่างของการกระจายข้อมูลตัวเลขด้วย sns.histplot และซ้อนการประมาณความหนาแน่นแบบเคอร์เนลด้วย sns.kdeplot

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

กราฟการกระจาย: 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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