Taivasta kartoittamassa - mitä näemme yllämme?#

Tähdet ovat aina kiehtoneet ihmismieltä, mutta mitä me varsinaisesti näemme paitsi kauniiden, kirkkaiden pisteiden peiton?

# AJA TÄMÄ SOLU ENSIN! Tässä otetaan käyttöön tarvittavat python-paketit.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Otetaan tarkasteltavaksi joukko tietoja yllämme näkyvistä kohteista, joiden laajemmat versiot löytyvät selityksineen osoitteesta http://www.astronexus.com/hyg HYG-tietokannasta. Pääpiirteissään kyseessä on sellaisten tähtien joukko, jotka ovat joko tarpeeksi kirkkaita näkyäkseen Maasta käsin tai lähellä Aurinkoa (noh, tähtitieteellisessä mitassa lähellä, 75 valovuoden etäisyydellä).

Mistä HYG on lyhenne? Käypä selvittämässä!

# Ajamalla tämän solun saat käyttöösi suuren katalogin tähtien tietoja.
# Kiitokset Adam Lameelle helposti luettavan setin luomisesta.

taivas = pd.read_csv("https://raw.githubusercontent.com/adamlamee/CODINGinK12/master/data/stars.csv")

Miltä data näyttää?#

# Tällä komennolla näet muuttujan ylimmät rivit. Mitä käy jos vaihdat suluissa olevaa numeroa tai poistat sen?

taivas.head(10)
proper ra dec dist mag absmag ci temp x y z con lum var var_min var_max
0 Sol 0.000000 0.000000 0.0000 -26.70 4.850 0.656 5756.588113 0.000005 0.000000 0.000000 NaN 1.000000 NaN NaN NaN
1 Proxima Centauri 14.495985 -62.679485 1.2959 11.01 15.447 1.807 3383.441193 -0.472264 -0.361451 -1.151219 Cen 0.000058 V645 11.079 10.939
2 Rigil Kentaurus 14.660765 -60.833976 1.3248 -0.01 4.379 0.710 5567.728737 -0.495203 -0.414084 -1.156625 Cen 1.543121 NaN 0.113 -0.087
3 NaN 14.660346 -60.838300 1.3248 1.35 5.739 0.900 4996.415833 -0.495181 -0.413973 -1.156674 Cen 0.440961 NaN NaN NaN
4 Barnard's Star 17.963472 4.693388 1.8238 9.54 13.235 1.570 3691.168543 -0.017373 -1.816613 0.149123 Oph 0.000443 V2500 9.590 9.490
5 NaN 10.941484 7.015320 2.3906 13.45 16.557 2.000 3169.353727 -2.282811 0.649334 0.292057 NaN 0.000021 NaN NaN NaN
6 Lalande 21185 11.055632 35.969877 2.5469 7.49 10.460 1.502 3790.500746 -1.998000 0.504305 1.495504 UMa 0.005702 NaN NaN NaN
7 NaN 1.650199 -17.949782 2.6267 12.57 15.473 1.850 3333.196615 2.270499 1.046970 -0.809963 NaN 0.000056 NaN NaN NaN
8 NaN 1.650199 -17.949782 2.6267 12.70 15.603 NaN NaN 2.270631 1.047031 -0.810010 NaN 0.000050 NaN NaN NaN
9 NaN 6.752559 -16.715240 2.6371 8.44 11.334 -0.030 10515.561780 -0.494379 2.476814 -0.758470 CMa 0.002549 NaN NaN NaN
# Tällä komennolla voit tarkistaa, montako riviä dataa on.

len(taivas)
119614

Taulukosta nähdään joukko kryptisiä sarakkeita. Tarkemmat selitykset löytyvät Astronexuksen sivulta, mutta oleellisimmat lienevät tähtien paikkatiedot (rektaskensio “ra”, deklinaatio “dec”, etäisyys “dist”) ja valaisuun liittyvät ominaisuudet (havaittu magnitudi “mag” ja absoluuttinen kirkkaus “absmag”, lämpötila “temp” sekä luminositeetti “lum”). Ryhdytään nyt tarkastelemaan mitä näistä voidaan nähdä.

