800100715151 Astronomide Veritabanları

Ders - 05c Pandas Paketiyle Veri İşleme Uygulaması

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

Pandas Paketi İleri Konular Uygulama

Ötegezegen Veritabanları Uygulaması

Ötegezegenler ve onların barınak yıldızlarına ilişkin pek çok parametrenin bulunduğu ötegezegen veritabanları arasında öne çıkan iki tanesi NASA Exoplanet Archive tarafından sağlanan veritabanı ile Cenevre Üniversitesi'nde tutulan exoplanet.eu veritabanıdır. İki veritabanında da benzer veriler yer aldığı gibi bir veritabanında olup diğerinde olmayan (barınak yıldız metal bolluğu gibi) ya da farklı kaynaklardan alınan veriler de bulunmaktadır. Bu iki veritabanını pandas paketinin sağladığı olanaklarla çeşitli şekillerde birleştirerek sorgulayabiliriz.

In [1]:
import pandas as pd
nasaexo = pd.read_csv('veri/planets_2020.04.16_03.10.01.csv',
                     comment="#", skipinitialspace=True)
exoeu = pd.read_csv('veri/exoplanet.eu_catalog_20200421.csv',  
                    skipinitialspace=True)

print("NASA Exooplanet Archive veritabani sutunlari")
print("-"*45)
print(nasaexo.columns)
print("x"*80)
print("exoplanet.eu veritabani sutunlari")
print("-"*45)
print(exoeu.columns)
NASA Exooplanet Archive veritabani sutunlari
---------------------------------------------
Index(['pl_hostname', 'pl_letter', 'pl_name', 'pl_discmethod',
       'pl_controvflag', 'pl_pnum', 'pl_orbper', 'pl_orbpererr1',
       'pl_orbpererr2', 'pl_orbperlim', 'pl_orbsmax', 'pl_orbsmaxerr1',
       'pl_orbsmaxerr2', 'pl_orbsmaxlim', 'pl_orbeccen', 'pl_orbeccenerr1',
       'pl_orbeccenerr2', 'pl_orbeccenlim', 'pl_orbincl', 'pl_orbinclerr1',
       'pl_orbinclerr2', 'pl_orbincllim', 'pl_bmassj', 'pl_bmassjerr1',
       'pl_bmassjerr2', 'pl_bmassjlim', 'pl_bmassprov', 'pl_radj',
       'pl_radjerr1', 'pl_radjerr2', 'pl_radjlim', 'pl_dens', 'pl_denserr1',
       'pl_denserr2', 'pl_denslim', 'pl_ttvflag', 'pl_kepflag', 'pl_k2flag',
       'pl_nnotes', 'ra_str', 'ra', 'dec_str', 'dec', 'st_dist', 'st_disterr1',
       'st_disterr2', 'st_distlim', 'gaia_dist', 'gaia_disterr1',
       'gaia_disterr2', 'gaia_distlim', 'st_optmag', 'st_optmagerr',
       'st_optmaglim', 'st_optband', 'gaia_gmag', 'gaia_gmagerr',
       'gaia_gmaglim', 'st_teff', 'st_tefferr1', 'st_tefferr2', 'st_tefflim',
       'st_mass', 'st_masserr1', 'st_masserr2', 'st_masslim', 'st_rad',
       'st_raderr1', 'st_raderr2', 'st_radlim', 'rowupdate', 'pl_facility'],
      dtype='object')
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
exoplanet.eu veritabani sutunlari
---------------------------------------------
Index(['# name', 'planet_status', 'mass', 'mass_error_min', 'mass_error_max',
       'mass_sini', 'mass_sini_error_min', 'mass_sini_error_max', 'radius',
       'radius_error_min', 'radius_error_max', 'orbital_period',
       'orbital_period_error_min', 'orbital_period_error_max',
       'semi_major_axis', 'semi_major_axis_error_min',
       'semi_major_axis_error_max', 'eccentricity', 'eccentricity_error_min',
       'eccentricity_error_max', 'inclination', 'inclination_error_min',
       'inclination_error_max', 'angular_distance', 'discovered', 'updated',
       'omega', 'omega_error_min', 'omega_error_max', 'tperi',
       'tperi_error_min', 'tperi_error_max', 'tconj', 'tconj_error_min',
       'tconj_error_max', 'tzero_tr', 'tzero_tr_error_min',
       'tzero_tr_error_max', 'tzero_tr_sec', 'tzero_tr_sec_error_min',
       'tzero_tr_sec_error_max', 'lambda_angle', 'lambda_angle_error_min',
       'lambda_angle_error_max', 'impact_parameter',
       'impact_parameter_error_min', 'impact_parameter_error_max', 'tzero_vr',
       'tzero_vr_error_min', 'tzero_vr_error_max', 'k', 'k_error_min',
       'k_error_max', 'temp_calculated', 'temp_calculated_error_min',
       'temp_calculated_error_max', 'temp_measured', 'hot_point_lon',
       'geometric_albedo', 'geometric_albedo_error_min',
       'geometric_albedo_error_max', 'log_g', 'publication', 'detection_type',
       'mass_detection_type', 'radius_detection_type', 'alternate_names',
       'molecules', 'star_name', 'ra', 'dec', 'mag_v', 'mag_i', 'mag_j',
       'mag_h', 'mag_k', 'star_distance', 'star_distance_error_min',
       'star_distance_error_max', 'star_metallicity',
       'star_metallicity_error_min', 'star_metallicity_error_max', 'star_mass',
       'star_mass_error_min', 'star_mass_error_max', 'star_radius',
       'star_radius_error_min', 'star_radius_error_max', 'star_sp_type',
       'star_age', 'star_age_error_min', 'star_age_error_max', 'star_teff',
       'star_teff_error_min', 'star_teff_error_max', 'star_detected_disc',
       'star_magnetic_field', 'star_alternate_names'],
      dtype='object')

