indice de similarité avec la Terre

Etape 5: Indice de similarité avec la Terre

Creation d’une table unique

Import librairies

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor

Import BDD

La base de données doit être téléchargée ici : exoplanetes.db

On prépare un dataframe avec les données d’exoplanètes issues d’une BDD (TOUTES les exoplanètes):

# Toutes exoplanetes / BDD
import sqlite3

try:
    conn = sqlite3.connect('exoplanetes.db')
    cur = conn.cursor()
    print("Base de données crée et correctement connectée à SQLite")

    sql = "SELECT sqlite_version();"
    cur.execute(sql)
    res = cur.fetchall()
    print("La version de SQLite est: ", res)
    


except sqlite3.Error as error:
    print("Erreur lors de la connexion à SQLite", error)
sql = "PRAGMA table_info(planetes_es);"
cur.execute(sql)
res = cur.fetchall()
L = [ligne[1] for ligne in res]
sql = "select * from planetes_es"
cur.execute(sql)
res = cur.fetchall()
dataset = pd.DataFrame(res,columns=L)
dataset
table des exoplanetes

table des exoplanetes

Créer un dataframe avec les données de la Terre

R_Jup = 71e6  # m
M_Jup = 1.898e27 # kg
M_earth = 5.9724e24
R_earth = 6378.137e3
M_sun = 1
R_sun = 1
planete1 = {
    '_name':'earth',
    'star':'Sun',
    'mass': M_earth/M_Jup,
    'radius': R_earth/R_Jup,
    'eccentricity': 0.0167,
    'orbital_period': 365.25,
    'semi_major_axis': 1,
    'M_star':M_sun,
    'R_star':R_sun

}
df2 = pd.DataFrame([planete1])
df2

Créer un dataframe avec les exoplanètes du systeme TOI

Préparer un fichier csv ou txt avec tous les résultats de vos recherches sur les planètes observées. Ou Telecharger un exemple de fichier. Nommez le donnees_transit_planetes.txt pour la suite.

Importer les données du fichier:

df = pd.read_csv('donnees_transit_planetes.txt',sep='\t')
df

Les données du fichier sont importées avec la fonction read_csv:

  • Le paramètre sep doit correspondre au caractère de séparation: \t pour un espace tabulation, sinon , ou ; selon le logiciel tableur utilisé.
  • header est un autre paramètre optionel, pour préciser le numero de ligne qui contient les en-tête de colonne.

Les données des masses ont été ajoutées à partir du document suivant, converties en M_J:

données des masses pour les planetes de TOI

données des masses pour les planetes de TOI

Rappel: les masses des exoplanetes sont souvent exprimées en M_J, (en masses de Jupiter). Pour exprimer directement ces masses en M_J, cela va necessiter de realiser une conversion:

mass=m×MTerre/MJ

m: masse de l’exoplanete TOI_x dans le tableau precedent, exprimée en masses Terre.

# creation dataframe a partir du fichier
G = 6.67e-11
R_Jup = 71e6 # m
M_Jup = 6.9911e7 # kg
M_sol = 1.9885e30 # kg
R_sol = 696.342e6 # m

df['R_star']=df['star_radius']*R_sol # m
df['M_star']=df['star_mass']*M_sol # kg

df['tau']=(df['fin_transit']-df['debut_transit'])*24*3600 # s
df['delta']=1-df['lum_min'] # sans dim
df['R_p']= np.sqrt(df['delta']) * df['R_star'] # m
df['radius']=df['R_p']/R_Jup # en R_J
# vitesse planete : V_p = 2*R_star/tau
df['V_p']= 2*df['R_star']/df['tau']
# rayon orbital : r = G*M_star/V_p**2
df['r_orb']= G * df['M_star']/df['V_p']**2
# periode revolution: T = 2*np.pi*r/V_p
df['T'] = 2*np.pi*df['r_orb']/df['V_p']
df['orbital_period'] = df['T']/(24*3600) # en jours de 24h
df = df[['_name','radius','orbital_period','star_name','star_mass','star_radius']]
df
table des exoplanetes du systeme TOI

table des exoplanetes du systeme TOI

Concatenation des 3 tableaux

dataset = pd.concat([dataset,df2,df],ignore_index = True)
dataset
table toutes exoplenetes + earth

table toutes exoplenetes + earth

Calcul du coefficient IST

Ajout d’une colonne IST, indice de similarité avec la Terre: voir methode de calcul ici

M_earth = float(dataset[dataset['_name']=='earth']['mass'])
R_earth = float(dataset[dataset['_name']=='earth']['radius'])
# definir un coefficient adimentionné pour l'IST
# et calculer pour toutes les planetes du tableau
dataset['IST'] = 1-abs(dataset['radius']-R_earth)/(dataset['radius']+R_earth)
# trier
dataset.sort_values('IST', ascending=False, inplace=True, ignore_index=True)
dataset = dataset[['_name','planet_status','mass','radius','orbital_period','semi_major_axis','eccentricity','IST']]
dataset[dataset['IST']>0]

L’IST a été calculé sur la seule valeur du rayon de la planete

liste ordonnée par IST decroissant

liste ordonnée par IST decroissant

Le tri se fait avec l’instruction dataset.sort_values('IST', ascending=False, inplace=True). On choisit de numéroter les lignes de dataset après le tri.

Puis rechercher dans cette table nos exoplanètes de TOI:

dataset[dataset['_name'].str.startswith('TOI-270')]

Les extensions a-b-c sont celles des exoplanetes de la base de données. Celles avec 1-2-3 sont celles de notre étude. Ces 2 séries d’information se referent aux 3 mêmes exoplanètes.

Place des TOI dans la table

Place des TOI dans la table

On peut bien sûr ajouter d’autres caractéristiques des planetes pour le calcul de l’IST et les comparer à la Terre.

Sauvegardez votre dataframe dans un fichier .csv

Vous pourrez alors poursuivre vos traitements, sans avoir à executer tout le notebook.

dataset.to_csv('dataset.csv', index=False)