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 | 16.1284 | 1.53491 | 1.53491 | 16.1284 | 1.53491 | 1.53491 | NaN | NaN | NaN | ... | G8 III | NaN | NaN | NaN | 4742.0 | 100.0 | 100.0 | NaN | NaN | NaN |
11 Oph b | Confirmed | 21.0000 | 3.00000 | 3.00000 | 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 | 11.0873 | 1.10000 | 1.10000 | 11.0873 | 1.10000 | 1.10000 | NaN | NaN | NaN | ... | K4III | 1.560 | 0.540 | 0.540 | 4340.0 | 70.0 | 70.0 | NaN | NaN | NaN |
14 And b | Confirmed | 4.6840 | 0.23000 | 0.23000 | 4.6840 | 0.23000 | 0.23000 | NaN | NaN | NaN | ... | K0III | NaN | NaN | NaN | 4813.0 | 20.0 | 20.0 | NaN | NaN | NaN |
14 Her b | Confirmed | NaN | NaN | NaN | NaN | 4.95000 | 4.95000 | NaN | NaN | NaN | ... | K0 V | 5.100 | NaN | NaN | 5311.0 | 87.0 | 87.0 | NaN | NaN | NaN |
5 rows × 97 columns
otegezegenler.info()
<class 'pandas.core.frame.DataFrame'> Index: 5641 entries, 11 Com b to ZTFJ2252-05 b Data columns (total 97 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 planet_status 5641 non-null object 1 mass 3094 non-null float64 2 mass_error_min 2825 non-null float64 3 mass_error_max 2825 non-null float64 4 mass_sini 1192 non-null float64 5 mass_sini_error_min 1038 non-null float64 6 mass_sini_error_max 1038 non-null float64 7 radius 4027 non-null float64 8 radius_error_min 3864 non-null float64 9 radius_error_max 3864 non-null float64 10 orbital_period 5127 non-null float64 11 orbital_period_error_min 4862 non-null float64 12 orbital_period_error_max 4862 non-null float64 13 semi_major_axis 3826 non-null float64 14 semi_major_axis_error_min 2704 non-null float64 15 semi_major_axis_error_max 2704 non-null float64 16 eccentricity 2338 non-null float64 17 eccentricity_error_min 1836 non-null float64 18 eccentricity_error_max 1836 non-null float64 19 inclination 1675 non-null float64 20 inclination_error_min 1516 non-null float64 21 inclination_error_max 1516 non-null float64 22 angular_distance 663 non-null float64 23 discovered 5629 non-null float64 24 updated 5641 non-null object 25 omega 1477 non-null float64 26 omega_error_min 1381 non-null float64 27 omega_error_max 1381 non-null float64 28 tperi 827 non-null float64 29 tperi_error_min 764 non-null float64 30 tperi_error_max 764 non-null float64 31 tconj 2657 non-null float64 32 tconj_error_min 2589 non-null float64 33 tconj_error_max 2589 non-null float64 34 tzero_tr 1444 non-null float64 35 tzero_tr_error_min 1362 non-null float64 36 tzero_tr_error_max 1362 non-null float64 37 tzero_tr_sec 47 non-null float64 38 tzero_tr_sec_error_min 45 non-null float64 39 tzero_tr_sec_error_max 45 non-null float64 40 lambda_angle 100 non-null float64 41 lambda_angle_error_min 101 non-null float64 42 lambda_angle_error_max 101 non-null float64 43 impact_parameter 1971 non-null float64 44 impact_parameter_error_min 1947 non-null float64 45 impact_parameter_error_max 1947 non-null float64 46 tzero_vr 43 non-null float64 47 tzero_vr_error_min 40 non-null float64 48 tzero_vr_error_max 40 non-null float64 49 k 1539 non-null float64 50 k_error_min 1494 non-null float64 51 k_error_max 1494 non-null float64 52 temp_calculated 1307 non-null float64 53 temp_calculated_error_min 960 non-null float64 54 temp_calculated_error_max 960 non-null float64 55 temp_measured 81 non-null float64 56 hot_point_lon 4 non-null float64 57 geometric_albedo 18 non-null float64 58 geometric_albedo_error_min 16 non-null float64 59 geometric_albedo_error_max 16 non-null float64 60 log_g 53 non-null float64 61 publication 5641 non-null object 62 detection_type 5641 non-null object 63 mass_detection_type 2149 non-null object 64 radius_detection_type 1360 non-null object 65 alternate_names 3384 non-null object 66 molecules 118 non-null object 67 star_name 5525 non-null object 68 ra 5641 non-null float64 69 dec 5641 non-null float64 70 mag_v 2474 non-null float64 71 mag_i 192 non-null float64 72 mag_j 2938 non-null float64 73 mag_h 2926 non-null float64 74 mag_k 2240 non-null float64 75 star_distance 5279 non-null float64 76 star_distance_error_min 3650 non-null float64 77 star_distance_error_max 3650 non-null float64 78 star_metallicity 4447 non-null float64 79 star_metallicity_error_min 3541 non-null float64 80 star_metallicity_error_max 3541 non-null float64 81 star_mass 5004 non-null float64 82 star_mass_error_min 4197 non-null float64 83 star_mass_error_max 4197 non-null float64 84 star_radius 4636 non-null float64 85 star_radius_error_min 4436 non-null float64 86 star_radius_error_max 4436 non-null float64 87 star_sp_type 2129 non-null object 88 star_age 2987 non-null float64 89 star_age_error_min 2680 non-null float64 90 star_age_error_max 2680 non-null float64 91 star_teff 4835 non-null float64 92 star_teff_error_min 4609 non-null float64 93 star_teff_error_max 4609 non-null float64 94 star_detected_disc 90 non-null object 95 star_magnetic_field 4 non-null object 96 star_alternate_names 3391 non-null object dtypes: float64(84), object(13) memory usage: 4.2+ MB
print("Katalogdaki toplam gezegen sayisi: ", otegezegenler['planet_status'].count())
Katalogdaki toplam gezegen sayisi: 5641
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 | 3094.000000 | 2825.0000 | 2825.0000 | 1192.000000 | 1038.000000 | 1038.000000 | 4027.000000 | 3864.000000 | 3864.000000 | 5.127000e+03 | ... | 4197.000000 | 4636.000000 | 4436.000000 | 4436.000000 | 2987.000000 | 2680.0000 | 2680.0000 | 4835.000000 | 4609.000000 | 4609.000000 |
mean | 5.630270 | inf | inf | 4.029613 | inf | inf | 0.439157 | 0.053979 | 0.053979 | 2.643392e+03 | ... | 0.094688 | 1.557411 | 0.152864 | 0.152864 | 4.234400 | inf | inf | 5425.265686 | 109.295828 | 109.295828 |
std | 12.217354 | NaN | NaN | 8.658565 | NaN | NaN | 0.495979 | 0.776612 | 0.776612 | 1.155622e+05 | ... | 0.444780 | 3.983383 | 0.546158 | 0.546158 | 2.570254 | NaN | NaN | 1547.889674 | 200.430500 | 200.430500 |
min | 0.000002 | 0.0000 | 0.0000 | 0.000470 | 0.000000 | 0.000000 | 0.000002 | 0.000000 | 0.000000 | 1.960000e-02 | ... | -0.130000 | 0.008300 | -0.180000 | -0.180000 | 0.000020 | -7.4100 | -7.4100 | 378.000000 | 0.000000 | 0.000000 |
25% | 0.050830 | 0.0094 | 0.0094 | 0.068450 | 0.008275 | 0.008275 | 0.145000 | 0.011000 | 0.011000 | 4.275955e+00 | ... | 0.030000 | 0.775825 | 0.030000 | 0.030000 | 2.625000 | -2.2925 | -2.2925 | 4942.000000 | 58.000000 | 58.000000 |
50% | 0.790500 | 0.0720 | 0.0720 | 1.024500 | 0.067500 | 0.067500 | 0.222000 | 0.021000 | 0.021000 | 1.153000e+01 | ... | 0.050000 | 0.960000 | 0.060000 | 0.060000 | 4.070000 | -0.2500 | -0.2500 | 5551.000000 | 88.490000 | 88.490000 |
75% | 3.887500 | 0.4900 | 0.4900 | 3.377500 | 0.297500 | 0.297500 | 0.511000 | 0.045000 | 0.045000 | 4.673907e+01 | ... | 0.080000 | 1.250750 | 0.140000 | 0.140000 | 5.100000 | 1.0000 | 1.0000 | 5909.500000 | 125.000000 | 125.000000 |
max | 136.000000 | inf | inf | 70.200000 | inf | inf | 9.209600 | 48.000000 | 48.000000 | 8.035500e+06 | ... | 24.000000 | 88.500000 | 20.510000 | 20.510000 | 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 iyi bir yaklaşıklıkla 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 aynı kabullerle 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 1767.56 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.82 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**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) & (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 4835.000000 mean 5425.265686 std 1547.889674 min 378.000000 25% 4942.000000 50% 5551.000000 75% 5909.500000 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 soguk 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 | |||
CFBDSIR J145829+101343 b | 580.5 | 24.5 | 24.5 |
KOI-55 b | 27730.0 | 270.0 | 270.0 |
KOI-55 c | 27730.0 | 270.0 | 270.0 |
mu2 Sco b | 21700.0 | 900.0 | 900.0 |
NSVS 1425 (AB) d | 42000.0 | NaN | NaN |
NY Vir (AB) b | 33000.0 | NaN | NaN |
NY Vir (AB) c | 33000.0 | NaN | NaN |
SDSS J1110+0116 | 940.0 | 20.0 | 20.0 |
V391 Peg b | 29300.0 | 500.0 | 500.0 |
V921 Sco b | 29000.0 | 3900.0 | 3900.0 |
WD J0914+1914 b | 27743.0 | 310.0 | 310.0 |
WISE 1217+16 A b | 575.0 | 25.0 | 25.0 |
WISE 1711+3500 b | 770.0 | 80.0 | 80.0 |
WISE J1828 b | 378.0 | 18.0 | 18.0 |
ZTF-J1622+47 b | 29000.0 | NaN | NaN |
# 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 4447.000000 mean -0.003995 std 0.200929 min -1.080000 25% -0.100000 50% 0.010000 75% 0.110000 max 0.890000 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 5641 unique 11 top Primary Transit freq 3887 Name: detection_type, dtype: object
# Her bir kesif yontemine bakalim
otegezegenler['detection_type'].unique()
array(['Radial Velocity', 'Imaging', 'Primary Transit', 'Astrometry', 'Other', 'TTV', 'Microlensing', 'Timing', 'Radial Velocity, Astrometry', 'Radial Velocity, Primary Transit', 'Primary Transit, Radial Velocity'], 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 :1096, %19.43 Imaging :237, %4.20 Primary Transit :3887, %68.91 Astrometry :20, %0.35 Other :34, %0.60 TTV :29, %0.51 Microlensing :278, %4.93 Timing :52, %0.92 Radial Velocity, Astrometry :3, %0.05 Radial Velocity, Primary Transit :1, %0.02 Primary Transit, Radial Velocity :4, %0.07
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.