(Tutustu rektaskensioon ja deklinaatioon täällä.)

Kerro, kerro, kuvaaja#

# Tässä otetaan "taivas"-tietorakenteesta kaksi saraketta ja luodaan niiden arvopareista kuvaaja.

plt.figure(figsize=(15, 4))
plt.scatter(taivas.ra, taivas.dec, s=0.01) # Mitä tietoja tässä käytettiin?
plt.xlim(24, 0)

plt.title("Kaikkien katalogissa olevien tähtien paikat Maasta katsottuna \n")
plt.xlabel('Tarvitsen nimen') # Korjaapa tämä otsikko sopivaksi!
plt.ylabel('Akseloin, siis olen') # Korjaapa tämä otsikko sopivaksi!

plt.show()

# Näetkö muotoja kuvassa? Mistä moiset voisivat johtua?
../_images/taivasta-kartoittamassa_10_0.png

Tähtiä luokitellaan usein lämpötilansa ja kirkkautensa mukaan, siten että kirkkaammilla tähdillä on pienempi absoluuttinen magnitudi. Auringolla se on noin 4,8 (vai oliko? Mitä sanoo tarkastelemamme data?).

# Piirretään taas x,y-parien mukainen kuvaaja, jonka pisteitä
# käsitellään hieman niin, että niistä erottaakin jotakin.

plt.figure(figsize = (10,10))
plt.scatter(taivas.temp, taivas.absmag, s = 1, edgecolors = 'none', color = "red")
plt.xlim(2000,15000) # Mitä käy jos säädät näitä numeroita?
plt.ylim(20,-15)

plt.title("Keksipäs tähän kiva otsikko \n") # Muokkaa tämä sopivammaksi.
plt.ylabel("Absoluuttinen magnitudi")
plt.xlabel("Pintalämpötila (K)")

plt.show()
../_images/taivasta-kartoittamassa_12_0.png

Painottuvatko tulokset jonnekin? Erottuvatko jotkin alueet muusta massasta? Löydätkö kuvasta kirkkaan, muttei erityisen lämpimän alueen (jättiläisiä)? Erityisen kuuman ja kirkkaan, mutta pienistä tähdistä koostuvan valkoisten kääpiöiden alueen?

Tähdistöt#

Harvempi tähti on yksinäinen, vaan useimmiten ne kuuluvat suurempiin tähtijoukkoihin joille on annettu erilaisia nimiä pitkin vuosituhansia ja kulttuuripiirejä. Kansainväliseen käyttöön vakiintuneimmat nimet ovat eurooppalaista perua ja löytyvät “taivas”-tietorakenteen sarakkeesta “con” (constellation, tähdistö).

# Tämä poimii sarakkeesta listan lyhenteitä, jotka vastaavat tähdistöjen nimiä.

taivas.sort_values('con').con.unique() # Pystytkö sanallistamaan, mitä tällä rivillä käskettiin?
array(['And', 'Ant', 'Aps', 'Aql', 'Aqr', 'Ara', 'Ari', 'Aur', 'Boo',
       'CMa', 'CMi', 'CVn', 'Cae', 'Cam', 'Cap', 'Car', 'Cas', 'Cen',
       'Cep', 'Cet', 'Cha', 'Cir', 'Cnc', 'Col', 'Com', 'CrA', 'CrB',
       'Crt', 'Cru', 'Crv', 'Cyg', 'Del', 'Dor', 'Dra', 'Equ', 'Eri',
       'For', 'Gem', 'Gru', 'Her', 'Hor', 'Hya', 'Hyi', 'Ind', 'LMi',
       'Lac', 'Leo', 'Lep', 'Lib', 'Lup', 'Lyn', 'Lyr', 'Men', 'Mic',
       'Mon', 'Mus', 'Nor', 'Oct', 'Oph', 'Ori', 'Pav', 'Peg', 'Per',
       'Phe', 'Pic', 'PsA', 'Psc', 'Pup', 'Pyx', 'Ret', 'Scl', 'Sco',
       'Sct', 'Ser', 'Sex', 'Sge', 'Sgr', 'Tau', 'Tel', 'TrA', 'Tri',
       'Tuc', 'UMa', 'UMi', 'Vel', 'Vir', 'Vol', 'Vul', nan], dtype=object)

