Att kartlägga stjärnhimlen - Vad finns ovanför oss?
Contents
Att kartlägga stjärnhimlen - Vad finns ovanför oss?#
Stjärnornas skimmer har i all tid fängslat människan, men vad är det vi engentligen ser i det vackra, klara stjärntäcket?
# Kör denna cell först! Här finns funktionspaketen som behövs.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Vi tar in ett dataset med information om de tindrande punkterna. Informationen hittas, tillsammans med en klarare förklaring på adressen http://www.astronexus.com/hyg, i HYG-databasen. I stora drag innehåller tabellen sådana stjärnor och stjärnkluster som är nära solen (nåja, “nära” i astronomiska termer. Inom en radie på 75 ljusår.) eller tillräckligt klara för att ses med blotta ögat.
Vad står HYG för? Ta reda på!
# När du kör detta kommando läser vi in en stor katalog med information om stjärnorna.
# informationen sparas som en DataFrame - en tabellvariabel.
# Tack till Adam Lame för ett lättläst dataset.
himlen = pd.read_csv("https://raw.githubusercontent.com/adamlamee/CODINGinK12/master/data/stars.csv")
Hur ser datan ut?#
# Med detta kommando kan du få de första raderna av tabellen att synas.
# Vad händer om du ändrar parametern i parentesen, eller tar bort den?
himlen.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 |
# Med detta kommando kan vi undersöka hur många rader tabellen innehåller.
len(himlen)
119614
I tabellen kan vi se några kryptiska kolumner. Noggrannare förklaringar kan vi hitta från Astronexus’ hemsida, men de viktigaste är stjärnornas positionsinformation (rektascension “ra”, deklination “dec, avstånd “dist”) och de storheter som hör ihop med ljusstyrkan. (skenbar magnitud “mag”, absolut magnitud “absmag”, temperatur “temp” och luminositet “lum”).
Nu ska vi undersöka vad denna tabell kan visa oss.
Säg mig vem som klarast på himlen är…#
# Här tar vi två kolumner ur vår DataFrame "himlen" och skapar ett diagram utgående från deras värdepar.
plt.figure(figsize=(15, 4))
plt.scatter(himlen.ra, himlen.dec, s=0.01) # Vilken information använder vi här?
plt.xlim(24, 0)
plt.title("Positioner för alla katalogens stjärnor, sett från jorden \n")
plt.xlabel('skala och arpeggio') # Ändra till ett passande namn för x-axeln!
plt.ylabel('Jag mäter, därför existerar jag') # Ändra till ett passande namn för y-axeln!
plt.show()
# Ser du några former eller mönster i grafen? Vad kan de bero på?

Vi klassar ofta stjärnor enligt deras temperatur och ljusstyrka på så sätt att en starkare stjärna har en mindre absolut magnitud. Vår sol har en absolut magnitud på 4,8.
# Vi ritar ännu en scatter-plot över x- och y-par.
# Vi justerar punkternas storlekar så att vi lyckas urskilja något från grafen
plt.figure(figsize = (10,10))
plt.scatter(himlen.temp, himlen.absmag, s = 1, edgecolors = 'none', color = "red")
plt.xlim(2000,15000) # Vad händer om du ändrar dessa siffror?
plt.ylim(20,-15)
plt.title("Hitta på en passande titel \n") # Skriv något passande.
plt.ylabel("Absolut magnitud")
plt.xlabel("Yttemperatur (K)")
plt.show()

Kan du urskilja området med röda jättar, stjärnor som lyser klart, men har låg yttemperatur?
Kan du urskilja området med vita dvärgar, stjärnor som är mycket varma och klara?
Stjärnbilder#
En stjärna kommer sällan ensam. Oftast hör stjärnorna till en större stjärngrupp, och dessa stjärngrupper har fått olika namn i olika kulturer genom mänsklighetens historia. De benämningar som används idag är av Europeiskt ursprung och hittas i kolumnen con (constellation, stjärnbild) i vår tabell.
# Denna funktion plockar alla olika värden ur tabellens kolumn con, och listar dem i alfabetisk ordning.
himlen.sort_values('con').con.unique()
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)
Nu ska vi testa att plocka ut alla stjärnor som tillhör en bestämd stjärnbild, och jämföra dem med de tidigare graferna.
# Denna kod väljer ut en bestämd stjärnbild. Byt ut förkortningen nedan och testa själv!
# Tämä näyttää yhden tähdistön, vaihda kysyttyä lyhennettä alla ja tutki muitakin!
# Kommandot .query('...') låter oss leta data enligt givna krav från hela tabellen.
constellation = himlen.query('con == "UMa"')
# Vi använder "subplot"-funktionen för att rita flera diagram samtidigt.
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
# Här skriver vi en rad som väljer ut de 10 starkaste stjärnorna i stjärnbilden.
# Vad händer om du ändrar parametern i .head()-kommandot?
constellation = constellation.sort_values('mag').head(6)
plt.scatter(constellation.ra, constellation.dec)
plt.gca().invert_xaxis()
plt.title("Stjärnbildens formation på himlen \n")
plt.xlabel('Rektascension')
plt.ylabel('Deklination')
plt.subplot(1, 2, 2)
# Okej, men hur förhåller dessa stjärnor till resten av stjärnhimlen?
# Nu markerar vi stjärnbildens klaraste stjärnor på magnitudkartan.
plt.scatter(himlen.temp, himlen.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("Jämfört med hela stjärnhimlen \n")
plt.ylabel("Absolut magnitud")
plt.xlabel("Temperatur (K)")
plt.show()

Känner du igen stjärnbilden? Testa om du hittar andra stjärnbilder du känner igen - eller googla stjärnbilderna och jämför, ifall du inte vet hur de bör se ut.
Var placerar sig stjärnorna i denna bild över stjärnornas livscykler (Hertzsprung-Russell-diagram)?

Solen, den närmsta av våra stjärnor#
Solen är på många sätt viktig för människan. Den är källan till liv på jorden, såväl som källan till ny information när vi försöker få reda på mer om hur stjärnorna fungerar. Jämfört med allt annat i vårt solsystem är solen gigantisk, men bland stjärnorna är den inte märkvärdig. Vi undersöker hur den jämför sig med de andra stjärnorna:
# Solen, "Sol", kan hittas med ett sökkommando.
solen = himlen.query('proper == "Sol"')
print(solen)
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
# Om vi nu vill jämföra solens temperatur med de andra...
storre = himlen[himlen.temp > float(solen.temp)] # Här behövs float() för att ändra elementets format.
# Bägge talen som jämförs behöver vara flyttal.
mindre = himlen[himlen.temp < float(solen.temp)]
print("I tabellen finns " + repr(len(storre)) + " stjärnor varmare än Solen.")
print("I tabellen finns " + repr(len(mindre)) + " stjärnor kallare än Solen.")
I tabellen finns 62067 stjärnor varmare än Solen.
I tabellen finns 55591 stjärnor kallare än Solen.
Kan du ändra koden ovan för att jämföra Solens och de övriga stjärnornas relativa och absoluta magnitud?