A recent extrapolation on the number of Earth-like planets is
here with an exemplar here:
Kepler 452b, just 1400 light years away in the constellation Cygnus. See also "
The comet-like composition of a protoplanetary disk as revealed by complex cyanides."
There is a typical procedure to explore a curated data collection and extract what we need from it. For most of the curated data collections, we can find out what categories of information are available by calling the Properties field.
In[105]:= AstronomicalData@"Properties"
Out[105]= {"AbsoluteMagnitude", "AbsoluteMagnitudeH", "Albedo", "AlphanumericName", \
"AlternateNames", "AlternateStandardNames", "Altitude", "Apoapsis", \
"ApparentMagnitude", "AscendingNodeLongitude", "Azimuth", "BayerName", \
"BayerStandardName", "BlueBandMagnitude", "BVColorIndex", "Classes", \
"Constellation", "ConstellationName", "Declination", "Density", "Diameter", \
"DiscoveryYear", "Distance", "DistanceLightYears", "DurchmusterungName", \
"DurchmusterungStandardName", "EarthMOID", "Eccentricity", \
"EffectiveTemperature", "EquatorialDiameter", "EquatorialRadius", \
"EscapeVelocity", "FlamsteedName", "FlamsteedStandardName", "GalaxyType", \
"GlieseName", "GlieseStandardName", "GlobularClusterType", "Gravity", \
"HDName", "HDNumber", "HipparcosName", "HipparcosNumber", "HRName", \
"HRNumber", "HubbleType", "IAUName", "IAUNumber", "ICNumber", "Image", \
"Inclination", "LastRiseTime", "LastSetTime", "Luminosity", "Mass", \
"MeanMotion", "Name", "NextRiseTime", "NextSetTime", "NGCNumber", \
"ObjectType", "Oblateness", "Obliquity", "OrbitCenter", "OrbitPath", \
"OrbitPeriod", "OrbitPeriodYears", "OrbitRules", "Parallax", "Periapsis", \
"PeriapsisArgument", "PeriapsisLongitude", "PerihelionTime", "PGCNumber", \
"PolarDiameter", "PolarRadius", "Position", "PositionLightYears", \
"PrimaryDesignation", "PrimaryStarKSemiamplitude", "ProvisionalDesignation", \
"RadialVelocity", "Radius", "Redshift", "RightAscension", "RotationPeriod", \
"SAOName", "SAONumber", "Satellites", "SemimajorAxis", "SMASSSpectralType", \
"SpectralClass", "SpectralClassList", "Speed", "StandardName", \
"SurfaceBrightness", "TholenSpectralType", "VisualBandMagnitude"}
In[106]:= % // Length
Out[106]= 98
So there are currently 98 fields of information available for AstronomicalData. Next, note that you can list all objects in the collection by omitting any parameter.
In[107]:= {AstronomicalData[] // Short, AstronomicalData[] // Length}
You can see why I used Short--there are 156,134 astronomical objects listed in the database. In any of the collections we typically would work with a subset. There are often logical subsets built-in. In AstronomicalData they are called Classes, while in, for example, ElementData there are Classes but other categorizations there could be called classes as well.
In[121]:= AstronomicalData@"Classes"
Out[121]= {"AmorAsteroid", "ApolloAsteroid", "AtenAsteroid", "BarredSpiralGalaxy", \
"BayerObject", "BrightGiant", "BrightHIIRegion", "CarbonStar", \
"CentaurAsteroid", "ChironTypeComet", "ClassAStar", "ClassBStar", \
"ClassCStar", "ClassFStar", "ClassGStar", "ClassKStar", "ClassMStar", \
"ClassNStar", "ClassOStar", "ClassRStar", "ClassSStar", "Comet", \
"DeepSkyObject", "DwarfEllipticalGalaxy", "DwarfPlanet", \
"DwarfSpheroidalGalaxy", "EllipticalGalaxy", "EnckeTypeComet", "Exoplanet", \
"FlamsteedObject", "Galaxy", "GlieseObject", "GlobularCluster", \
"HalleyTypeComet", "HDObject", "HipparcosObject", "HRObject", \
"HyperbolicComet", "ICObject", "InnerMainBeltAsteroid", "IrregularGalaxy", \
"JupiterFamilyComet", "LocalGroup", "MainBeltAsteroid", "MainSequenceStar", \
"MarsCrossingAsteroid", "MessierObject", "MinorPlanet", "MultipleStar", \
"NakedEyeStar", "NearEarthAsteroid", "Nebula", "NGCObject", "NormalGiant", \
"OpenCluster", "OuterMainBeltAsteroid", "ParabolicComet", "PGCObject", \
"Planet", "PlanetaryMoon", "PlanetaryNebula", "Plutoid", "SAOObject", \
"SpiralGalaxy", "Star", "StarBrightest10", "StarBrightest100", \
"StarNearest10", "StarNearest100", "Subdwarf", "Subgiant", "Supergiant", \
"TransNeptunianObject", "TrojanAsteroid", "WhiteDwarfStar", "WolfRayetStar"}
In[108]:= brightest100Stars = AstronomicalData@"StarBrightest100"
Out[108]= {"Sun", "Sirius", "Canopus", "Arcturus", "RigelKentaurusA", "Vega", \
"Capella", "Rigel", "Procyon", "Achernar", "Betelgeuse", "Hadar", "Altair", \
"Acrux", "Aldebaran", "CapellaAb", "Spica", "Antares", "Pollux", "Fomalhaut", \
"Mimosa", "Deneb", "RigelKentaurusB", "Regulus", "Adhara", "Castor", \
"Gacrux", "Shaula", "Bellatrix", "Alnath", "Miaplacidus", "Alnilam", \
"Alnair", "Alnitak", "Regor", "Alioth", "Mirphak", "KausAustralis", "Dubhe", \
"Wezen", "Alkaid", "Avior", "ThetaScorpii", "Menkalinan", "Atria", "Alhena", \
"DeltaVelorum", "Peacock", "Polaris", "Mirzam", "Alphard", "Hamal", \
"Algieba", "Diphda", "Nunki", "Menkent", "Alpheratz", "Mirach", "Saiph", \
"Kochab", "BetaGruis", "Rasalhague", "Algol", "Almach", "Denebola", "Tsih", \
"GammaCentauri", "Naos", "Aspidiske", "Alphekka", "Alsuhail", "Mizar", \
"Sadr", "Shedir", "Etamin", "Mintaka", "Caph", "EpsilonCentauri", "Dschubba", \
"EpsilonScorpii", "AlphaLupi", "EtaCentauri", "Merak", "Izar", "Enif", \
"KappaScorpii", "Ankaa", "Phad", "Sabik", "Scheat", "Aludra", "Alderamin", \
"KappaVelorum", "EpsilonCygni", "Markab", "Menkar", "ZetaOphiuchi", \
"ZetaCentauri", "Zosma", "Acrab"}
I see many old friends from my early teens, when I spent cold nights with ideal still, less-stratified air gazing through a 6-inch reflector. Note, too, the plethora of Arabic names, attesting to the Muslim renaissance, which is the more significant flowstream running from the Greeks and their great predecessors to our modern culture than the story told by the typical Western-biased version of the history of science. But getting back to the matter at hand, extracting a single piece of information about a single object in the database uses the simple syntax of a descriptor for the object, such as "Sun", and a descriptor of the field, such as "AbsoluteMagnitude", both Strings.
In[130]:= AstronomicalData["Sun", "AbsoluteMagnitude"]
Out[130]= 4.84
While I can think of logical and compact syntaxes that are consistent within Mathematica to retrieve a set of objects and related fields from the database, such as AstronomicalData[{1, 100}, "ApparentMagnitude"], or AstronomicalData["StarBrightest100", "ApparentMagnitude"], we must use a less user - friendly form to extract the fields. A cumbersome syntax for this basic operation is common to all the curated databases that I know, and the syntax is also not uniform across them. Compare the following methods with the examples for ElementData and PhysicalConstants. Note again all fields are described by Strings.
In[109]:= AstronomicalData[#, "ApparentMagnitude"] & /@ brightest100Stars
Out[109]= {-26.72, -1.44, -0.62, -0.05, -0.01, 0.03, 0.08, 0.18, 0.4, 0.45, 0.45, 0.61, \
0.76, 0.77, 0.87, 0.96, 0.98, 1.06, 1.16, 1.17, 1.25, 1.25, 1.35, 1.36, 1.5, \
1.58, 1.59, 1.62, 1.64, 1.65, 1.67, 1.69, 1.73, 1.74, 1.75, 1.76, 1.79, 1.79, \
1.81, 1.83, 1.85, 1.86, 1.86, 1.9, 1.91, 1.93, 1.93, 1.94, 1.97, 1.98, 1.99, \
2.01, 2.01, 2.04, 2.05, 2.06, 2.07, 2.07, 2.07, 2.07, 2.07, 2.07, 2.09, 2.1, \
2.14, 2.15, 2.2, 2.21, 2.21, 2.22, 2.23, 2.23, 2.23, 2.24, 2.24, 2.25, 2.28, \
2.29, 2.29, 2.29, 2.3, 2.33, 2.34, 2.35, 2.38, 2.39, 2.4, 2.40, 2.43, 2.44, \
2.45, 2.45, 2.47, 2.48, 2.49, 2.54, 2.54, 2.55, 2.57, 2.56}
An alternate method to using Map is to use Table, and if we want to compile information or display a set of fields, that is how we would do it. Note the very nifty ability of Table to iterate over an arbitrary symbolic List, in this case the List of 100 brightest stars, and not just a numerical iterator.
In[118]:= Table[AstronomicalData[i, "DistanceLightYears"], {i, brightest100Stars}]
Out[118]= {0.0000158, 8.60, 3.1*10^2, 36.7, 4.39, 25.3, 42.2, 8.7*10^2, 11.4, 1.4*10^2,
6.4*10^2, 398., 16.8, 3.*10^2, 65.1, 42.2, 2.5*10^2, 6.1*10^2, 33.7, 25.1,
2.9*10^2, 1.55*10^3, 4.39, 77.5, 404., 51.5, 87.9, 701., 243., 131., 111.,
1.34*10^3, 101., 7.8*10^2, 1.14*10^3, 80.9, 592., 145., 124.,
1.79*10^3, 101., 632., 272., 82.1, 415., 105., 79.7, 183., 431., 499., 177., \
65.9, 126., 95.8, 224., 60.9, 97.0, 199., 723., 127., 170., 46.7, 92.8, 355., \
36.2, 613., 130., 1.09*10^3, 692., 74.7, 573., 77.9, 1.52*10^3, 228., 148.,
7.2*10^2, 54.4, 376., 401., 65.4, 548., 308., 79.4, 209., 672., 464., 77.4, \
83.5, 83.9, 199.,
3.20*10^3, 48.8, 537., 72.0, 139., 220., 365., 384., 57.7, 530.}
One of the most interesting discoveries of this epoch is the disclosure of planets surrounding stars. This discovery drastically affects the Drake equation, simple enough but elegant and pointed in conception, which calculates the number of planets bearing life and intelligent life. As Paul Horowitz pointed out years ago, if we assume the speed of light as a limiting factor governing the coincidence of an intelligent species' communication, and then consider the duration from the inception of a species' technical ability to communicate across space (e.g. radio) to their loss of desire to communicate due to the singularity of accelerated artificial intelligence (machine or genetic), there may not be many interactions between intelligent species. As of the last few months, however, extrapolating from current data, the number of planets that are capable of bearing life may be orders of magnitude greater than estimated until now. However it seems unlikely that the span from inception of interstellar communication, even inadvertent such as Marconi's invention of radio, to the advent of AI, is any different from what we currently envision, perhaps 300 years, a narrow window.
In[132]:= AstronomicalData@"Planet"
Out[132]= {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", \
"Neptune"}
No extra-solar planets ("exoplanets") here. Hmm, for that matter, how is Pluto categorized? Mathematica does have some syntactical elegance built-in for searching the list of all objects, but to search a class, we need Cases.
In[162]:= AstronomicalData@"*Plu*"
Out[162]= {"Pluto", "Plutarchos", "Plucker", "Pluis"}
In[143]:= AstronomicalData@"TransNeptunianObject" // Cases[#, "Pluto"] &
Out[143]= {"Pluto"}
It appears Mathematica has a separate class of extra - solar planet ("exoplanet"), a little out of date, judging by the number.
In[151]:= AstronomicalData@"Exoplanet" // Length
Out[151]= 209
So let's put together a table of information about the nearest stars and include properties that may relate to their likelihood of hosting a life-supporting planet.
In[122]:= ourNeighbors = AstronomicalData["StarNearest100"]
Out[122]= {"Sun", "ProximaCentauri", "RigelKentaurusA", "RigelKentaurusB", \
"BarnardsStar", "Wolf359", "Lalande21185", "Luyten726-8A", "Luyten726-8B", \
"Sirius", "SiriusB", "HIP92403", "Gl905", "EpsilonEridani", "Lacaille9352", \
"HIP57548", "Gl866A", "HIP104214", "Procyon", "Gl280B", "HIP104217", \
"HIP91772", "HIP91768", "HIP1475", "Gl15B", "GJ1111", "EpsilonIndi", \
"TauCeti", "HIP5643", "LuytensStar", "KapteynsStar", "Lacaille8760", \
"Kruger60", "Gl860B", "HIP30920", "Gl234B", "HIP72511", "HIP80824", "GJ1061", \
"Gl473A", "Gl473B", "HIP439", "HIP15689", "VanMaanensStar", "NN3522", \
"Gl83.1", "NN3618", "HIP72509", "NN3622", "HIP86162", "HIP85523", \
"HIP114110", "HIP57367", "GJ1002", "HIP113020", "GJ1245A", "GJ1245B", \
"HIP54211", "Gl412B", "Groombridge1618", "Gl388", "HIP82725", "HIP85605", \
"HIP106440", "HIP86214", "Omicron2Eridani", "Gl166B", "Gl166C", "HIP112460", \
"HIP88601", "Gl702B", "Altair", "HIP1242", "GJ1116A", "GJ1116B", "NN3379", \
"HIP57544", "HIP67155", "HIP103039", "HIP21088", "Gl169.1B", "HIP33226", \
"HIP53020", "HIP25878", "Gl754", "HIP82817", "Gl644B", "Gl644C", "Alsaphi", \
"HIP29295", "HIP26857", "HIP86990", "HIP94761", "Gl752B", "Gl300", \
"HIP73184", "HIP37766", "HIP76074", "Achird", "Gl34B"}
In[124]:= Table[AstronomicalData[i, "DistanceLightYears"], {i, ourNeighbors}]
Out[124]= {0.0000158, 4.22, 4.39, 4.39, 5.94, 7.79, 8.31, 8.56, 8.56, 8.60, 8.60, 9.69, \
10.3, 10.5, 10.7, 10.9, 11.1, 11.4, 11.4, 11.4, 11.4, 11.5, 11.6, 11.6, 11.6, \
11.8, 11.8, 11.9, 12.1, 12.4, 12.8, 12.9, 13.1, 13.1, 13.4, 13.4, 13.9, 13.9, \
14.0, 14.0, 14.0, 14.2, 14.3, 14.4, 14.6, 14.6, 14.6, 14.7, 14.8, 14.8, 14.8, \
15.1, 15.1, 15.3, 15.3, 15.4, 15.4, 15.8, 15.8, 15.9, 16.0, 16.1, 16.1, 16.1, \
16.4, 16.4, 16.4, 16.4, 16.4, 16.6, 16.6, 16.8, 17.0, 17.0, 17.0, 17.5, 17.6, \
17.7, 17.9, 18.0, 18.0, 18.0, 18.4, 18.6, 18.6, 18.7, 18.7, 18.7, 18.8, 18.8, \
18.9, 18.9, 19.1, 19.1, 19.2, 19.3, 19.3, 19.3, 19.4, 19.4}
To extract more fields, we use Table to iterate over the class of objects ourNeighbors and within it, Map (/@) the template for extracting a single field over a List of fields. We show just the first two to note that this method uses Transpose to group the properties of each object together. Again, compare to the method used with ElementData. Here are the apparent magnitude and absolute magnitude of the Sun and Sirius first grouped by property then with Transpose by object.
Table[AstronomicalData[i, #], {i,
ourNeighbors[[1 ;; 2]]}] & /@ {"ApparentMagnitude", "AbsoluteMagnitude"}
Out[145]= {{-26.72, 11.01}, {4.84, 15.4}}
And here is the entire Table. I built it using the first three records so I could see what was going on as I added fields and functionality. Note that all these stars are less than 20 light years from us.
In[149]:= Sort[{{b, c}, {a, d}, {z, a}}]
Out[149]= {{a, d}, {b, c}, {z, a}}
In[282]:= Table[AstronomicalData[i, #], {i, ourNeighbors}] & /@ {"Name",
"DistanceLightYears", "SpectralClass", "Constellation",
"ApparentMagnitude", "AbsoluteMagnitude", "NakedEyeStar",
"RightAscension", "Declination", "Diameter"} // Transpose //
Sort[#, #[[2]] < #2[[2]] &] & //
TableForm[#,
TableHeadings -> {{}, {"Name", "Distance in\nLightYears",
"Spectral\nClass", "Constellation", "Apparent\nMagnitude",
"Absolute\nMagnitude", "NakedEye\nStar", "Right\nAscension",
"Declination", "Diameter"}}] &And here is the entire Table. I built it using the first three records so I could see what was going on as I added fields and functionality. Note that all these stars are less than 20 light years from us.