800100715151 Astronomide Veritabanları

Ders - 03 Veri Görselleştirmenin Temelleri

Doç. Dr. Özgür Baştürk
Ankara Üniversitesi, Astronomi ve Uzay Bilimleri Bölümü
obasturk at ankara.edu.tr
http://ozgur.astrotux.org

Veri Görselleştirme Neden Önemlidir?

Bir veri setini görselleştirme, özellikle büyük veri setlerinde bir bakışta farkedilemeyen detayların farkedilmesine, parametreler arası ilişkilerin kurulabilmesine, konuya ilişkin sorulara çabuk cevap verilebilmesine, bazı konuların daha derin ve iyi anlaşılabilmesine ve neden-sonuç ilişkilerinin kurulabilmesine olanak sağlar.

Tablolara bakarken, araştırıcının her şeyden önce en çok ilgisini çeken öne çıkan rakamlardır. Ancak bazen insan, ilgisini çekenlere odaklanırken önemli bazı detayları gözden kaçırabilir (algıda seçicilik). İyi bir örnek için bkz.

Altı ülkenin (İspanya, Portekiz, Güney Kore, Çin, Türkiye ve Brezilya) kişi başına düşen gayrisafi milli hasılarının 1980'den bu yana 10 yıllık dönemler için değerleri örneği üzerinden görselleştirmenin nasıl faydalar sağladığı ve ne tür çıkarımlara yol açtığı aşağıda örneklenmeye çalışılmıştır.

In [1]:
import pandas as pd
import numpy as np
gsmh = {1980 : pd.Series([6113, 3335, 1711, 309, 2169, 1229], \
                              index=['Ispanya','Portekiz','Guney Kore','Cin','Turkiye','Brezilya']),
        1990: pd.Series([13650, 7941,6513,349,3747,3172], \
                              index=['Ispanya','Portekiz','Guney Kore','Cin','Turkiye','Brezilya']),
        2000 : pd.Series([14725,11536,12257,959,4219,3779], \
                              index=['Ispanya','Portekiz','Guney Kore','Cin','Turkiye','Brezilya']),
        2010 : pd.Series([30803,22581,23087,4524,10476,11298], \
                              index=['Ispanya','Portekiz','Guney Kore','Cin','Turkiye','Brezilya']),
        2020 : pd.Series([30734,23731,31246,10872,9633,9765], \
                              index=['Ispanya','Portekiz','Guney Kore','Cin','Turkiye','Brezilya']),
       }
gsmh = pd.DataFrame(gsmh)
gsmh
Out[1]:
1980 1990 2000 2010 2020
Ispanya 6113 13650 14725 30803 30734
Portekiz 3335 7941 11536 22581 23731
Guney Kore 1711 6513 12257 23087 31246
Cin 309 349 959 4524 10872
Turkiye 2169 3747 4219 10476 9633
Brezilya 1229 3172 3779 11298 9765
In [2]:
from matplotlib import pyplot as plt
renkler = ['purple','green','blue','orange','red','yellow']
plt.figure(1)
plt.grid(True)
plt.xlabel('Yillar')
plt.ylabel('GSMH')
for i,ulke in enumerate(gsmh.index):
    plt.plot(gsmh.loc[ulke], color=renkler[i],  marker="o",  mfc='none', ms=8, label=ulke)
plt.legend(loc='upper left')
plt.show()
<Figure size 640x480 with 1 Axes>

Sosyal bilimci olmamakla birlikte ele alınan tüm ulkelerin 2000 ile 2010 arasında kişi başına düşen milli gelirlerini arttırdıkları, 1980'lerde gerimizdeki Çin, Güney Kore ve Brezilya'nın bizi geçtiğini, İspanya ve Portekiz'in Avrupa Birliği üyesi ülke oluşlarını takiben ulusal gelirlerini hızla rttırdıkları ancak 2010'lar sonrası bu artışın yavaşladığını, Güney Kore'nin ise bilime yaptığı yatırımın sürekli bir artışla gelirlerini tüm bu ülkeleri geçecek duruma getirdiğini görüyoruz. Şimdi aynı veriyi kullanarak 10 yıllık dönemlerle artışlara bakalım.