Tarkastellaan seuraavaksi, miten voisimme luokitella kunkin tähdistön sisältämiä tähtiä toisiinsa ja poimia sieltä joitain kiinnostavia yksilöitä.

# Tämä näyttää yhden tähdistön, vaihda kysyttyä lyhennettä alla ja tutki muitakin!
# Komento .query('...') antaa etsiä tietyntyyppistä dataa koko aineistosta.

constellation = taivas.query('con == "Vir"')

# Käytetään "subplot"-ominaisuutta piirtämään useita asioita yhtä aikaa.

plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)

# Tällä saat näkyviin kyseisen tähdistön 10 kirkkainta. Mitäs jos .headin arvoa muuttaisi?

constellation = constellation.sort_values('mag').head(10)
plt.scatter(constellation.ra, constellation.dec)
plt.gca().invert_xaxis()

plt.title("Tähdistön kuva taivaalla \n")
plt.xlabel('Rektaskensio')
plt.ylabel('Deklinaatio')

plt.subplot(1, 2, 2)

# Okei, mutta mites nämä suhtautuvat koko käsiteltyyn aineistoon? Nyt lyödäänkin yhden tähdistön kirkkaimmat
# pisteet koko kartalle näkyviin.

plt.scatter(taivas.temp, taivas.absmag, s = 1, edgecolors = 'none', alpha = 0.2)
plt.scatter(constellation.temp, constellation.absmag, color = 'red', edgecolors = 'none')
plt.xlim(2000,15000)
plt.ylim(20,-15)

plt.title("Verrattuna koko taivaaseen \n")
plt.ylabel("Absoluuttinen magnitudi")
plt.xlabel("Lämpötila (K)")

plt.show()
../_images/taivasta-kartoittamassa_18_0.png

Miten tuloksesi asettuvat tähtien elinkaarta kuvaavalle Hertzsprung-Russell -kuvaajalle? (huomaa akselit!)

Aurinko, lähin tähtemme#

Aurinko on monin tavoin tärkeä meille ihmisille, niin planeettamme elämän mahdollistajana kuin parhaana tutkimuskohteenakin selvittäessämme, miten tähdet toimivat. Verrattuna kaikkeen muuhun koko aurinkokunnassa se on valtava, mutta kaikkien tähtien joukossa melkoinen höyhensarjalainen. Tarkastellaan vielä, miten se vertautuu näihin lähisukulaisiinsa.

# Aurinko, Sol, voidaan etsiä erilleen muista hakukomennolla.

aurinko = taivas.query('proper == "Sol"')

print(aurinko)
  proper   ra  dec  dist   mag  absmag     ci         temp         x    y  \
0    Sol  0.0  0.0   0.0 -26.7    4.85  0.656  5756.588113  0.000005  0.0   

     z  con  lum  var  var_min  var_max  
0  0.0  NaN  1.0  NaN      NaN      NaN  
# Jos nyt haluaisimme esimerkiksi vertailla sen lämpötilaa muihin...

isommat = taivas[taivas.temp > float(aurinko.temp)] # tässä float() on tarpeen muuttamaan
                                                    # tyypit samanlaisiksi, eli liukuluvuiksi
pienet = taivas[taivas.temp < float(aurinko.temp)]

print("Aurinkoa kuumempia tähtiä on listassa " + repr(len(isommat)))
print("Aurinkoa kylmempiä tähtiä on listassa " + repr(len(pienet)))
Aurinkoa kuumempia tähtiä on listassa 62067
Aurinkoa kylmempiä tähtiä on listassa 55591

Miten saisit vertailtua tähtien kirkkauksia (sekä havaittavaa että absoluuttista) ylläolevaan tapaan? Kokeile!