Görüldüğü üzere farklı veritabanlarında aynı sütunlar farklı isimlerle bulunabilmektedir. Örneğin NASA Exoplanet Archive veritabanında pl_name sütununda yer alan gezegen isimleri # name sütununda yer almaktadır.

Başa Dön

Soru 1.

NASA Exoplanet Archive'dan bu uygulama için indirilen veritabanı gezegen doğaları başka gözlemlerle (örneğin hem geçiş, hem dikine hız) kesinleştirilmiş ve bu nedenle "onaylanmış" (ing. confirmed) ötegezegenleri içermektedir. exoplanet.eu veritabanında ise bu şekilde kesinleştirilmemiş gezegenler de bulunmaktadır. Her iki veritabanını bağlamak üzere gezegen isimlerini kullanınız ve bu iki veritabanında birden bulunan gezegenleri alınız. Gezegen ismini bu bağlanmış veritabanının indeksi haline getiriniz.

Çözüm 1.

pandas paketinin iki veriçerçevesindeki verileri bağlamak için kullandığı fonksiyon pd.merge() fonksiyonudur. Fonksiyon varsayılan olarak bizim de amaçladığımız kesişim işlenini how = "inner" parametresi ile sağlar. Ancak her iki verçerçevesinde gezegen isimlerinin bulunduğu sütunlar farklıdır. Bu sütunların fonksiyona veritabanlarının verildiği sırayla hangi isimlerde olduğu left_on ve right_on parametrelerine sağlanmalıdır. Sonrasında oluşacak yeni verçerçevesinin indeksini gezegen ismi yapmak üzere veriçerçeveleri üzerine tanımlı set_index metoduna pl_name sütun ismi sağlanarak istenen hedefe ulaşılabilir.

In [2]:
og = pd.merge(nasaexo, exoeu, how="inner",\
                          left_on="pl_name", right_on="# name")