In [3]:
gsmh_artis = pd.DataFrame(index=gsmh.index)
donem = list('ABCD')
for i in range(len(donem)):
    artis_miktari = []
    for j,ulke in enumerate(gsmh.index):
        artis_miktari.append((gsmh.iat[j,i+1] - gsmh.iat[j,i]) / gsmh.iat[j,i])
    gsmh_artis[donem[i]] = artis_miktari
gsmh_artis      
Out[3]:
A B C D
Ispanya 1.232946 0.078755 1.091885 -0.002240
Portekiz 1.381109 0.452714 0.957438 0.050928
Guney Kore 2.806546 0.881928 0.883577 0.353402
Cin 0.129450 1.747851 3.717414 1.403183
Turkiye 0.727524 0.125967 1.483053 -0.080470
Brezilya 1.580960 0.191362 1.989680 -0.135688
In [4]:
# A, B, C, D donemlerinde yuzdelik GSMH artislari
plt.figure(2)
plt.grid(True)
plt.xlabel('Yillar')
plt.ylabel('GSMH Artis (\%)')
for i,ulke in enumerate(gsmh_artis.index):
    plt.plot(gsmh_artis.loc[ulke]*100, color=renkler[i], marker='o', mfc='none', ms=8, label=ulke)
plt.legend(loc='upper left')
plt.show()

Bu grafik A: ilk 10 yılı, D: son 10 yılı göstermek üzere, her bir dönem için bir önceki döneme göre artış sıralamasını göstermektedir. Türkiye ilk 20 yıllık dönemde sondan ikincı sırada iken 2000-2010 arasında %150'lik bir GSMH artışıyla üçüncü, ancak son 10 yıldaki %8'lik azalmayla tekrar sondan ikinci sıraya gerilemiş durumdadır. Türkiye ekonomisinin GSMH göstergeleri bakımından Brezilya ile büyük benzerlik gösterdiği de görülmektedir.

Bu grafiklere bakarak başka ne tür sonuçlara varabilirsiniz?

In [5]:
# Artis miktarlarina bir de histogramla bakalim
x = gsmh.index
yr1980 = gsmh[1980].values
yr1990 = gsmh[1990].values - gsmh[1980].values
yr2000 = gsmh[2000].values - gsmh[1990].values
yr2010 = gsmh[2010].values - gsmh[2000].values
width = 0.5
plt.bar(x, yr1980, width)
plt.bar(x, yr1990, width, bottom=gsmh[1980].values)
plt.bar(x, yr2000, width, bottom=gsmh[1990].values)
plt.bar(x, yr2010, width, bottom=gsmh[2000].values)
plt.show()

Kişi başına düşen GSMH'da bir önceki döneme ggöre sadece artışların gözlendiği 1990, 2000, 2010 yılları dikkat alındığında bütün ülkelerde 2000-2010 arası artışın maksimum olduğu ve hacimsel olarak en büyük çıkışı gösteren ülkenin İspanya, yüzde olarak ise Çin olduğu görülmektedir.

Bu grafiklere bakarak başka ne tür sonuçlara varabilirsiniz?

İstatistiksel İlişkilerin Görselleştirilmesi

Bir veri setindeki değişkenlerin birbirleriyle olan ilişkilerinin doğasını ve bu değişkenlerin diğer başka değişkenlere bağlılıklarını anlamak için aralarında istatistiksel ilişkiler aranır. Bu süreçte verinin görselleştirilmesi önemli rol oynar. Çünkü, insan bu görselleştirmeler aracılığıyla verinin değişkenleri arasında ilişkiler, trendler ve örüntüler (ing. pattern) yakalayabilir.

