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 [4]:
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[4]:
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 16.1284 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 11.0873 1.10 1.10 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 4.6840 0.23 0.23 NaN NaN NaN ... K0III NaN NaN NaN 4813.0 20.0 20.0 NaN NaN NaN
14 Her b Confirmed 9.1 NaN NaN 5.2150 NaN NaN NaN NaN NaN ... K0 V 5.100 NaN NaN 5311.0 87.0 87.0 NaN NaN NaN

5 rows × 97 columns

In [6]:
import ydata_profiling
In [2]:
otegezegenler.info()
<class 'pandas.core.frame.DataFrame'>
Index: 5330 entries, 11 Com b to zet Del B
Data columns (total 97 columns):
 #   Column                      Non-Null Count  Dtype  
---  ------                      --------------  -----  
 0   planet_status               5330 non-null   object 
 1   mass                        1849 non-null   float64
 2   mass_error_min              1719 non-null   float64
 3   mass_error_max              1707 non-null   float64
 4   mass_sini                   1139 non-null   float64
 5   mass_sini_error_min         981 non-null    float64
 6   mass_sini_error_max         980 non-null    float64
 7   radius                      3873 non-null   float64
 8   radius_error_min            3718 non-null   float64
 9   radius_error_max            3718 non-null   float64
 10  orbital_period              4890 non-null   float64
 11  orbital_period_error_min    4648 non-null   float64
 12  orbital_period_error_max    4648 non-null   float64
 13  semi_major_axis             3587 non-null   float64
 14  semi_major_axis_error_min   2479 non-null   float64
 15  semi_major_axis_error_max   2479 non-null   float64
 16  eccentricity                2156 non-null   float64
 17  eccentricity_error_min      1688 non-null   float64
 18  eccentricity_error_max      1681 non-null   float64
 19  inclination                 1526 non-null   float64
 20  inclination_error_min       1378 non-null   float64
 21  inclination_error_max       1378 non-null   float64
 22  angular_distance            662 non-null    float64
 23  discovered                  5321 non-null   float64
 24  updated                     5330 non-null   object 
 25  omega                       1347 non-null   float64
 26  omega_error_min             1264 non-null   float64
 27  omega_error_max             1264 non-null   float64
 28  tperi                       777 non-null    float64
 29  tperi_error_min             722 non-null    float64
 30  tperi_error_max             722 non-null    float64
 31  tconj                       2659 non-null   float64
 32  tconj_error_min             2591 non-null   float64
 33  tconj_error_max             2591 non-null   float64
 34  tzero_tr                    1296 non-null   float64
 35  tzero_tr_error_min          1233 non-null   float64
 36  tzero_tr_error_max          1233 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                94 non-null     float64
 41  lambda_angle_error_min      95 non-null     float64
 42  lambda_angle_error_max      95 non-null     float64
 43  impact_parameter            1850 non-null   float64
 44  impact_parameter_error_min  1833 non-null   float64
 45  impact_parameter_error_max  1833 non-null   float64
 46  tzero_vr                    42 non-null     float64
 47  tzero_vr_error_min          39 non-null     float64
 48  tzero_vr_error_max          39 non-null     float64
 49  k                           1357 non-null   float64
 50  k_error_min                 1321 non-null   float64
 51  k_error_max                 1321 non-null   float64
 52  temp_calculated             1167 non-null   float64
 53  temp_calculated_error_min   816 non-null    float64
 54  temp_calculated_error_max   816 non-null    float64
 55  temp_measured               62 non-null     float64
 56  hot_point_lon               3 non-null      float64
 57  geometric_albedo            16 non-null     float64
 58  geometric_albedo_error_min  14 non-null     float64
 59  geometric_albedo_error_max  14 non-null     float64
 60  log_g                       52 non-null     float64
 61  publication                 5330 non-null   object 
 62  detection_type              5330 non-null   object 
 63  mass_detection_type         1850 non-null   object 
 64  radius_detection_type       1200 non-null   object 
 65  alternate_names             3285 non-null   object 
 66  molecules                   102 non-null    object 
 67  star_name                   5226 non-null   object 
 68  ra                          5330 non-null   float64
 69  dec                         5330 non-null   float64
 70  mag_v                       2293 non-null   float64
 71  mag_i                       194 non-null    float64
 72  mag_j                       2930 non-null   float64
 73  mag_h                       2918 non-null   float64
 74  mag_k                       2228 non-null   float64
 75  star_distance               5020 non-null   float64
 76  star_distance_error_min     3411 non-null   float64
 77  star_distance_error_max     3412 non-null   float64
 78  star_metallicity            4299 non-null   float64
 79  star_metallicity_error_min  3411 non-null   float64
 80  star_metallicity_error_max  3411 non-null   float64
 81  star_mass                   4767 non-null   float64
 82  star_mass_error_min         3985 non-null   float64
 83  star_mass_error_max         3985 non-null   float64
 84  star_radius                 4442 non-null   float64
 85  star_radius_error_min       4267 non-null   float64
 86  star_radius_error_max       4267 non-null   float64
 87  star_sp_type                2033 non-null   object 
 88  star_age                    2874 non-null   float64
 89  star_age_error_min          2577 non-null   float64
 90  star_age_error_max          2578 non-null   float64
 91  star_teff                   4647 non-null   float64
 92  star_teff_error_min         4429 non-null   float64
 93  star_teff_error_max         4429 non-null   float64
 94  star_detected_disc          88 non-null     object 
 95  star_magnetic_field         4 non-null      object 
 96  star_alternate_names        3294 non-null   object 
