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.
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()
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
print("Katalogdaki toplam gezegen sayisi: ", otegezegenler['planet_status'].count())
Katalogdaki toplam gezegen sayisi: 4692
otegezegenler.columns
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')
otegezegenler.describe()
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
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.
otegezegenler['orbital_period'].head()
# 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
otegezegenler['semi_major_axis'].head()
# 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
# 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()
# 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 (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.
otegezegenler['star_teff'].describe()
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
# Gezegen barindiran yildizlarin sicaklik histogrami
otegezegenler.hist(column='star_teff', bins=10)
array([[<AxesSubplot:title={'center':'star_teff'}>]], dtype=object)
# 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']]
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 |
# Histogrami daha makul bir araliga kisitlayalim
otegezegenler[(otegezegenler['star_teff'] < 8000) & (otegezegenler['star_teff'] > 3000)]\
.hist(column='star_teff', bins=25)
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.
otegezegenler['star_metallicity'].describe()
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
# 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)
array([[<AxesSubplot:title={'center':'star_metallicity'}>]], dtype=object)
# 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)
array([[<AxesSubplot:title={'center':'star_metallicity'}>]], dtype=object)
# Keşif yöntemlerinin başarısı da ilgi çekici olabilir
otegezegenler['detection_type'].describe()
count 4692 unique 8 top Primary Transit freq 3407 Name: detection_type, dtype: object
# Her bir kesif yontemine bakalim
otegezegenler['detection_type'].unique()
array(['Radial Velocity', 'Imaging', 'Primary Transit', 'Timing', 'Astrometry', 'Default', 'TTV', 'Microlensing'], dtype=object)
# 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.