ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์
คำนวณเมทริกซ์สหสัมพันธ์ด้วย DataFrame.corr() และแสดงเป็นฮีตแมปที่ใช้สีแทนค่าด้วย sns.heatmap
ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์ เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
เมทริกซ์สหสัมพันธ์คืออะไร
เมทริกซ์สหสัมพันธ์ คือตารางรูปสี่เหลี่ยมจัตุรัสที่ช่อง (i, j) มีค่า สัมประสิทธิ์สหสัมพันธ์ของเพียร์สัน ระหว่างคอลัมน์ i และคอลัมน์ j ค่าอยู่ในช่วงตั้งแต่ -1 (สหสัมพันธ์เชิงเส้นเชิงลบอย่างสมบูรณ์) ถึง +1 (เชิงบวกอย่างสมบูรณ์) โดย 0 หมายถึงไม่มีความสัมพันธ์เชิงเส้น เส้นทแยงมุมจะมีค่าเป็น 1 เสมอ (ตัวแปรมีสหสัมพันธ์อย่างสมบูรณ์กับตัวเอง) เมทริกซ์สหสัมพันธ์เป็นขั้นตอนแรกในการทำความเข้าใจว่าตัวแปรใดเปลี่ยนแปลงไปพร้อมกัน ก่อนสร้างแบบจำลอง
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Compute correlation matrix for numeric columns
tips = sns.load_dataset('tips')
corr = tips[['total_bill', 'tip', 'size']].corr()
print(corr.round(2))การคำนวณเมทริกซ์สหสัมพันธ์
เรียกใช้ DataFrame.corr() เพื่อคำนวณสหสัมพันธ์แบบเพียร์สันเป็นคู่สำหรับคอลัมน์ตัวเลขทั้งหมด พารามิเตอร์ method จะกำหนดว่าจะคำนวณสหสัมพันธ์แบบใด: 'pearson' (ค่าเริ่มต้น เป็นเชิงเส้น), 'spearman' (อิงอันดับ ทนต่อค่าผิดปกติและความสัมพันธ์แบบโมโนโทนิกที่ไม่เป็นเส้นตรง) หรือ 'kendall' สำหรับข้อมูลการเงินหรือข้อมูลจำนวนที่มีการเบ้ Spearman มักให้ข้อมูลมากกว่า Pearson
import pandas as pd
import seaborn as sns
tips = sns.load_dataset('tips')
numeric = tips.select_dtypes(include='number')
# Pearson vs Spearman
pearson = numeric.corr(method='pearson')
spearman = numeric.corr(method='spearman')
print('Pearson:')
print(pearson.round(2))
print('\nSpearman:')
print(spearman.round(2))แผนภาพความร้อนพื้นฐานด้วย sns.heatmap
sns.heatmap(data) รับอาร์เรย์สองมิติหรือ DataFrame แล้วแสดงผลเป็นตารางสี โดยสีของแต่ละช่องจะเข้ารหัสค่าตัวเลขของช่องนั้น เมื่อนำไปใช้กับเมทริกซ์สหสัมพันธ์ สีโทนร้อน (แดง) มักแทนสหสัมพันธ์เชิงบวก และสีโทนเย็น (น้ำเงิน) แทนสหสัมพันธ์เชิงลบ พารามิเตอร์ annot=True จะแสดงค่าตัวเลขภายในแต่ละช่อง ซึ่งจำเป็นต่อการอ่านแผนภาพความร้อนสหสัมพันธ์อย่างถูกต้อง
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
sns.heatmap(corr, annot=True, fmt='.2f')
plt.title('Correlation Heatmap — Tips Dataset')
plt.tight_layout()
plt.show()การเลือกแผนผังสีที่เหมาะสม
สำหรับเมทริกซ์สหสัมพันธ์ ให้ใช้ แผนผังสีแบบแยกขั้ว ที่มีจุดกึ่งกลางอยู่ที่ศูนย์เสมอ: cmap='coolwarm', 'RdBu_r' หรือ 'vlag' แผนผังเหล่านี้ใช้สีหนึ่งแทนค่าบวก อีกสีแทนค่าลบ และใช้สีเป็นกลางที่จุดศูนย์ หลีกเลี่ยงแผนผังสีแบบลำดับ (เช่น 'Blues') กับข้อมูลสหสัมพันธ์ เพราะจะทำให้ไม่สามารถแยกความแตกต่างระหว่างสหสัมพันธ์เชิงบวกและเชิงลบด้วยสายตาได้ กำหนด vmin=-1, vmax=1 เพื่อให้สเกลสีครอบคลุมช่วงสหสัมพันธ์ทั้งหมด
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
sns.heatmap(
corr,
annot=True,
fmt='.2f',
cmap='coolwarm',
vmin=-1,
vmax=1,
center=0
)
plt.title('Correlation Heatmap with Diverging Palette')
plt.tight_layout()
plt.show()การปิดบังสามเหลี่ยมด้านบน
เนื่องจากเมทริกซ์สหสัมพันธ์มีสมมาตร (corr[i,j] == corr[j,i]) การแสดงทั้งสองส่วนจึงซ้ำซ้อน ใช้ np.triu เพื่อสร้างหน้ากากสำหรับสามเหลี่ยมด้านบน แล้วส่งให้กับ mask= ใน sns.heatmap วิธีนี้ลดจำนวนช่องลงครึ่งหนึ่ง ทำให้แผนภาพไม่รกและอ่านง่ายขึ้น นอกจากนี้ยังสามารถปิดบังค่าบนเส้นทแยงมุม (ซึ่งเป็น 1.0 ทั้งหมด) ได้ เพราะไม่มีข้อมูลที่เป็นประโยชน์
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
# Mask the upper triangle (including diagonal)
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(
corr,
mask=mask,
annot=True,
fmt='.2f',
cmap='coolwarm',
vmin=-1,
vmax=1
)
plt.title('Lower-Triangle Correlation Heatmap')
plt.tight_layout()
plt.show()การปรับแต่งคำอธิบายและขนาดช่อง
ควบคุมรูปแบบคำอธิบายด้วย fmt= (เช่น '.2f' สำหรับทศนิยมสองตำแหน่ง) และควบคุมขนาดตัวอักษรด้วย annot_kws={'size': 10} พารามิเตอร์ linewidths จะเพิ่มเส้นบาง ๆ ระหว่างช่อง ทำให้ตารางอ่านง่ายขึ้นสำหรับเมทริกซ์ขนาดใหญ่ ใช้ square=True เพื่อบังคับให้ช่องเป็นสี่เหลี่ยมจัตุรัสโดยไม่ขึ้นกับขนาดรูป ซึ่งทำให้แผนภาพความร้อนดูสะอาดและสมดุล
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Load a wider dataset for a more interesting heatmap
penguins = sns.load_dataset('penguins').select_dtypes('number')
corr = penguins.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(
corr,
mask=mask,
annot=True,
fmt='.2f',
cmap='vlag',
vmin=-1,
vmax=1,
linewidths=0.5,
square=True,
annot_kws={'size': 10}
)
plt.title('Penguins Correlation Matrix')
plt.tight_layout()
plt.show()การจัดกลุ่มด้วย clustermap
sns.clustermap() จัดเรียงแถวและคอลัมน์ใหม่โดยใช้ การจัดกลุ่มแบบลำดับชั้น เพื่อรวมตัวแปรที่มีรูปแบบสหสัมพันธ์คล้ายกันไว้ด้วยกัน วิธีนี้ช่วยให้ระบุกลุ่มคุณลักษณะที่มีสหสัมพันธ์กันในเมทริกซ์ขนาดใหญ่ได้ง่ายขึ้น เดนโดรแกรมบนแกนด้านบนและด้านซ้ายจะแสดงต้นไม้การจัดกลุ่ม ใช้ method='ward' และ metric='euclidean' เป็นค่าเริ่มต้นที่เหมาะสมสำหรับการจัดกลุ่มตามสหสัมพันธ์
import seaborn as sns
import matplotlib.pyplot as plt
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()
sns.clustermap(
corr,
cmap='coolwarm',
vmin=-1,
vmax=1,
annot=True,
fmt='.2f',
figsize=(6, 6)
)
plt.suptitle('Clustered Correlation Matrix', y=1.02)
plt.show()แผนภาพความร้อนสำหรับข้อมูลตารางสรุป
แผนภาพความร้อนไม่ได้จำกัดอยู่แค่เมทริกซ์สหสัมพันธ์ ตารางตัวเลขสองมิติใด ๆ ก็ได้รับประโยชน์จากการเข้ารหัสด้วยสี รูปแบบที่ใช้กันทั่วไปคือคำนวณ ตารางสรุป (เช่น ค่าเฉลี่ยทิปตามวันและเวลา) แล้วแสดงผลเป็นแผนภาพความร้อน วิธีนี้เปลี่ยนตารางตัวเลขหนาแน่นให้เป็นตารางสีที่กวาดสายตาอ่านได้ทันที โดยค่าที่สูงสุดและต่ำสุดจะเด่นออกมาอย่างเห็นได้ชัด
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
tips = sns.load_dataset('tips')
# Pivot: average bill by day and time
pivot = tips.pivot_table(
values='total_bill',
index='day',
columns='time',
aggfunc='mean'
)
sns.heatmap(pivot, annot=True, fmt='.1f', cmap='YlOrRd')
plt.title('Average Bill by Day and Time')
plt.tight_layout()
plt.show()การตีความค่าสหสัมพันธ์
เมื่อตีความค่าสหสัมพันธ์ ให้ใช้เกณฑ์โดยประมาณต่อไปนี้: |r| < 0.2 = แทบไม่มี, 0.2-0.4 = อ่อน, 0.4-0.6 = ปานกลาง, 0.6-0.8 = แรง, > 0.8 = แรงมาก อย่างไรก็ตาม สหสัมพันธ์ไม่ได้บอกอะไรเกี่ยวกับ เหตุและผล และอาจเป็น ความสัมพันธ์ลวง (ดูเหมือนมีสหสัมพันธ์กันโดยบังเอิญเนื่องจากมีตัวแปรแทรกซ้อนที่สาม) ควรใช้การวิเคราะห์สหสัมพันธ์เชิงตัวเลขควบคู่กับแผนภาพกระจายเสมอ เพื่อตรวจสอบว่าความสัมพันธ์นั้นเป็นเส้นตรงจริงและไม่ได้เกิดจากค่าผิดปกติ
import pandas as pd
import seaborn as sns
# Find the most correlated pairs
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()
# Unstack to get pairs, remove self-correlations, sort
pairs = (corr
.unstack()
.reset_index()
.rename(columns={'level_0': 'var1', 'level_1': 'var2', 0: 'r'})
.query('var1 != var2')
.assign(abs_r=lambda df: df['r'].abs())
.sort_values('abs_r', ascending=False)
.drop_duplicates(subset='abs_r')
)
print(pairs.head(6).to_string(index=False))แผนภาพความร้อนสำหรับชุดข้อมูลขนาดใหญ่: การเลือกข้อมูลย่อย
สำหรับ DataFrames ที่มีหลายคอลัมน์ แผนภาพความร้อนสหสัมพันธ์แบบเต็มจะอ่านได้ยาก วิธีที่ดีกว่าคือ กรองเมทริกซ์สหสัมพันธ์ให้แสดงเฉพาะคู่ที่มี |r| สูงกว่าเกณฑ์ (เช่น 0.5) หรือเลือกเฉพาะคุณลักษณะที่มีสหสัมพันธ์กับตัวแปรเป้าหมายมากที่สุด นอกจากนี้ยังเลือกข้อมูลย่อยตามขอบเขตของงานได้ เช่น แสดงสหสัมพันธ์ระหว่างตัวชี้วัดทางการเงินแยกจากตัวชี้วัดการดำเนินงานในชุดข้อมูลธุรกิจ
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Show only features with |r| > 0.4 with any other feature
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()
# Filter columns that have at least one high correlation (excluding diagonal)
high_corr = (corr.abs() > 0.4).any(axis=1)
filtered = corr.loc[high_corr, high_corr]
mask = np.triu(np.ones_like(filtered, dtype=bool))
sns.heatmap(filtered, mask=mask, annot=True,
fmt='.2f', cmap='coolwarm', vmin=-1, vmax=1)
plt.title('High-Correlation Subset')
plt.tight_layout()
plt.show()การบันทึกแผนภาพความร้อนลงในไฟล์
แผนภาพความร้อนมักถูกรวมไว้ในรายงานและงานนำเสนอ เรียกใช้ plt.savefig('filename.png', dpi=150, bbox_inches='tight') หลังสร้างแผนภาพความร้อนเพื่อบันทึกภาพ อาร์กิวเมนต์ bbox_inches='tight' ป้องกันไม่ให้ป้ายกำกับแกนถูกตัด สำหรับรายงาน PDF ให้ใช้ format='pdf' เมื่อใช้ sns.clustermap รูปภาพจะถูกเก็บไว้ในออบเจ็กต์ที่ส่งกลับมา: g = sns.clustermap(...); g.savefig('plot.png')
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
fig, ax = plt.subplots(figsize=(6, 5))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
cmap='coolwarm', vmin=-1, vmax=1,
linewidths=0.5, ax=ax)
ax.set_title('Correlation Heatmap')
# Save to file
plt.savefig('/tmp/correlation_heatmap.png', dpi=150, bbox_inches='tight')
plt.close()
print('Saved to /tmp/correlation_heatmap.png')ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับแผนภาพความร้อนสหสัมพันธ์จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า DataFrame.corr() คำนวณสหสัมพันธ์เป็นคู่ sns.heatmap แสดงผลสหสัมพันธ์เป็นตารางสีด้วยแผนผังสีแบบแยกขั้วและคำอธิบาย และการปิดบังสามเหลี่ยมด้านบนช่วยตัดข้อมูลซ้ำซ้อน บทถัดไป เราจะสำรวจขั้นตอนการวิเคราะห์ข้อมูลเชิงสำรวจทั้งหมด ซึ่งเป็นรายการตรวจสอบอย่างเป็นระบบสำหรับจัดทำประวัติเบื้องต้นของชุดข้อมูลใหม่ทุกชุด
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์”
คำนวณเมทริกซ์สหสัมพันธ์ด้วย DataFrame.corr() และแสดงเป็นฮีตแมปที่ใช้สีแทนค่าด้วย sns.heatmap คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กราฟการกระจาย: histplot และ kdeplot
- กราฟหมวดหมู่: boxplot, barplot, violinplot
- กราฟกระจายและกราฟคู่
- ฮีตแมปสำหรับเมทริกซ์สหสัมพันธ์