Veri setinin değişkenleri arasında istatistiksel ilişkiler aranırken en çok faydalanılan iki görselleştirme tekniği dağılım grafikleri (ing. scatter plots) ve eğri grafiklerinin (ing. line plots) kullanılmasıdır. Bu bölümde özellikle pandas veriçerçeveleri üzerinde görselleştirmeler için pek çok seçenek sunan seaborn paketinden faydalanılacaktır. seaborn istatistiksel görselleştirme araçlarını barındıran bir kütüphanedir ve bu kütüphanede dağılım grafikleri ile eğri grafiklerinin oluşturulması için replot() fonksiyonunu kullanılır. replot() figür düzeyinde bir fonksiyondur; yani matplotlib paketinin figure nesnesini grafiklerle günceller.

seaborn dokümantasyonunu ve örnek uygulamaları takip etmek üzere gerekli verileri indirip, kendiniz de deneyerek okumanızı önemle tavsiye ederim.

Bu fonksiyonu örneklemek üzere aşağıda NASA ötegezegen veritabanında (NASA Exoplanet Archive) parametreleri kesinleştirilerek onaylanmış gezegenlere (ing. Confirmed Planets) ilişkin verileri içeren veri dosyası kullanılmıştır.

In [6]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.set(style="darkgrid")
otegezegenler = pd.read_csv("veri/nasa_exoplanet_archive_20200303.csv", \
                            index_col="pl_hostname", skipinitialspace=True)
#Kutle Yaricap grafigi
sns.relplot(x="pl_bmassj", y="pl_radj", data=otegezegenler)
Out[6]:
<seaborn.axisgrid.FacetGrid at 0x7f06e6899da0>

Bu grafikte ölçek (ing. scale) olarak iki eksen üzerindeki konuma bağlı iki ölçek kullanılmıştır. Üçüncü bir ölçek renkler üzerinden eklenebilir. Örneğin geçiş zamanı (ing. Transit Timing Variations, TTV) değişimi gözlenen sistemlerdeki ötegezegenler ( pl_ttvflag) işaretlenebilir.

In [7]:
sns.relplot(x="pl_bmassj", y="pl_radj", hue="pl_ttvflag", data=otegezegenler)
Out[7]:
<seaborn.axisgrid.FacetGrid at 0x7f06e67d39b0>

Kullanılan renk ölçeği her iki grubu (TTV gözlenen ve gözlenmeyen) birbirinden net bir şekilde birbirinden ayırabilyor olsa da farklı semboller (ya da işaretleyiciler) (ing. marker) kullanarak bu ayrım daha da belirginleştirilmek istenebilir.

In [8]:
sns.relplot(x="pl_bmassj", y="pl_radj", hue="pl_ttvflag", style="pl_ttvflag", data=otegezegenler)
Out[8]:
<seaborn.axisgrid.FacetGrid at 0x7f06e74f0e48>

Birden fazla değişkeni farklı stil ve renkler kullanarak göstermek mümkündür. Ancak gözün şekle renkten daha az duyarlı olduğunu vurgulamak gerekir. Aşağıdaki örnekte Kepler uzay teleskobunun gözlediği gökyüzü alanı içinde bulunan ötegezegenler farklı bir sembol ile gösterilmiştir. Bu gezegenlerden bir kısmı TTV gözlenen sistemlerde, bir kısmı ise gözlenmeyenlerde bulunduğunan her iki renkte de bu sembol ile gösterilmiş veri noktaları bulunmaktadır. Bu nedenle de iyi bir veri görselleştirmesi örneği değildir.

In [9]:
sns.relplot(x="pl_bmassj", y="pl_radj", hue="pl_ttvflag", style="pl_kepflag", data=otegezegenler)
Out[9]:
<seaborn.axisgrid.FacetGrid at 0x7f06e74a48d0>