og.set_index("pl_name", inplace=True)
print("NASA Exoplanet Archive veritabani buyuklugu: ", nasaexo.shape)
print("exoplanet.eu veritabani buyuklugu: ", exoeu.shape)
print("İki veritabaninin kesisiminin buyuklugu: ", og.shape)
NASA Exoplanet Archive veritabani buyuklugu:  (4144, 72)
exoplanet.eu veritabani buyuklugu:  (4249, 98)
İki veritabaninin kesisiminin buyuklugu:  (3557, 169)

Görüldüğü üzere her iki veritabanında sırasıylsa 4144 ve 4249 ötegezegen olmasına karşın, kesişimlerinde toplam 3557 ötegezegen bulunmaktadır. Aslında aynı isimle olmasa dahi her iki veritabanında yer alan bazı ötegezegenler maalesef bulunmaktadır. Bunun nedeni zaman zaman ortaya çıkan isim karışıklığıdır. Örneğin NASA Exoplanet Archive veritabanında Kepler-16 b ismiyle yer alan ötegezegen, exoplanet.eu veritabanında bir çift yıldızın etrafında dolanan bir gezegen olduğu (ing. circumbinary planet) Kepler 16 (AB) b ismiyle yer almaktadır. Yukarıdaki gibi bir birleştirmeyle bu tür ötegezegenleri veritabanında kaybetme tehlikesi vardır. Maalesef bu özel durumdan kaçınmanın kolay bir yolu olmayabilir. Özelde çift yıldız gezegenlerinin isimlerini kontrol edip eşleştirebilecek $string$ fonksiyonlarından faydalanılabilir. Ancak amacımız bu olmadığı için bu hataları bu uygulamada görmezden geliyoruz. Çalışma alanında deneyimli ve bu veritabanları üzerinden bir bilimsel araştırma yürütecek bir araştırıcının bu tür durumları da dikkate alması ve bunlar için de fonksiyonlar yazması gerekir; öncesinde üzerinde çalışacağı veritabanlarını iyice incelemesi gerekir.

Daha önemlisi birbirine bağlanan veritabanlarında sırasıyla 72 ve 98 sütun bulunduğu için bağlama işlemi sonunda oluşan $og$ veritabanında 169 sütunun bulunmasıdır. Bu durumda her iki veritabanında birden bulunan sütunların hangilerinin nihai veritabanında bulunup hangilerinin bulunmayacağına karar vermek gerek. Bu bilgiler, farklı veritabanlarında farklı kaynaklardan (literatür referanslarından) geliyor olabilir. Üzerinde çalışılacak birleştirilmiş veritabanının sağlıklı veriler içermesi için yapılması gereken bu seçimde öncelikler araştırmacıdan araştırmacıya, ya da yapılacak araştırmanın niteliğine göre değişebilir. Biz bu uygulamada her iki veritabanında da bulunan bilgiler için NASA Exoplanet Archive'da bulunanları kullanmayı tercih edeceğiz.

Soru 2.

Her iki veritabanında da bulunan sütunları belirleyerek bunlardan exoplanet.eu veritabanında bulunanları bağlanmış veriçerçevenizden atınız.

Çözüm 2.

Öncelikle her iki veritabanında aynı bilgiyi barındıran (aynı referanstan alınmayabildiği için bazıları tam olarak aynı olmayabilir ancak biz NASA Explanet Archive veritabanında bulunan bilgileri kullanmayı tercih ettik), ancak farklı isimle bulunan sütunların exoplanet.eu veritabanındaki isimlerini bir listeye toplayalım. Sonra bu listeyi pandas veriçerçevelerine uygulanan drop() fonksiyonuna sütun silecek şekilde axis parametresini $1$ değerine ayarlayarak atalım ve yaptığımız değişikliği kalıcı hale getirmek için inplace parametresini de $True$ değerine ayarlayalım.

