{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 800100715151 Astronomide Veritabanları #\n",
"\n",
"## Ders - 04a Pandas Paketiyle Veri İşleme Uygulaması"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Doç. Dr. Özgür Baştürk
\n",
"Ankara Üniversitesi, Astronomi ve Uzay Bilimleri Bölümü
\n",
"obasturk at ankara.edu.tr
\n",
"http://ozgur.astrotux.org"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Pandas Paketi İleri Konular Uygulama #\n",
"## Ders-4a: Ötegezegen Veritabanları Uygulaması ##\n",
"\n",
"* [Soru 1.](#Soru-1.)\n",
" * [Çözüm 1.](#Çözüm-1.)\n",
"* [Soru 2.](#Soru-2.)\n",
" * [Çözüm 2.](#Çözüm-2.)\n",
"* [Soru 3.](#Soru-3.)\n",
" * [Çözüm 3.](#Çözüm-3.)\n",
"* [Soru 4.](#Soru-4.)\n",
" * [Çözüm 4.](#Çözüm-4.)\n",
"* [Soru 5.](#Soru-5.)\n",
" * [Çözüm 5.](#Çözüm-5.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ötegezegenler ve onların barınak yıldızlarına ilişkin pek çok parametrenin bulunduğu ötegezegen veritabanları arasında öne çıkan iki tanesi [NASA Exoplanet Archive](https://exoplanetarchive.ipac.caltech.edu/) tarafından sağlanan veritabanı ile Cenevre Üniversitesi'nde tutulan [exoplanet.eu](http://exoplanet.eu/catalog/) veritabanıdır. İki veritabanında da benzer veriler yer aldığı gibi bir veritabanında olup diğerinde olmayan (barınak yıldız metal bolluğu gibi) ya da farklı kaynaklardan alınan veriler de bulunmaktadır. Bu iki veritabanını `pandas` paketinin sağladığı olanaklarla çeşitli şekillerde birleştirerek sorgulayabiliriz.\n",
"\n",
"Öncelikle her iki tabloyu `astroquery` fonksiyonlarıyla sorgulayarak birer `pandas` veriçerçevesine alalım. [NASA Exoplanet Archive](https://exoplanetarchive.ipac.caltech.edu/docs/data.html) ötegezegenler ve gözlemleriyle ilgili pek çok tablo ve veri sunmaktadır. Bu veri tablolarından ikisi tüm ötegezegen, sistem ve barınak yıldız parametrelerinin farklı literatür kaynaklarından alınarak listelendiği [Planetary Systems](https://exoplanetarchive.ipac.caltech.edu/cgi-bin/TblView/nph-tblView?app=ExoTbls&config=PS), diğeri bu parametrelerin farklı kaynaklardan derlenerek her bir gezegen için tek bir satır halinde sunulduğu [Planetary Systems Composite Data](https://exoplanetarchive.ipac.caltech.edu/cgi-bin/TblView/nph-tblView?app=ExoTbls&config=PSCompPars) tablosudur. Bu tablolara `astroquery` modüllerinden `NasaExoplanetArchive` NASA Exoplanet Archive veritabanını kritere göre tarayan fonksiyonu `query_criteria` ile erişilebilir. Tüm literatür kaynaklarından alınan verilerin sunulduğu tablo `ps`, parametrelerin derlenerek tek bir satıra dönüştürüldüğü tablo `pscommpars` adıyla `table` anahtarına sağlanmalı; tüm tablo çekilmek isteniyorsa, SQL sorgu nesnesinin sağlandığı `select` parametresi \" * \" değerine atanmalıdır. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#from astroquery.ipac.nexsci.nasa_exoplanet_archive import NasaExoplanetArchive\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#nasatablo = NasaExoplanetArchive.query_criteria(table=\"pscomppars\", select=\"*\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#nasatablo.columns"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#nasaexo = nasatablo.to_pandas()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[exoplanet.eu veritabanına](http://exoplanet.eu/catalog/) bağlanmak için bir `astroquery` servisi tanımlanmadığından bu veritabanını sorgulayabilmek ya da çevrimiçi çekip kullanabilmek için ya [`requests` modülü fonksiyonlarını](https://requests.readthedocs.io/en/latest/) kullanmak ya da sitenilen formatta (Virtual Observatory --VO-- tablosu, csv, dat) indirip uygun `pandas` fonksiyonuyla açmak gerekecektir. [DACE platformunun](https://dace.unige.ch/dashboard/) bir parçası olan katalog, Sanal Gözlemevi standardı Tablo Erişim Protokolü (Table Access Protocol, TAP) fonksiyonları ile sorgulamaya açıktır ve [pyvo](https://pyvo.readthedocs.io/en/latest/) modülü fonksiyonlarıyla sorgulanabilir ve tıpkı NASA Exoplanet Archive veritabanı gibi kullanılabilir."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"nasaexo = pd.read_csv('veri/PSCompPars_2026.03.31_00.14.15.csv', comment=\"#\", skipinitialspace=True)\n",
"exoeu = pd.read_csv('veri/exoplanet.eu_catalog_31-03-26_10_36_32.csv', skipinitialspace=True)\n",
"\n",
"print(\"NASA Exooplanet Archive veritabani sutunlari\")\n",
"print(\"-\"*45)\n",
"print(nasaexo.columns)\n",
"print(\"x\"*80)\n",
"print(\"exoplanet.eu veritabani sutunlari\")\n",
"print(\"-\"*45)\n",
"print(exoeu.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Görüldüğü üzere farklı veritabanlarında aynı sütunlar farklı isimlerle bulunabilmektedir. Örneğin NASA Exoplanet Archive veritabanında pl_name sütununda yer alan gezegen isimleri # name sütununda yer almaktadır. \n",
"\n",
"[Başa Dön](#Pandas-Paketi-İleri-Konular-Uygulama)\n",
"\n",
"### Soru 1. ### \n",
"\n",
"NASA Exoplanet Archive'dan bu uygulama için indirilen veritabanı gezegen doğaları başka gözlemlerle (örneğin hem geçiş, hem dikine hız ya da geçiş zamanları değişimi (TTV)) kesinleştirilmiş ve bu nedenle \"onaylanmış\" (ing. confirmed) ötegezegenleri içermektedir. exoplanet.eu veritabanında ise bu şekilde kesinleştirilmemiş gezegenler de bulunmaktadır. Her iki veritabanını bağlamak üzere gezegen isimlerini kullanınız ve bu iki veritabanında birden bulunan gezegenleri alınız. Gezegen ismini bu bağlanmış veritabanının indeksi haline getiriniz."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Çözüm 1. ####\n",
"\n",
"`pandas` paketinin iki veriçerçevesindeki verileri bağlamak için kullandığı fonksiyon `pd.merge()` fonksiyonudur. Fonksiyon varsayılan olarak bizim de amaçladığımız kesişim işlemini `how = \"inner\"` parametresi ile sağlar. Ancak her iki verçerçevesinde gezegen isimlerinin bulunduğu sütunlar farklıdır. Bu sütunların fonksiyona veritabanlarının verildiği sırayla hangi isimlerde olduğu `left_on` ve `right_on` parametrelerine sağlanmalıdır. Sonrasında oluşacak yeni verçerçevesinin indeksini gezegen ismi yapmak üzere veriçerçeveleri üzerine tanımlı `set_index` metoduna `pl_name` sütun ismi sağlanarak istenen hedefe ulaşılabilir."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"og = pd.merge(nasaexo, exoeu, how=\"inner\",\\\n",
" left_on=\"pl_name\", right_on=\"name\")\n",
"og.set_index(\"pl_name\", inplace=True)\n",
"print(\"NASA Exoplanet Archive veritabani buyuklugu: \", nasaexo.shape)\n",
"print(\"exoplanet.eu veritabani buyuklugu: \", exoeu.shape)\n",
"print(\"İki veritabaninin kesisiminin buyuklugu: \", og.shape)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"nasaexo[nasaexo['pl_name'] == 'Kepler-16 b']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"exoeu[exoeu['name'] == 'Kepler-16 b']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"exoeu[exoeu['name'] == 'Kepler-16 (AB)b']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Görüldüğü üzere her iki veritabanında sırasıylsa farklı sayıdlarda ötegezegen olup, kesişimlerinde her ikisinde de aynı isimle yer alan ötegezegenler. Aslında aynı isimle olmasa dahi her iki veritabanında yer alan bazı ötegezegenler maalesef bulunmaktadır. Bunun nedeni zaman zaman ortaya çıkan isim karışıklığıdır. Örneğin NASA Exoplanet Archive veritabanında Kepler-16 b ismiyle yer alan ötegezegen, exoplanet.eu veritabanında bir çift yıldızın etrafında dolanan bir gezegen olduğu (ing. circumbinary planet) için Kepler 16 (AB)b ismiyle yer almaktadır. Yukarıdaki gibi bir birleştirmeyle bu tür ötegezegenleri veritabanında kaybetme tehlikesi vardır. Maalesef bu özel durumdan kaçınmanın kolay bir yolu olmayabilir. Özelde çift yıldız gezegenlerinin isimlerini kontrol edip eşleştirebilecek $string$ fonksiyonlarından faydalanılabilir. Ancak amacımız bu olmadığı için bu hataları bu uygulamada görmezden geliyoruz. Çalışma alanında deneyimli ve bu veritabanları üzerinden bir bilimsel araştırma yürütecek bir araştırıcının bu tür durumları da dikkate alması ve bunlar için de fonksiyonlar yazması ve öncesinde üzerinde çalışacağı veritabanlarını iyice incelemesi gerekir.\n",
"\n",
"Daha önemlisi birbirine bağlanan veritabanlarında farklı sayılarda sütun bulunduğu için bağlama işlemi sonunda oluşan $og$ veritabanında aynı bilgiyi içeren çok sayıda sütunun bulunmasıdır. Bu durumda her iki veritabanında birden çok kez bulunan sütunların hangilerinin nihai veritabanında bulunup hangilerinin bulunmayacağına karar vermek gerek. Bu bilgiler, farklı veritabanlarında farklı kaynaklardan (literatür referanslarından) geliyor olabilir. Üzerinde çalışılacak birleştirilmiş veritabanının sağlıklı veriler içermesi için yapılması gereken bu seçimde öncelikler araştırmacıdan araştırmacıya, ya da yapılacak araştırmanın niteliğine göre değişebilir. Biz bu uygulamada her iki veritabanında da bulunan bilgiler için NASA Exoplanet Archive'da bulunanları kullanmayı tercih edeceğiz."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Başa Dön](#Pandas-Paketi-İleri-Konular-Uygulama)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Soru 2. ### \n",
"\n",
"Her iki veritabanında da bulunan sütunları belirleyerek bunlardan exoplanet.eu veritabanında bulunanları bağlanmış veriçerçevenizden atınız.\n",
"\n",
"#### Çözüm 2. #### \n",
"\n",
"Öncelikle her iki veritabanında aynı bilgiyi barındıran (aynı referanstan alınmayabildiği için bazıları tam olarak aynı olmayabilir ancak biz NASA Explanet Archive veritabanında bulunan bilgileri kullanmayı tercih ettik), ancak farklı isimle bulunan sütunların exoplanet.eu veritabanındaki isimlerini bir listeye toplayalım. Sonra bu listeyi `pandas` veriçerçevelerine uygulanan `drop()` fonksiyonuna sütun silecek şekilde `axis` parametresini $1$ değerine ayarlayarak atalım ve yaptığımız değişikliği kalıcı hale getirmek için `inplace` parametresini de $True$ değerine ayarlayalım."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"atilacak_sutunlar = ['star_name','name','detection_type',\n",
" 'orbital_period','orbital_period_error_min','orbital_period_error_max',\n",
" 'semi_major_axis','semi_major_axis_error_min','semi_major_axis_error_max',\n",
" 'eccentricity','eccentricity_error_min','eccentricity_error_max',\n",
" 'inclination','inclination_error_min','inclination_error_max',\n",
" 'mass','mass_error_min','mass_error_max','mass_measurement_type',\n",
" 'radius','radius_error_min','radius_error_max']\n",
"og.drop(atilacak_sutunlar,axis=1,inplace=True)\n",
"og.columns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Görüldüğü gibi her iki veriçerçevesinde de \"aynı\" bilgiyi içeren, ancak farklı isimle bulunan sütunları atarak sütun sayısı azaltılmış durumdadır."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Başa Dön](#Pandas-Paketi-İleri-Konular-Uygulama)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Soru 3. ### \n",
"\n",
"Her iki veritabanında da aynı isimle bulunan ve barınak yıldızın ekvatoryal koordinat sistemindeki koordinatlarını içeren $ra$ ve $dec$ sütunlarından exoplanet.eu veritabanı sağlananları atacak ve birer $ra$,$dec$ sütunu bırakacak düzenlemeyi yapınız.\n",
"\n",
"#### Çözüm 3. ####\n",
"\n",
"`pandas.merge()` işlemi sırasında her iki taraftan aynıı isimle gelecek sütunlardan fonksiyona ilk sağlanan veriçerçevesindekinin sonuna \"_x\", ikinci sağlanacak veriçerçevesindekinin sonuna ise \"_y\" eki gelecektir. Bu nedenle sonu \"_y\" ile biten $ra$ ve $dec$ sütunlarını yine `drop()` fonksiyonunu uygun şekilde kullanarak atabiliriz. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"og.drop(['ra_y','dec_y'], axis=1,inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Daha sonra da ra_x ve dec_x isimli sütunları yeniden isimlendirerek amacımıza ulaşabiliriz. Bunun için veriçerçeveleri üzerinde tanımlı `rename()` fonksiyonunu aşağıdaki şekilde istediğimiz değişiklikleri bir sözlük değişkenine yazıp, bu değişkeni `columns` parametresine sağlayarak kullanmalı ve yine yaptığımız değişikliği kalıcı hale getirmek için fonksiyonun `inplace` parametresini $True$ değerine ayarlamalıyız."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"og[['ra_x','dec_x']].head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"og.rename(columns={'ra_x':'ra','dec_x':'dec'},inplace=True)\n",
"og[['ra','dec']].head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gördüğünüz gibi istediğmiz değişiklikleri yaptık ve bağlanmış veritabanımızı her iki veritabanında ortak olan ötegezegenler için her iki veritabanında ortak olmayan bilgilerini de içerecek şekilde her türlü analiz için hazır hale getirmiş olduk. Herhangi bir veri için tekrar orjinal veritabanlarına dönmemiz gerekse de bu veritabanlarını sırasıyla $nasaexo$ ve $exoeu$ veriçerçevelerinde sakladığımız için bir kaybımız olmayacak. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Başa Dön](#Pandas-Paketi-İleri-Konular-Uygulama)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Soru 4. ### \n",
"\n",
"Sadece geçiş yöntemiyle keşfedilmiş gezegenlerden oluşan bir veriçerçevesi oluşturunuz.\n",
"\n",
"#### Çözüm 4. #### \n",
"\n",
"Bu amaçla yapmamız gereken daha önce de yaptığımız gibi bize sadece geçiş yapan gezegenleri verecek bir koşul üretip bu koşulu mevcut veritabanında uygulayarak bir maske oluşturmak ve uyanları yeni bir veritabanına toplamaktan ibaret. Ancak önce keşif yöntemlerinin hangileri olduğunu görelim. Bunun için discoverymethod sütununa bakmalı ve bu sütundaki tüm teknikleri `unique()` metodunu kullanarak birer kez geçecek listelemeliyiz."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(og['discoverymethod'].unique())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(nasaexo['discoverymethod'].unique())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(exoeu['detection_type'].unique())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Geçiş yöntemiyle keşfedilen gezegenlerin discoverymethod sütununda $Transit$ adıyla listelendiğini görmüş olduk. Koşulu buna uygun olarak yazabiliriz. exoplanet.eu veritabanında ise daha komplike bir sınıflandırmaya gidilmiş durumdadır. Şimdilik bu durumu görmezden gelebilriz, zira elimizde ortak gezegen isimleri üzerinden birleştirilmiş bir veriçerçevesi ve NASA Exoplanet Archive'dan \"Transit\" olarak gelen keşif yöntemi bulunuyor."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"kosul = (og['discoverymethod'] == 'Transit')\n",
"gecis_og = og[kosul]\n",
"gecis_og.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gördüğünüz gibi her iki veritabanında (NASA ve exoplanet.eu) ortak olan gezegenlerden önemli bir bölümü geçişle keşfedilmiş.Elimizdeki bu veriçerçevesinde NASA Exoplanet Arcihve'da bulunan onaylanmış tüm geçiş yapan ötegezegenler olduğuna göre bu ötegezegenlerin kütle ve yarıçapları biliniyor olmalı. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Başa Dön](#Pandas-Paketi-İleri-Konular-Uygulama)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Soru 5. ### \n",
"\n",
"Geçiş yapan ötegezegenler için bir kütle-yarıçap grafiği oluşturunuz.\n",
"\n",
"#### Çözüm 5. #### \n",
"\n",
"Çok kolay görünen bu iş için öncelikle elimizdeki verinin gerçekte kütle ve yarıçapları bilinen verilerden oluşup oluşmadığını sorgulamalıyız. Bunun için `isnull()` fonksiyonunu kullanalım."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"gecis_og[gecis_og['pl_bmassj'].isnull()]['pl_bmassj']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gördüğünüz gibi durum hiç de öyle değil. Bildiğiniz gibi [geçiş yöntemi](http://ozgur.astrotux.org/ast413/Ders_04/Ders_04_Gecis_Yontemi.pdf) gezegen yarıçapının yıldız yarıçapına oranının bulunmasını sağlar, yıldız modellerinden elde edilen yıldız yarıçapları kullanılarak gezegen yarıçapları elde edilebilirken kütlelerini elde etmek mümkün değildir. Burada dikine hız (ya da bir başka yöntemle) kütleleri onaylanmamış gezegenler (adaylar) de bulunuyor; hatta çoğunluktalar. Bunun için yapabileceğimiz pek fazla bir şey yok; zira bu gezegenlerin büyük çoğunluğu, ki bunların da büyük bölümü de Kepler uzay teleskobuyla keşfedilmiş gezegenlerdir; dikine hızlarını elde etmek üzere yüksek çözünürlüklü tayfları alınamayacak kadar sönük yıldızların etrafında bulunuyorlar. O vakit sadece kütlesi bulunanlara odaklanalım. Ancak önce yarıçapların da bulunup bulunmadığını bir test edelim. `isnull()` fonksiyonu kullanabileceğimiz gibi `isna()` fonksiyonunu da kullanabiliriz çünkü veriçerçevemizde değer bulunmayan bütün sütunlar `NaN` olarak işaretmenmiş durumda."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"gecis_og[gecis_og['pl_radj'].isna()]['pl_radj']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"İşte bu şaşırtıcı. Zira geçiş yöntemiyle keşfedilmiş 16 ötegezegenin veriçerçevemizde yarıçapları bulunmuyor. Bunun nedeni basit olarak bu değerlerin veritabanına girilmemiş olması olabilir. Astronomide (ya da veri bilimi içeren herhangi başka bir alanda) kullanılan veritabanlarında bu durumla sıklıkla karşılaşılır. Bu tür durumlarda bu bilgiler başka veritabanlarında ya da literatürden alınabilir. Ya da sadece bu durumu yönetmekle yetinilir. Bir başka deyişle, iş eldeki veriyle yapılıp bu durum sonuçların paylaşıldığı yerde belirtilir. 31 Mart 2026 tarihi itibarı ile ortak tabloda geçiş yöntemiyle keşfedilip yarıçapı veritabanına girilmemiş gezegen bulunmamaktadır. Ancak tekrar oluşabilecek böyle bir durum için aşağıdakine benzer bir çözüm takip edilebilir: \n",
"\n",
"Biz örneğimizde yarıçap değerlerini barındıran pl_radj sütununu NASA Exoplanet Archive'dan almıştık. Bu gezegenler exoplanet.eu veritabanında da bulundukları için orada yarıçapları bulunuyor olabilir. Dolayısıyla yukarıdaki koşulun sağlandığı gezegenlerin yarıçap değerlerini exoplanet.eu ($exoeu$) veritabanından alıp, veriçerçevemizdeki pl_radj sütununa kopyalayabiliriz. Öncelikle exoplanet.eu veritabanında bu gezegenlerden hangilerinin yarıçaplarının olduğuna bakalım. Bunun için $exoeu$ şeklinde adlandırdığımız bu veritabanının indeks sütununu gezegen adının bulunduğu # name sütununa ayarlayalım ve gecis_og veriçerçevemizde yarıçapı bulunmayan (`NaN` olan) gezegenlerin bu veritabanında olup olmadığını sorgulayalım. Yarıçap değerleri $exoeu$ veriçerçevesinde $radius$ sütununda bulunmaktadır."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#exoeu.set_index('name', inplace=True)\n",
"#for planet in gecis_og[gecis_og['pl_radj'].isna()]['pl_radj'].index:\n",
"# print(planet,exoeu.loc[planet,'radius'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gördüğünüz gibi bu değerler exoplanet.eu veritabanında bulunuyor. Bulunmuyor da olabilirdi. Bu durumda da gidip başka bir veritabanına bakabilir ya da literatürden toplayıp manuel olarak kendimiz girebilirdik. Ama buna gerek kalmadı. Yukarıdaki gibi bir döngü yapısıyla ilgili satırlara gereken bilgileri ekleyebiliriz."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#for planet in gecis_og[gecis_og['pl_radj'].isna()]['pl_radj'].index:\n",
"# gecis_og.at[planet,'pl_radj'] = exoeu.at[planet,'radius']\n",
"#print(gecis_og[gecis_og['pl_radj'].isna()]['pl_radj'])\n",
"#print(gecis_og.at['WASP-18A b','pl_radj'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Görüldüğü üzere artık yarıçap bulunmayan sütun yok. Geçiş yöntemiyle keşfedilen tüm gezegenler için bu değerin belirlenmiş olması gerektiğinden bu bilgiyi veriçerçevemizde bulundurmak istedik. Ancak bu gezegenlerin tümü için kütle değerinin veriçerçevemizde olmadığını gördük. Ancak amacımız olan kütle-yarıçap grafiğini `matplotlib` paketi fonksiyonları kullanarak çizdirirken bu durum bir problem teşkil etmeyecek. Çünkü kütlesi veriçerçevesinde bulunmayan gezegenler dikkate alınmayacak. Söz konusu parametreleri `numpy` dizilerine alarak `matplotlib.pyplot` fonksiyonları ile grafik elde etmek isterseniz bu durumu dikkat almanız gerekecektir."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt\n",
"%matplotlib inline\n",
"plt.plot(gecis_og[\"pl_bmassj\"], gecis_og[\"pl_radj\"],'b+')\n",
"plt.xlabel(\"Kutle (M$_{jup}$)\")\n",
"plt.ylabel(\"Yaricap (R$_{jup}$)\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bu grafik genellikle farklı gezegen türleri için çizdirildiğinde anlam kazanan bir grafiktir. Bu nedenle yine daha önce yaptığımız gibi kütle limitleri koyarak kütle-yarıçap grafiğini farklı gezegen grupları için elde edebiliriz. Örneğin $0.1 - 0.4~M_{jup}$ kütle aralığındaki gezegenler için böyle bir uygulama yapalım."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"kosul = (gecis_og['pl_bmassj'] >= 0.1) & (gecis_og['pl_bmassj'] <= 0.4)\n",
"saturnler = gecis_og[kosul]\n",
"plt.plot(saturnler[\"pl_bmassj\"], saturnler[\"pl_radj\"],'b+')\n",
"plt.xlabel(\"Kutle (M$_{jup}$)\")\n",
"plt.ylabel(\"Yaricap (R$_{jup}$)\")\n",
"plt.title(\"Gecis Yapan Saturn Kutlesindeki Gezegenler Icin Kutle-Yaricap Grafigi\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bu grafikte bir doğru üzerine dizilen gezegenler için kütle değeri [kütle-yarıçap ilişkilerinden](https://ui.adsabs.harvard.edu/abs/2017ApJ...834...17C/abstract) türetilmiş olmalıdır. Bu gezegenler için barınak yıldızlarının sönük olması nedeniyle dikine hız alınmamış olabilir, ayrıca gezegen kütlesini belirlemeye yardımcı olabilecek, gözlenebilecek düzeyde bir geçiş zamanlaması değişimi yaratabilecek bir ilave cisim bulunmayabilir. Grafikte daha ilgi çekici olan, genel olarak Satürn kütlesi civarındaki gezegenler için saçılması yüksek de olsa kütleyle yarıçap arasında bir pozitif korelasyonun gözlendiği, ancak yarıçapı $0.25 R_{jup}$''ten küçük gezegenler için bu ilişkinin bozulduğudur. Bu ilginç bir araştırma sorusu olabilir; ancak öncelikle bu verilerin kaynağına bakmak ve grafiği bir de belirsizlik değerleriyle birlikte çizdirmeyi denemekte fayda vardır."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"kosul = (gecis_og['pl_bmassj'] < 0.04)\n",
"karasal = gecis_og[kosul]\n",
"plt.plot(karasal[\"pl_bmassj\"], karasal[\"pl_radj\"],'b+')\n",
"plt.xscale(\"log\")\n",
"plt.yscale(\"log\")\n",
"plt.xlabel(\"Kutle (M$_{jup}$)\")\n",
"plt.ylabel(\"Yaricap (R$_{jup}$)\")\n",
"plt.title(\"Gecis Yapan Karasal Gezegenler Icin Kutle-Yaricap Grafigi\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"kosul = (gecis_og['pl_bmassj'] > 0.5)\n",
"devgaz = gecis_og[kosul]\n",
"plt.plot(devgaz[\"pl_bmassj\"], devgaz[\"pl_radj\"],'b+')\n",
"plt.xlabel(\"Kutle (M$_{jup}$)\")\n",
"plt.ylabel(\"Yaricap (R$_{jup}$)\")\n",
"plt.title(\"Gecis Yapan Dev Gaz Gezegenler Icin Kutle-Yaricap Grafigi\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Başa Dön](#Pandas-Paketi-İleri-Konular-Uygulama)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Kaynaklar #\n",
"\n",
"* [NASA Exoplanet Archive](https://exoplanetarchive.ipac.caltech.edu/)\n",
"* [exoplanet.eu](http://exoplanet.eu/)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}