Yukarıdaki örnekteki gezegenlerin gerek TTV göstermeleri, gerekse Kepler alanında bulunup bulunmamaları birer nitelikleridir (ing. qualitative). Bu nedenle renk ölçeğiyle verilen bu veriler kategorik (ing. categorical) verilerdir. Renk ölçeği, herhangi bir değer alabilen nümerik veriler olduğunda ise farklı davranır. Örneğin veritabanındaki tüm gezegenler için kütle / yarıçap grafiğni yörünge dışmerkezliliğini (pl_orbeccen) üçüncü bir ölçekle grafik edecek olursak aşağıdaki grafik elde edilir.

In [10]:
sns.relplot(x="pl_bmassj", y="pl_radj", hue="pl_orbeccen", data=otegezegenler)
Out[10]:
<seaborn.axisgrid.FacetGrid at 0x7f06e74d5dd8>

Her ne kadar ölçeğin çözünürlüğü çok yüksek değilse de yukarıdaki grafikten hemen yapabileceğimiz bir çıkarım çok büyük dış merkezliliğe ($e > 0.4$) ötegezegnlerin büyük ($2 - 10 M_{jup}$, $1 - 1.5 R_{jup}$) olduğu yönündedir. Ancak bunun keşif yöntemlerinin yanlılığından kaynaklanabileceği unutulmamaldır. Bu duruma biraz daha yakından bakmak için renk ölçeğinin parametrelerini bir miktar değiştirmekte fayda vardır. Bunun için seaborn pek çok seçenek sunmaktadır.

In [11]:
sns.relplot(x="pl_bmassj", y="pl_radj", hue="pl_orbeccen", palette="ch:r=-.50,l=0.90", \
            data=otegezegenler)
Out[11]:
<seaborn.axisgrid.FacetGrid at 0x7f06e73e9e10>

