<jupyter_start><jupyter_text>Explorando NASA JPL Asteroid Dataset  Dataset disponivel em Kaggle: https://www.kaggle.com/sakhawat18/asteroid-dataset  Resumo - SPK-ID: Object primary SPK-ID- Object ID: Object internal database ID- Object fullname: Object full name/designation- pdes: Object primary designation- name: Object IAU name- NEO: Near-Earth Object (NEO) flag- PHA: Potentially Hazardous Asteroid (PHA) flag- H: Absolute magnitude parameter- Diameter: object diameter (from equivalent sphere) km Unit- Albedo: Geometric albedo- Diameter_sigma: 1-sigma uncertainty in object diameter km Unit- Orbit_id: Orbit solution ID- Epoch: Epoch of osculation in modified Julian day form- Equinox: Equinox of reference frame- e: Eccentricity- a: Semi-major axis au Unit- q: perihelion distance au Unit- i: inclination; angle with respect to x-y ecliptic plane- tp: Time of perihelion passage TDB Unit- moid_ld: Earth Minimum Orbit Intersection Distance au Unit  Imports<jupyter_code>import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns<jupyter_output><empty_output><jupyter_text>Configs<jupyter_code>pd.set_option('display.max_columns', 500)<jupyter_output><empty_output><jupyter_text>Reads<jupyter_code>asteroids = pd.read_csv(r'datasets\Asteroids.csv')
asteroids.shape
asteroids.info()
asteroids.head()<jupyter_output><empty_output><jupyter_text>Colunas e metadata<jupyter_code>asteroids.columns
asteroids.describe(include='all')<jupyter_output><empty_output><jupyter_text>1 - Analisando as colunas  Identificadores dos asteroides- id, spkid, full_name, pdes, name<jupyter_code>asteroids['id'].nunique(), asteroids['spkid'].nunique(), asteroids['full_name'].nunique(),\
asteroids['pdes'].nunique(), asteroids['name'].nunique()
asteroids[['full_name', 'pdes', 'name']]
asteroids[['id', 'spkid']]<jupyter_output><empty_output><jupyter_text>- As colunas 'id', 'spkid' e 'full_name' são exclusivas para cada linha. - Os valores da coluna 'full_name' são divididos nas colunas 'pdes' e 'name'. - Ou seja, colunas('pdes', 'name') podem ser removidas, pois não são uteis.- A coluna 'id' possui valores alfanuméricos, enquanto a coluna 'spkid' não. - Portanto, a coluna('id') também pode ser removida.  Objetos potencialmente perigosos<jupyter_code>asteroids['pha'].value_counts(normalize=True)<jupyter_output><empty_output><jupyter_text>Objeto proximo da Terra<jupyter_code>asteroids['neo'].value_counts(normalize=True)<jupyter_output><empty_output><jupyter_text>ID Orbita do Objeto<jupyter_code>asteroids['orbit_id'].unique(), asteroids['orbit_id'].nunique()<jupyter_output><empty_output><jupyter_text>Prefixo de Designação do Objeto<jupyter_code>asteroids['prefix'].unique(), asteroids['prefix'].nunique()<jupyter_output><empty_output><jupyter_text>Referência do equinócio do Objeto<jupyter_code>asteroids['equinox'].unique(), asteroids['equinox'].nunique()<jupyter_output><empty_output><jupyter_text>Classificação de Orbita<jupyter_code>asteroids['class'].unique()
asteroids['class'].nunique()<jupyter_output><empty_output><jupyter_text>- As colunas 'prefix' e 'equinox' têm apenas um valor, portanto, também podem ser eliminadas.<jupyter_code>asteroids1 = asteroids.drop(['id', 'pdes', 'name', 'prefix', 'equinox'], axis='columns', inplace=False)
asteroids1.head()<jupyter_output><empty_output><jupyter_text>2 - Organizando os dados<jupyter_code># Nulos em todas colunas
asteroids1.isnull().sum()<jupyter_output><empty_output><jupyter_text>Pha<jupyter_code># Nulos
asteroids1['pha'].isnull().sum()
# Porcentagem de nulos
round((asteroids1['pha'].isnull().sum() / asteroids1['pha'].shape[0])*100, 2)
# N = Não perigosos
# Y = Perigosos
asteroids1['pha'].value_counts()<jupyter_output><empty_output><jupyter_text>Diameter<jupyter_code>asteroids1['diameter'].isnull().sum()
# Porcentagem de nulos
round((asteroids1['diameter'].isnull().sum() / asteroids1['diameter'].shape[0])*100, 2)
# diametro esferico em unidade de Km
asteroids1['diameter'].value_counts()
asteroids1['diameter'].min(), asteroids1['diameter'].max()<jupyter_output><empty_output><jupyter_text>Class<jupyter_code># Nulos
asteroids1['class'].isnull().sum()
# Classes de orbitas
asteroids1['class'].value_counts()
# Porcentagem de classes
asteroids1['class'].value_counts(normalize=True)*100<jupyter_output><empty_output><jupyter_text>Moid<jupyter_code># Nulos
asteroids1['moid'].isnull().sum()
# Porcentagem de valores
round((asteroids1['moid'].isnull().sum() / asteroids1['pha'].shape[0])*100, 2)
asteroids1['moid'].value_counts()
# Nulos em colunas sigmas, semelhante a coluna pha e moid
asteroids1[[ 'sigma_e','sigma_a','sigma_q','sigma_i','sigma_om',
             'sigma_w','sigma_ma','sigma_ad','sigma_n','sigma_tp','sigma_per' ]].isnull().sum()
