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 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

In [2]:
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
In [3]:
print("Katalogdaki toplam gezegen sayisi: ", otegezegenler['planet_status'].count())
Katalogdaki toplam gezegen sayisi:  5641
In [4]:
otegezegenler.columns
Out[4]:
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 [5]:
otegezegenler.describe()
Out[5]:
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

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 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.

In [6]:
otegezegenler['orbital_period'].head()
Out[6]:
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
In [7]:
otegezegenler['semi_major_axis'].head()
Out[7]:
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
In [8]:
# 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()
In [9]:
# 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 Ö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 [10]:
otegezegenler['star_teff'].describe()
Out[10]:
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
In [11]:
# Gezegen barindiran yildizlarin sicaklik histogrami
otegezegenler.hist(column='star_teff', bins=10)
Out[11]:
array([[<AxesSubplot:title={'center':'star_teff'}>]], dtype=object)
In [12]:
# 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']]
Out[12]:
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
In [13]:
# Histogrami daha makul bir araliga kisitlayalim
otegezegenler[(otegezegenler['star_teff'] < 8000) & (otegezegenler['star_teff'] > 3000)]\
    .hist(column='star_teff', bins=25)
Out[13]:
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 [14]:
otegezegenler['star_metallicity'].describe()
Out[14]:
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
In [15]:
# 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[15]:
array([[<AxesSubplot:title={'center':'star_metallicity'}>]], dtype=object)
In [16]:
# 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[16]:
array([[<AxesSubplot:title={'center':'star_metallicity'}>]], dtype=object)
In [17]:
# Keşif yöntemlerinin başarısı da ilgi çekici olabilir
otegezegenler['detection_type'].describe()
Out[17]:
count                5641
unique                 11
top       Primary Transit
freq                 3887
Name: detection_type, dtype: object
In [18]:
# Her bir kesif yontemine bakalim
otegezegenler['detection_type'].unique()
Out[18]:
array(['Radial Velocity', 'Imaging', 'Primary Transit', 'Astrometry',
       'Other', 'TTV', 'Microlensing', 'Timing',
       'Radial Velocity, Astrometry', 'Radial Velocity, Primary Transit',
       'Primary Transit, Radial Velocity'], dtype=object)
In [19]:
# 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.