In [3]:
atilacak_sutunlar = ['star_name','# name','detection_type',
                 'orbital_period','orbital_period_error_min','orbital_period_error_max',
                 'semi_major_axis','semi_major_axis_error_min','semi_major_axis_error_max',
                 'eccentricity','eccentricity_error_min','eccentricity_error_max',
                 'inclination','inclination_error_min','inclination_error_max',
                 'mass','mass_error_min','mass_error_max','mass_detection_type',
                  'radius','radius_error_min','radius_error_max']
og.drop(atilacak_sutunlar,axis=1,inplace=True)
og.columns
Out[3]:
Index(['pl_hostname', 'pl_letter', 'pl_discmethod', 'pl_controvflag',
       'pl_pnum', 'pl_orbper', 'pl_orbpererr1', 'pl_orbpererr2',
       'pl_orbperlim', 'pl_orbsmax',
       ...
       'star_sp_type', 'star_age', 'star_age_error_min', 'star_age_error_max',
       'star_teff', 'star_teff_error_min', 'star_teff_error_max',
       'star_detected_disc', 'star_magnetic_field', 'star_alternate_names'],
      dtype='object', length=147)

Görüldüğü gibi her iki veriçerçevesinde de "aynı" bilgiyi içeren, ancak farklı isimle bulunan toplamda 22 sütunu attık ve sütun sayımız 147'ye indi.

Soru 3.

Her iki veritabanında da aynı isimle bulunan ve barınak yıldızın ekvatoryal koordinat sistemindeki koordinatlarını içeren $ra$ ve $dec$ sütunlarından exoplanet.eu veritabanı sağlananları atacak ve birer $ra$,$dec$ sütunu bırakacak düzenlemeyi yapınız.

Çözüm 3.

pandas.merge() işlemi sırasında her iki taraftan aynıı isimle gelecek sütunlardan fonksiyona ilk sağlanan veriçerçevesindekinin sonuna "_x", ikinci sağlanacak veriçerçevesindekinin sonuna ise "_y" eki gelecektir. Bu nedenle sonu "_y" ile biten $ra$ ve $dec$ sütunlarını yine drop() fonksiyonunu uygun şekilde kullanarak atabiliriz.

In [4]:
og.drop(['ra_y','dec_y'], axis=1,inplace=True)

Daha sonra da ra_x ve dec_x isimli sütunları yeniden isimlendirerek amacımıza ulaşabiliriz. Bunun için veriçerçeveleri üzerinde tanımlı rename() fonksiyonunu aşağıdaki şekilde istediğimiz değişiklikleri bir sözlük değişkenine yazıp, bu değişkeni columns parametresine sağlayarak kullanmalı ve yine yaptığımız değişikliği kalıcı hale getirmek için fonksiyonun inplace parametresini $True$ değerine ayarlamalıyız.

In [5]:
og[['ra_x','dec_x']].head()
Out[5]:
ra_x dec_x
pl_name
11 Com b 185.179276 17.792868
11 UMi b 229.274536 71.823898
14 And b 352.822571 39.236198
14 Her b 242.601303 43.817646
16 Cyg B b 295.466553 50.517525
In [6]:
og.rename(columns={'ra_x':'ra','dec_x':'dec'},inplace=True)
og[['ra','dec']].head()
Out[6]:
ra dec
pl_name
11 Com b 185.179276 17.792868
11 UMi b 229.274536 71.823898
14 And b 352.822571 39.236198
14 Her b 242.601303 43.817646
16 Cyg B b 295.466553 50.517525

Gördüğünüz gibi istediğmiz değişiklikleri yaptık ve bağlanmış veritabanımızı her iki veritabanında ortak olan ötegezegenler için her iki veritabanında ortak olmayan bilgilerini de içerecek şekilde her türlü analiz için hazır hale getirmiş olduk. Herhangi bir veri için tekrar orjinal veritabanlarına dönmemiz gerekse de bu veritabanlarını sırasıyla $nasaexo$ ve $exoeu$ veriçerçevelerinde sakladığımız için bir kaybımız olmayacak.

