exoplanet.eu Kataloğu Örneği¶

exoplanet.eu kataloğu bugüne kadar çeşitli yöntemlerle keşfedilmiş ve onaylanmış çok sayıda (25 Şubat 2020 itibarı ile 3105 sistemde toplam 4187) gezegen ve bu gezegenlerin barınak yıdızları (ing. host star) parametreleri içermektedir. Tüm katalog, sanal gözlemevi tablosu (ing. virtual observatory (VO) table), dat uzantılı salt metin dosyası ya da virgülle ayrılmış metin dosyası (csv) olarak indirilebilir. Bu dosyayı bilgisayarınızın herhangi bir alanına (aşağıdaki örnekte bu jupyter defteriyle aynı klasöre) csv formatında indirip exoplanet.eu_catalog.csv adıyla kaydedersiniz aşağıdaki örnekleri herhangi bir zamanda çalıştırıp ötegezegen çalışmalarındaki gelişmeleri takip edebilir, parametreler arasındaki ilişkileri sorgulayabilir ve Güneş Sistemimiz dışındaki ötegezegen sistemlerinin mimarilerine varıncaya kadar pek çok konuda istatistiksel çıkarımlarda bulunabilirsiniz.

exoplanet.eu adresindeki ötegezegenler kataloğunu "csv" formatında bilgisayarınıza indirerek bu jupyter defteriyle aynı klasörün altına exoplanet.eu_catalog.csv adıyla kaydediniz. Daha sonra aşağıdaki kod bloklarındaki kodları çalıştırarak dosyanızı açınız ve inceleyiniz.

In [1]:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
otegezegenler = pd.read_csv('exoplanet.eu_catalog.csv', index_col="# name", skipinitialspace=True)
otegezegenler.head()
Out[1]:
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 ... 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
# name
11 Com b Confirmed NaN NaN NaN 19.40 1.50 1.50 NaN NaN NaN ... G8 III NaN NaN NaN 4742.0 100.0 100.0 NaN NaN NaN
11 Oph b Confirmed 21.0 3.0 3.0 NaN NaN NaN NaN NaN NaN ... M9 0.011 0.002 0.002 2375.0 175.0 175.0 NaN NaN Oph 1622-2405, Oph 11A
11 UMi b Confirmed NaN NaN NaN 10.50 2.47 2.47 NaN NaN NaN ... K4III 1.560 0.540 0.540 4340.0 70.0 70.0 NaN NaN NaN
14 And b Confirmed NaN NaN NaN 5.33 0.57 0.57 NaN NaN NaN ... K0III NaN NaN NaN 4813.0 20.0 20.0 NaN NaN NaN
14 Her b Confirmed NaN NaN NaN 4.64 0.19 0.19 NaN NaN NaN ... K0 V 5.100 NaN NaN 5311.0 87.0 87.0 NaN NaN NaN

5 rows × 97 columns

