Python’da Korelasyon Hesaplayan Fonksiyonun Oluşturulması

Yiğit Şener
2 min readJan 21, 2020

Python’da korelasyon hesaplayan bir çok veri analizi kütüphanesi bulunmaktadır. Bu yazıda ise korelasyonu bulma fonksiyonu adım adım kodlayarak tanımlanacaktır.

Korelasyon: İki değişken (vektör, liste, array, seri) arasında bir ilişki olup olmadığını ölçmeye yarayan ve bunu derecelendiren istatistiksel bir yöntemdir. Korelasyon sonucu -1 ile 1 arasında olup ilişkinin yönünü göstermektedir. Sonuç -1 ya da 1'e yakın ise değişkenler arasında güçlü bir ilişki olduğu söylenebilir.

Öncelikle bir önceki yazıda nasıl hesaplandığı anlatılan standart sapma ve ortalama fonksiyonlarını kullanacağız. Öncelikle bu iki fonksiyonu hatırlayalım.

def ortalamaBul(vektor):
veriAdedi = len(vektor)
if veriAdedi <= 1:
return vektor
else:
return sum(vektor) / veriAdedi

def standartSapmaBul(vektor):
sd = 0.0 # standart sapma
veriAdedi = len(vektor)
if veriAdedi <= 1:
return 0.0
else:
for _ in vektor:
sd += (float(_) - ortalamaBul(vektor)) ** 2
sd = (sd / float(veriAdedi)) ** 0.5
return sd

Rastgele sayı üretebilmek için “random” ve çıkan korelasyon katsayısını doğrulamak için ise “scipy” kütüphanelerini aşağıdaki gibi Python scriptine/betiğine aktarıyoruz.

from scipy import stats # Korelasyon testi için
import random # rassal seri üretmek için

Yukarıda belirtilen ortalama ve standart sapma fonksiyonlarını da kullanarak aşağıda yer alan korelasyon bulma fonksiyonunu oluşturuyoruz.

def korelasyonBul(vektor_1, vektor_2):
# 1. Adım
assert len(vektor_1) == len(vektor_2)
# 2. Adım
veri_adedi = len(vektor_1)
assert veri_adedi > 0
# 3. Adım
vektor_1_ortalama = ortalamaBul(vektor_1)
vektor_2_ortalama = ortalamaBul(vektor_2)
vektor_olasilik = 0
vektor_1_d_2 = 0
vektor_2_d_2 = 0
for deger in range(veri_adedi):
vektor_1_d = vektor_1[deger] - vektor_1_ortalama
vektor_2_d = vektor_2[deger] - vektor_2_ortalama
vektor_olasilik += vektor_1_d * vektor_2_d
vektor_1_d_2 += vektor_1_d * vektor_1_d
vektor_2_d_2 += vektor_2_d * vektor_2_d
# 4. Adım
return vektor_olasilik / (vektor_1_d_2 * vektor_2_d_2)**.5

Fonksiyon “korelasyonBul” adıyla iki liste (vektör) alacak şekilde tanımlanır. 1. Adımda eğer değişkenler içindeki adetler aynı değilse işlemlere devam etmeme durumu assert ile belirtilir. 2. Adımda veri adetlerini bir değişkene tanımlanır ve assert yardımı ile eğer adet 0 ise işlemlere devam etmeme durumunu belirtilir. 4. Adımda korelasyon formülündeki matematiksel işlemler yapılır. Bu işlemler sırasında for döngüsü kullanılarak her bir değişken için farklı hesaplamalar yapılır. 4. adımda ise bulunan değerlerin çarpımının karekökü alınarak veri adedine bölünür ve korelasyon katsayısı hesaplanmış olur.

Şimdi ise değişkenlerimizi tanımlayıp fonksiyonu kullanarak korelasyon katsayısını bulalım.

a = sorted([random.randrange(1, 500, 1) for i in range(500)])
b = sorted([random.randrange(1, 500, 1) for i in range(500)])

Yukarıdaki liste tanımlama yönteminde rastgele sayı üretimi list comprehension metodu ile üretilip değerlerin küçükten büyüğe sıralanması için sorted() fonksiyonu kullanılmıştır.

print(stats.pearsonr(a,b))
(0.99462, 0.0) # 0.0 p-value değerini gösterir
print(korelasyonBul(a,b))
0.99462

Görüldüğü üzere scipy kütüphanesindeki fonksiyon ile yukarıda yazılan fonksiyonun değerleri aynı görülmektedir. Yani test başarılı. Tüm kodu tek bir biçimde de aşağıda paylaşıyorum.

--

--