Soru 4.

Sadece geçiş yöntemiyle keşfedilmiş gezegenlerden oluşan bir veriçerçevesi oluşturunuz.

Çözüm 4.

Bu amaçla yapmamız gereken daha önce de yaptığımız gibi bize sadece geçiş yapan gezegenleri verecek bir koşul üretip bu koşulu mevcut veritabanında uygulayarak bir maske oluşturmak ve uyanları yeni bir veritabanına toplamaktan ibaret. Ancak önce keşif yöntemlerinin hangileri olduğunu görelim. Bunun için pl_discmethod sütununa bakmalı ve bu sütundaki tüm teknikleri unique() metodunu kullanarak birer kez geçecek listelemeliyiz.

In [7]:
print(og['pl_discmethod'].unique())
['Radial Velocity' 'Imaging' 'Transit' 'Eclipse Timing Variations'
 'Orbital Brightness Modulation' 'Pulsation Timing Variations'
 'Microlensing' 'Transit Timing Variations' 'Pulsar Timing']

Geçiş yöntemiyle keşfedilen gezegenlerin pl_discmethod sütununda $Transit$ adıyla listelendiğini görmüş olduk. Koşulu buna uygun olarak yazabiliriz.

In [8]:
kosul = (og['pl_discmethod'] == 'Transit')
gecis_og = og[kosul]
gecis_og.shape
Out[8]:
(2772, 145)

Gördüğünüz gibi her iki veritabanında (NASA ve exoplanet.eu) ortak olan 3557 ötegezegenden 2772'si geçişle keşfedilmiş. Bu önemli bir yüzde. Elimizdeki bu veriçerçevesinde NASA Exoplanet Arcihve'da bulunan onaylanmış tüm geçiş yapan ötegezegenler olduğuna göre bu ötegezegenlerin kütle ve yarıçapları biliniyor olmalı.

Soru 5.

Geçiş yapan ötegezegenler için bir kütle-yarıçap grafiği oluşturunuz.

Çözüm 5.

Çok kolay görünen bu iş için öncelikle elimizdeki verinin gerçekte kütle ve yarıçapları bilinen verilerden oluşup oluşmadığını sorgulamalıyız. Bunun için isnull() fonksiyonunu kullanalım.

In [9]:
gecis_og[gecis_og['pl_bmassj'].isnull()]['pl_bmassj']
Out[9]:
pl_name
DS Tuc A b         NaN
EPIC 211822797 b   NaN
EPIC 212737443 b   NaN
EPIC 212737443 c   NaN
G 9-40 b           NaN
HATS-11 b          NaN
HATS-12 b          NaN
HATS-36 b          NaN
HATS-9 b           NaN
HD 3167 b          NaN
HD 3167 c          NaN
HIP 41378 b        NaN
HIP 41378 c        NaN
HIP 41378 d        NaN
HIP 41378 e        NaN
HIP 41378 f        NaN
HR 858 b           NaN
HR 858 c           NaN
HR 858 d           NaN
K2-100 b           NaN
K2-105 b           NaN
K2-107 b           NaN
K2-108 b           NaN
K2-11 b            NaN
K2-110 b           NaN
K2-12 b            NaN
K2-124 b           NaN
K2-13 b            NaN
K2-138 b           NaN
K2-138 c           NaN
                    ..