In [2]:
print("Katalogdaki toplam gezegen sayisi: ", otegezegenler['planet_status'].count())
Katalogdaki toplam gezegen sayisi:  4692
In [3]:
otegezegenler.columns
Out[3]:
Index(['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')
In [4]:
otegezegenler.describe()
Out[4]:
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 ... star_mass_error_max star_radius star_radius_error_min star_radius_error_max star_age star_age_error_min star_age_error_max star_teff star_teff_error_min star_teff_error_max
count 1407.000000 1284.000000 1271.000 1019.000000 868.000000 868.000000 3505.000000 3358.000000 3358.000000 4425.000000 ... 3495.00 4047.000000 3887.000000 3887.000000 2683.000000 2404.000 2404.0 4256.000000 4063.000000 4063.000000
mean 5.830388 inf inf 3.571298 inf inf 0.413441 0.041957 0.057215 777.389865 ... inf 1.545581 0.166626 0.225783 4.232161 inf inf 5455.035277 108.530839 108.527371
std 12.859793 NaN NaN 7.444308 NaN NaN 0.463602 0.085689 0.229717 13183.708288 ... NaN 3.511451 0.618546 1.831641 2.477264 NaN NaN 1461.218543 199.663710 197.514709
min 0.000002 0.000000 0.000 0.000470 0.000000 0.000000 0.000002 0.000000 0.000000 0.027829 ... -0.13 0.015600 -0.180000 -0.180000 0.000500 -7.410 -2.6 56.750000 0.000000 0.000000
25% 0.056150 0.012675 0.010 0.075599 0.009225 0.009075 0.144000 0.012000 0.013000 4.465300 ... 0.03 0.790000 0.030000 0.030000 2.750000 -2.410 0.9 4985.000000 58.040000 59.015000
50% 0.720000 0.070000 0.067 1.080000 0.064000 0.070000 0.216000 0.021200 0.028500 12.130686 ... 0.05 0.970000 0.063000 0.077000 4.070000 -0.786 2.2 5575.500000 90.000000 89.300000
75% 3.197500 0.400000 0.385 3.195500 0.250000 0.260000 0.388000 0.047000 0.057000 47.840000 ... 0.09 1.260000 0.160000 0.230000 5.000000 0.855 4.4 5918.000000 125.000000 120.000000
max 81.900000 inf inf 63.300000 inf inf 6.520000 2.378000 9.640000 730000.000000 ... inf 83.800000 20.510000 104.530000 15.000000 inf inf 42000.000000 5500.000000 5500.000000

8 rows × 84 columns

Kepler'in 3. Yasası¶

Johannes Kepler'in Tycho Brahe'nin gözlemleri üzerindeki çalışmaları sonucu tamamen deneysel olarak türettiği ve bugün Kepler Yasaları olarak tanımladığımız üç ana kural Güneş Sistemi'ndeki gezegenler gibi ötegezegenlerin de yörünge hareketlerini tanımlarlar. Bu yasalardan, gezegenin yörünge dönemi ile yörünge büyüklüğü arasındaki ilişkiyi ifade eden 3. yasası Newton'ın kütleçekim yasasından hareketle aşağıdaki şekilde elde edilir.

$$ a^3 = \frac{G (M_\odot + M_g)}{4~\pi^2} P^2 $$

(1)

Güneş sistemi için gezegen kütleleri ($M_g$) Güneş'in kütlesinden ($M_\odot$) çok küçük kabul edilir, yörünge yarı-büyük eksen uzunluğu ($a$) Astronomi Birimi cinsinden (exoplanet.eu kataloğunda verildiği gibi), yörünge dönemi ($P$) Dünya Yılı cinsinden (exoplanet.eu kataloğunda Dünya günü biriminde verilmiştir) ifade edilirse denklemin sabitleri (evrensel kütleçekim sabiti $G$ ve $4~\pi^2$ birim dönüşümünden gelen çarpanlarla sadeleşir ve denklem;

$$ a^3 = P^2 $$

(2)

şeklinde ifade edilir.

Ötegezegenlerin yörüngeleri de Kepleryan'dır. Yani, yörünge hareket, büyüklük ve şeklini tarif eden Kepler yasaları başka yıldızlarla ortak kütle merkezi etrafında dolanan bu gezegenler için de geçerlidir. Ayrıca ötegezegen kütlelerini de yıldız kütlelerine oranla küçük kabul edersek; ki bu çok doğru değildir zira çok küçük yıldızlar ve çok büyük kütleli ötegezegenler söz konusudur, bu ilişkiyi katalogdaki gezegenler için de gösterebiliriz.

In [5]:
otegezegenler['orbital_period'].head()
Out[5]:
# name
11 Com b       326.03
11 Oph b    730000.00
11 UMi b       516.22
14 And b       185.84
14 Her b      1773.40
Name: orbital_period, dtype: float64
In [6]:
otegezegenler['semi_major_axis'].head()
Out[6]:
# name
11 Com b      1.29
11 Oph b    243.00
11 UMi b      1.54
14 And b      0.83
14 Her b      2.77
Name: semi_major_axis, dtype: float64
In [7]:
# 0.1 AU'dan uzak 10 AU'dan yakin gezegenler icin Kepler 3. yasa
%matplotlib inline
dunya_yili = 365.25 # gun
P = otegezegenler.loc[(otegezegenler['semi_major_axis'] > 0.1) & (otegezegenler['semi_major_axis'] < 10.0), \
                  'orbital_period'] / dunya_yili
a = otegezegenler.loc[(otegezegenler['semi_major_axis'] > 0.1) & (otegezegenler['semi_major_axis'] < 10.0), \
                  'semi_major_axis']
plt.plot(a**3, (P/dunya_yili)**2,'r.')
plt.xlabel('$a^3$')
plt.ylabel('$P^2$')
plt.show()
In [8]:
# Aykiri noktalari belirleyip cizdirelim
Port = P.mean()
Pstd = P.std()
aort = a.mean()
astd = a.std()
kosul = (P < Port + 3*Pstd) & (a < aort + 3*astd)
plt.plot(a[kosul]**3, P[kosul]**2, 'r.')
plt.xlabel('$a^3$')
plt.ylabel('$P^2$')
plt.show()

Sonuç olarak gerçekten eğimi 1'e yakın (bunu bir doğru uyumlayıp görebiliriz)bir miktar saçılması bulunmakla birlikte bu iki nicelik arasında doğrusal bir ilişki olduğunu göstermiş olduk. Grafiğimizdeki saçılmanın nedenlerinden biri yaptığımız, ancak her sistem için doğru olmadığını bildiğimiz, gezegen kütlesinin yıldız kütlesinden çok küçük olduğu varsayımıdır. Bir başka önemli nokta (2) numaralı denklemin tam olarak geçerli olabilmesi için yıldızın da Güneş kütlesinde olması gerekir. Oysa ki katalogdaki yıldızların büyük çoğunluğu bu kütlenin altında bir kısmı ise üstündedir. Ayrıca gözlemsel belirsizlikler de saçılmanın önemli kaynaklarından biridir.

Gezegen Barındıran Yıldızların Özellikleri¶

Gezegen barındıran yıldızların (ing. host stars) temel parametrelerini (sıcaklık, metal bolluğu, kütle, yarıçap, yaş) bilmek ne tür yıldızların etrafında gezegen bulunabileceğini anlamak açısından önem taşır. Örneğin gezegen barındıran yıldızların hangi sıcaklık aralığına ne şekilde dağıldıklarını anlamak için basit bir histogram çizmek ve bazı temel istatistiksel parametrelere bakmak bile faydalı olacaktır. Katalogda yıldızın sıcaklığı star_teff sütununda yer almaktadır.

In [9]:
otegezegenler['star_teff'].describe()
Out[9]:
count     4256.000000
mean      5455.035277
std       1461.218543
min         56.750000
25%       4985.000000
50%       5575.500000
75%       5918.000000
max      42000.000000
Name: star_teff, dtype: float64
In [10]:
# Gezegen barindiran yildizlarin sicaklik histogrami
otegezegenler.hist(column='star_teff', bins=10)
Out[10]:
array([[<AxesSubplot:title={'center':'star_teff'}>]], dtype=object)
In [11]:
# Verinin icinde cok sicak ve cok sogu bazi yıildizlar var
# Bu yildizlari ve sicaklik hatalarini bir gorelim
otegezegenler.loc[(otegezegenler['star_teff'] > 20000) | (otegezegenler['star_teff'] < 1000), \
                  ['star_teff','star_teff_error_min', 'star_teff_error_max']]
Out[11]:
star_teff star_teff_error_min star_teff_error_max
# name
HIP 67522 b 56.75 NaN NaN
KIC 10001893 d 26700.00 300.0 300.0
KOI-55 b 27730.00 270.0 270.0
KOI-55 c 27730.00 270.0 270.0
NSVS 1425 (AB) d 42000.00 NaN NaN
NY Vir (AB) b 33000.00 NaN NaN
NY Vir (AB) c 33000.00 NaN NaN
SDSS J1110+0116 940.00 20.0 20.0
V391 Peg b 29300.00 500.0 500.0
WD J0914+1914 b 27743.00 310.0 310.0
WISE 1217+16 A b 575.00 25.0 25.0
WISE 1711+3500 b 770.00 80.0 80.0
In [12]:
# Histogrami daha makul bir araliga kisitlayalim
otegezegenler[(otegezegenler['star_teff'] < 8000) & (otegezegenler['star_teff'] > 3000)]\
    .hist(column='star_teff', bins=25)
Out[12]:
array([[<AxesSubplot:title={'center':'star_teff'}>]], dtype=object)

Grafikten gezegen barındıran yıldızların büyük çoğunluğunun $5400 - 6200$ K aralığında olduğu görülmektedir. Ancak bunun nedeni gerçekten de bir yıldızın gezegen barındırmak için sahip olması gereken optimum yüzey sıcaklığının bu aralıkta olması gerektiği sonucu hemen çıkarılmamaldır. Zira gezegen araştırmalarında (özellikle de Kepler uzay teleskobu söz konusu olduğunda) etrafında gezegen bulmak üzere hedef olarak seçilen yıldızların büyük çoğunluğunun Güneş benzeri yıldızlar olmasıdır!

Şimdi bir de metal bolluğu dağılımına bakalım.

In [13]:
otegezegenler['star_metallicity'].describe()
Out[13]:
count    3986.000000
mean       -0.006921
std         0.198320
min        -1.000000
25%        -0.100000
50%         0.005000
75%         0.100000
max         0.610000
Name: star_metallicity, dtype: float64
In [14]:
# Metalce zengin yıldızların etrafındaki gezegenlerin sayısı konunusuna bakmak ilginc olabilir
otegezegenler[otegezegenler['star_metallicity'] > 0.20]\
    .hist(column='star_metallicity', bins=10)
Out[14]:
array([[<AxesSubplot:title={'center':'star_metallicity'}>]], dtype=object)
In [15]:
# Ayni sekilde metalce fakir yıldızların etrafındaki gezegenlerin sayısı da ilginizi cekebilir
otegezegenler[otegezegenler['star_metallicity'] < -0.20]\
    .hist(column='star_metallicity', bins=10)
Out[15]:
array([[<AxesSubplot:title={'center':'star_metallicity'}>]], dtype=object)
In [16]:
# Keşif yöntemlerinin başarısı da ilgi çekici olabilir
otegezegenler['detection_type'].describe()
Out[16]:
count                4692
unique                  8
top       Primary Transit
freq                 3407
Name: detection_type, dtype: object
In [17]:
# Her bir kesif yontemine bakalim
otegezegenler['detection_type'].unique()
Out[17]:
array(['Radial Velocity', 'Imaging', 'Primary Transit', 'Timing',
       'Astrometry', 'Default', 'TTV', 'Microlensing'], dtype=object)
In [18]:
# Her kesif yonteminin bir histogramini almaya calisalım
toplam_sayi = len(otegezegenler)
for yontem in otegezegenler['detection_type'].unique():
    sayi = len(otegezegenler[otegezegenler['detection_type'] == yontem])
    print("{:s} :{:d}, %{:.2f}".format(yontem, sayi, sayi / toplam_sayi * 100))
Radial Velocity :912, %19.44
Imaging :142, %3.03
Primary Transit :3407, %72.61
Timing :43, %0.92
Astrometry :14, %0.30
Default :11, %0.23
TTV :23, %0.49
Microlensing :140, %2.98

Daha pek çok istatistik geliştirebileceğimiz, anlamlı bir şekilde çok yönlü olarak görselleştirebileceğimiz ve üzerinden istatistiksel çıkarımlar yapabileceğimiz bu veritabanı üzerinde çalışmayı sürdüreceğiz.