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

กราฟกระจายและกราฟคู่

สร้างกราฟกระจายที่ใช้ตัวแปรที่สามกำหนดสีด้วย sns.scatterplot และแสดงความสัมพันธ์ระหว่างคู่ตัวแปรทั้งหมดด้วย sns.pairplot

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

การแสดงภาพความสัมพันธ์ระหว่างตัวแปร

กราฟการแจกแจงแสดงตัวแปรทีละตัว เมื่อคุณต้องการทำความเข้าใจความสัมพันธ์ระหว่างตัวแปรเชิงตัวเลขสองตัว คุณจำเป็นต้องใช้กราฟกระจายและการแสดงภาพที่เกี่ยวข้อง เครื่องมือเหล่านี้ช่วยให้ตรวจพบสหสัมพันธ์ (ตัวแปรทั้งสองเพิ่มขึ้นพร้อมกันหรือไม่), กลุ่มข้อมูล (ข้อมูลมีกลุ่มย่อยหรือไม่) และค่าผิดปกติ (มีจุดผิดปกติที่อยู่ห่างจากกลุ่มหลักหรือไม่) Seaborn ทำให้การสร้างกราฟทั้งหมดนี้เป็นเรื่องง่ายด้วย scatterplot และ pairplot

import seaborn as sns
import matplotlib.pyplot as plt

# Load the classic iris dataset
iris = sns.load_dataset('iris')
print(iris.head())
print('\nShape:', iris.shape)

กราฟกระจายพื้นฐานด้วย sns.scatterplot

sns.scatterplot(data, x, y) แสดงข้อมูลแต่ละรายการเป็นจุดที่พิกัด (x, y) ต่างจาก plt.scatter ของ Matplotlib ตรงที่เวอร์ชันของ Seaborn จะเชื่อมโยงกับ DataFrame โดยอัตโนมัติ และทำงานร่วมกับความหมายของ hue, size และ style ได้ ผลลัพธ์คือกราฟหลายตัวแปรที่ให้ข้อมูลครบถ้วนด้วยการเรียกฟังก์ชันเพียงครั้งเดียว พร้อมคำอธิบายสัญลักษณ์อัตโนมัติ

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(data=tips, x='total_bill', y='tip')
plt.title('Tip vs Total Bill')
plt.xlabel('Total Bill ($)')
plt.ylabel('Tip ($)')
plt.show()

การเข้ารหัสตัวแปรที่สามด้วย hue

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

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='time',       # Lunch vs Dinner
    style='smoker',   # marker shape
    palette='deep'
)
plt.title('Tip vs Bill by Time and Smoker Status')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()

การเข้ารหัสขนาดและรูปแบบ

นอกจาก hue แล้ว กราฟกระจายของ Seaborn ยังรองรับ size (พื้นที่ของจุดใช้เข้ารหัสตัวแปรเชิงตัวเลข) และ style (รูปร่างเครื่องหมายใช้เข้ารหัสตัวแปรเชิงหมวดหมู่) การใช้ความหมายทั้งสามพร้อมกันอาจเผยให้เห็นรูปแบบที่ซับซ้อนของหลายตัวแปร แต่ก็เสี่ยงทำให้ผู้ชมรับข้อมูลมากเกินไป แนวทางปฏิบัติที่เหมาะสมคือใช้ hue ก่อน (เด่นชัดที่สุด) ตามด้วย style และใช้ size เฉพาะเมื่อจำเป็น

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.scatterplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='day',
    size='size',      # party size controls marker area
    sizes=(20, 200),  # min and max dot area
    alpha=0.7
)
plt.title('Tip vs Bill — Colour=Day, Size=Party Size')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()

การเพิ่มเส้นถดถอยด้วย regplot

sns.regplot() วาดกราฟกระจายและซ้อนเส้นถดถอยเชิงเส้นพร้อมแถบช่วงความเชื่อมั่น 95% แบบแรเงา เหมาะสำหรับแสดงภาพความแรงและทิศทางของความสัมพันธ์เชิงเส้นระหว่างตัวแปรสองตัว แถบช่วงความเชื่อมั่นจะแคบลงในบริเวณที่มีข้อมูลหนาแน่น และกว้างขึ้นบริเวณขอบซึ่งมีจุดข้อมูลที่ใช้ประมาณเส้นน้อยกว่า

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