Kepler-986 b       NaN
Kepler-987 b       NaN
Kepler-988 b       NaN
Kepler-989 b       NaN
Kepler-990 b       NaN
Kepler-990 c       NaN
Kepler-991 b       NaN
Kepler-992 b       NaN
Kepler-993 b       NaN
Kepler-994 b       NaN
Kepler-995 b       NaN
Kepler-996 b       NaN
Kepler-997 b       NaN
Kepler-998 b       NaN
Kepler-999 b       NaN
L 98-59 b          NaN
L 98-59 c          NaN
L 98-59 d          NaN
LHS 3844 b         NaN
LP 791-18 b        NaN
LP 791-18 c        NaN
OGLE-TR-111 b      NaN
TOI-1130 b         NaN
TOI-270 b          NaN
TOI-270 c          NaN
TOI-270 d          NaN
TOI-813 b          NaN
TRAPPIST-1 h       NaN
WASP-157 b         NaN
Wolf 503 b         NaN
Name: pl_bmassj, Length: 2125, dtype: float64

Gördüğünüz gibi durum hiç de öyle değil. Bildiğiniz gibi geçiş yöntemi gezegen yarıçapının yıldız yarıçapına oranının bulunmasını sağlar, yıldız modellerinden elde edilen yıldız yarıçapları kullanılarak gezegen yarıçapları elde edilebilirken kütlelerini elde etmek mümkün değildir. Burada dikine hız (ya da bir başka yöntemle) kütleleri onaylanmamış gezegenler (adaylar) de bulunuyor; hatta çoğunluktalar (2125 / 2772). Bunun için yapabileceğimiz pek fazla bir şey yok; zira bu gezegenlerin büyük çoğunluğu, ki bunların da büyük bölümü de Kepler uzay teleskobuyla keşfedilmiş gezegenlerdir; dikine hızlarını elde etmek üzere yüksek çözünürlüklü tayfları alınamayacak kadar sönük yıldızların etrafında bulunuyorlar. O vakit sadece kütlesi bulunanlara odaklanalım. Ancak önce yarıçapların da bulunup bulunmadığını bir test edelim. isnull() fonksiyonu kullanabileceğimiz gibi isna() fonksiyonunu da kullanabiliriz çünkü veriçerçevemizde değer bulunmayan bütün sütunlar NaN olarak işaretmenmiş durumda.

In [10]:
gecis_og[gecis_og['pl_radj'].isna()]['pl_radj']
Out[10]:
pl_name
CoRoT-20 b    NaN
GJ 1132 b     NaN
HAT-P-2 b     NaN
HD 23472 b    NaN
HD 23472 c    NaN
HIP 41378 b   NaN
HIP 41378 c   NaN
HIP 41378 d   NaN
HIP 41378 e   NaN
HIP 41378 f   NaN
Kepler-10 c   NaN
Kepler-19 b   NaN
Kepler-68 b   NaN
Kepler-68 c   NaN
WASP-126 b    NaN
WASP-18 b     NaN
Name: pl_radj, dtype: float64

İşte bu şaşırtıcı. Zira geçiş yöntemiyle keşfedilmiş 16 ötegezegenin veriçerçevemizde yarıçapları bulunmuyor. Bunun nedeni basit olarak bu değerlerin veritabanına girilmemiş olması olabilir. Astronomide (ya da veri bilimi içeren herhangi başka bir alanda) kullanılan veritabanlarında bu durumla sıklıkla karşılaşılır. Bu tür durumlarda bu bilgiler başka veritabanlarında ya da literatürden alınabilir. Ya da sadece bu durumu yönetmekle yetinilir. Bir başka deyişle, iş eldeki veriyle yapılıp bu durum sonuçların paylaşıldığı yerde belirtilir.

Biz örneğimizde yarıçap değerlerini barındıran pl_radj sütununu NASA Exoplanet Archive'dan almıştık. Bu gezegenler exoplanet.eu veritabanında da bulundukları için orada yarıçapları bulunuyor olabilir. Dolayısıyla yukarıdaki koşulun sağlandığı gezegenlerin yarıçap değerlerini exoplanet.eu ($exoeu$) veritabanından alıp, veriçerçevemizdeki pl_radj sütununa kopyalayabiliriz. Öncelikle exoplanet.eu veritabanında bu gezegenlerden hangilerinin yarıçaplarının olduğuna bakalım. Bunun için $exoeu$ şeklinde adlandırdığımız bu veritabanının indeks sütununu gezegen adının bulunduğu # name sütununa ayarlayalım ve gecis_og veriçerçevemizde yarıçapı bulunmayan (NaN olan) gezegenlerin bu veritabanında olup olmadığını sorgulayalım. Yarıçap değerleri $exoeu$ veriçerçevesinde $radius$ sütununda bulunmaktadır.

