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.