# Porcentagem de nulos em colunas sigmas, semelhante a 2% de pha e moid
round((asteroids1[[ 'sigma_e','sigma_a','sigma_q',
                    'sigma_i','sigma_om','sigma_w',
                    'sigma_ma','sigma_ad','sigma_n',
                    'sigma_tp','sigma_per' ]].isnull().sum() / asteroids1['pha'].shape[0])*100, 2)
# porcentagem de nulos nas colunas 
round((asteroids1[['diameter', 'albedo', 'diameter_sigma']].isnull().sum() / asteroids1['pha'].shape[0])*100, 2)
# Removendo Colunas Diameter, Albedo e Diameter_sigma contem muitos valores nulos, 85% em media são nulos
asteroids1 = asteroids1.drop(columns=['diameter', 'albedo', 'diameter_sigma'], axis=1)

# Retornando linhas com valores, assim removendo da busca os 2% nulos gerais de pha, moid e sigmas
asteroids2 = asteroids1[asteroids1['pha'].notna()]
asteroids2.info()
# Na coluna 'H' - magnitude absoluta, contem alguns nulos. 
# Ela pode ser obtida atraves do albedo e diâmetro, mas as colunas foram removidas, 
# então, podemos remover as linhas nulas.
asteroids2 = asteroids2[asteroids2['H'].notna()]
asteroids2.info()
# Para as colunas restantes, a referencia de sigma_ad contem o menor numeros de dados
# assim, retornamos a base de dados referente a esta coluna mais limpa
asteroids2 = asteroids2[asteroids2['sigma_ad'].notna()]
asteroids2.info()
# Visualizando os retornos, existe uma coluna 'ma' com 1 dado faltantes, tambem removeremos ele.
asteroids2 = asteroids2[asteroids2['ma'].notna()]
asteroids2.info()
asteroids2.head()
plt.figure(figsize=(30,25));

sns.heatmap(asteroids2.corr(), annot=True);
# pha = Asteroides Potencialmente Perigosos, Yes ou No

plt.figure(figsize=(15,10))
plot = sns.countplot(x='pha', data=asteroids2);

for i in plot.patches:
    plot.annotate(format(i.get_height(), '.2f'), (i.get_x() + i.get_width() / 2., i.get_height()),
                   ha = 'center', va = 'center', xytext = (0, 10), textcoords = 'offset points')

plt.xlabel('PHA - Asteroides Potencialmente Perigosos', fontsize=15)
plt.ylabel('Quantidade', fontsize=15)
plt.title('Quantidade de Asteroides Perigosos', fontsize=16)
plt.show()
# neo = Proximos da Terra, Yes ou No

plt.figure(figsize=(15,10))
plot = sns.countplot(x='neo', data=asteroids2);

for i in plot.patches:
    plot.annotate(format(i.get_height(), '.2f'), (i.get_x() + i.get_width() / 2., i.get_height()),
                   ha = 'center', va = 'center', xytext = (0, 10), textcoords = 'offset points')

plt.xlabel('Asteroides Proximos da Terra', fontsize=15)
plt.ylabel('Quantidade', fontsize=15)
plt.title('Quantidade de Asteroides Proximos da Terra', fontsize=16)
plt.show()
# pha = Asteroides Potencialmente Perigosos, Yes ou No
# neo = Proximos da Terra, Yes ou No

plt.figure(figsize=(12,10))
plot = sns.countplot(x='pha', hue='neo', data=asteroids2);

for i in plot.patches:
    plot.annotate(format(i.get_height(), '.2f'), (i.get_x() + i.get_width() / 2., i.get_height()),
                   ha = 'center', va = 'center', xytext = (0, 10), textcoords = 'offset points')
    
plt.legend(labels=['Longe Terra', 'Perto Terra'])
plt.xlabel('PHA - Asteroides Potencialmente Perigosos', fontsize=15)
plt.ylabel('Quantidade', fontsize=15)
plt.title('Asteroides Perigosos e proximos da Terra', fontsize=16)
plt.show()

# neo = Proximos da Terra, Yes ou No
# H = Magnitude Absoluta, medida de brilho do objeto celeste 

plt.figure(figsize=(12,10))

sns.boxplot(x="neo", y="H", data=asteroids2);

plt.xlabel('Proximidade da Terra', fontsize=15)
plt.ylabel('Intensidade de Brilho dentro de 1UA', fontsize=15)
plt.title('Intensidade e proximidade do Asteroide', fontsize=16)
plt.show()
# class = Classe do Asteroide com base a distancia e orbita
# H = Magnitude Absoluta, medida de brilho do objeto celeste 

plt.figure(figsize=(12,10))

sns.scatterplot(data=asteroids2, x="class", y="H", palette="deep", sizes=15)

plt.xlabel('Classe dos Asteroides', fontsize=15)
plt.ylabel('Intensidade de Brilho dentro de 1UA', fontsize=15)
plt.title('Relação de Classe e Brilho dos Asteroides', fontsize=16)
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14637746990688166, 'fraction_numerical': 0.01873722461957756, 'mean_word_length': 6.5922413793103445, 'pattern_counts': {'":': 0, '<': 69, '<?xml version=': 0, '>': 69, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '17', 'dir': 'jupyter-structured-clean-dedup', 'id': '514915', 'license': 'MIT', 'n_tokens_mistral': 3345, 'n_tokens_neox': 3171, 'n_words': 712, 'path': 'MachineLearning/Asteroids/Exploring_asteroids.ipynb', 'repo_name': 'Renanrbsc/DataScience', 'size': '8806'}