Python ile Korelasyon Analizi

Enes Eren
3 min readMar 28, 2023

Veri setlerinde değişkenler birbirleriyle ilişkilidir. Bu yazıda sayısal, kategorik ve zamansal veriler arasındaki ilişkiyi inceleyeceğiz. İlişkinin yönünü ve gücünü tespit edip görselleştireceğiz.

Elimizde divorce adında bir veri seti bulunmaktadır. Bu veri seti boşanmalar ile ilgili bilgiler içermektedir.

Paketleri ve Veriyi İçe Aktaralım

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

divorce = pd.read_csv('divorce.csv')
print(divorce.head())
      divorce_date    dob_man education_man  income_man  dob_woman education_woman  income_woman marriage_date  marriage_duration  num_kids
0 2006-09-06 1975-12-18 Secondary 2000.0 1983-08-01 Secondary 1800.0 2000-06-26 5.0 1.0
1 2008-01-02 1976-11-17 Professional 6000.0 1977-03-13 Professional 6000.0 2001-09-02 7.0 NaN
2 2011-01-02 1969-04-06 Preparatory 5000.0 1970-02-16 Professional 5000.0 2000-02-02 2.0 2.0
3 2011-01-02 1979-11-13 Secondary 12000.0 1981-05-13 Secondary 12000.0 2006-05-13 2.0 NaN
4 2011-01-02 1982-09-20 Professional 6000.0 1988-01-30 Professional 10000.0 2007-08-06 3.0 NaN

Veri seti; gelir, eğitim, evlilik süresi, çocuk sayısı ve boşanma tarihleri gibi detaylı bilgiler içermektedir.

Veri Doğrulama

Veri ile analize başlamadan önce veriyi temizlemeli ve doğrulamalıyız. Elimizdeki veri seti temiz olduğundan doğrulama işlemini tamamlayacağız.

Zamansal veri tipleri ile çalışırken verinin tipi ve formatı önemlidir. Veri setleri içe aktarıldığında zamansal değerler nesne (metinsel veri tipi) olarak tanımlanabilir.

print(divorce.dtypes)
    divorce_date          object
dob_man object
education_man object
income_man float64
dob_woman object
education_woman object
income_woman float64
marriage_date object
marriage_duration float64
num_kids float64
dtype: object

Görüldüğü üzere zamansal değişkenler bir nesne olarak tanımlanmış. Bu veri tiplerini düzeltelim.

divorce = pd.read_csv('divorce.csv', parse_dates=['divorce_date','dob_man','dob_woman','marriage_date'])
print(divorce.dtypes)
    divorce_date         datetime64[ns]
dob_man datetime64[ns]
education_man object
income_man float64
dob_woman datetime64[ns]
education_woman object
income_woman float64
marriage_date datetime64[ns]
marriage_duration float64
num_kids float64
dtype: object

Zamansal değişkenler artık bir datetime nesnesi olarak tanımlandı.

Keşifsel Veri Analizi

Elimizdeki veri seti ile ilgili hızlıca bilgi sahibi olmak için bir grafik oluşturabiliriz.

divorce["marriage_year"] = divorce["marriage_date"].dt.year

sns.lineplot(data=divorce,x='marriage_year', y='num_kids')
plt.show()

Görünüşe göre yıllara göre eşler daha geç evlilikleri sırasında daha az çocuk sahibi oluyor.

Korelasyon

Korelasyon, iki değişken arasındaki ilişkinin yönünü ve gücünü açıklar. Ayrıca bize gelecek ile ilgili tahminler yapmamıza yardımcı olur.

Python’da korelasyon için kullanılabilecek birçok yöntem bulunmaktadır. Örneğin pandas paketi, DataFrame nesnelerinde corr isimli bir metod tanımlamıştır. Bunun sayesinde bütün değişkenler arasındaki ilişkiyi görebiliriz. Ayrıca Seaborn ve Matplotlib paketleri ile birlikte de saçılma grafiği, ısı grafiği vb. gibi görselleştirmeler üzerinden de ilişkileri inceleyebiliriz.

İki Değişkenli Korelasyon Analizi

sns.scatterplot(data=divorce, x='marriage_duration', y='num_kids')
plt.show()

Evlilik süresi ile çocuk sayısı arasında pozifif ılımlı bir ilişki bulunmaktadır. Yani daha uzun evliliğe sahip olan çiftler daha fazla çocuk sahibi oluyorlar.

Korelasyon Matrisi

Birçok değişken üzerindeki ilişkiyi incelemek için ise Seaborn’un pairplot grafiğini kullanabiliriz.

sns.pairplot(data=divorce, vars=['income_woman','marriage_duration'])
plt.show()

Bu korelasyon matrisinde income_woman ve marriage_duration değişkenleri arasındaki ilişki pozitif zayıf görünüyor.

Kernel Yoğunluk Tahmini (Kernel Density Estimate)

Tanımlı bir yarıçapa sahip çember içerisine düşen noktaların yoğunluğu ile çember merkezinden uzaklaştıkça değişen noktasal yoğunluğu ifade etmektedir.

Evlilik süresi ile bir çiftin sahip olduğu çocuk sayısı arasındaki ilişkiyi incelemek için num_kids değişkenindeki değerler yalnızca birden beşe kadar değiştiğinden, her bir değer için KDE’yi aynı grafik üzerinde çizebiliriz.

sns.kdeplot(data=divorce, x="marriage_duration", hue="num_kids", cut=0, cumulative=True)
plt.show()

Görünüşe göre uzun evlilikler daha çok çocuk sahibi olmak ile pozif güçlü ilişkilidir.

Son

Beni Linkedin ve Github üzerinden takip edebilirsiniz.

--

--