sns.regplot(
    data=tips,
    x='total_bill',
    y='tip',
    scatter_kws={'alpha': 0.4},
    line_kws={'color': 'red'}
)
plt.title('Tip vs Bill with Regression Line')
plt.show()

lmplot: กราฟถดถอยแบบแบ่งเป็นช่อง

sns.lmplot() เป็นเวอร์ชันระดับรูปภาพของ regplot รองรับ hue (เส้นถดถอยแยกตามกลุ่มภายในแผงเดียวกัน) และ col/row (แผงแยกกัน) เครื่องมือนี้มีประโยชน์สำหรับตรวจสอบว่าความสัมพันธ์ระหว่างตัวแปรสองตัวแตกต่างกันในกลุ่มย่อยหรือไม่ เช่น ความสัมพันธ์ระหว่างบิลกับทิปมีความชันมากกว่าในมื้อเย็นเมื่อเทียบกับมื้อกลางวันหรือไม่

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Separate regression line per time (Lunch / Dinner)
sns.lmplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='time',
    scatter_kws={'alpha': 0.4},
    height=5
)
plt.suptitle('Regression by Meal Time', y=1.02)
plt.show()

บทนำสู่กราฟคู่

sns.pairplot(df) สร้างตารางกราฟกระจายสำหรับคู่ของคอลัมน์เชิงตัวเลขทุกคู่ใน DataFrame และแสดงกราฟการแจกแจงบนแนวทแยง วิธีนี้เป็นวิธีที่เร็วที่สุดในการแสดงภาพความสัมพันธ์ระหว่างข้อมูลแต่ละคู่ในชุดข้อมูลด้วยการเรียกเพียงครั้งเดียว สำหรับ DataFrame ที่มีคอลัมน์เชิงตัวเลข n คอลัมน์ pairplot จะสร้างตารางขนาด n×n วิธีนี้เหมาะที่สุดเมื่อ n อยู่ระหว่าง 3 ถึง 8 เพราะตารางที่ใหญ่กว่านั้นจะมีขนาดเล็กเกินไปจนอ่านได้ยาก

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')

# Create pairplot coloured by species
sns.pairplot(iris, hue='species', diag_kind='kde', plot_kws={'alpha': 0.5})
plt.suptitle('Iris Dataset Pairplot', y=1.02)
plt.show()

การปรับแต่งแนวทแยงของ pairplot

พารามิเตอร์ diag_kind ควบคุมสิ่งที่ปรากฏบนแนวทแยงของตาราง pairplot ใช้ 'hist' สำหรับฮิสโตแกรม หรือ 'kde' สำหรับค่าประมาณความหนาแน่นเคอร์เนล แนวทแยงแสดงการแจกแจงตัวแปรเดียวของแต่ละตัวแปร ส่วนแผงนอกแนวทแยงแสดงกราฟกระจายระหว่างคู่ตัวแปร นอกจากนี้ คุณยังใช้ corner=True เพื่อแสดงเฉพาะสามเหลี่ยมด้านล่าง ซึ่งจะลดจำนวนแผงลงครึ่งหนึ่งและลดข้อมูลซ้ำซ้อนได้

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')

# Show only lower triangle
sns.pairplot(
    iris,
    hue='species',
    diag_kind='hist',
    corner=True
)
plt.show()

PairGrid สำหรับการปรับแต่งอย่างเต็มรูปแบบ

sns.PairGrid ให้คุณควบคุมได้อย่างเต็มที่ว่าแต่ละส่วนของเมทริกซ์จะแสดงกราฟชนิดใด ใช้ g.map_upper(), g.map_lower() และ g.map_diag() เพื่อกำหนดฟังก์ชันที่แตกต่างกัน เช่น ใช้ regplot ในสามเหลี่ยมด้านบนและ kdeplot ในสามเหลี่ยมด้านล่าง ผลลัพธ์คือกราฟคุณภาพระดับสิ่งพิมพ์ ซึ่งแต่ละแผงถ่ายทอดข้อมูลที่แตกต่างกันเกี่ยวกับคู่ตัวแปร

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset('iris')
numeric_iris = iris.drop(columns=['species'])

