Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

สำรวจการสหสัมพันธ์ (Correlation) ใน Python

Correlation (สหสัมพันธ์) เป็น thuật ngữทางสถิติที่วัดความสัมพันธ์ระหว่างตัวแปรสองตัว หากความสัมพันธ์แข็งแรง หมายถึงการเปลี่ยนแปลงในตัวแปรหนึ่งสะท้อนการเปลี่ยนแปลงในอีกตัวแปรหนึ่งในรูปแบบที่คาดการณ์ได้ เราจะว่าตัวแปรทั้งสองมีสหสัมพันธ์ รวมถึง การเปลี่ยนแปลงในตัวแปรแรกอาจทำให้เกิดการเปลี่ยนแปลงเชิงบวกหรือเชิงลบในตัวแปรที่สอง ตามลำดับ พวกเขาจึงถูกกล่าวว่ามีสหสัมพันธ์เชิงบวกหรือเชิงลบ อย่าง lý tưởng ค่าสัมประสิทธิ์สหสัมพันธ์จะอยู่ระหว่าง -1 ถึง +1

  • หากค่าเป็น +1 หรือใกล้เคียง หมายถึงตัวแปรมีสหสัมพันธ์เชิงบวก และเปลี่ยนแปลงในทิศทางเดียวกันพร้อมกัน
  • หากค่าเป็น -1 หรือใกล้เคียง หมายถึงตัวแปรมีสหสัมพันธ์เชิงลบ และเปลี่ยนแปลงในทิศทางตรงข้ามพร้อมกัน
  • หากค่าเป็น 0 หรือใกล้เคียง หมายถึงตัวแปรไม่มีสหสัมพันธ์

มีวิธีต่างๆ ในการวัดสัมประสิทธิ์สหสัมพันธ์ พวกเขามีให้เป็นฟังก์ชันใน numpy หรือ scipy.stats ด้านล่างเราจะดูวิธีใช้งาน

ใช้ Spearman's Correlation

Spearman's correlation ใช้วัดระดับความสัมพันธ์ระหว่างตัวแปรที่เชื่อมโยงแบบเส้นตรง (linearly related) อิงตามสูตรที่แพ็กเกจ scipy.stats ใช้เพื่อสร้างผลลัพธ์ เป็นสูตรที่ใช้กว้างที่สุดสำหรับหาสหสัมพันธ์

ในตัวอย่างด้านล่าง เราเอาตัวแปรสองตัวที่ค่าถูกสร้างโดย numpy.random() function จากนั้นนำ spearmanr() มาใช้เพื่อได้ผลลัพธ์สุดท้าย

ตัวอย่าง

from numpy.random import randn
from numpy.random import seed
from scipy.stats import spearmanr

seed(1)
data_input1 = 20 * randn(1000) + 100
data_input2 = data_input1 + (10 * randn(1000) + 50)
correlation = spearmanr(data_input1, data_input2)
print(correlation)

ผลลัพธ์

การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้:

SpearmanrResult(correlation=0.8724050484050484, pvalue=1.58425746359e-312)

ใช้ Pearson's Correlation

Pearson's correlation เป็นอีกวิธีหนึ่งในการวัดระดับความสัมพันธ์ระหว่างตัวแปรที่เชื่อมโยงแบบเส้นตรง อิงตามสูตรที่แพ็กเกจ scipy.stats ใช้เพื่อสร้างผลลัพธ์

ในตัวอย่างด้านล่าง เราเอาตัวแปรสองตัวที่ค่าถูกสร้างโดย numpy.random() function จากนั้นนำ pearsonr() มาใช้เพื่อได้ผลลัพธ์สุดท้าย

ตัวอย่าง

from numpy.random import randn
from numpy.random import seed
from scipy.stats import pearsonr

seed(1)
data1 = 20 * randn(1000) + 100
data2 = data1 + (10 * randn(1000) + 50)
correlation, _ = pearsonr(data1, data2)
print('Pearsons correlation: %.3f' % correlation)

ผลลัพธ์

การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้:

Pearsons correlation: 0.888