dtypes: float64(84), object(13)
memory usage: 4.0+ MB
In [2]:
print("Katalogdaki toplam gezegen sayisi: ", otegezegenler['planet_status'].count())
Katalogdaki toplam gezegen sayisi:  5330
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 1849.000000 1719.000000 1707.000 1139.000000 981.000 980.000 3873.000000 3718.000000 3718.000000 4.890000e+03 ... 3985.00 4442.000000 4267.000000 4267.000000 2874.000000 2577.00 2578.0000 4647.000000 4429.000000 4429.000000
mean 6.386024 inf inf 3.772789 inf inf 0.435448 0.054609 0.069706 2.749929e+03 ... inf 1.520676 0.159323 0.215745 4.201431 inf inf 5435.310958 109.414769 109.512703
std 13.758278 NaN NaN 7.900297 NaN NaN 0.511993 0.791282 0.820005 1.183292e+05 ... NaN 3.441636 0.608180 1.754946 2.541078 NaN NaN 1547.636320 202.743692 200.797385
min 0.000002 0.000000 0.000 0.000104 0.000 0.000 0.000002 0.000000 0.000000 1.960000e-02 ... -0.13 0.008300 -0.180000 -0.180000 0.000020 -7.41 -2.6000 48.910000 0.000000 0.000000
25% 0.047200 0.011465 0.009 0.076000 0.009 0.009 0.145000 0.011000 0.012000 4.282435e+00 ... 0.03 0.780000 0.030000 0.030000 2.630000 -2.33 0.8325 4954.500000 57.470000 58.080000
50% 0.706000 0.076000 0.070 1.071000 0.070 0.070 0.220000 0.021000 0.027000 1.161925e+01 ... 0.05 0.960000 0.060000 0.070000 4.070000 -0.45 2.0950 5557.000000 89.000000 89.000000
75% 4.000000 0.680000 0.600 3.315000 0.270 0.300 0.470000 0.046000 0.056000 4.614400e+01 ... 0.09 1.260000 0.140000 0.220000 5.000000 1.00 4.2200 5912.500000 126.000000 120.000000
max 135.300000 inf inf 63.300000 inf inf 9.209600 48.000000 48.000000 8.035500e+06 ... 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 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 [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      1763.30
Name: orbital_period, dtype: float64
In [6]:
otegezegenler['semi_major_axis'].head()
Out[6]:
# name
11 Com b      1.290
11 Oph b    243.000
11 UMi b      1.540
14 And b      0.830
14 Her b      2.845
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()
No description has been provided for this image
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()
No description has been provided for this image

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     4647.000000
mean      5435.310958
std       1547.636320
min         48.910000
25%       4954.500000
50%       5557.000000
75%       5912.500000
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)
No description has been provided for this image
In [3]:
# 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[3]:
star_teff star_teff_error_min star_teff_error_max
# name
HD 80869 b 58.37 15.0 15.0
HIP 75092 b 48.91 50.0 50.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
TOI-3540 b 58.65 110.0 110.0
V 921 Sco b 29000.00 3900.0 3900.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
ZTF-J1622+47 b 29000.00 NaN NaN
mu2 Sco b 21700.00 900.0 900.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)
No description has been provided for this image

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    4299.000000
mean       -0.004945
std         0.201008
min        -1.080000
25%        -0.100000
50%         0.010000
75%         0.110000
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)
No description has been provided for this image
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)
No description has been provided for this image
In [16]:
# Keşif yöntemlerinin başarısı da ilgi çekici olabilir
otegezegenler['detection_type'].describe()
Out[16]:
count                5330
unique                  8
top       Primary Transit
freq                 3729
Name: detection_type, dtype: object
In [17]:
# Her bir kesif yontemine bakalim
otegezegenler['detection_type'].unique()
Out[17]:
array(['Radial Velocity', 'Imaging', 'Primary Transit', 'Astrometry',
       'Default', 'TTV', 'Microlensing', 'Timing'], 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 :1029, %19.31
Imaging :217, %4.07
Primary Transit :3729, %69.96
Astrometry :20, %0.38
Default :34, %0.64
TTV :26, %0.49
Microlensing :227, %4.26
Timing :48, %0.90

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.