g = sns.PairGrid(numeric_iris)
g.map_upper(sns.scatterplot, alpha=0.3)
g.map_lower(sns.kdeplot, fill=True)
g.map_diag(sns.histplot, kde=True)

plt.suptitle('Custom PairGrid', y=1.02)
plt.show()

การระบุสหสัมพันธ์ในกราฟกระจาย

เมื่ออ่านแผนภาพกระจาย ให้ประเมิน ทิศทาง (กลุ่มจุดลาดขึ้นหรือลง) ความแรง (จุดเกาะกลุ่มรอบแนวโน้มมากน้อยเพียงใด) และ รูปแบบ (เป็นเส้นตรงหรือเส้นโค้ง) ของความสัมพันธ์ ค่าสัมประสิทธิ์สหสัมพันธ์ r มีค่าตั้งแต่ -1 (ความสัมพันธ์เชิงลบอย่างสมบูรณ์) ถึง +1 (ความสัมพันธ์เชิงบวกอย่างสมบูรณ์) โดย 0 หมายถึงไม่มีความสัมพันธ์เชิงเส้น โปรดจำไว้ว่า สหสัมพันธ์ไม่ใช่เหตุและผล และความสัมพันธ์ที่ไม่เป็นเส้นตรงอาจมีค่า r ≈ 0 ได้

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(0)
x = np.linspace(0, 10, 100)

fig, axes = plt.subplots(1, 3, figsize=(12, 4))

# Strong positive correlation
axes[0].scatter(x, x + np.random.normal(0, 0.5, 100))
axes[0].set_title('Strong Positive (r≈0.99)')

# Weak correlation
axes[1].scatter(x, np.random.normal(5, 3, 100))
axes[1].set_title('No Correlation (r≈0)')

# Non-linear (quadratic) — r can be low
axes[2].scatter(x, (x-5)**2 + np.random.normal(0, 1, 100))
axes[2].set_title('Non-linear (r low despite pattern)')

plt.tight_layout()
plt.show()

jointplot สำหรับข้อมูลสองตัวแปรพร้อมการแจกแจงส่วนขอบ

sns.jointplot() รวมแผนภาพสองตัวแปรไว้ตรงกลางเข้ากับแผนภาพตัวแปรเดียวที่ขอบด้านบนและด้านขวา ให้ส่งค่า kind='scatter', 'hex', 'kde' หรือ 'reg' ชนิด hex มีประโยชน์เมื่อมีจุดทับซ้อนกันหลายพันจุด โดยจะแบ่งจุดลงในรูปหกเหลี่ยมและใช้สีแสดงความหนาแน่น จึงช่วยแก้ปัญหาจุดทับซ้อนจนทำให้แผนภาพกระจายอ่านไม่ได้เมื่อใช้กับชุดข้อมูลขนาดใหญ่

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# KDE joint plot with marginal distributions
sns.jointplot(
    data=tips,
    x='total_bill',
    y='tip',
    kind='reg',
    marginal_kws={'bins': 20}
)
plt.suptitle('Joint Distribution of Bill and Tip', y=1.02)
plt.show()

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

ทดสอบความเข้าใจเกี่ยวกับแผนภาพกระจายและแผนภาพคู่ของ Seaborn จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า sns.scatterplot สามารถเข้ารหัสตัวแปรได้สูงสุดสี่ตัวโดยใช้ x, y, hue, size และ style ส่วน sns.regplot/lmplot จะซ้อนเส้นถดถอยเพื่อวัดความสัมพันธ์เชิงเส้น และ sns.pairplot จะสร้างตารางของคู่ตัวแปรทั้งหมด ซึ่งเหมาะอย่างยิ่งสำหรับการวิเคราะห์เชิงสำรวจชุดข้อมูลหลายตัวแปร บทถัดไป เราจะสำรวจแผนภาพความร้อนสำหรับแสดงเมทริกซ์สหสัมพันธ์

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

บทเรียน “กราฟกระจายและกราฟคู่” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “กราฟกระจายและกราฟคู่”

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

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

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

บทเรียน “กราฟกระจายและกราฟคู่” ใช้เวลานานแค่ไหน

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

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

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

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

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