In [11]:
exoeu.set_index('# name', inplace=True)
for planet in gecis_og[gecis_og['pl_radj'].isna()]['pl_radj'].index:
    print(planet,exoeu.loc[planet,'radius'])
CoRoT-20 b 0.84
GJ 1132 b 0.1035
HAT-P-2 b 0.951
HD 23472 b 0.16701
HD 23472 c 0.19172
HIP 41378 b 0.26
HIP 41378 c 0.228
HIP 41378 d 0.353
HIP 41378 e 0.49200000000000005
HIP 41378 f 0.91
Kepler-10 c 0.2097
Kepler-19 b 0.198
Kepler-68 b 0.20600000000000002
Kepler-68 c 0.0827
WASP-126 b 0.96
WASP-18 b 1.165

Gördüğünüz gibi bu değerler exoplanet.eu veritabanında bulunuyor. Bulunmuyor da olabilirdi. Bu durumda da gidip başka bir veritabanına bakabilir ya da literatürden toplayıp manuel olarak kendimiz girebilirdik. Ama buna gerek kalmadı. Yukarıdaki gibi bir döngü yapısıyla ilgili satırlara gereken bilgileri ekleyebiliriz.

In [12]:
for planet in gecis_og[gecis_og['pl_radj'].isna()]['pl_radj'].index:
    gecis_og.at[planet,'pl_radj'] = exoeu.at[planet,'radius']
print(gecis_og[gecis_og['pl_radj'].isna()]['pl_radj'])
print(gecis_og.at['WASP-18 b','pl_radj'])
Series([], Name: pl_radj, dtype: float64)
1.165

Görüldüğü üzere artık yarıçap bulunmayan sütun yok. Geçiş yöntemiyle keşfedilen tüm gezegenler için bu değerin belirlenmiş olması gerektiğinden bu bilgiyi veriçerçevemizde bulundurmak istedik. Ancak bu gezegenlerin tümü için kütle değerinin veriçerçevemizde olmadığını gördük. Ancak amacımız olan kütle-yarıçap grafiğini seaborn paketi fonksiyonları kullanarak çizdirirken bu durum bir problem teşkil etmeyecek. Çünkü kütlesi veriçerçevesinde bulunmayan gezegenler dikkate alınmayacak. Söz konusu parametreleri numpy dizilerine alarak matplotlib.pyplot fonksiyonları ile grafik elde etmek isterseniz bu durumu dikkat almanız gerekecektir.

In [13]:
import seaborn as sns
%matplotlib inline
sns.relplot(x="pl_bmassj", y="pl_radj", data=gecis_og)
Out[13]:
<seaborn.axisgrid.FacetGrid at 0x7f468d98d208>

Bu grafik genellikle farklı gezegen türleri için çizdirildiğinde anlam kazanan bir grafiktir. Bu nedenle yine daha önce yaptığımız gibi kütle limitleri koyarak kütle-yarıçap grafiğini farklı gezegen grupları için elde edebiliriz. Örneğin $0.1 - 0.4~M_{jup}$ kütle aralığındaki gezegenler için böyle bir uygulama yapalım.

In [ ]:
kosul = (gecis_og['pl_bmassj'] >= 0.1) & (gecis_og['pl_bmassj'] <= 0.4)
saturnler = gecis_og[kosul]
sns.relplot(x="pl_bmassj", y="pl_radj", data=saturnler)
Out[ ]:
<seaborn.axisgrid.FacetGrid at 0x7f468b6a0278>