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å?
../_images/Kartlagga_himlen_10_0.png

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()
../_images/Kartlagga_himlen_12_0.png

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()
../_images/Kartlagga_himlen_18_0.png

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?