Renk (ya da rengin tonu (ing.$hue$) bir ölçek olarak kullanılabileceği gibi sembol büyüklüğü (ing. $size$) de ölçek olarak kullanılabilir. İyice ayırabilmek için her ikisi birden ($hue$ ve $size$) aynı parametre için kullanılabileceği gibi 4. bir ölçek olarak büyüklükten de faydalanılabilir. Örneğin gezegenin bulunduğu sistemde kaçıncı gezegen olduğunu gösteren $pl_num$ parametresine de büyüklük ölçek yapılabilir.

In [12]:
sns.relplot(x="pl_bmassj", y="pl_radj", hue="pl_orbeccen", size="pl_pnum",
            sizes=(15, 200), data=otegezegenler)
Out[12]:
<seaborn.axisgrid.FacetGrid at 0x7f06e73f73c8>

Zamana Bağlı Değişimlerin Görselleştirilmesi

Dikine hız ya da ışık eğrileri ya da onların modelleri gibi astronomların sıklıkla başvurduğu zamana bağlı değişimi gösteren verilerin görselleştirlmesi için kesiksiz eğrilerle dağılım grafiklerinin birlikte kullanılması alışkanlığı vardır. Ayrıca, gözlemsel ya da da model tayflar da dalgaboyuna karşılık kesiksiz eğrilerle görselleştirilrler.

In [13]:
import pandas as pd
isik_egrisi = pd.read_csv("veri/hatp23_etd123_converted_datasubset.dat", delimiter="\t", 
                         index_col="#", skipinitialspace=True)
model = pd.read_csv("veri/hatp23_etd123_converted_model.dat", delimiter=" ",
                   header=None, skipinitialspace=True)
sns.relplot(x="BJD-TDB", y="mag_dn", kind="line", data=isik_egrisi)
Out[13]:
<seaborn.axisgrid.FacetGrid at 0x7f06e734ddd8>

Genelde ise yapılmak istenen model ve veriyi üstüste çizdirmektir.

In [14]:
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
isik_egrisi = pd.read_csv("veri/hatp23_etd123_converted_datasubset.dat", delimiter="\t", 
                         index_col="#", skipinitialspace=True)

model = pd.read_csv("veri/hatp23_etd123_converted_model.dat", delimiter="\t", 
                   skipinitialspace=True)
model = model.sort_values("#BJD-TDB")
plt.errorbar(isik_egrisi['BJD-TDB'], isik_egrisi['mag_dn'],yerr=isik_egrisi["mag_err_dn"])
plt.plot(model['#BJD-TDB'], model['flux'],'r',lw=2)
plt.xlabel("BJD-TDB")
plt.ylabel("Normalize Aki")
plt.show()
In [15]:
import pandas as pd
tayf = pd.read_csv("veri/spectrum_normalized.dat", delimiter="  ", 
                        skipinitialspace=True, engine='python')
sns.relplot(x="Wavelength", y="Flux", kind="line", data=tayf)
Out[15]:
<seaborn.axisgrid.FacetGrid at 0x7f06e79aef98>
In [16]:
fmri = sns.load_dataset("fmri")
sns.relplot(x="timepoint", y="signal", estimator=None, kind="line", data=fmri)
Out[16]:
<seaborn.axisgrid.FacetGrid at 0x7f06e79ae978>
In [17]:
sns.lineplot(x="timepoint", y="signal", data=fmri)
Out[17]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f06e7a077b8>
In [18]:
sns.lineplot(x="timepoint", y="signal", ci='sd', data=fmri)
Out[18]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f06e794aeb8>

Niteliksel Verinin Görselleştirilmesi

Niteliksel (ya da kategorik) veri, verinin belirli sayıda grubun altına toplandığı ya da gruplandığı veri türü olup, bu grupların isimlerinin birer sayısal nicelik olma zorunluluğu yoktur. Histogramlar ya da bar diyagramları kullanılarak görselleştirilebileceği gibi dağılım diyagramları ile de görselleştirilebilir.

seaborn.catplot kategorik veri üzerinden bazı değerlendirmelerin dağılım diyagramları ile görselleştirilebilmesini sağlar. NASA Ötegezegen Veritabanı'nda bu tür veriler de yer almaktadır (örn: gezegenin keşfedildiği yöntem: pl_discmethod).

In [19]:
import seaborn as sns
import pandas as pd
otegezegenler = pd.read_csv("veri/nasa_exoplanet_archive_20200303.csv")
sns.catplot(x="pl_discmethod", y="pl_orbeccen", data=otegezegenler)
Out[19]:
<seaborn.axisgrid.FacetGrid at 0x7f06e78cfc18>

Gördüğünüz gibi x eksenindeki keşif yöntemi isimleri birbirleriyle karıştı. Ayrıca eksenlerin etiketleri (ing. labels) de verideki sütun isimleri. Sütün isimleri yerine daha anlaşılır etiketler tercih edilmek istenebilir. Bunun için öncelikle keşif yöntemlerinin isimlerine bakılmalıdır. Keşfedilen her gezegen için bu bilgi pl_discmethod sütununda yer alıyor. Bu sütunun tamamını almak yerine birden fazla keşif yapılmış (geçiş ve dikine hız yüzlerce) yöntemlerin isimlerini sadece bir kez almak için pandas.series nesnesinin unique() fonksiyonu kullanılmalıdır.

In [20]:
kesif_yontemleri = otegezegenler['pl_discmethod'].unique()
print(kesif_yontemleri)
['Radial Velocity' 'Imaging' 'Eclipse Timing Variations' 'Transit'
 'Astrometry' 'Disk Kinematics' 'Orbital Brightness Modulation'
 'Pulsation Timing Variations' 'Microlensing' 'Transit Timing Variations'
 'Pulsar Timing']

Eksenlerin isimlerini gördükten sonra onların yerine birer kısaltma tercih edilebilir. Aşağıda bu amaçla oluşturulmuş bir liste öneri olarak verilmiştir.

In [21]:
eksen_label = ['RV','DI','ETV','Tr','Ast','DK','OBM','PTV','Mic','TTV','Puls']

Kategorik verinin görselleştirilmesi için kullanılan seaborn.catplot fonksiyonunun bu amaçla kullanılabilecek parametreleri olmasa da seaborn.FacetGrid metotları bu amaçla kullanılabilir. Bunun için öncelikle çizilmek istenen grafik bir FacetGrid nesnesine (aşağıda ax olarak isimlendirilmiştir) atanır. Daha sonra set metoduyla istenen parametreler istenen değerlere ayarlanabilir. Aşağıda x-ekseninin etiketleri (xticklabels), x- ve y-ekseninin adları (xlabel ve ylabel) öneri olarak verilen değerlere atanmıştır. jitter parametresi veri noktalarının üstüste dizilmesi için False değerine ayarlanmıştır. True değerine ayarlanarak bu parametrenin ne işe yaradığı görülebilir. Ayrıca bazı yöntemler için keşif yapılmışm olduğu halde keşfedilen gezegenin görselleştirilmek istenen parametresi (bu örnekte yörünge dış merkezliliği (e) belirlenmemiş olabilir. Bu durumda bu teknikte veri noktası görülemeyecektir.

In [22]:
ax = sns.catplot(x="pl_discmethod", y="pl_orbeccen", jitter=False, data=otegezegenler)
ax.set(xticklabels=eksen_label, xlabel='Kesif Yontemi', ylabel='e')
plt.show()

Kategorik veri grafiğinde noktaların birbirlerinin üzerine dizilmesi, bu nedenle değerleri yakın bazı noktaların tam olarak üstüste gelmesi (ing. overlap) istenmiyorsa "swarm" grafiği tercih edilebilir.

In [23]:
ax = sns.catplot(x="pl_discmethod", y="pl_orbeccen", 
            kind='swarm', data=otegezegenler)
ax.set(xticklabels=eksen_label, xlabel='Kesif Yontemi', ylabel='e')
plt.show()

Eğer veri noktalarının kendileriyle değil de dağılımlarıyla ilgileniliyorsa bu durumda keman grafikleri görselleştirme için tercih edilebilir. Bu kez $x$ ve $y$ eksenlerinin yeri değiştirilerek keşif yöntemlerinin tam adını da görmek üzere bir görselleştirme deneyelim. $y$ ekseninde bir etikete ihtiyaç olmadığı açık.

In [24]:
ax = sns.catplot(x="pl_orbeccen", y="pl_discmethod", 
            kind='violin', data=otegezegenler)
ax.set(xlabel = "e", ylabel=None)
plt.show()

Bu dağılımın verdiği mesajlardan öne çıkanı doğrudan görüntülemeyle keşfedilen gezegenlerin diğer tüm yöntemlere kıyasla oldukça geniş bir yörünge dış merkezliliği aralığında dağıldığıdır. Bunun nedeni doğrudan görüntülemenin yıldızından uzak, genç ve büyük gezegenleri keşfetmeye olan yanlılığıdır. Buna mukabil geçiş yöntemi yıldızına yakın (ve büyük) gezegenleri bulmaya yanlıdır. Bu gezegenlerin yıldızlarından daha uzakta oluşup bulundukları yere göç mekanizmalarıyla geldiği ve bu sırada yörüngelerinin de çembersel olmaya evrildiği düşünülmektedir. Bu noktadan hareketle yıldızlarından uzak gezegenlerin başlangıçta geniş bir yörünge dış merkezliliği parametre aralığına dağıldıkları sonucu çıkarılabilir. Sonuç olarak veri görselleştirmeleri, verinin yanlılıkları bilinmeden eksik kalacaktır.

Bu dağılımları Kepler alanına düşen gezegenler için bir grafikte, düşmeyenler için bir diğer grafikte de göstermek mümkündür. Bu tür uygulamalar için col (columns) parametresi istenen sütuna ayarlanabilir.

In [25]:
ax = sns.catplot(x="pl_discmethod", y="pl_orbeccen", 
            col='pl_kepflag', jitter=False, data=otegezegenler)
ax.set(xticklabels=eksen_label, xlabel='Kesif Yontemi', ylabel='e')
plt.plot()
Out[25]:
[]

Özellikle birden fazla gezegen barındıran sistemlerin dış merkezlilikle ve keşif yöntemleriyle ilişkisi sorgulanmak ve bu amaçla görselleştirilmek istenilebilecek bir ilişki olabilir. Bunun için şu ana kadar örnekleri verilen kategorik grafiklere gezegen sayısı bir üçüncü eksen olarak eklenebilir. Bu veri görselleştirmesinde de temel problemlerden birinin pl_pnum sütununda her keşfedilen gezegen için kaçıncı gezegen olduğu bilgisinin girilmemiş olma olasılığıdır. Bu nedenle doğrudan görüntüleme sütununda az sayıda gezegen görülmektedir. Doğrudan görüntülenmiş 4 gezegenli tek sistem olan HR 8799 sisteminin 4 gezegeni dışında sadece tek gezegenli birkaç sistem yer almaktadır. Bu tür durumlarda veriye dönüp bu sütunun doğru bilgiyle doldurulması gereği akılda tutulmalıdır.

In [26]:
ax = sns.catplot(x="pl_discmethod", y="pl_orbeccen", hue='pl_pnum', 
            kind="swarm", data=otegezegenler)
ax.set(xticklabels=eksen_label, xlabel='Kesif Yontemi', ylabel='e')
plt.plot()
Out[26]:
[]

Keşif yöntemlerine göre yanlılıkları görmek için önemli bir başka parametre de kütle olabilir. Kütle NASA Exoplanet Archive'da pl_bmassj sütununda yer almaktadır. Ayrıca kütlenin hangi yolla elde edildiğini bilmek de faydalı olabilir. Örneğin dikine hız yöntemi, kütle ($m$) yerine, yörünge eğim açısı ($i$) bilinmediğinden $m~sini$ parametresini verir. Kütlenin hangi yöntemle hesaplandığı bilgisi pl_bmassprov sütununda verilmektedir.

In [27]:
ax = sns.catplot(x="pl_bmassj", y="pl_discmethod", 
            hue="pl_bmassprov", kind="swarm", data=otegezegenler)
ax.set(xlabel="Kutle", ylabel=None)
plt.plot()
Out[27]:
[]

Gözlemlerin Kategoriler İçerisindeki Dağılımı

Yukarıdaki örneklerde görüldüğü gibi her bir kategorinin (gezegen keşif yöntemleri) içerisinde herhangi bir başka parametrenin (örneğin yörünge dışmerkezliliğinin) dağılımı büyük önem taşıyabilmektedir. Grupların türüne de bağlı olarak istatistiki dağılımlardan (ing. distributions) ve parametrelerinden yararlanarak bu parametrelerin özelliklerine ilişkin çıkarımlar yapılabilmesine olanak sağlayan görselleştirme uygulamaları yapılabilir.

Kutu Diyagramları

Kutu diyagramları (ing. box plots) Bütün veriyi dört çeyreğe ayırarak ve ortaya ortanca değeri (medyan) getirerek bir dağılımın hem görselleştirilmesine hem de veri setindeki aykırı noktaların görülebilmesine (ve gerektiğinde ayıklanabilmesine) olanak veren grafiklerdir. İlk çeyreğin sonunu gösteren Q1 değeri ile son çeyreğin başını gösteren Q3 arasındaki uzaklık, çeyrekler arası uzaklık (ing. Inter-Quartile Range, IQR) olarak tanımlanır. Kutu diyagramının her iki taraftan sınırı Q1 ve Q3'e, 1.5 x IQR kadar uzaklıktadır ve buralar bir çizgi ile (whisker) gösterilir.

In [28]:
plt.figure(figsize=(48,32))
ax = sns.catplot(x="pl_orbeccen", y="pl_discmethod", kind="box", data=otegezegenler)
ax.set(xlabel="e", ylabel=None)
plt.plot()
Out[28]:
[]
<Figure size 3456x2304 with 0 Axes>