Wolfram Blog, 09
News, views, and ideas from the front lines at Wolfram Research.

 
 
1. Accessing the World with the Wolfram Language: External Identifiers and Wikidata, 09 [−]
Wikidata is a large, community-curated repository of freely usable data. Version 12.1 of the Wolfram Language introduced dedicated functionality to access Wikidata. We came up with a new kind of entity: a fundamental building block called ExternalIdentifier, which Ill explain in more detail shortly. As a simple starting example, lets retrieve the mass of the Moon according to Wikidata: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q405", |"Label" - "Moon", "Description" - "only natural satellite of Earth"| ], ExternalIdentifier["WikidataID", "P2067", |"Label" - "mass", "Description" - "mass (in colloquial usage also known as weight) of the item"| ]] Where is this data coming from? Who provides it? Ill start at the beginning with a review of the history of Wikipedia, which led to the creation of a new sister project: Wikidata. Then Ill demonstrate how the Wolfram Language facilitates access to this large and diverse data repository. Quick History of Wikimedia Wikipediathe free encyclopedia that anyone can editwas created 20 years ago. Some advantages over traditional encyclopedias (think: heavy paper books) include hyperlinks within the text to other articles and links to the same article in a different language, images, infoboxes and so on. Around that time, the semantic web was already in the works, with the first recommendation standardizing its data model, the Resource Description Framework (RDF), being published in 2004. The semantic web aims to apply the successful concept of hyperlinks to (machine-readable) data, creating so-called linked data. By standardizing the underlying data model, the data can be moved freely between systems. By linking the dataachieved by representing concepts as URLs (more technically, IRIs)datasets can be combined easily. About 10 years ago, Wikipedia reached the status of the go-to resource for anyone wishing to learn about a subject and to find references for further research. Articles and links between those articles are available in hundreds of languages. However, keeping the information available in infoboxes, which was essentially repeated across language editions, in sync was tedious. Even renaming a single article meant updating potentially hundreds of links from other language editions. The valuable data present in the articles was not readily machine readable, making queries like give me all neurotransmitters encoded by such-and-such a protein hard to answer. Wikimedia, the foundation behind Wikipedia, presented a new sister project about seven years ago: Wikidata, a multilingual website to host itemsthat is, identifiers starting with the letter Q, followed by an integer. Wikidata Development The first item ever created was Q1, representing the universe. Shortly after followed Q2, representing Earth, and so on. In the first development phase of Wikidata, an item was created for each existing Wikipedia page, in the order of some popularity measure. Each item contains links to Wikipedia pages about the concept identified by the item, one per language. This facilitated managing the language links because changing the title of an article now required only one change in a central location. An item also contains for each language a label, a short description and alternative labels. The second phase introduced the concept of properties: identifiers starting with the letter P followed by an integer. With properties, one can make statements, like (Q2, P31, Q3504248). For our English-speaking readers, this can be presented as (Earth, instance of, inner planet) using the English labels attached to the respective items and properties. So now we have a website that stores machine-readable, multilingual data. It provides interfaces (APIs) that allow retrieving that data, one item at a time. While that is immensely useful on its own (and a clear improvement over having to extract data from a Wikipedia page), the real power becomes apparent with the Wikidata query service: it is an RDF (think: semantic web) database containing all the information about all the items. SPARQL is the query language for RDF, just like SQL is the query language for relational databases. SPARQL can be used to query the Wikidata query service. In a previous blog, I explained the basics of SPARQL as well as the Wolfram Languages symbolic representation of SPARQL, which facilitates writing programs that construct queries on the fly. But you dont have to read that (somewhat technical) blog post, nor do you have to learn SPARQL. Version 12.1 uses that same technology to build a function that is very easy to use (think: as easy as using Entity), from simple data retrieval and presentation to queries involving conditions. Basics Before giving a more theoretical explanation, lets start with some examples. WikidataData is the function to access data stored in Wikidata. For example, here is the mass of the Moon, shown previously: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q405", |"Label" - "Moon", "Description" - "only natural satellite of Earth"| ], ExternalIdentifier["WikidataID", "P2067", |"Label" - "mass", "Description" - "mass (in colloquial usage also known as weight) of the item"| ]] The items to feed into WikidataData can be discovered using WikidataSearch: #10005 WikidataSearch["moon"] Similarly, you can specify to look for properties: #10005 WikidataSearch["Property" - "mass"] External Identifiers Now what are those bluish boxes? Lets take a step back and look at entities first. Identifier Systems The following expression stands for the concept Moon: #10005 Entity["PlanetaryMoon", "Moon"] When designing the entity framework, we could have chosen to represent the concept of the Moon simply as Entity[1234...]that is, an arbitrary number (or string) that identifies the concept within the Wolfram ontology. However, we chose a two-component identifier consisting of a type (an entity type) and a name (a canonical name) with the requirement that a name is unique for a given type. For the purpose of identifying a concept, the structure of an identifier does not matter. Advantages of partitioning the space of identifiers by type include, for instance, being able to list the properties applicable to a given entity. The Wolfram ontology is a particular identifier system. Examples of other identifier systems include ISBN, DOI, ISO639-2 code (language code), LoC control number, MusicBrainz artist ID and so on. It is up to each identifier system to standardize the format of the identifier (from now on, ID), define their referent (that to which an ID refers) and mint new IDs, or nominate organizations to do so and to provide lookup services. An ID alone, say 123, is meaningless, because a number of identifier systems use integers as IDs (OSM relation ID, PubChem SID and CID, Entrez Gene ID, etc.) and therefore refer to completely unrelated concepts. The new symbol to represent an ID within an identifier system is ExternalIdentifier. Represent the ID Q1 within the Wikidata identifier system: #10005 ExternalIdentifier["WikidataID", "Q1"] Data Providers Entities have a compact syntax for retrieving data: #10005 Entity["PlanetaryMoon", "Moon"][ EntityProperty["PlanetaryMoon", "Mass"]] which is a short form for: #10005 EntityValue[Entity["PlanetaryMoon", "Moon"], EntityProperty["PlanetaryMoon", "Mass"]] === % This raises the question of why the following is not supported: #10005 ExternalIdentifier["WikidataID", "Q405", |"Label" - "Moon", "Description" - "only natural satellite of Earth"| ][ ExternalIdentifier["WikidataID", "P2067", |"Label" - "mass", "Description" - "mass (in colloquial usage also known as weight) of the item"| ]] This is because the organization that defines an identifier system does not need to be the same as the one that hosts the data. In the case of Entity, Wolfram is responsible for both. But for, say, an ISBN, there is no canonical organization responsible for recording all the ISBNs that have been issued. That implies that for working with external identifiers, selecting a service (choosing a lookup function) is an explicit step. In the case of ISBN, we got lucky because Wikidata does store ISBNs corresponding to Wikidata IDs. This mapping is used to make the following possible: #10005 WikidataData[ExternalIdentifier["ISBN10", "1-57955-008-8"], ExternalIdentifier["WikidataID", "P50", |"Label" - "author", "Description" - "main creator(s) of a written work (use on works, not humans); \ use P2093 when Wikidata item is unknown or does not exist"| ]] In fact, of the around eight thousand properties (and growing) that are available in Wikidata, about half are of type external IDthat is, mappings into other identifier systems. Metadata As there is no canonical service associated with certain identifier systems, one cannot rely on illustrative labels to become available when needed. But one might still want to present some human-readable information (instead of just the ID) in certain situations. ExternalIdentifier allows embedding arbitrary metadata: #10005 ExternalIdentifier["type", "abc", |"notes" - "some notes"| ] This metadata does not change the referent. The most important piece of metadata is the "Label", which is used for display: #10005 ExternalIdentifier["WikidataID", "Q2", |"Label" - "Earth"| ] URLs For certain identifier types, a URL can be constructed. For such types, you can click inside the blue box (on the ID or label) to go to the website that describes the referent. The URL can be accessed like this: #10005 ExternalIdentifier["WikidataID", "Q2", |"Label" - "Earth"| ]["URL"] There is also a special kind of URL, the "ConceptURI", which identifies the concept within the semantic web (the same in this case): #10005 ExternalIdentifier["WikidataID", "Q2", |"Label" - "Earth"| ]["ConceptURI"] Such concept URIs are relevant when querying SPARQL endpoints. Datatypes The Wolfram Language allows for the representation of a variety of basic as well as complex values. Complex values are presented to the user in an easily recognizable style. A large set of functions for plotting, creating maps and timelines, arithmetic operations, sorting and so on readily supports those datatypes. Wikidata also supports a variety of datatypes. Those are translated to corresponding Wolfram Language expressions by WikidataData, taking into account precision of numbers, precision and units of quantities, precision and calendar type of dates and coordinate systems (planets) for geographic positions. Strings An example of a basic value is a string: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q82274", |"Label" - "Plochingen", "Description" - "municipality in Germany"| ], ExternalIdentifier["WikidataID", "P281", |"Label" - "postal code", "Description" - "identifier assigned by postal authorities for the subject area \ or building"| ]] Demonym is an example of a so-called monolingual text property. Its value depends on the setting for the language options: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q2", |"Label" - "Earth", "Description" - "third planet from the Sun in the Solar System"| ], ExternalIdentifier["WikidataID", "P1549", |"Label" - "demonym", "Description" - "demonym (proper noun) for people or things associated with a \ given place, usually based off the placename; multiple entries with \ qualifiers to distinguish are used to list variant forms by reason of \ grammatical gender or plurality."| ]] #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q2", |"Label" - "Earth", "Description" - "third planet from the Sun in the Solar System"| ], ExternalIdentifier["WikidataID", "P1549", |"Label" - "demonym", "Description" - "demonym (proper noun) for people or things associated with a \ given place, usually based off the placename; multiple entries with \ qualifiers to distinguish are used to list variant forms by reason of \ grammatical gender or plurality."| ], Language - "German"] URLs Retrieve a URL of an image representing an item: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q5070208", |"Label" - "kangaroo", "Description" - "marsupial indigenous to Australia"| ], "ImageURL"] As a small convenience, the image can be requested (saving you one Import call): #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q5070208", |"Label" - "kangaroo", "Description" - "marsupial indigenous to Australia"| ], "Image"] Geography Geographic positions are represented as GeoPosition: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q64", |"Label" - "Berlin", "Description" - "capital and largest city of Germany"| ], "GeoPosition"] This is for use in any geo-plotting or computation function: #10005 GeoListPlot[%] The automatic inclusion of the the coordinate system in the position allows, for instance, GeoListPlot to choose the right background. #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q3298524", |"Label" - "Korolev", "Description" - "crater on Mars"| ], "GeoPosition"] Heres an example of a background chosen for Mars: #10005 GeoListPlot[%] Numbers and Quantities Numbers can be considered quantities of dimension one (historically: dimensionless quantities). This is supported by the following identity: #10005 Quantity[1, "PureUnities"] === 1 Wikidata is following that system by having a single datatype to represent both with the quantity datatype. When users enter a value of a property with datatype quantity, the user interface optionally allows entering a unit. The units that can be entered in that unit field are Wikidata items. If no unit is entered, it defaults to Q199, the item representing the number 1. Being a unit, the number 1 has a unit symbol (which is typically omitted when writing down a value): #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q199", |"Label" - "1", "Description" - "natural number"| ], ExternalIdentifier["WikidataID", "P5061", |"Label" - "unit symbol", "Description" - "Abbreviation of a unit for each language. If not provided, then \ it should default to English."| ]] It also has a conversion to other (coherent) SI units (1, trivially), and a statement about which quantities it measures: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q199", |"Label" - "1", "Description" - "natural number"| ], {ExternalIdentifier[ "WikidataID", "P2370", |"Label" - "conversion to SI unit", "Description" - "conversion of the unit into SI base unit(s)/SI derived unit"| ], ExternalIdentifier["WikidataID", "P111", |"Label" - "measured physical quantity", "Description" - "value of a physical property expressed as number multiplied by \ a unit"| ]}] Lets find some (direct) subclasses of the class of quantities of dimension one: #10005 WikidataData[ EntityClass[All, "SubclassOf" - ExternalIdentifier["WikidataID", "Q126818", |"Label" - "dimensionless quantity", "Description" - "quantity without an associated physical dimension"| ]], ExternalIdentifier["WikidataID", "P7973", |"Label" - "quantity symbol (LaTeX)", "Description" - "symbol for a mathematical or physical quantity in LaTex"| ], "Association"] // Short But Im digressing. The takeaway is that Wikidata contains its own quantities and units ontology, which is necessary and of fundamental importance for representing any quantity-valued statement in Wikidata. Now an example: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q243", |"Label" - "Eiffel Tower", "Description" - "tower located on the Champ de Mars in Paris, France"| ], ExternalIdentifier["WikidataID", "P2067", |"Label" - "mass", "Description" - "mass (in colloquial usage also known as weight) of the item"| ]] When hovering over the result, a tooltip indicates unit: metric tons. There are quite a few tons out there. The linguistic interface allows selecting among the possible interpretations of ton known to the Wolfram Language: Wikidata also knows a few tons: #10005 WikidataSearch["ton"] This example illustrates that there is too much ambiguity in commonly used unit names to rely just on the name to unambiguously identify a unit. To solve the ambiguity issue, Wikidata links its unit items to other unit ontologies: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q191118", |"Label" - "tonne", "Description" - "metric unit of mass equal to 1000 kg"| ], {ExternalIdentifier[ "WikidataID", "P2968", |"Label" - "QUDT unit ID", "Description" - "identifier for unit of measure definition according to QUDT \ ontology"| ], ExternalIdentifier["WikidataID", "P7825", |"Label" - "UCUM code", "Description" - "case-sensitive code from the Unified Code for Units of Measure \ specification to identify a unit of measurement"| ], ExternalIdentifier["WikidataID", "P3328", |"Label" - "wurvoc.org measure ID", "Description" - "concept in the Ontology of units of Measure and related \ concepts (OM) 1.8 of wurvoc.org"| ], ExternalIdentifier["WikidataID", "P7007", |"Label" - "Wolfram Language unit code", "Description" - "input form for a unit of measurement in the Wolfram \ Language"| ]}] This allows unambiguous translation of RDF (semantic web) data, which uses any of those unit ontologies to represent quantities to be translated to any otherincluding to and from the Wolfram Language. Precision The speed of light is a physical constant used to define the unit meter. It is exact when expressed in meters per second: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q2111", |"Label" - "speed of light", "Description" - "speed at which all massless particles and associated fields \ travel in a vacuum"| ], ExternalIdentifier["WikidataID", "P1181", |"Label" - "numeric value", "Description" - "numerical value of a number, a mathematical constant, or a \ physical constant"| ]] #10005 Precision[First[%]] The gravitational constant, on the other hand, is uncertain: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q18373", |"Label" - "gravitational constant", "Description" - "empirical physical constant relating the gravitational force \ between objects to their mass and distance"| ], ExternalIdentifier["WikidataID", "P1181", |"Label" - "numeric value", "Description" - "numerical value of a number, a mathematical constant, or a \ physical constant"| ]] The uncertainty is contained in the previous expression (its FullForm) and it can be made visible by applying Around: #10005 MapAt[Around, First[%], 1] (Nice formatting is not the only feature of Around.) Dates For dates not too far in the past, the (proleptic) Gregorian calendar is typically used: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q9312", |"Label" - "Immanuel Kant", "Description" - "German philosopher"| ], ExternalIdentifier["WikidataID", "P569", |"Label" - "date of birth", "Description" - "date on which the subject was born"| ]] Here is an example of a date given in the Julian calendar: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q859", |"Label" - "Plato", "Description" - "ancient Greek philosopher"| ], ExternalIdentifier["WikidataID", "P569", |"Label" - "date of birth", "Description" - "date on which the subject was born"| ]] The ability to enter dates in different calendar systems allows faithful representation of values given in (primary) sources. It leaves the task of converting between calendars to the application consuming such data: #10005 CalendarConvert[%, "Gregorian"] The inception of the city Berlin is only known to year precision: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q64", |"Label" - "Berlin", "Description" - "capital and largest city of Germany"| ], ExternalIdentifier["WikidataID", "P571", |"Label" - "inception", "Description" - "date or point in time when the subject came into existence as \ defined"| ]] Result Forms If you know entities, then youll probably have discovered the possibility to shape the result. When requesting multiple values at once, the default result is a list, or more generally, an array: #10005 Entity["Person", "AlbertEinstein::6tb7g"][{"BirthDate", "DeathDate"}] The position of the value in the result is the same as the position of the corresponding property in the input. To see the properties and values next to each other, one can request an Association or a Dataset instead: #10005 Entity["Person", "AlbertEinstein::6tb7g"][{"BirthDate", "DeathDate"}, "Association"] WikidataData supports the same result forms: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q937", |"Label" - "Albert Einstein", "Description" - "German-born physicist; developer of the theory of \ relativity"| ], {"BirthDate", "DeathDate"}, "Association"] Omitting the list of properties produces all available data: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q937", |"Label" - "Albert Einstein", "Description" - "German-born physicist; developer of the theory of \ relativity"| ], "Dataset"] Entities Entities can be discovered easily with the linguistic assistant, thereby facilitating access to Wikidata: #10005 WikidataData[\!\(\*NamespaceBox["LinguisticAssistant", DynamicModuleBox[{Typeset`query$$ = "zebra", Typeset`boxes$$ = TemplateBox[{"\"Cape mountain zebra\"", RowBox[{"Entity", "[", RowBox[{"\"Species\"", ",", "\"Infraspecies:EquusZebraZebra\""}], "]"}], "\"Entity[\\\"Species\\\", \ \\\"Infraspecies:EquusZebraZebra\\\"]\"", "\"species specification\""}, "Entity"], Typeset`allassumptions$$ = {{ "type" -> "Clash", "word" -> "zebra", "template" -> "Assuming \"${word}\" is ${desc1}. Use as \ ${desc2} instead", "count" -> "3", "Values" -> {{ "name" -> "Species", "desc" -> "a species specification", "input" -> "*C.zebra-_*Species-"}, { "name" -> "MaterialClass", "desc" -> "a class of materials", "input" -> "*C.zebra-_*MaterialClass-"}, { "name" -> "Word", "desc" -> "a word", "input" -> "*C.zebra-_*Word-"}}}, { "type" -> "SubCategory", "word" -> "zebra", "template" -> "Assuming ${desc1}. Use ${desc2} instead", "count" -> "3", "Values" -> {{ "name" -> "Infraspecies:EquusZebraZebra", "desc" -> "Cape mountain zebra", "input" -> "*DPClash.SpeciesE.zebra-_*Infraspecies%\ 3AEquusZebraZebra-"}, { "name" -> "Species:EquusGrevyi", "desc" -> "Grevy's zebra", "input" -> "*DPClash.SpeciesE.zebra-_*Species%3AEquusGrevyi-\ "}, {"name" -> "Species:EquusZebra", "desc" -> "mountain zebra", "input" -> "*DPClash.SpeciesE.zebra-_*Species%3AEquusZebra-"}\ }}}, Typeset`assumptions$$ = {}, Typeset`open$$ = {1}, Typeset`querystate$$ = { "Online" -> True, "Allowed" -> True, "mparse.jsp" -> 1.128411`6.504012304598597, "Messages" -> {}}}, DynamicBox[ToBoxes[ AlphaIntegration`LinguisticAssistantBoxes["", 4, Automatic, Dynamic[Typeset`query$$], Dynamic[Typeset`boxes$$], Dynamic[Typeset`allassumptions$$], Dynamic[Typeset`assumptions$$], Dynamic[Typeset`open$$], Dynamic[Typeset`querystate$$]], StandardForm], ImageSizeCache->{56., {7., 16.}}, TrackedSymbols:>{ Typeset`query$$, Typeset`boxes$$, Typeset`allassumptions$$, Typeset`assumptions$$, Typeset`open$$, Typeset`querystate$$}], DynamicModuleValues:>{}, UndoTrackedVariables:>{Typeset`open$$}], BaseStyle->{"Deploy"}, DeleteWithContents->True, Editable->False, SelectWithContents->True]\), "Dataset"] One can also go in the other direction. Given an item, request the corresponding entity: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q2", |"Label" - "Earth", "Description" - "third planet from the Sun in the Solar System"| ], "Entity"] Classes Entity classes represent an implicit collection of entities. They behave in various contexts just like an explicitly given list of entities. Here is a class of the three longest rivers in Italy: #10005 longRivers = EntityClass[ "River", {EntityProperty["River", "Countries"] - Entity["Country", "Italy"], EntityProperty["River", "Length"] - TakeLargest[3]}]; Request the lengths of those rivers: #10005 longRivers["Length", "Association"] Request the same information from Wikidata instead: #10005 WikidataData[longRivers, "Length", "Association"] In this example, the type, constrained property and value were specified as entity type, entity property and entity. Those are translated to corresponding Wikidata items and properties for query evaluation. However, there is no need to start with terms from the Wolfram ontology. Heres an example of a query that only uses external identifiers to specify type, constrained property and constraint value: #10005 WikidataData[ EntityClass[ ExternalIdentifier["WikidataID", "Q47461344", |"Label" - "written work", "Description" - "any creative work expressed in writing like: inscriptions, \ manuscripts, documents or maps"| ], ExternalIdentifier["WikidataID", "P50", |"Label" - "author", "Description" - "main creator(s) of a written work (use on works, not humans); \ use P2093 when Wikidata item is unknown or does not exist"| ] - ExternalIdentifier["ISNI", "0000 0001 1047 0442"]], ExternalIdentifier["WikidataID", "P577", |"Label" - "publication date", "Description" - "date or point in time when a work was first published or \ released"| ], "Association"] But what does it mean for written work to appear in the type position? Taking a random article from the list of results, we see that it is an instance of (Wikidatas property P31 to indicate class membership) a scholarly article: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q56091626", |"Label" - "Computer algebra"| ], "InstanceOf"] Scholarly article is an (indirect) subclass of (Wikidatas property P279 to indicate subclass relations) written work: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q13442814", |"Label" - "scholarly article", "Description" - "article in an academic publication, usually peer reviewed"| ], \ "SubclassOf"] #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q191067", |"Label" - "article", "Description" - "text that forms an independent part of a publication"| ], \ "SubclassOf"] When requesting members of classes (specified via EntityClass) from Wikidata, then both explicit and implicit class membership relations are taken into account. More on Classes Typically, the second argument of EntityClass is a list of rules. Each rule represents a (Boolean) condition indicating possible class membership. If all conditions applied to an entity indicate membership, then that entity is part of the class (conjunction). If we relax the syntactic constraint to allow only rules, we can represent more constraints. For instance, using a GeoDisk, we can look up the three largest (by area) lakes within a disk of radius 100 km around Madrid: #10005 WikidataData[ EntityClass[ "Lake", {GeoDisk[Entity["City", {"Madrid", "Madrid", "Spain"}], Quantity[100, "Kilometers"]], "Area" - TakeLargest[3]}], "Area", "Association"] The GeoDisk lookup considers any item that has a value for coordinate location (P625). This idea can be generalized to allow a GeoDisk in any position where otherwise an item would be expected. For instance, in the following query, we are looking for physicists whose birthplace is any item located within the given disk: #10005 WikidataData[ EntityClass[ ExternalIdentifier["WikidataID", "Q5", |"Label" - "human", "Description" - "common name of Homo sapiens, unique extant species of the genus \ Homo"| ], { ExternalIdentifier["WikidataID", "P106", |"Label" - "occupation", "Description" - "occupation of a person; see also \"field of work\" \ (Property:P101), \"position held\" (Property:P39)"| ] - ExternalIdentifier["WikidataID", "Q169470", |"Label" - "physicist", "Description" - "scientist who does research in physics"| ], ExternalIdentifier["WikidataID", "P19", |"Label" - "place of birth", "Description" - "most specific known (e.g. city instead of country, or \ hospital instead of city) birth location of a person, animal or \ fictional character"| ] - GeoDisk[Entity["City", {"Ulm", "BadenWurttemberg", "Germany"}], Quantity[30, "Kilometers"]] }], {"BirthPlace", "BirthDate"}, "Dataset"] Future Ranks and Qualifiers Wikidata supports associating a rank with each statement. By default, each statement is assigned the normal rank. Other possible ranks are deprecated and preferred. The deprecated rank is assigned to statements that are known to be wrong. Why not just delete the wrong value? Sometimes even reliable sources contain errors. By recording the wrong valuetogether with the source and deprecated rankother curators are made aware of the error. This reduces the chance that the wrong value is being re-added over and over again. Some properties naturally accept multiple values, which are values applicable under different conditions. Examples of these might be density of water at different temperatures and pressures, a population at different points in time and so on. While for certain applications the value is only useful in combination with the associated qualifiers, in others, one is interested in a single value. Whats the population/the density of water/ ? can be understood as asking about the most recent value/the value at standard conditions, etc. Such values typically receive the preferred rank. WikidataData takes into account those ranks. By default, a deprecated value is never returned. Only best values are included, which means either all preferred values or all normal-rank values if there are no preferred values. Here is the most recent value for the population of a small human settlement in Germany: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q82911", |"Label" - "Weinstadt", "Description" - "city in Baden-W?rttemberg, Germany"| ], ExternalIdentifier["WikidataID", "P1082", |"Label" - "population", "Description" - "number of people inhabiting the place; number of people of \ subject"| ]] We can request all non-deprecated values using the "StatementRank" suboption of the Method option: #10005 WikidataData[ ExternalIdentifier["WikidataID", "Q82911", |"Label" - "Weinstadt", "Description" - "city in Baden-W?rttemberg, Germany"| ], ExternalIdentifier["WikidataID", "P1082", |"Label" - "population", "Description" - "number of people inhabiting the place; number of people of \ subject"| ], Method - "StatementRank" - "NonDeprecated"] // Short Those values are somewhat useless without, for instance, the point in time they refer to. We can request such additional detail with the "StatementFormat" suboption: #10005 populations = WikidataData[ ExternalIdentifier["WikidataID", "Q82911", |"Label" - "Weinstadt", "Description" - "city in Baden-W?rttemberg, Germany"| ], ExternalIdentifier["WikidataID", "P1082", |"Label" - "population", "Description" - "number of people inhabiting the place; number of people of \ subject"| ], Method - {"StatementRank" - "NonDeprecated", "StatementFormat" - "Association"}]; #10005 First[populations] // Short That allows us to plot the population over time: #10005 TimeSeries[#[ ExternalIdentifier["WikidataID", "P585", |"Label" - "point in time", "Description" - "time and date something took place, existed or a statement \ was true"| ]][[1]] - #["Value"] /@ populations] #10005 DateListPlot[%] Access to qualifiers is essential for certain applications. However, an association is not the most natural representation of a qualified value. We are investigating new ways to represent, request and work with qualified data. Therefore, until then, that functionality is hidden in the Method option for the motivated expert user. Wikibase The software behind Wikidata is called Wikibase. It includes the interface where (human) curators view and enter data, APIs where programs can request data or an edit and the SPARQL query service for sophisticated analysis. While you can download the whole Wikidata dataset in one file and load it onto your own server (say for extended analysis that goes beyond the query time limit of Wikidata), an important use case of Wikibase is for individuals or organizations to manage their own data. Wolfram Language developers are investigating functionality similar to WikidataData to interact with such custom Wikibase installations. Putting the Pieces Together Before being able to make a statement about an object, one needs to identify that object. The entity framework provides both: identifiers (Entity) for a large number of objects and data access about those objects (EntityValue). With external identifiers on the one hand and data functions on the other, the Wolfram Language is separating the different concerns of identification and data retrieval. This separation is a good fit for external identifiers. It allows for a diversity of functions, either built into the Wolfram LanguageWikidataData being the first such functionor developed by users. This will allow the user to choose whether they prefer looking up, for example, the composer of a musical work in Wikidata or MusicBrainzboth of which support the MusicBrainz work ID. In that sense, external identifiers are the basic building blocks for a new class of functionality to come: EntityValue-like functions for external data. Contact us with your suggestions or publish your own data function on the Wolfram Function Repository. Get full access to the latest Wolfram Language functionality with a Mathematica 12.1 or Wolfram|One trial. Engage with the code in this post by downloading the Wolfram Notebook ?  (0)

2. New Wolfram Books: Releases from Wolfram Media and Others Featuring the Wolfram Language, 02 [−]

The first half of 2020 has brought with it another exciting batch of publications. Wolfram Media has released Conrad Wolfram’s The Math(s) Fix. Keep an eye out for the upcoming third edition of Hands-on Start to Wolfram Mathematica later in 2020.

The Math(s) Fix

The Math(s) Fix

The Math(s) Fix: An Education Blueprint for the AI Age is a groundbreaking book that exposes why mathematics education is in crisis worldwide and how the only fix is a fundamentally new mainstream subject. Engaging and accessible yet deep and compelling, The Math(s) Fix argues that today’s math education isn’t working to elevate society with modern computation, data science and AI. Instead, students are subjugated to compete with what computers do best, and lose.





New books from other publishers include writings on advanced calculus, applied holography, quantum mechanics and more.

Advanced Calculus Explored: With Applications in Physics, Chemistry, and Beyond

Advanced Calculus Explored: With Applications in Physics, Chemistry, and Beyond

Written by Wolfram Summer School participant Hamza Alsamraee, Advanced Calculus Explored gives readers tools for success in their STEM courses. The author’s use of the Wolfram Language to explore famous equations, applications in a range of topics and a multitude of nonstandard problems helps readersespecially students in advanced mathematics and science coursesbuild a stronger, more intuitive understanding of calculus.

Applied Holography: A Practical Mini-Course

Applied Holography: A Practical Mini-Course

Originally presented as lectures given at the Indian Institute of Technology Madras (India) and at the Institute of Theoretical Physics Madrid (Spain), Matteo Baggioli’s new book is a concise and pragmatic course on applied holography. This primer focuses on analytic and numerical techniques, using Mathematica to detail computations and open-source numerical code. The author also shares tricks and techniques, supplementing concrete applications of AdS/CFT to hydrodynamics, quantum chromodynamics and condensed matter.

Finite Form Representations for Meijer G and Fox H Functions

Finite Form Representations for Meijer G and Fox H Functions

Authors Carlos A. Coelho and Barry C. Arnold present computational modules in Mathematica and other languages to guide readers to implement, plot and compute the distributions of test statistics, or any other statistics that fit into the general paradigm described. Exact quantiles and the exact p-values of likelihood ratio tests can be computed quickly and efficiently by researchers and graduate students implementing likelihood ratio tests in multivariate analysis, providing an explicit manageable finite form for the distribution of the test statistics.

Using Mathematica for Quantum Mechanics: A Student's Manual

Using Mathematica for Quantum Mechanics:
A Student’s Manual

Author Roman Schmied uses Mathematica to simulate many of the problems students encounter in introductory quantum mechanics. Computer implementations for finding and visualizing analytical and numerical solutions function as building blocks to solve more complex problems, such as coherent laser-driven dynamics in the Rubidium hyperfine structure or the Rashba interaction of an electron moving in 2D. This book is written in the Wolfram Language for its unparalleled ability to perform deep calculations, seamless mix of analytic and numerical facilities, built-in algorithms plus other libraries and the Wolfram Notebook interactive experiencebut no prior knowledge of Mathematica is required.

 (0)

3. New 12.1 Dataset Interactive Controls and Formatting Options, 23 [−]

alt

In his blog post announcing the launch of Mathematica Version 12.1, Stephen Wolfram mentioned the extensive updates to Dataset that we undertook to make it easier to explore, understand and present your data. Here is how the updated Dataset works and how you can use it to gain deeper insight into your data.

New Interactive Features

We have added items to Dataset column header context menus for sorting and reverse sorting your data:

alt

If a Dataset has multiple levels of data, you can sort multiple columns simultaneously:

alt

Sort row headers by hovering near the corner of the blank cell atop a row header column. When the menu indicator () appears, right-click it to bring up the context menu and choose a sort item:

alt

Hide and Show items are also in the context menus of all Dataset cells, used to collapse parts of datasets for focused views of particular data:

alt

All the Options

Sorting and hiding give you interactive tools for exploring your data. With Datasets new formatting options, you can present your data in ways that make it easier to understand and spot patterns.

The following is a complete set of new Dataset options:

Alignment
Background
ItemSize
ItemStyle
Grid-like formatting for Dataset items
HeaderAlignment
HeaderBackground
HeaderSize
HeaderStyle
Grid-like formatting for Dataset headers
ItemDisplayFunction
HeaderDisplayFunction
complete control of item and header formatting
HiddenItems
which items are initially hidden
MaxItems
maximum number of items to display without a scrollbar or elision
DatasetDisplayPanel
initial drill-down position
ScrollPosition
initial scroll positions

In the subsequent sections, Ill explain the basic functions of these options and then do a deep dive into option value syntax. It lets you apply option values to Dataset data in tons of useful ways.

Alignment, Background, ItemSize, ItemStyle and Their Header Equivalents

These options, familiar from Grid, now work in Dataset as well. Here is a dataset with default styling:

alt

Here is the same Dataset with right-aligned ages, orange backgrounds and italic children entries (to change a Datasets options, wrap it with Dataset[...] and specify the new options):

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Alignment -> {"age" -> Right},
 Background -> LightOrange,
 ItemStyle -> {"children" -> Italic}]

Each of the styling options has an analogous header option that operates on the Datasets headers rather than the items:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Alignment -> {"age" -> Right},
 Background -> LightOrange,
 ItemStyle -> {"children" -> Italic},
 HeaderAlignment -> {"age" -> Right},
 HeaderBackground -> LightRed,
 HeaderStyle -> Bold]

ItemDisplayFunction, HeaderDisplayFunction

If the basic styling options dont meet your needs, you can take complete control of item and header formatting with the ItemDisplayFunction and HeaderDisplayFunction options.

Here is an item display function that replaces male and female with the symbols for male and female, and a header display function that changes the sex headers accordingly:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 ItemDisplayFunction -> {"sex" -> (If[# ===
        "male", \[Mars], \[Venus]] &)},
 HeaderDisplayFunction -> {"sex" -> ("\[Mars]/\[Venus]" &)}]

The display function is given three arguments: the item or header value, the path to the item or header and the entire dataset itself. Here is a header display function that uses the second (path) argument to highlight children with the same name as their parent:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 HeaderDisplayFunction -> (If[MatchQ[#2, {x_, "children", x_}],
     Style[#, Bold, Red], #] &)]

HiddenItems

Specify which Dataset items are initially hidden with the HiddenItems option:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 HiddenItems -> {"Eva", "sex"}]

To hide all items by default and unhide individual items, use All to hide everything and then make exceptions using path→ False:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 HiddenItems -> {All, {"Bob"} -> False}]

Make exceptions to the exceptions to hide unhidden items using path→ True:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 HiddenItems -> {All, {"Bob"} -> False, "sex" -> True}]

MaxItems

Pre-12.1, the only control you had over how many Dataset items were displayed was via Dataset`$DatasetTargetRowCount. In 12.1, the MaxItems option gives you control over the number of rows displayed as well as columns and deeper levels. To limit the number of rows displayed to 3, specify MaxItems→3:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Mercury" -> Association[
    "Radius" -> Quantity[2439.7`5., "Kilometers"],
     "Moons" -> Association[]],
   "Venus" -> Association[
    "Radius" -> Quantity[6051.85`5., "Kilometers"],
     "Moons" -> Association[]],
   "Earth" -> Association[
    "Radius" -> Quantity[
      6367.4446571000000000001`8.299868708313456, "Kilometers"],
     "Moons" -> Association[
      "Moon" -> Association[
        "Mass" -> Quantity[
          7.3459006322855173653772`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1737.5`5., "Kilometers"]]]],
   "Mars" -> Association[
    "Radius" -> Quantity[3385.595`4.298042852900571, "Kilometers"],
     "Moons" -> Association[
      "Phobos" -> Association[
        "Mass" -> Quantity[
          1.0724880884600402`3.9586073148417724*^16, "Kilograms"],
         "Radius" -> Quantity[11.1`3., "Kilometers"]],
       "Deimos" -> Association[
        "Mass" -> Quantity[
          1.468340774924336`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[6.2`2., "Kilometers"]]]],
   "Jupiter" -> Association[
    "Radius" -> Quantity[69173.`5., "Kilometers"],
     "Moons" -> Association[
      "Metis" -> Association[
        "Mass" -> Quantity[
          1.19864553055047796`0.9999565727231415*^17, "Kilograms"],
         "Radius" -> Quantity[21.5`3., "Kilometers"]],
       "Adrastea" -> Association[
        "Mass" -> Quantity[
          7.491534565940487`0.9999565727231415*^15, "Kilograms"],
         "Radius" -> Quantity[8.2`2., "Kilometers"]],
       "Amalthea" -> Association[
        "Mass" -> Quantity[
          2.067663540199574478`2.995678626217367*^18, "Kilograms"],
         "Radius" -> Quantity[83.45`4., "Kilometers"]],
       "Thebe" -> Association[
        "Mass" -> Quantity[
          1.49830691318809745`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[49.3`3., "Kilometers"]],
       "Io" -> Association[
        "Mass" -> Quantity[
          8.9297833448203530011087`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1821.6`5., "Kilometers"]],
       "Europa" -> Association[
        "Mass" -> Quantity[
          4.7986859848371340385365`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1560.8`5., "Kilometers"]],
       "Ganymede" -> Association[
        "Mass" -> Quantity[
          1.48150100386563183602529`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2631.2`5., "Kilometers"]],
       "Callisto" -> Association[
        "Mass" -> Quantity[
          1.07567783404752629528633`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2410.3`5., "Kilometers"]],
       "Themisto" -> Association[
        "Mass" -> Quantity[
          6.89221180066526`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Leda" -> Association[
        "Mass" -> Quantity[
          1.0937640466273112`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Himalia" -> Association[
        "Mass" -> Quantity[
          6.742381109346438525`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[85.`2., "Kilometers"]],
       "Lysithea" -> Association[
        "Mass" -> Quantity[
          6.2928890353900092`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[18.`2., "Kilometers"]],
       "Elara" -> Association[
        "Mass" -> Quantity[
          8.6901800964909652`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[43.`2., "Kilometers"]],
       "S/2000 J11" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carpo" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Euporie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J18" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Orthosie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Euanthe" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Harpalyke" -> Association[
        "Mass" -> Quantity[
          1.19864553055047`0.9999565727231415*^14, "Kilograms"],
         "Radius" -> Quantity[2.2`2., "Kilometers"]],
       "Praxidike" -> Association[
        "Mass" -> Quantity[
          4.34509004824548`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.4`2., "Kilometers"]],
       "Thyone" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J16" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Iocaste" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Mneme" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Hermippe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Thelxinoe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Helike" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Ananke" -> Association[
        "Mass" -> Quantity[
          2.9966138263761948`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[14.`2., "Kilometers"]],
       "S/2003 J15" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Eurydome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Arche" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Herse" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasithee" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J10" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Chaldene" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Isonoe" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Erinome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Kale" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Aitne" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Taygete" -> Association[
        "Mass" -> Quantity[
          1.6481376045069`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "S/2003 J9" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carme" -> Association[
        "Mass" -> Quantity[
          1.31851008360552575`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[23.`2., "Kilometers"]],
       "Sponde" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Megaclite" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.7`2., "Kilometers"]],
       "S/2003 J5" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J19" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J23" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Kalyke" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Kore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasiphae" -> Association[
        "Mass" -> Quantity[
          2.9966138263761949`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Eukelade" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J4" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Sinope" -> Association[
        "Mass" -> Quantity[
          7.4915345659404873`1.9995659225206786*^16, "Kilograms"],
         "Radius" -> Quantity[19.`2., "Kilometers"]],
       "Hegemone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Aoede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Kallichore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Autonoe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Callirrhoe" -> Association[
        "Mass" -> Quantity[
          8.69018009649097`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.3`2., "Kilometers"]],
       "Cyllene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J2" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]]]],
   "Saturn" -> Association[
    "Radius" -> Quantity[57316.`5., "Kilometers"],
     "Moons" -> Association[
      "Tarqeq" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Pan" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.8`3., "Kilometers"]],
       "Daphnis" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.9`2., "Kilometers"]],
       "Atlas" -> Association[
        "Mass" -> Quantity[
          2.097629678463337`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prometheus" -> Association[
        "Mass" -> Quantity[
          1.86689041383236942`3.9586073148417764*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Pandora" -> Association[
        "Mass" -> Quantity[
          1.49081537862215657`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[40.6`3., "Kilometers"]],
       "Epimetheus" -> Association[
        "Mass" -> Quantity[
          5.25905726529022205`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[58.3`3., "Kilometers"]],
       "Janus" -> Association[
        "Mass" -> Quantity[
          1.896856552096131371`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[90.4`3., "Kilometers"]],
       "Aegaeon" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[0.25`2., "Kilometers"]],
       "Mimas" -> Association[
        "Mass" -> Quantity[
          3.7907164903658865482`3.9586073148417764*^19, "Kilograms"],
         "Radius" -> Quantity[198.8`4., "Kilometers"]],
       "Methone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Anthe" -> Association[
        "Mass" -> Quantity[5.`1.*^12, "Kilograms"],
         "Radius" -> Quantity[1.`1., "Kilometers"]],
       "Pallene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Enceladus" -> Association[
        "Mass" -> Quantity[
          1.08027928440861826137`3.9586073148417764*^20, "Kilograms"],
          "Radius" -> Quantity[252.3`4., "Kilometers"]],
       "Tethys" -> Association[
        "Mass" -> Quantity[
          6.17452278924814959099`4.6989700043360205*^20, "Kilograms"],
          "Radius" -> Quantity[536.3`4., "Kilometers"]],
       "Calypso" -> Association[
        "Mass" -> Quantity[
          3.595936591651433`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.5`2., "Kilometers"]],
       "Telesto" -> Association[
        "Mass" -> Quantity[
          7.191873183302868`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.`2., "Kilometers"]],
       "Polydeuces" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.2`2., "Kilometers"]],
       "Dione" -> Association[
        "Mass" -> Quantity[
          1.095457133439213688532`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[562.5`4., "Kilometers"]],
       "Helene" -> Association[
        "Mass" -> Quantity[
          2.5471217524197656`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "Rhea" -> Association[
        "Mass" -> Quantity[
          2.308441461148901741032`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[764.5`4., "Kilometers"]],
       "Titan" -> Association[
        "Mass" -> Quantity[
          1.34520841449162446435527`4.958607314841778*^23,
           "Kilograms"],
         "Radius" -> Quantity[2575.5`5., "Kilometers"]],
       "Hyperion" -> Association[
        "Mass" -> Quantity[
          5.543735578795960565`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[133.`4., "Kilometers"]],
       "Iapetus" -> Association[
        "Mass" -> Quantity[
          1.805459830391657427108`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[734.5`4., "Kilometers"]],
       "Kiviuq" -> Association[
        "Mass" -> Quantity[
          3.296275209013815`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[8.`1., "Kilometers"]],
       "Ijiraq" -> Association[
        "Mass" -> Quantity[
          1.198645530550478`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[6.`1., "Kilometers"]],
       "Phoebe" -> Association[
        "Mass" -> Quantity[
          8.287135536843366995`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[106.6`4., "Kilometers"]],
       "Paaliaq" -> Association[
        "Mass" -> Quantity[
          8.240688022534537`1.999565922520683*^15, "Kilograms"],
         "Radius" -> Quantity[11.`3., "Kilometers"]],
       "Skathi" -> Association[
        "Mass" -> Quantity[
          3.146444517695`1.9995659225206786*^14, "Kilograms"],
         "Radius" -> Quantity[4.`1., "Kilometers"]],
       "Albiorix" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "S/2007 S2" -> Association[
        "Mass" -> Quantity[1.5`2.*^14, "Kilograms"],
         "Radius" -> Quantity[3.`1., "Kilometers"]],
       "Bebhionn" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Erriapo" -> Association[
        "Mass" -> Quantity[
          7.64136525725929`1.9995659225206914*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Siarnaq" -> Association[
        "Mass" -> Quantity[
          3.8955979742890535`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Skoll" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Tarvos" -> Association[
        "Mass" -> Quantity[
          2.696952443738576`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[7.5`2., "Kilometers"]],
       "Greip" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S13" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Hyrrokkin" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Mundilfari" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2006 S1" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Jarnsaxa" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Narvi" -> Association[
        "Mass" -> Quantity[
          3.44610590033262`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Bergelmir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S17" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Suttungr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Hati" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Bestla" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Farbauti" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Thrymr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2007 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "Aegir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S7" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2006 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Kari" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fenrir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Surtur" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Ymir" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.`1., "Kilometers"]],
       "Loge" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fornjot" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]]]],
   "Uranus" -> Association[
    "Radius" -> Quantity[25266.`5., "Kilometers"],
     "Moons" -> Association[
      "Cordelia" -> Association[
        "Mass" -> Quantity[
          4.4949207395642923`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[20.1`3., "Kilometers"]],
       "Ophelia" -> Association[
        "Mass" -> Quantity[
          5.3939048874771508`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[21.4`3., "Kilometers"]],
       "Bianca" -> Association[
        "Mass" -> Quantity[
          9.2895028617662042`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[25.7`3., "Kilometers"]],
       "Cressida" -> Association[
        "Mass" -> Quantity[
          3.43112283120074311`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[39.8`3., "Kilometers"]],
       "Desdemona" -> Association[
        "Mass" -> Quantity[
          1.78298522669383596`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[32.`3., "Kilometers"]],
       "Juliet" -> Association[
        "Mass" -> Quantity[
          5.57370171705972251`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Portia" -> Association[
        "Mass" -> Quantity[
          1.681100356597045339`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[67.6`3., "Kilometers"]],
       "Rosalind" -> Association[
        "Mass" -> Quantity[
          2.54712175241976567`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[36.`2., "Kilometers"]],
       "Cupid" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Belinda" -> Association[
        "Mass" -> Quantity[
          3.56597045338767194`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[40.3`3., "Kilometers"]],
       "Perdita" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Puck" -> Association[
        "Mass" -> Quantity[
          2.893230649366216176`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[81.`2., "Kilometers"]],
       "Mab" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Miranda" -> Association[
        "Mass" -> Quantity[
          6.5925504180276287794`1.9995659225206872*^19, "Kilograms"],
         "Radius" -> Quantity[235.8`4., "Kilometers"]],
       "Ariel" -> Association[
        "Mass" -> Quantity[
          1.352971142608851997243`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[578.9`4., "Kilometers"]],
       "Umbriel" -> Association[
        "Mass" -> Quantity[
          1.171676006113092205807`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[584.7`4., "Kilometers"]],
       "Titania" -> Association[
        "Mass" -> Quantity[
          3.525516166731593299572`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[788.9`4., "Kilometers"]],
       "Oberon" -> Association[
        "Mass" -> Quantity[
          3.013095202421263971712`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[761.4`4., "Kilometers"]],
       "Francisco" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[11.`2., "Kilometers"]],
       "Caliban" -> Association[
        "Mass" -> Quantity[
          7.34170387462167751`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[49.`2., "Kilometers"]],
       "Stephano" -> Association[
        "Mass" -> Quantity[
          5.99322765275239`0.9999565727231373*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Trinculo" -> Association[
        "Mass" -> Quantity[
          7.49153456594048`0.9999565727231373*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Sycorax" -> Association[
        "Mass" -> Quantity[
          5.378921818345269844`2.9956786262173627*^18, "Kilograms"],
         "Radius" -> Quantity[95.`2., "Kilometers"]],
       "Margaret" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prospero" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Setebos" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Ferdinand" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]]]],
   "Neptune" -> Association[
    "Radius" -> Quantity[24552.5`5., "Kilometers"],
     "Moons" -> Association[
      "Naiad" -> Association[
        "Mass" -> Quantity[
          1.94779898714452669`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[33.`2., "Kilometers"]],
       "Thalassa" -> Association[
        "Mass" -> Quantity[
          3.74576728297024363`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[41.`2., "Kilometers"]],
       "Despina" -> Association[
        "Mass" -> Quantity[
          2.09762967846333643`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[75.`2., "Kilometers"]],
       "Galatea" -> Association[
        "Mass" -> Quantity[
          3.745767282970243625`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[88.`2., "Kilometers"]],
       "Larissa" -> Association[
        "Mass" -> Quantity[
          4.944412813520721585`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[97.`2., "Kilometers"]],
       "Proteus" -> Association[
        "Mass" -> Quantity[
          5.0343112283120074311`2.995678626217367*^19, "Kilograms"],
         "Radius" -> Quantity[210.`3., "Kilometers"]],
       "Triton" -> Association[
        "Mass" -> Quantity[
          2.139432441341284348686`4.6989700043360205*^22,
           "Kilograms"],
         "Radius" -> Quantity[1353.4`5., "Kilometers"]],
       "Nereid" -> Association[
        "Mass" -> Quantity[
          3.0865122411674807466`2.9956786262173587*^19, "Kilograms"],
         "Radius" -> Quantity[170.`3., "Kilometers"]],
       "Halimede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Sao" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Laomedeia" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Psamathe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Neso" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Radius", "Moons"}, {
TypeSystem`Atom[
Quantity[1, "Kilometers"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Mass", "Radius"}, {
TypeSystem`Atom[
Quantity[1, "Kilograms"]],
TypeSystem`Atom[
Quantity[1, "Kilometers"]]}], TypeSystem`AnyLength]}], 8],
Association["ID" -> 165317787556689]], MaxItems -> 3]

Give a list to specify limits at multiple levels (rows, columns):

Dataset
&#10005

Dataset[Dataset[
Association[
  "Mercury" -> Association[
    "Radius" -> Quantity[2439.7`5., "Kilometers"],
     "Moons" -> Association[]],
   "Venus" -> Association[
    "Radius" -> Quantity[6051.85`5., "Kilometers"],
     "Moons" -> Association[]],
   "Earth" -> Association[
    "Radius" -> Quantity[
      6367.4446571000000000001`8.299868708313456, "Kilometers"],
     "Moons" -> Association[
      "Moon" -> Association[
        "Mass" -> Quantity[
          7.3459006322855173653772`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1737.5`5., "Kilometers"]]]],
   "Mars" -> Association[
    "Radius" -> Quantity[3385.595`4.298042852900571, "Kilometers"],
     "Moons" -> Association[
      "Phobos" -> Association[
        "Mass" -> Quantity[
          1.0724880884600402`3.9586073148417724*^16, "Kilograms"],
         "Radius" -> Quantity[11.1`3., "Kilometers"]],
       "Deimos" -> Association[
        "Mass" -> Quantity[
          1.468340774924336`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[6.2`2., "Kilometers"]]]],
   "Jupiter" -> Association[
    "Radius" -> Quantity[69173.`5., "Kilometers"],
     "Moons" -> Association[
      "Metis" -> Association[
        "Mass" -> Quantity[
          1.19864553055047796`0.9999565727231415*^17, "Kilograms"],
         "Radius" -> Quantity[21.5`3., "Kilometers"]],
       "Adrastea" -> Association[
        "Mass" -> Quantity[
          7.491534565940487`0.9999565727231415*^15, "Kilograms"],
         "Radius" -> Quantity[8.2`2., "Kilometers"]],
       "Amalthea" -> Association[
        "Mass" -> Quantity[
          2.067663540199574478`2.995678626217367*^18, "Kilograms"],
         "Radius" -> Quantity[83.45`4., "Kilometers"]],
       "Thebe" -> Association[
        "Mass" -> Quantity[
          1.49830691318809745`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[49.3`3., "Kilometers"]],
       "Io" -> Association[
        "Mass" -> Quantity[
          8.9297833448203530011087`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1821.6`5., "Kilometers"]],
       "Europa" -> Association[
        "Mass" -> Quantity[
          4.7986859848371340385365`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1560.8`5., "Kilometers"]],
       "Ganymede" -> Association[
        "Mass" -> Quantity[
          1.48150100386563183602529`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2631.2`5., "Kilometers"]],
       "Callisto" -> Association[
        "Mass" -> Quantity[
          1.07567783404752629528633`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2410.3`5., "Kilometers"]],
       "Themisto" -> Association[
        "Mass" -> Quantity[
          6.89221180066526`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Leda" -> Association[
        "Mass" -> Quantity[
          1.0937640466273112`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Himalia" -> Association[
        "Mass" -> Quantity[
          6.742381109346438525`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[85.`2., "Kilometers"]],
       "Lysithea" -> Association[
        "Mass" -> Quantity[
          6.2928890353900092`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[18.`2., "Kilometers"]],
       "Elara" -> Association[
        "Mass" -> Quantity[
          8.6901800964909652`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[43.`2., "Kilometers"]],
       "S/2000 J11" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carpo" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Euporie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J18" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Orthosie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Euanthe" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Harpalyke" -> Association[
        "Mass" -> Quantity[
          1.19864553055047`0.9999565727231415*^14, "Kilograms"],
         "Radius" -> Quantity[2.2`2., "Kilometers"]],
       "Praxidike" -> Association[
        "Mass" -> Quantity[
          4.34509004824548`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.4`2., "Kilometers"]],
       "Thyone" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J16" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Iocaste" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Mneme" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Hermippe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Thelxinoe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Helike" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Ananke" -> Association[
        "Mass" -> Quantity[
          2.9966138263761948`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[14.`2., "Kilometers"]],
       "S/2003 J15" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Eurydome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Arche" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Herse" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasithee" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J10" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Chaldene" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Isonoe" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Erinome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Kale" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Aitne" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Taygete" -> Association[
        "Mass" -> Quantity[
          1.6481376045069`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "S/2003 J9" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carme" -> Association[
        "Mass" -> Quantity[
          1.31851008360552575`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[23.`2., "Kilometers"]],
       "Sponde" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Megaclite" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.7`2., "Kilometers"]],
       "S/2003 J5" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J19" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J23" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Kalyke" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Kore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasiphae" -> Association[
        "Mass" -> Quantity[
          2.9966138263761949`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Eukelade" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J4" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Sinope" -> Association[
        "Mass" -> Quantity[
          7.4915345659404873`1.9995659225206786*^16, "Kilograms"],
         "Radius" -> Quantity[19.`2., "Kilometers"]],
       "Hegemone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Aoede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Kallichore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Autonoe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Callirrhoe" -> Association[
        "Mass" -> Quantity[
          8.69018009649097`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.3`2., "Kilometers"]],
       "Cyllene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J2" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]]]],
   "Saturn" -> Association[
    "Radius" -> Quantity[57316.`5., "Kilometers"],
     "Moons" -> Association[
      "Tarqeq" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Pan" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.8`3., "Kilometers"]],
       "Daphnis" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.9`2., "Kilometers"]],
       "Atlas" -> Association[
        "Mass" -> Quantity[
          2.097629678463337`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prometheus" -> Association[
        "Mass" -> Quantity[
          1.86689041383236942`3.9586073148417764*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Pandora" -> Association[
        "Mass" -> Quantity[
          1.49081537862215657`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[40.6`3., "Kilometers"]],
       "Epimetheus" -> Association[
        "Mass" -> Quantity[
          5.25905726529022205`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[58.3`3., "Kilometers"]],
       "Janus" -> Association[
        "Mass" -> Quantity[
          1.896856552096131371`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[90.4`3., "Kilometers"]],
       "Aegaeon" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[0.25`2., "Kilometers"]],
       "Mimas" -> Association[
        "Mass" -> Quantity[
          3.7907164903658865482`3.9586073148417764*^19, "Kilograms"],
         "Radius" -> Quantity[198.8`4., "Kilometers"]],
       "Methone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Anthe" -> Association[
        "Mass" -> Quantity[5.`1.*^12, "Kilograms"],
         "Radius" -> Quantity[1.`1., "Kilometers"]],
       "Pallene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Enceladus" -> Association[
        "Mass" -> Quantity[
          1.08027928440861826137`3.9586073148417764*^20, "Kilograms"],
          "Radius" -> Quantity[252.3`4., "Kilometers"]],
       "Tethys" -> Association[
        "Mass" -> Quantity[
          6.17452278924814959099`4.6989700043360205*^20, "Kilograms"],
          "Radius" -> Quantity[536.3`4., "Kilometers"]],
       "Calypso" -> Association[
        "Mass" -> Quantity[
          3.595936591651433`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.5`2., "Kilometers"]],
       "Telesto" -> Association[
        "Mass" -> Quantity[
          7.191873183302868`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.`2., "Kilometers"]],
       "Polydeuces" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.2`2., "Kilometers"]],
       "Dione" -> Association[
        "Mass" -> Quantity[
          1.095457133439213688532`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[562.5`4., "Kilometers"]],
       "Helene" -> Association[
        "Mass" -> Quantity[
          2.5471217524197656`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "Rhea" -> Association[
        "Mass" -> Quantity[
          2.308441461148901741032`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[764.5`4., "Kilometers"]],
       "Titan" -> Association[
        "Mass" -> Quantity[
          1.34520841449162446435527`4.958607314841778*^23,
           "Kilograms"],
         "Radius" -> Quantity[2575.5`5., "Kilometers"]],
       "Hyperion" -> Association[
        "Mass" -> Quantity[
          5.543735578795960565`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[133.`4., "Kilometers"]],
       "Iapetus" -> Association[
        "Mass" -> Quantity[
          1.805459830391657427108`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[734.5`4., "Kilometers"]],
       "Kiviuq" -> Association[
        "Mass" -> Quantity[
          3.296275209013815`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[8.`1., "Kilometers"]],
       "Ijiraq" -> Association[
        "Mass" -> Quantity[
          1.198645530550478`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[6.`1., "Kilometers"]],
       "Phoebe" -> Association[
        "Mass" -> Quantity[
          8.287135536843366995`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[106.6`4., "Kilometers"]],
       "Paaliaq" -> Association[
        "Mass" -> Quantity[
          8.240688022534537`1.999565922520683*^15, "Kilograms"],
         "Radius" -> Quantity[11.`3., "Kilometers"]],
       "Skathi" -> Association[
        "Mass" -> Quantity[
          3.146444517695`1.9995659225206786*^14, "Kilograms"],
         "Radius" -> Quantity[4.`1., "Kilometers"]],
       "Albiorix" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "S/2007 S2" -> Association[
        "Mass" -> Quantity[1.5`2.*^14, "Kilograms"],
         "Radius" -> Quantity[3.`1., "Kilometers"]],
       "Bebhionn" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Erriapo" -> Association[
        "Mass" -> Quantity[
          7.64136525725929`1.9995659225206914*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Siarnaq" -> Association[
        "Mass" -> Quantity[
          3.8955979742890535`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Skoll" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Tarvos" -> Association[
        "Mass" -> Quantity[
          2.696952443738576`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[7.5`2., "Kilometers"]],
       "Greip" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S13" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Hyrrokkin" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Mundilfari" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2006 S1" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Jarnsaxa" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Narvi" -> Association[
        "Mass" -> Quantity[
          3.44610590033262`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Bergelmir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S17" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Suttungr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Hati" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Bestla" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Farbauti" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Thrymr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2007 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "Aegir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S7" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2006 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Kari" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fenrir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Surtur" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Ymir" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.`1., "Kilometers"]],
       "Loge" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fornjot" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]]]],
   "Uranus" -> Association[
    "Radius" -> Quantity[25266.`5., "Kilometers"],
     "Moons" -> Association[
      "Cordelia" -> Association[
        "Mass" -> Quantity[
          4.4949207395642923`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[20.1`3., "Kilometers"]],
       "Ophelia" -> Association[
        "Mass" -> Quantity[
          5.3939048874771508`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[21.4`3., "Kilometers"]],
       "Bianca" -> Association[
        "Mass" -> Quantity[
          9.2895028617662042`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[25.7`3., "Kilometers"]],
       "Cressida" -> Association[
        "Mass" -> Quantity[
          3.43112283120074311`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[39.8`3., "Kilometers"]],
       "Desdemona" -> Association[
        "Mass" -> Quantity[
          1.78298522669383596`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[32.`3., "Kilometers"]],
       "Juliet" -> Association[
        "Mass" -> Quantity[
          5.57370171705972251`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Portia" -> Association[
        "Mass" -> Quantity[
          1.681100356597045339`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[67.6`3., "Kilometers"]],
       "Rosalind" -> Association[
        "Mass" -> Quantity[
          2.54712175241976567`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[36.`2., "Kilometers"]],
       "Cupid" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Belinda" -> Association[
        "Mass" -> Quantity[
          3.56597045338767194`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[40.3`3., "Kilometers"]],
       "Perdita" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Puck" -> Association[
        "Mass" -> Quantity[
          2.893230649366216176`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[81.`2., "Kilometers"]],
       "Mab" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Miranda" -> Association[
        "Mass" -> Quantity[
          6.5925504180276287794`1.9995659225206872*^19, "Kilograms"],
         "Radius" -> Quantity[235.8`4., "Kilometers"]],
       "Ariel" -> Association[
        "Mass" -> Quantity[
          1.352971142608851997243`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[578.9`4., "Kilometers"]],
       "Umbriel" -> Association[
        "Mass" -> Quantity[
          1.171676006113092205807`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[584.7`4., "Kilometers"]],
       "Titania" -> Association[
        "Mass" -> Quantity[
          3.525516166731593299572`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[788.9`4., "Kilometers"]],
       "Oberon" -> Association[
        "Mass" -> Quantity[
          3.013095202421263971712`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[761.4`4., "Kilometers"]],
       "Francisco" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[11.`2., "Kilometers"]],
       "Caliban" -> Association[
        "Mass" -> Quantity[
          7.34170387462167751`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[49.`2., "Kilometers"]],
       "Stephano" -> Association[
        "Mass" -> Quantity[
          5.99322765275239`0.9999565727231373*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Trinculo" -> Association[
        "Mass" -> Quantity[
          7.49153456594048`0.9999565727231373*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Sycorax" -> Association[
        "Mass" -> Quantity[
          5.378921818345269844`2.9956786262173627*^18, "Kilograms"],
         "Radius" -> Quantity[95.`2., "Kilometers"]],
       "Margaret" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prospero" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Setebos" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Ferdinand" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]]]],
   "Neptune" -> Association[
    "Radius" -> Quantity[24552.5`5., "Kilometers"],
     "Moons" -> Association[
      "Naiad" -> Association[
        "Mass" -> Quantity[
          1.94779898714452669`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[33.`2., "Kilometers"]],
       "Thalassa" -> Association[
        "Mass" -> Quantity[
          3.74576728297024363`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[41.`2., "Kilometers"]],
       "Despina" -> Association[
        "Mass" -> Quantity[
          2.09762967846333643`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[75.`2., "Kilometers"]],
       "Galatea" -> Association[
        "Mass" -> Quantity[
          3.745767282970243625`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[88.`2., "Kilometers"]],
       "Larissa" -> Association[
        "Mass" -> Quantity[
          4.944412813520721585`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[97.`2., "Kilometers"]],
       "Proteus" -> Association[
        "Mass" -> Quantity[
          5.0343112283120074311`2.995678626217367*^19, "Kilograms"],
         "Radius" -> Quantity[210.`3., "Kilometers"]],
       "Triton" -> Association[
        "Mass" -> Quantity[
          2.139432441341284348686`4.6989700043360205*^22,
           "Kilograms"],
         "Radius" -> Quantity[1353.4`5., "Kilometers"]],
       "Nereid" -> Association[
        "Mass" -> Quantity[
          3.0865122411674807466`2.9956786262173587*^19, "Kilograms"],
         "Radius" -> Quantity[170.`3., "Kilometers"]],
       "Halimede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Sao" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Laomedeia" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Psamathe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Neso" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Radius", "Moons"}, {
TypeSystem`Atom[
Quantity[1, "Kilometers"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Mass", "Radius"}, {
TypeSystem`Atom[
Quantity[1, "Kilograms"]],
TypeSystem`Atom[
Quantity[1, "Kilometers"]]}], TypeSystem`AnyLength]}], 8],
Association["ID" -> 165317787556689]], MaxItems -> {3, 1}]

You can specify limits at any depth. Here, the number of each planets moons displayed is limited to 1:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Mercury" -> Association[
    "Radius" -> Quantity[2439.7`5., "Kilometers"],
     "Moons" -> Association[]],
   "Venus" -> Association[
    "Radius" -> Quantity[6051.85`5., "Kilometers"],
     "Moons" -> Association[]],
   "Earth" -> Association[
    "Radius" -> Quantity[
      6367.4446571000000000001`8.299868708313456, "Kilometers"],
     "Moons" -> Association[
      "Moon" -> Association[
        "Mass" -> Quantity[
          7.3459006322855173653772`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1737.5`5., "Kilometers"]]]],
   "Mars" -> Association[
    "Radius" -> Quantity[3385.595`4.298042852900571, "Kilometers"],
     "Moons" -> Association[
      "Phobos" -> Association[
        "Mass" -> Quantity[
          1.0724880884600402`3.9586073148417724*^16, "Kilograms"],
         "Radius" -> Quantity[11.1`3., "Kilometers"]],
       "Deimos" -> Association[
        "Mass" -> Quantity[
          1.468340774924336`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[6.2`2., "Kilometers"]]]],
   "Jupiter" -> Association[
    "Radius" -> Quantity[69173.`5., "Kilometers"],
     "Moons" -> Association[
      "Metis" -> Association[
        "Mass" -> Quantity[
          1.19864553055047796`0.9999565727231415*^17, "Kilograms"],
         "Radius" -> Quantity[21.5`3., "Kilometers"]],
       "Adrastea" -> Association[
        "Mass" -> Quantity[
          7.491534565940487`0.9999565727231415*^15, "Kilograms"],
         "Radius" -> Quantity[8.2`2., "Kilometers"]],
       "Amalthea" -> Association[
        "Mass" -> Quantity[
          2.067663540199574478`2.995678626217367*^18, "Kilograms"],
         "Radius" -> Quantity[83.45`4., "Kilometers"]],
       "Thebe" -> Association[
        "Mass" -> Quantity[
          1.49830691318809745`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[49.3`3., "Kilometers"]],
       "Io" -> Association[
        "Mass" -> Quantity[
          8.9297833448203530011087`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1821.6`5., "Kilometers"]],
       "Europa" -> Association[
        "Mass" -> Quantity[
          4.7986859848371340385365`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1560.8`5., "Kilometers"]],
       "Ganymede" -> Association[
        "Mass" -> Quantity[
          1.48150100386563183602529`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2631.2`5., "Kilometers"]],
       "Callisto" -> Association[
        "Mass" -> Quantity[
          1.07567783404752629528633`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2410.3`5., "Kilometers"]],
       "Themisto" -> Association[
        "Mass" -> Quantity[
          6.89221180066526`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Leda" -> Association[
        "Mass" -> Quantity[
          1.0937640466273112`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Himalia" -> Association[
        "Mass" -> Quantity[
          6.742381109346438525`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[85.`2., "Kilometers"]],
       "Lysithea" -> Association[
        "Mass" -> Quantity[
          6.2928890353900092`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[18.`2., "Kilometers"]],
       "Elara" -> Association[
        "Mass" -> Quantity[
          8.6901800964909652`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[43.`2., "Kilometers"]],
       "S/2000 J11" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carpo" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Euporie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J18" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Orthosie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Euanthe" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Harpalyke" -> Association[
        "Mass" -> Quantity[
          1.19864553055047`0.9999565727231415*^14, "Kilograms"],
         "Radius" -> Quantity[2.2`2., "Kilometers"]],
       "Praxidike" -> Association[
        "Mass" -> Quantity[
          4.34509004824548`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.4`2., "Kilometers"]],
       "Thyone" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J16" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Iocaste" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Mneme" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Hermippe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Thelxinoe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Helike" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Ananke" -> Association[
        "Mass" -> Quantity[
          2.9966138263761948`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[14.`2., "Kilometers"]],
       "S/2003 J15" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Eurydome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Arche" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Herse" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasithee" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J10" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Chaldene" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Isonoe" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Erinome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Kale" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Aitne" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Taygete" -> Association[
        "Mass" -> Quantity[
          1.6481376045069`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "S/2003 J9" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carme" -> Association[
        "Mass" -> Quantity[
          1.31851008360552575`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[23.`2., "Kilometers"]],
       "Sponde" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Megaclite" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.7`2., "Kilometers"]],
       "S/2003 J5" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J19" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J23" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Kalyke" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Kore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasiphae" -> Association[
        "Mass" -> Quantity[
          2.9966138263761949`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Eukelade" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J4" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Sinope" -> Association[
        "Mass" -> Quantity[
          7.4915345659404873`1.9995659225206786*^16, "Kilograms"],
         "Radius" -> Quantity[19.`2., "Kilometers"]],
       "Hegemone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Aoede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Kallichore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Autonoe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Callirrhoe" -> Association[
        "Mass" -> Quantity[
          8.69018009649097`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.3`2., "Kilometers"]],
       "Cyllene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J2" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]]]],
   "Saturn" -> Association[
    "Radius" -> Quantity[57316.`5., "Kilometers"],
     "Moons" -> Association[
      "Tarqeq" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Pan" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.8`3., "Kilometers"]],
       "Daphnis" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.9`2., "Kilometers"]],
       "Atlas" -> Association[
        "Mass" -> Quantity[
          2.097629678463337`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prometheus" -> Association[
        "Mass" -> Quantity[
          1.86689041383236942`3.9586073148417764*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Pandora" -> Association[
        "Mass" -> Quantity[
          1.49081537862215657`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[40.6`3., "Kilometers"]],
       "Epimetheus" -> Association[
        "Mass" -> Quantity[
          5.25905726529022205`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[58.3`3., "Kilometers"]],
       "Janus" -> Association[
        "Mass" -> Quantity[
          1.896856552096131371`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[90.4`3., "Kilometers"]],
       "Aegaeon" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[0.25`2., "Kilometers"]],
       "Mimas" -> Association[
        "Mass" -> Quantity[
          3.7907164903658865482`3.9586073148417764*^19, "Kilograms"],
         "Radius" -> Quantity[198.8`4., "Kilometers"]],
       "Methone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Anthe" -> Association[
        "Mass" -> Quantity[5.`1.*^12, "Kilograms"],
         "Radius" -> Quantity[1.`1., "Kilometers"]],
       "Pallene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Enceladus" -> Association[
        "Mass" -> Quantity[
          1.08027928440861826137`3.9586073148417764*^20, "Kilograms"],
          "Radius" -> Quantity[252.3`4., "Kilometers"]],
       "Tethys" -> Association[
        "Mass" -> Quantity[
          6.17452278924814959099`4.6989700043360205*^20, "Kilograms"],
          "Radius" -> Quantity[536.3`4., "Kilometers"]],
       "Calypso" -> Association[
        "Mass" -> Quantity[
          3.595936591651433`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.5`2., "Kilometers"]],
       "Telesto" -> Association[
        "Mass" -> Quantity[
          7.191873183302868`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.`2., "Kilometers"]],
       "Polydeuces" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.2`2., "Kilometers"]],
       "Dione" -> Association[
        "Mass" -> Quantity[
          1.095457133439213688532`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[562.5`4., "Kilometers"]],
       "Helene" -> Association[
        "Mass" -> Quantity[
          2.5471217524197656`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "Rhea" -> Association[
        "Mass" -> Quantity[
          2.308441461148901741032`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[764.5`4., "Kilometers"]],
       "Titan" -> Association[
        "Mass" -> Quantity[
          1.34520841449162446435527`4.958607314841778*^23,
           "Kilograms"],
         "Radius" -> Quantity[2575.5`5., "Kilometers"]],
       "Hyperion" -> Association[
        "Mass" -> Quantity[
          5.543735578795960565`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[133.`4., "Kilometers"]],
       "Iapetus" -> Association[
        "Mass" -> Quantity[
          1.805459830391657427108`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[734.5`4., "Kilometers"]],
       "Kiviuq" -> Association[
        "Mass" -> Quantity[
          3.296275209013815`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[8.`1., "Kilometers"]],
       "Ijiraq" -> Association[
        "Mass" -> Quantity[
          1.198645530550478`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[6.`1., "Kilometers"]],
       "Phoebe" -> Association[
        "Mass" -> Quantity[
          8.287135536843366995`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[106.6`4., "Kilometers"]],
       "Paaliaq" -> Association[
        "Mass" -> Quantity[
          8.240688022534537`1.999565922520683*^15, "Kilograms"],
         "Radius" -> Quantity[11.`3., "Kilometers"]],
       "Skathi" -> Association[
        "Mass" -> Quantity[
          3.146444517695`1.9995659225206786*^14, "Kilograms"],
         "Radius" -> Quantity[4.`1., "Kilometers"]],
       "Albiorix" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "S/2007 S2" -> Association[
        "Mass" -> Quantity[1.5`2.*^14, "Kilograms"],
         "Radius" -> Quantity[3.`1., "Kilometers"]],
       "Bebhionn" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Erriapo" -> Association[
        "Mass" -> Quantity[
          7.64136525725929`1.9995659225206914*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Siarnaq" -> Association[
        "Mass" -> Quantity[
          3.8955979742890535`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Skoll" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Tarvos" -> Association[
        "Mass" -> Quantity[
          2.696952443738576`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[7.5`2., "Kilometers"]],
       "Greip" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S13" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Hyrrokkin" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Mundilfari" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2006 S1" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Jarnsaxa" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Narvi" -> Association[
        "Mass" -> Quantity[
          3.44610590033262`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Bergelmir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S17" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Suttungr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Hati" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Bestla" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Farbauti" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Thrymr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2007 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "Aegir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S7" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2006 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Kari" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fenrir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Surtur" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Ymir" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.`1., "Kilometers"]],
       "Loge" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fornjot" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]]]],
   "Uranus" -> Association[
    "Radius" -> Quantity[25266.`5., "Kilometers"],
     "Moons" -> Association[
      "Cordelia" -> Association[
        "Mass" -> Quantity[
          4.4949207395642923`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[20.1`3., "Kilometers"]],
       "Ophelia" -> Association[
        "Mass" -> Quantity[
          5.3939048874771508`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[21.4`3., "Kilometers"]],
       "Bianca" -> Association[
        "Mass" -> Quantity[
          9.2895028617662042`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[25.7`3., "Kilometers"]],
       "Cressida" -> Association[
        "Mass" -> Quantity[
          3.43112283120074311`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[39.8`3., "Kilometers"]],
       "Desdemona" -> Association[
        "Mass" -> Quantity[
          1.78298522669383596`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[32.`3., "Kilometers"]],
       "Juliet" -> Association[
        "Mass" -> Quantity[
          5.57370171705972251`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Portia" -> Association[
        "Mass" -> Quantity[
          1.681100356597045339`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[67.6`3., "Kilometers"]],
       "Rosalind" -> Association[
        "Mass" -> Quantity[
          2.54712175241976567`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[36.`2., "Kilometers"]],
       "Cupid" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Belinda" -> Association[
        "Mass" -> Quantity[
          3.56597045338767194`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[40.3`3., "Kilometers"]],
       "Perdita" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Puck" -> Association[
        "Mass" -> Quantity[
          2.893230649366216176`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[81.`2., "Kilometers"]],
       "Mab" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Miranda" -> Association[
        "Mass" -> Quantity[
          6.5925504180276287794`1.9995659225206872*^19, "Kilograms"],
         "Radius" -> Quantity[235.8`4., "Kilometers"]],
       "Ariel" -> Association[
        "Mass" -> Quantity[
          1.352971142608851997243`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[578.9`4., "Kilometers"]],
       "Umbriel" -> Association[
        "Mass" -> Quantity[
          1.171676006113092205807`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[584.7`4., "Kilometers"]],
       "Titania" -> Association[
        "Mass" -> Quantity[
          3.525516166731593299572`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[788.9`4., "Kilometers"]],
       "Oberon" -> Association[
        "Mass" -> Quantity[
          3.013095202421263971712`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[761.4`4., "Kilometers"]],
       "Francisco" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[11.`2., "Kilometers"]],
       "Caliban" -> Association[
        "Mass" -> Quantity[
          7.34170387462167751`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[49.`2., "Kilometers"]],
       "Stephano" -> Association[
        "Mass" -> Quantity[
          5.99322765275239`0.9999565727231373*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Trinculo" -> Association[
        "Mass" -> Quantity[
          7.49153456594048`0.9999565727231373*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Sycorax" -> Association[
        "Mass" -> Quantity[
          5.378921818345269844`2.9956786262173627*^18, "Kilograms"],
         "Radius" -> Quantity[95.`2., "Kilometers"]],
       "Margaret" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prospero" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Setebos" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Ferdinand" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]]]],
   "Neptune" -> Association[
    "Radius" -> Quantity[24552.5`5., "Kilometers"],
     "Moons" -> Association[
      "Naiad" -> Association[
        "Mass" -> Quantity[
          1.94779898714452669`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[33.`2., "Kilometers"]],
       "Thalassa" -> Association[
        "Mass" -> Quantity[
          3.74576728297024363`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[41.`2., "Kilometers"]],
       "Despina" -> Association[
        "Mass" -> Quantity[
          2.09762967846333643`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[75.`2., "Kilometers"]],
       "Galatea" -> Association[
        "Mass" -> Quantity[
          3.745767282970243625`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[88.`2., "Kilometers"]],
       "Larissa" -> Association[
        "Mass" -> Quantity[
          4.944412813520721585`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[97.`2., "Kilometers"]],
       "Proteus" -> Association[
        "Mass" -> Quantity[
          5.0343112283120074311`2.995678626217367*^19, "Kilograms"],
         "Radius" -> Quantity[210.`3., "Kilometers"]],
       "Triton" -> Association[
        "Mass" -> Quantity[
          2.139432441341284348686`4.6989700043360205*^22,
           "Kilograms"],
         "Radius" -> Quantity[1353.4`5., "Kilometers"]],
       "Nereid" -> Association[
        "Mass" -> Quantity[
          3.0865122411674807466`2.9956786262173587*^19, "Kilograms"],
         "Radius" -> Quantity[170.`3., "Kilometers"]],
       "Halimede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Sao" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Laomedeia" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Psamathe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Neso" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Radius", "Moons"}, {
TypeSystem`Atom[
Quantity[1, "Kilometers"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Mass", "Radius"}, {
TypeSystem`Atom[
Quantity[1, "Kilograms"]],
TypeSystem`Atom[
Quantity[1, "Kilometers"]]}], TypeSystem`AnyLength]}], 8],
Association["ID" -> 165317787556689]],
 MaxItems -> {Automatic, Automatic, 1}]

DatasetDisplayPanel

When you click a Dataset header, you drill down to that level in the dataset:

alt

Specify the initial drill-down position directly with DatasetDisplayPanel, giving the path to drill down to:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Mercury" -> Association[
    "Radius" -> Quantity[2439.7`5., "Kilometers"],
     "Moons" -> Association[]],
   "Venus" -> Association[
    "Radius" -> Quantity[6051.85`5., "Kilometers"],
     "Moons" -> Association[]],
   "Earth" -> Association[
    "Radius" -> Quantity[
      6367.4446571000000000001`8.299868708313456, "Kilometers"],
     "Moons" -> Association[
      "Moon" -> Association[
        "Mass" -> Quantity[
          7.3459006322855173653772`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1737.5`5., "Kilometers"]]]],
   "Mars" -> Association[
    "Radius" -> Quantity[3385.595`4.298042852900571, "Kilometers"],
     "Moons" -> Association[
      "Phobos" -> Association[
        "Mass" -> Quantity[
          1.0724880884600402`3.9586073148417724*^16, "Kilograms"],
         "Radius" -> Quantity[11.1`3., "Kilometers"]],
       "Deimos" -> Association[
        "Mass" -> Quantity[
          1.468340774924336`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[6.2`2., "Kilometers"]]]],
   "Jupiter" -> Association[
    "Radius" -> Quantity[69173.`5., "Kilometers"],
     "Moons" -> Association[
      "Metis" -> Association[
        "Mass" -> Quantity[
          1.19864553055047796`0.9999565727231415*^17, "Kilograms"],
         "Radius" -> Quantity[21.5`3., "Kilometers"]],
       "Adrastea" -> Association[
        "Mass" -> Quantity[
          7.491534565940487`0.9999565727231415*^15, "Kilograms"],
         "Radius" -> Quantity[8.2`2., "Kilometers"]],
       "Amalthea" -> Association[
        "Mass" -> Quantity[
          2.067663540199574478`2.995678626217367*^18, "Kilograms"],
         "Radius" -> Quantity[83.45`4., "Kilometers"]],
       "Thebe" -> Association[
        "Mass" -> Quantity[
          1.49830691318809745`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[49.3`3., "Kilometers"]],
       "Io" -> Association[
        "Mass" -> Quantity[
          8.9297833448203530011087`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1821.6`5., "Kilometers"]],
       "Europa" -> Association[
        "Mass" -> Quantity[
          4.7986859848371340385365`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1560.8`5., "Kilometers"]],
       "Ganymede" -> Association[
        "Mass" -> Quantity[
          1.48150100386563183602529`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2631.2`5., "Kilometers"]],
       "Callisto" -> Association[
        "Mass" -> Quantity[
          1.07567783404752629528633`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2410.3`5., "Kilometers"]],
       "Themisto" -> Association[
        "Mass" -> Quantity[
          6.89221180066526`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Leda" -> Association[
        "Mass" -> Quantity[
          1.0937640466273112`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Himalia" -> Association[
        "Mass" -> Quantity[
          6.742381109346438525`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[85.`2., "Kilometers"]],
       "Lysithea" -> Association[
        "Mass" -> Quantity[
          6.2928890353900092`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[18.`2., "Kilometers"]],
       "Elara" -> Association[
        "Mass" -> Quantity[
          8.6901800964909652`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[43.`2., "Kilometers"]],
       "S/2000 J11" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carpo" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Euporie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J18" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Orthosie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Euanthe" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Harpalyke" -> Association[
        "Mass" -> Quantity[
          1.19864553055047`0.9999565727231415*^14, "Kilograms"],
         "Radius" -> Quantity[2.2`2., "Kilometers"]],
       "Praxidike" -> Association[
        "Mass" -> Quantity[
          4.34509004824548`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.4`2., "Kilometers"]],
       "Thyone" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J16" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Iocaste" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Mneme" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Hermippe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Thelxinoe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Helike" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Ananke" -> Association[
        "Mass" -> Quantity[
          2.9966138263761948`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[14.`2., "Kilometers"]],
       "S/2003 J15" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Eurydome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Arche" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Herse" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasithee" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J10" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Chaldene" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Isonoe" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Erinome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Kale" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Aitne" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Taygete" -> Association[
        "Mass" -> Quantity[
          1.6481376045069`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "S/2003 J9" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carme" -> Association[
        "Mass" -> Quantity[
          1.31851008360552575`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[23.`2., "Kilometers"]],
       "Sponde" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Megaclite" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.7`2., "Kilometers"]],
       "S/2003 J5" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J19" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J23" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Kalyke" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Kore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasiphae" -> Association[
        "Mass" -> Quantity[
          2.9966138263761949`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Eukelade" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J4" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Sinope" -> Association[
        "Mass" -> Quantity[
          7.4915345659404873`1.9995659225206786*^16, "Kilograms"],
         "Radius" -> Quantity[19.`2., "Kilometers"]],
       "Hegemone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Aoede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Kallichore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Autonoe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Callirrhoe" -> Association[
        "Mass" -> Quantity[
          8.69018009649097`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.3`2., "Kilometers"]],
       "Cyllene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J2" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]]]],
   "Saturn" -> Association[
    "Radius" -> Quantity[57316.`5., "Kilometers"],
     "Moons" -> Association[
      "Tarqeq" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Pan" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.8`3., "Kilometers"]],
       "Daphnis" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.9`2., "Kilometers"]],
       "Atlas" -> Association[
        "Mass" -> Quantity[
          2.097629678463337`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prometheus" -> Association[
        "Mass" -> Quantity[
          1.86689041383236942`3.9586073148417764*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Pandora" -> Association[
        "Mass" -> Quantity[
          1.49081537862215657`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[40.6`3., "Kilometers"]],
       "Epimetheus" -> Association[
        "Mass" -> Quantity[
          5.25905726529022205`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[58.3`3., "Kilometers"]],
       "Janus" -> Association[
        "Mass" -> Quantity[
          1.896856552096131371`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[90.4`3., "Kilometers"]],
       "Aegaeon" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[0.25`2., "Kilometers"]],
       "Mimas" -> Association[
        "Mass" -> Quantity[
          3.7907164903658865482`3.9586073148417764*^19, "Kilograms"],
         "Radius" -> Quantity[198.8`4., "Kilometers"]],
       "Methone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Anthe" -> Association[
        "Mass" -> Quantity[5.`1.*^12, "Kilograms"],
         "Radius" -> Quantity[1.`1., "Kilometers"]],
       "Pallene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Enceladus" -> Association[
        "Mass" -> Quantity[
          1.08027928440861826137`3.9586073148417764*^20, "Kilograms"],
          "Radius" -> Quantity[252.3`4., "Kilometers"]],
       "Tethys" -> Association[
        "Mass" -> Quantity[
          6.17452278924814959099`4.6989700043360205*^20, "Kilograms"],
          "Radius" -> Quantity[536.3`4., "Kilometers"]],
       "Calypso" -> Association[
        "Mass" -> Quantity[
          3.595936591651433`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.5`2., "Kilometers"]],
       "Telesto" -> Association[
        "Mass" -> Quantity[
          7.191873183302868`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.`2., "Kilometers"]],
       "Polydeuces" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.2`2., "Kilometers"]],
       "Dione" -> Association[
        "Mass" -> Quantity[
          1.095457133439213688532`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[562.5`4., "Kilometers"]],
       "Helene" -> Association[
        "Mass" -> Quantity[
          2.5471217524197656`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "Rhea" -> Association[
        "Mass" -> Quantity[
          2.308441461148901741032`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[764.5`4., "Kilometers"]],
       "Titan" -> Association[
        "Mass" -> Quantity[
          1.34520841449162446435527`4.958607314841778*^23,
           "Kilograms"],
         "Radius" -> Quantity[2575.5`5., "Kilometers"]],
       "Hyperion" -> Association[
        "Mass" -> Quantity[
          5.543735578795960565`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[133.`4., "Kilometers"]],
       "Iapetus" -> Association[
        "Mass" -> Quantity[
          1.805459830391657427108`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[734.5`4., "Kilometers"]],
       "Kiviuq" -> Association[
        "Mass" -> Quantity[
          3.296275209013815`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[8.`1., "Kilometers"]],
       "Ijiraq" -> Association[
        "Mass" -> Quantity[
          1.198645530550478`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[6.`1., "Kilometers"]],
       "Phoebe" -> Association[
        "Mass" -> Quantity[
          8.287135536843366995`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[106.6`4., "Kilometers"]],
       "Paaliaq" -> Association[
        "Mass" -> Quantity[
          8.240688022534537`1.999565922520683*^15, "Kilograms"],
         "Radius" -> Quantity[11.`3., "Kilometers"]],
       "Skathi" -> Association[
        "Mass" -> Quantity[
          3.146444517695`1.9995659225206786*^14, "Kilograms"],
         "Radius" -> Quantity[4.`1., "Kilometers"]],
       "Albiorix" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "S/2007 S2" -> Association[
        "Mass" -> Quantity[1.5`2.*^14, "Kilograms"],
         "Radius" -> Quantity[3.`1., "Kilometers"]],
       "Bebhionn" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Erriapo" -> Association[
        "Mass" -> Quantity[
          7.64136525725929`1.9995659225206914*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Siarnaq" -> Association[
        "Mass" -> Quantity[
          3.8955979742890535`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Skoll" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Tarvos" -> Association[
        "Mass" -> Quantity[
          2.696952443738576`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[7.5`2., "Kilometers"]],
       "Greip" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S13" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Hyrrokkin" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Mundilfari" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2006 S1" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Jarnsaxa" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Narvi" -> Association[
        "Mass" -> Quantity[
          3.44610590033262`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Bergelmir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S17" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Suttungr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Hati" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Bestla" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Farbauti" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Thrymr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2007 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "Aegir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S7" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2006 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Kari" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fenrir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Surtur" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Ymir" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.`1., "Kilometers"]],
       "Loge" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fornjot" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]]]],
   "Uranus" -> Association[
    "Radius" -> Quantity[25266.`5., "Kilometers"],
     "Moons" -> Association[
      "Cordelia" -> Association[
        "Mass" -> Quantity[
          4.4949207395642923`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[20.1`3., "Kilometers"]],
       "Ophelia" -> Association[
        "Mass" -> Quantity[
          5.3939048874771508`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[21.4`3., "Kilometers"]],
       "Bianca" -> Association[
        "Mass" -> Quantity[
          9.2895028617662042`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[25.7`3., "Kilometers"]],
       "Cressida" -> Association[
        "Mass" -> Quantity[
          3.43112283120074311`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[39.8`3., "Kilometers"]],
       "Desdemona" -> Association[
        "Mass" -> Quantity[
          1.78298522669383596`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[32.`3., "Kilometers"]],
       "Juliet" -> Association[
        "Mass" -> Quantity[
          5.57370171705972251`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Portia" -> Association[
        "Mass" -> Quantity[
          1.681100356597045339`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[67.6`3., "Kilometers"]],
       "Rosalind" -> Association[
        "Mass" -> Quantity[
          2.54712175241976567`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[36.`2., "Kilometers"]],
       "Cupid" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Belinda" -> Association[
        "Mass" -> Quantity[
          3.56597045338767194`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[40.3`3., "Kilometers"]],
       "Perdita" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Puck" -> Association[
        "Mass" -> Quantity[
          2.893230649366216176`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[81.`2., "Kilometers"]],
       "Mab" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Miranda" -> Association[
        "Mass" -> Quantity[
          6.5925504180276287794`1.9995659225206872*^19, "Kilograms"],
         "Radius" -> Quantity[235.8`4., "Kilometers"]],
       "Ariel" -> Association[
        "Mass" -> Quantity[
          1.352971142608851997243`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[578.9`4., "Kilometers"]],
       "Umbriel" -> Association[
        "Mass" -> Quantity[
          1.171676006113092205807`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[584.7`4., "Kilometers"]],
       "Titania" -> Association[
        "Mass" -> Quantity[
          3.525516166731593299572`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[788.9`4., "Kilometers"]],
       "Oberon" -> Association[
        "Mass" -> Quantity[
          3.013095202421263971712`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[761.4`4., "Kilometers"]],
       "Francisco" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[11.`2., "Kilometers"]],
       "Caliban" -> Association[
        "Mass" -> Quantity[
          7.34170387462167751`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[49.`2., "Kilometers"]],
       "Stephano" -> Association[
        "Mass" -> Quantity[
          5.99322765275239`0.9999565727231373*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Trinculo" -> Association[
        "Mass" -> Quantity[
          7.49153456594048`0.9999565727231373*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Sycorax" -> Association[
        "Mass" -> Quantity[
          5.378921818345269844`2.9956786262173627*^18, "Kilograms"],
         "Radius" -> Quantity[95.`2., "Kilometers"]],
       "Margaret" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prospero" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Setebos" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Ferdinand" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]]]],
   "Neptune" -> Association[
    "Radius" -> Quantity[24552.5`5., "Kilometers"],
     "Moons" -> Association[
      "Naiad" -> Association[
        "Mass" -> Quantity[
          1.94779898714452669`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[33.`2., "Kilometers"]],
       "Thalassa" -> Association[
        "Mass" -> Quantity[
          3.74576728297024363`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[41.`2., "Kilometers"]],
       "Despina" -> Association[
        "Mass" -> Quantity[
          2.09762967846333643`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[75.`2., "Kilometers"]],
       "Galatea" -> Association[
        "Mass" -> Quantity[
          3.745767282970243625`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[88.`2., "Kilometers"]],
       "Larissa" -> Association[
        "Mass" -> Quantity[
          4.944412813520721585`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[97.`2., "Kilometers"]],
       "Proteus" -> Association[
        "Mass" -> Quantity[
          5.0343112283120074311`2.995678626217367*^19, "Kilograms"],
         "Radius" -> Quantity[210.`3., "Kilometers"]],
       "Triton" -> Association[
        "Mass" -> Quantity[
          2.139432441341284348686`4.6989700043360205*^22,
           "Kilograms"],
         "Radius" -> Quantity[1353.4`5., "Kilometers"]],
       "Nereid" -> Association[
        "Mass" -> Quantity[
          3.0865122411674807466`2.9956786262173587*^19, "Kilograms"],
         "Radius" -> Quantity[170.`3., "Kilometers"]],
       "Halimede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Sao" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Laomedeia" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Psamathe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Neso" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Radius", "Moons"}, {
TypeSystem`Atom[
Quantity[1, "Kilometers"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Mass", "Radius"}, {
TypeSystem`Atom[
Quantity[1, "Kilograms"]],
TypeSystem`Atom[
Quantity[1, "Kilometers"]]}], TypeSystem`AnyLength]}], 8],
Association["ID" -> 165317787556689]],
 DatasetDisplayPanel -> {"Earth"}]

ScrollPosition

When a Dataset has scrollbars, you can specify the initial scroll positions with ScrollPosition, giving the initial vertical and horizontal positions:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Mercury" -> Association[
    "Radius" -> Quantity[2439.7`5., "Kilometers"],
     "Moons" -> Association[]],
   "Venus" -> Association[
    "Radius" -> Quantity[6051.85`5., "Kilometers"],
     "Moons" -> Association[]],
   "Earth" -> Association[
    "Radius" -> Quantity[
      6367.4446571000000000001`8.299868708313456, "Kilometers"],
     "Moons" -> Association[
      "Moon" -> Association[
        "Mass" -> Quantity[
          7.3459006322855173653772`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1737.5`5., "Kilometers"]]]],
   "Mars" -> Association[
    "Radius" -> Quantity[3385.595`4.298042852900571, "Kilometers"],
     "Moons" -> Association[
      "Phobos" -> Association[
        "Mass" -> Quantity[
          1.0724880884600402`3.9586073148417724*^16, "Kilograms"],
         "Radius" -> Quantity[11.1`3., "Kilometers"]],
       "Deimos" -> Association[
        "Mass" -> Quantity[
          1.468340774924336`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[6.2`2., "Kilometers"]]]],
   "Jupiter" -> Association[
    "Radius" -> Quantity[69173.`5., "Kilometers"],
     "Moons" -> Association[
      "Metis" -> Association[
        "Mass" -> Quantity[
          1.19864553055047796`0.9999565727231415*^17, "Kilograms"],
         "Radius" -> Quantity[21.5`3., "Kilometers"]],
       "Adrastea" -> Association[
        "Mass" -> Quantity[
          7.491534565940487`0.9999565727231415*^15, "Kilograms"],
         "Radius" -> Quantity[8.2`2., "Kilometers"]],
       "Amalthea" -> Association[
        "Mass" -> Quantity[
          2.067663540199574478`2.995678626217367*^18, "Kilograms"],
         "Radius" -> Quantity[83.45`4., "Kilometers"]],
       "Thebe" -> Association[
        "Mass" -> Quantity[
          1.49830691318809745`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[49.3`3., "Kilometers"]],
       "Io" -> Association[
        "Mass" -> Quantity[
          8.9297833448203530011087`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1821.6`5., "Kilometers"]],
       "Europa" -> Association[
        "Mass" -> Quantity[
          4.7986859848371340385365`4.995678626217362*^22,
           "Kilograms"],
         "Radius" -> Quantity[1560.8`5., "Kilometers"]],
       "Ganymede" -> Association[
        "Mass" -> Quantity[
          1.48150100386563183602529`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2631.2`5., "Kilometers"]],
       "Callisto" -> Association[
        "Mass" -> Quantity[
          1.07567783404752629528633`4.995678626217362*^23,
           "Kilograms"],
         "Radius" -> Quantity[2410.3`5., "Kilometers"]],
       "Themisto" -> Association[
        "Mass" -> Quantity[
          6.89221180066526`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Leda" -> Association[
        "Mass" -> Quantity[
          1.0937640466273112`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Himalia" -> Association[
        "Mass" -> Quantity[
          6.742381109346438525`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[85.`2., "Kilometers"]],
       "Lysithea" -> Association[
        "Mass" -> Quantity[
          6.2928890353900092`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[18.`2., "Kilometers"]],
       "Elara" -> Association[
        "Mass" -> Quantity[
          8.6901800964909652`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[43.`2., "Kilometers"]],
       "S/2000 J11" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carpo" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Euporie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J18" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Orthosie" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Euanthe" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Harpalyke" -> Association[
        "Mass" -> Quantity[
          1.19864553055047`0.9999565727231415*^14, "Kilograms"],
         "Radius" -> Quantity[2.2`2., "Kilometers"]],
       "Praxidike" -> Association[
        "Mass" -> Quantity[
          4.34509004824548`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.4`2., "Kilometers"]],
       "Thyone" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J16" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Iocaste" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Mneme" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Hermippe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Thelxinoe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Helike" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Ananke" -> Association[
        "Mass" -> Quantity[
          2.9966138263761948`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[14.`2., "Kilometers"]],
       "S/2003 J15" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Eurydome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Arche" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Herse" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasithee" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "S/2003 J10" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Chaldene" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Isonoe" -> Association[
        "Mass" -> Quantity[
          7.4915345659396`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.9`2., "Kilometers"]],
       "Erinome" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Kale" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Aitne" -> Association[
        "Mass" -> Quantity[
          4.4949207395643`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.5`2., "Kilometers"]],
       "Taygete" -> Association[
        "Mass" -> Quantity[
          1.6481376045069`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "S/2003 J9" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Carme" -> Association[
        "Mass" -> Quantity[
          1.31851008360552575`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[23.`2., "Kilometers"]],
       "Sponde" -> Association[
        "Mass" -> Quantity[
          1.4983069131881`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[1.`2., "Kilometers"]],
       "Megaclite" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.7`2., "Kilometers"]],
       "S/2003 J5" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J19" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J23" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Kalyke" -> Association[
        "Mass" -> Quantity[
          1.94779898714453`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Kore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Pasiphae" -> Association[
        "Mass" -> Quantity[
          2.9966138263761949`1.9995659225206786*^17, "Kilograms"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Eukelade" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "S/2003 J4" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Sinope" -> Association[
        "Mass" -> Quantity[
          7.4915345659404873`1.9995659225206786*^16, "Kilograms"],
         "Radius" -> Quantity[19.`2., "Kilometers"]],
       "Hegemone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Aoede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Kallichore" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Autonoe" -> Association[
        "Mass" -> Quantity[
          8.9898414791287`0.9999565727231415*^13, "Kilograms"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Callirrhoe" -> Association[
        "Mass" -> Quantity[
          8.69018009649097`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[4.3`2., "Kilometers"]],
       "Cyllene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "S/2003 J2" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]]]],
   "Saturn" -> Association[
    "Radius" -> Quantity[57316.`5., "Kilometers"],
     "Moons" -> Association[
      "Tarqeq" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Pan" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.8`3., "Kilometers"]],
       "Daphnis" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.9`2., "Kilometers"]],
       "Atlas" -> Association[
        "Mass" -> Quantity[
          2.097629678463337`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prometheus" -> Association[
        "Mass" -> Quantity[
          1.86689041383236942`3.9586073148417764*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Pandora" -> Association[
        "Mass" -> Quantity[
          1.49081537862215657`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[40.6`3., "Kilometers"]],
       "Epimetheus" -> Association[
        "Mass" -> Quantity[
          5.25905726529022205`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[58.3`3., "Kilometers"]],
       "Janus" -> Association[
        "Mass" -> Quantity[
          1.896856552096131371`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[90.4`3., "Kilometers"]],
       "Aegaeon" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[0.25`2., "Kilometers"]],
       "Mimas" -> Association[
        "Mass" -> Quantity[
          3.7907164903658865482`3.9586073148417764*^19, "Kilograms"],
         "Radius" -> Quantity[198.8`4., "Kilometers"]],
       "Methone" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.6`2., "Kilometers"]],
       "Anthe" -> Association[
        "Mass" -> Quantity[5.`1.*^12, "Kilograms"],
         "Radius" -> Quantity[1.`1., "Kilometers"]],
       "Pallene" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.6`2., "Kilometers"]],
       "Enceladus" -> Association[
        "Mass" -> Quantity[
          1.08027928440861826137`3.9586073148417764*^20, "Kilograms"],
          "Radius" -> Quantity[252.3`4., "Kilometers"]],
       "Tethys" -> Association[
        "Mass" -> Quantity[
          6.17452278924814959099`4.6989700043360205*^20, "Kilograms"],
          "Radius" -> Quantity[536.3`4., "Kilometers"]],
       "Calypso" -> Association[
        "Mass" -> Quantity[
          3.595936591651433`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.5`2., "Kilometers"]],
       "Telesto" -> Association[
        "Mass" -> Quantity[
          7.191873183302868`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[12.`2., "Kilometers"]],
       "Polydeuces" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[1.2`2., "Kilometers"]],
       "Dione" -> Association[
        "Mass" -> Quantity[
          1.095457133439213688532`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[562.5`4., "Kilometers"]],
       "Helene" -> Association[
        "Mass" -> Quantity[
          2.5471217524197656`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "Rhea" -> Association[
        "Mass" -> Quantity[
          2.308441461148901741032`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[764.5`4., "Kilometers"]],
       "Titan" -> Association[
        "Mass" -> Quantity[
          1.34520841449162446435527`4.958607314841778*^23,
           "Kilograms"],
         "Radius" -> Quantity[2575.5`5., "Kilometers"]],
       "Hyperion" -> Association[
        "Mass" -> Quantity[
          5.543735578795960565`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[133.`4., "Kilometers"]],
       "Iapetus" -> Association[
        "Mass" -> Quantity[
          1.805459830391657427108`4.6989700043360205*^21,
           "Kilograms"],
         "Radius" -> Quantity[734.5`4., "Kilometers"]],
       "Kiviuq" -> Association[
        "Mass" -> Quantity[
          3.296275209013815`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[8.`1., "Kilometers"]],
       "Ijiraq" -> Association[
        "Mass" -> Quantity[
          1.198645530550478`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[6.`1., "Kilometers"]],
       "Phoebe" -> Association[
        "Mass" -> Quantity[
          8.287135536843366995`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[106.6`4., "Kilometers"]],
       "Paaliaq" -> Association[
        "Mass" -> Quantity[
          8.240688022534537`1.999565922520683*^15, "Kilograms"],
         "Radius" -> Quantity[11.`3., "Kilometers"]],
       "Skathi" -> Association[
        "Mass" -> Quantity[
          3.146444517695`1.9995659225206786*^14, "Kilograms"],
         "Radius" -> Quantity[4.`1., "Kilometers"]],
       "Albiorix" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[16.`2., "Kilometers"]],
       "S/2007 S2" -> Association[
        "Mass" -> Quantity[1.5`2.*^14, "Kilograms"],
         "Radius" -> Quantity[3.`1., "Kilometers"]],
       "Bebhionn" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Erriapo" -> Association[
        "Mass" -> Quantity[
          7.64136525725929`1.9995659225206914*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Siarnaq" -> Association[
        "Mass" -> Quantity[
          3.8955979742890535`1.999565922520683*^16, "Kilograms"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Skoll" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Tarvos" -> Association[
        "Mass" -> Quantity[
          2.696952443738576`1.9995659225206786*^15, "Kilograms"],
         "Radius" -> Quantity[7.5`2., "Kilometers"]],
       "Greip" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S13" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Hyrrokkin" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[4.`2., "Kilometers"]],
       "Mundilfari" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2006 S1" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Jarnsaxa" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Narvi" -> Association[
        "Mass" -> Quantity[
          3.44610590033262`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Bergelmir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S17" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Suttungr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "Hati" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S12" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Bestla" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Farbauti" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Thrymr" -> Association[
        "Mass" -> Quantity[
          2.09762967846334`1.9995659225206872*^14, "Kilograms"],
         "Radius" -> Quantity[3.5`2., "Kilometers"]],
       "S/2007 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.5`2., "Kilometers"]],
       "Aegir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2004 S7" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "S/2006 S3" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Kari" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fenrir" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[2.`2., "Kilometers"]],
       "Surtur" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Ymir" -> Association[
        "Mass" -> Quantity[
          4.944412813520729`1.9995659225206872*^15, "Kilograms"],
         "Radius" -> Quantity[9.`1., "Kilometers"]],
       "Loge" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]],
       "Fornjot" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[3.`2., "Kilometers"]]]],
   "Uranus" -> Association[
    "Radius" -> Quantity[25266.`5., "Kilometers"],
     "Moons" -> Association[
      "Cordelia" -> Association[
        "Mass" -> Quantity[
          4.4949207395642923`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[20.1`3., "Kilometers"]],
       "Ophelia" -> Association[
        "Mass" -> Quantity[
          5.3939048874771508`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[21.4`3., "Kilometers"]],
       "Bianca" -> Association[
        "Mass" -> Quantity[
          9.2895028617662042`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[25.7`3., "Kilometers"]],
       "Cressida" -> Association[
        "Mass" -> Quantity[
          3.43112283120074311`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[39.8`3., "Kilometers"]],
       "Desdemona" -> Association[
        "Mass" -> Quantity[
          1.78298522669383596`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[32.`3., "Kilometers"]],
       "Juliet" -> Association[
        "Mass" -> Quantity[
          5.57370171705972251`2.9956786262173543*^17, "Kilograms"],
         "Radius" -> Quantity[46.8`3., "Kilometers"]],
       "Portia" -> Association[
        "Mass" -> Quantity[
          1.681100356597045339`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[67.6`3., "Kilometers"]],
       "Rosalind" -> Association[
        "Mass" -> Quantity[
          2.54712175241976567`2.9956786262173587*^17, "Kilograms"],
         "Radius" -> Quantity[36.`2., "Kilometers"]],
       "Cupid" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Belinda" -> Association[
        "Mass" -> Quantity[
          3.56597045338767194`2.995678626217367*^17, "Kilograms"],
         "Radius" -> Quantity[40.3`3., "Kilometers"]],
       "Perdita" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Puck" -> Association[
        "Mass" -> Quantity[
          2.893230649366216176`3.9586073148417764*^18, "Kilograms"],
         "Radius" -> Quantity[81.`2., "Kilometers"]],
       "Mab" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[5.`2., "Kilometers"]],
       "Miranda" -> Association[
        "Mass" -> Quantity[
          6.5925504180276287794`1.9995659225206872*^19, "Kilograms"],
         "Radius" -> Quantity[235.8`4., "Kilometers"]],
       "Ariel" -> Association[
        "Mass" -> Quantity[
          1.352971142608851997243`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[578.9`4., "Kilometers"]],
       "Umbriel" -> Association[
        "Mass" -> Quantity[
          1.171676006113092205807`2.9956786262173587*^21,
           "Kilograms"],
         "Radius" -> Quantity[584.7`4., "Kilometers"]],
       "Titania" -> Association[
        "Mass" -> Quantity[
          3.525516166731593299572`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[788.9`4., "Kilometers"]],
       "Oberon" -> Association[
        "Mass" -> Quantity[
          3.013095202421263971712`3.9586073148417764*^21,
           "Kilograms"],
         "Radius" -> Quantity[761.4`4., "Kilometers"]],
       "Francisco" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[11.`2., "Kilometers"]],
       "Caliban" -> Association[
        "Mass" -> Quantity[
          7.34170387462167751`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[49.`2., "Kilometers"]],
       "Stephano" -> Association[
        "Mass" -> Quantity[
          5.99322765275239`0.9999565727231373*^15, "Kilograms"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Trinculo" -> Association[
        "Mass" -> Quantity[
          7.49153456594048`0.9999565727231373*^14, "Kilograms"],
         "Radius" -> Quantity[5.`1., "Kilometers"]],
       "Sycorax" -> Association[
        "Mass" -> Quantity[
          5.378921818345269844`2.9956786262173627*^18, "Kilograms"],
         "Radius" -> Quantity[95.`2., "Kilometers"]],
       "Margaret" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]],
       "Prospero" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Setebos" -> Association[
        "Mass" -> Quantity[
          2.0976296784633363`1.9995659225206872*^16, "Kilograms"],
         "Radius" -> Quantity[15.`2., "Kilometers"]],
       "Ferdinand" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[10.`2., "Kilometers"]]]],
   "Neptune" -> Association[
    "Radius" -> Quantity[24552.5`5., "Kilometers"],
     "Moons" -> Association[
      "Naiad" -> Association[
        "Mass" -> Quantity[
          1.94779898714452669`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[33.`2., "Kilometers"]],
       "Thalassa" -> Association[
        "Mass" -> Quantity[
          3.74576728297024363`1.9995659225206872*^17, "Kilograms"],
         "Radius" -> Quantity[41.`2., "Kilometers"]],
       "Despina" -> Association[
        "Mass" -> Quantity[
          2.09762967846333643`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[75.`2., "Kilometers"]],
       "Galatea" -> Association[
        "Mass" -> Quantity[
          3.745767282970243625`1.9995659225206872*^18, "Kilograms"],
         "Radius" -> Quantity[88.`2., "Kilometers"]],
       "Larissa" -> Association[
        "Mass" -> Quantity[
          4.944412813520721585`1.999565922520683*^18, "Kilograms"],
         "Radius" -> Quantity[97.`2., "Kilometers"]],
       "Proteus" -> Association[
        "Mass" -> Quantity[
          5.0343112283120074311`2.995678626217367*^19, "Kilograms"],
         "Radius" -> Quantity[210.`3., "Kilometers"]],
       "Triton" -> Association[
        "Mass" -> Quantity[
          2.139432441341284348686`4.6989700043360205*^22,
           "Kilograms"],
         "Radius" -> Quantity[1353.4`5., "Kilometers"]],
       "Nereid" -> Association[
        "Mass" -> Quantity[
          3.0865122411674807466`2.9956786262173587*^19, "Kilograms"],
         "Radius" -> Quantity[170.`3., "Kilometers"]],
       "Halimede" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]],
       "Sao" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Laomedeia" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Psamathe" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[20.`2., "Kilometers"]],
       "Neso" -> Association[
        "Mass" -> Missing["NotAvailable"],
         "Radius" -> Quantity[30.`2., "Kilometers"]]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Radius", "Moons"}, {
TypeSystem`Atom[
Quantity[1, "Kilometers"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"Mass", "Radius"}, {
TypeSystem`Atom[
Quantity[1, "Kilograms"]],
TypeSystem`Atom[
Quantity[1, "Kilometers"]]}], TypeSystem`AnyLength]}], 8],
Association["ID" -> 165317787556689]], MaxItems -> {3, 1},
 ScrollPosition -> {2, 2}]

Deep Dive into Options Syntax

Datasets styling options have a rich syntax that supports patterns, cyclic specifications and value functions. To show you how those work, Ill take a deep dive into Background syntax. Other styling options work similarly.

To apply the same Background color to all items in a Dataset, specify a single color:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> Yellow]

To specify different colors for successive levels of a Dataset, give a list:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {Yellow, Cyan}]

But wait, that colored everything green! Thats because the yellow rows and cyan columns blend to give green items. You can see whats going on more clearly in the next example.

Giving a list at a given level applies the colors to successive elements. In this case, the first row is yellow, the second is cyan and the rest are the default color:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {{Yellow, Cyan}}]

If you color the columns similarly, the colors blend at their intersections. Thus the {"Eva","age"} and {"Deb","sex"} items are green, the blend of yellow and cyan:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {{Yellow, Cyan}, {Yellow, Cyan}}]

As in Grid, you can specify background colors to be used at the beginning, middle and end at a given level. This example makes the first row red, the second orange, then rows cyclically yellow and white until the last row, which is again red:

Dataset
&#10005

Dataset[IdentityMatrix[8],
 Background -> {{Red, Orange, {Yellow, White}, Red}}]

Background colors blend (as they do in Grid) in order to support this kind of styling, which makes it easier to follow long rows and columns:

Dataset
&#10005

Dataset[IdentityMatrix[8],
 Background -> {{{LightBlue, White}}, {{LightGreen, White}}}]

In options other than Background, values do not blend. Instead, later values override earlier ones. And within a Background option value, colors only blend when they are part of the same specification. In this example, the column colors override the row colors, except where the column color is None, which lets the row color show through:

Dataset
&#10005

Dataset[IdentityMatrix[8],
 Background -> {{All} -> {{{LightBlue, White}}}, {All,
     All} -> {None, {{LightGreen, None}}}}]

You can specify values at arbitrary levels. To use the default coloring at a given level, specify Automatic. In this example, items in the children column, which are at the third level of the Dataset, are colored yellow and orange, while items at higher levels have default coloring:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {Automatic, Automatic, {Yellow, Orange}}]

When you hover over a Dataset element, youll see its path displayed below the dataset frame. To apply a background color to that element, specify that path on the left-hand side of a rule in the Background value:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {{All, "sex"} -> Cyan}]

If you give a non-list element instead of a path on the left-hand side of a rule, the value is applied to any path that contains that element:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {"sex" -> Cyan}]

Combine level syntax and path syntax to specify a general rule and exceptions, as here where all rows are colored yellow, with the exception of the Eva row, which is colored cyan:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {Yellow, {"Eva"} -> Cyan}]

Element paths can contain arbitrary patterns. Here, both the Eva and Ann rows are colored cyan:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {{"Eva" | "Ann"} -> Cyan}]

Patterns can be arbitrarily complex. This colors any row cyan whose header contains a lowercase or uppercase a:

Dataset
&#10005

Dataset[Dataset[
Association[
  "Deb" -> Association[
    "age" -> 62, "sex" -> "female",
     "children" -> Association[
      "Hal" -> Association["age" -> 29, "sex" -> "male"],
       "Kat" -> Association["age" -> 31, "sex" -> "female"]]],
   "Eva" -> Association[
    "age" -> 43, "sex" -> "female", "children" -> Association[]],
   "Bob" -> Association[
    "age" -> 41, "sex" -> "male",
     "children" -> Association[
      "Bob" -> Association["age" -> 1, "sex" -> "male"],
       "Bri" -> Association["age" -> 3, "sex" -> "female"],
       "Dan" -> Association["age" -> 6, "sex" -> "male"]]],
   "Ann" -> Association[
    "age" -> 35, "sex" -> "female",
     "children" -> Association[
      "Amy" -> Association["age" -> 6, "sex" -> "female"]]],
   "Cal" -> Association[
    "age" -> 60, "sex" -> "female", "children" -> Association[]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex", "children"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"age", "sex"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[String]}], TypeSystem`AnyLength]}], 5],
Association["ID" -> 165274837883637, MaxItems -> {All, All, All}]],
 Background -> {{_?(! StringFreeQ[#, "a" | "A"] &)} -> Cyan}]

The restriction imposed by a path is applied after coloring is applied to the Dataset as a whole. Compare these examples. In the first, top-level rows are colored yellow, white and cyan:

Dataset
&#10005

Dataset[Dataset[
Association[
  "a" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "x" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]],
   "b" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "y" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]],
   "c" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "z" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"1", "2", "3"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[Integer],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Assoc[
TypeSystem`Atom[
TypeSystem`Enumeration["a", "b", "c"]],
TypeSystem`Atom[Integer], 3], 1]}], 3],
Association["ID" -> 165433751674104]],
 Background -> {{Yellow, White, Cyan}}]

Adding a path specification restricts the coloring to the “3” column:

Dataset
&#10005

Dataset[Dataset[
Association[
  "a" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "x" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]],
   "b" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "y" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]],
   "c" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "z" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"1", "2", "3"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[Integer],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Assoc[
TypeSystem`Atom[
TypeSystem`Enumeration["a", "b", "c"]],
TypeSystem`Atom[Integer], 3], 1]}], 3],
Association["ID" -> 165433751674104]],
 Background -> {{All, "3"} -> {{Yellow, White, Cyan}}}]

To apply the yellow-white-cyan coloring to the individual rows in the {All, "3"} column, specify the coloring at the level of those items, the fourth:

Dataset
&#10005

Dataset[Dataset[
Association[
  "a" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "x" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]],
   "b" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "y" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]],
   "c" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "z" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"1", "2", "3"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[Integer],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Assoc[
TypeSystem`Atom[
TypeSystem`Enumeration["a", "b", "c"]],
TypeSystem`Atom[Integer], 3], 1]}], 3],
Association["ID" -> 165433751674104]],
 Background -> {{All, "3"} -> {None, None,
     None, {Yellow, White, Cyan}}}]

Since nothing outside of the 3 column is colored in the previous example, the path restriction is redundant. This is another way of specifying the same thing:

Dataset
&#10005

Dataset[Dataset[
Association[
  "a" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "x" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]],
   "b" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "y" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]],
   "c" -> Association[
    "1" -> 1, "2" -> 2,
     "3" -> Association[
      "z" -> Association["a" -> 1, "b" -> 2, "c" -> 3]]]],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Struct[{"1", "2", "3"}, {
TypeSystem`Atom[Integer],
TypeSystem`Atom[Integer],
TypeSystem`Assoc[
TypeSystem`Atom[String],
TypeSystem`Assoc[
TypeSystem`Atom[
TypeSystem`Enumeration["a", "b", "c"]],
TypeSystem`Atom[Integer], 3], 1]}], 3],
Association["ID" -> 165433751674104]],
 Background -> {None, None, None, {Yellow, White, Cyan}}]

The value of any specification within a styling option can be a function that returns a value. That gives you a useful way of highlighting patterns in data. Here, for example, are the first 100 positive integers, with prime numbers highlighted yellow:

Dataset
&#10005

Dataset[Range[100], Background -> (If[PrimeQ[#], Yellow, White] &)]

The arguments of a value function are the value of the item or header, its path within the dataset and the entire dataset itself. Having the dataset available as an argument makes it possible to do local styling based on global properties, as in this example, where rows are colored according to sex. The color of each item is obtained by looking at the value of the sex entry in the row that contains the item:

Dataset
&#10005

Dataset[ExampleData[{"Dataset", "Titanic"}],
 Background -> (If[#3[#2[[1]], "sex"] === "male", LightBlue,
     LightRed] &)]

Putting It All Together

The new Dataset options are intended to help you gain insight into your data and present it effectively. Next are some examples of how you might use them to do so.

This is a sample of the built-in Titanic dataset:

Dataset
&#10005

Dataset[{
Association[
  "class" -> "1st", "age" -> 47, "sex" -> "male",
   "survived" -> False],
Association[
  "class" -> "3rd", "age" -> 32, "sex" -> "male",
   "survived" -> False],
Association[
  "class" -> "1st", "age" -> 54, "sex" -> "female",
   "survived" -> True],
Association[
  "class" -> "2nd", "age" -> 24, "sex" -> "male",
   "survived" -> False],
Association[
  "class" -> "2nd", "age" -> 29, "sex" -> "male",
   "survived" -> False],
Association[
  "class" -> "1st", "age" -> 55, "sex" -> "male",
   "survived" -> False],
Association[
  "class" -> "1st", "age" -> 24, "sex" -> "female",
   "survived" -> True],
Association[
  "class" -> "1st", "age" -> 25, "sex" -> "male",
   "survived" -> True]},
TypeSystem`Vector[
TypeSystem`Struct[{"class", "age", "sex", "survived"}, {
TypeSystem`Atom[
TypeSystem`Enumeration["1st", "2nd", "3rd"]],
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Atom[TypeSystem`Boolean]}], 8],
Association["ID" -> 200390490496301]]

Styling with ItemDisplayFunction and color backgrounds makes the data more immediately comprehensible:

Datasetalt
&#10005

Dataset[Dataset[{
Association[
   "class" -> "1st", "age" -> 47, "sex" -> "male",
    "survived" -> False],
Association[
   "class" -> "3rd", "age" -> 32, "sex" -> "male",
    "survived" -> False],
Association[
   "class" -> "1st", "age" -> 54, "sex" -> "female",
    "survived" -> True],
Association[
   "class" -> "2nd", "age" -> 24, "sex" -> "male",
    "survived" -> False],
Association[
   "class" -> "2nd", "age" -> 29, "sex" -> "male",
    "survived" -> False],
Association[
   "class" -> "1st", "age" -> 55, "sex" -> "male",
    "survived" -> False],
Association[
   "class" -> "1st", "age" -> 24, "sex" -> "female",
    "survived" -> True],
Association[
   "class" -> "1st", "age" -> 25, "sex" -> "male",
    "survived" -> True]},
TypeSystem`Vector[
TypeSystem`Struct[{"class", "age", "sex", "survived"}, {
TypeSystem`Atom[
TypeSystem`Enumeration["1st", "2nd", "3rd"]],
TypeSystem`Atom[Integer],
TypeSystem`Atom[
TypeSystem`Enumeration["female", "male"]],
TypeSystem`Atom[TypeSystem`Boolean]}], 8],
Association["ID" -> 200390490496301]],
 ItemDisplayFunction -> {
   "class" -> (StringTake[#, 1] &),
   "age" -> (Tooltip[
       Style[Spacer[{2 #, 20}],
        Background -> GrayLevel[0.75]], #] &),
   "sex" -> (If[# === "male", \[Mars], \[Venus]] &),
   "survived" -> (If[#, "\[Checkmark]", ""] &)},
 Background -> (Switch[#3[[#2[[1]], "class"]], "1st", RGBColor[
     0.96, 0.96, 1.], "2nd", RGBColor[1., 0.96, 0.96], "3rd",
     RGBColor[1., 1., 0.96]] &)]

Since styling options dont affect the contents of datasets, you can use them to present numeric data in whatever formats make sense without compromising the original data:

Dataset
&#10005

Dataset[{
Association[
  "weight" -> 19.016849999999998`, "factor" -> 0.8957944119265218,
   "yield" -> 0.3234856056220916],
Association[
  "weight" -> 23.73867, "factor" -> 0.15031445199065052`,
   "yield" -> 0.4385543939388503],
Association[
  "weight" -> 5.78343, "factor" -> 0.19464352143691332`,
   "yield" -> 0.7559025964339601],
Association[
  "weight" -> 21.92067, "factor" -> 0.9981134853066305,
   "yield" -> 0.3376021923291914],
Association[
  "weight" -> 22.83753, "factor" -> 0.8753398388191531,
   "yield" -> 0.40843903121632064`],
Association[
  "weight" -> 4.81656, "factor" -> 0.5974688040388945,
   "yield" -> 0.6662428187598886]}, ItemDisplayFunction -> {
   "weight" -> (Quantity[#, "kg"] &),
   "factor" -> (NumberForm[#, {2, 2}] &),
   "yield" -> (PercentForm[#, 2] &)
   }, Alignment -> Center, HeaderAlignment -> Center]

Use coloring to make it easier to pick out significant values in data. Here, negative numbers are colored red, and the largest and smallest values in each column are highlighted in blue and pink, respectively:

Dataset
&#10005

Dataset[Table[RandomReal[{-1, 1}], {7}, {3}],
 ItemStyle -> (If[# < 0, Red, Black] &),
 Background -> (Switch[#, Max[#3[[All, #2[[2]]]]], LightBlue,
     Min[#3[[All, #2[[2]]]]], LightRed, _, White] &)]

Heat maps are particularly easy using a background color function:

Dataset
&#10005

Dataset[CompressedData["
1:eJwBmQFm/iFib1JlAgAAAAcAAAAHAAAAqB8MAQ4o6j8gE/Hh/oW8P5xqyQTM
Q+k/WBmY+u4JyD/IeeGK6uTOP5B5K15B1LA/TJKulRVa4T9Ai2CLeJbNP6wr
UeQpWNk/ULck/kdq5j84hj0aHR3LP6SgvEb/9Oc/+HmAK/wP2z/I7N6y6K3P
P/gK6Lb9RO8/PC7fG7xn6j/+nRu92pvtP6oogp1vf+I/zEBitWC+0j9AuJDT
aqHKP25FKjg/k+I/sGLoezN9wD/gP/aVgZzTP7ylaonNyOY/tDn/Gkv/2D8s
FTnuKz3qP2AK5haP0tQ/Yjtl3/z74j8ATy5IzJngPyBLC/I3osU/YIfQ3oE+
3j+wwNnjQtTpP4AhN+0wPYg/rK2DmLJH1D80czYYE0bpP4Cferrsh4g/0Lmu
IKwK2T/sdOE7p17dPzgmju22Xd0/cB9pSNFH5z+2bHmnUUzpP+BKX5lm2dA/
fKSDbHkK0z8ga+3Vo2jcP6AD84+yUaw/nPF1oRDS3j8ESZVCIKDnP2CxYKxH
/Mk/4ueRPcVu4T/3xctC
"], Background -> (Hue[1, #] &)]

For a more compact presentation, hide the data behind Tooltip. Hovering over an item shows its value:

Datasetalt
&#10005

Dataset[CompressedData["
1:eJwBmQFm/iFib1JlAgAAAAcAAAAHAAAAqB8MAQ4o6j8gE/Hh/oW8P5xqyQTM
Q+k/WBmY+u4JyD/IeeGK6uTOP5B5K15B1LA/TJKulRVa4T9Ai2CLeJbNP6wr
UeQpWNk/ULck/kdq5j84hj0aHR3LP6SgvEb/9Oc/+HmAK/wP2z/I7N6y6K3P
P/gK6Lb9RO8/PC7fG7xn6j/+nRu92pvtP6oogp1vf+I/zEBitWC+0j9AuJDT
aqHKP25FKjg/k+I/sGLoezN9wD/gP/aVgZzTP7ylaonNyOY/tDn/Gkv/2D8s
FTnuKz3qP2AK5haP0tQ/Yjtl3/z74j8ATy5IzJngPyBLC/I3osU/YIfQ3oE+
3j+wwNnjQtTpP4AhN+0wPYg/rK2DmLJH1D80czYYE0bpP4Cferrsh4g/0Lmu
IKwK2T/sdOE7p17dPzgmju22Xd0/cB9pSNFH5z+2bHmnUUzpP+BKX5lm2dA/
fKSDbHkK0z8ga+3Vo2jcP6AD84+yUaw/nPF1oRDS3j8ESZVCIKDnP2CxYKxH
/Mk/4ueRPcVu4T/3xctC
"], ItemDisplayFunction -> {Tooltip["  ", #] &},
 Background -> (Hue[1, #] &), ItemSize -> 2]

Version 12.1 gives Dataset a big boost in functionality, but were not done yet. Theres more to come in future versions. If you have specific requests, leave me a note in the comments section.

Get full access to the latest Wolfram Language functionality with a Mathematica 12.1 or Wolfram|One trial.
 (3)

4. Two Lines of Code to Bulletproof Encryption: Advancements in Cryptography Development in the Wolfram Language, 16 [−]

Two Lines of Code to Bulletproof Encryption: Advancements in Cryptography Development in the Wolfram Language

Cryptography functionality in the Wolfram Language has been growing significantly ever since it was originally released in Version 10.1. In the latest release, we added support for generation and verification of digital signatures for expressions, files and cloud objects; you can encrypt or digitally sign anything—from simple messages to images or code. In order to maintain our users security and safety, we base our algorithms on OpenSSL libraries. While OpenSSL normally requires a great deal of experience to use, integration with the Wolfram Language has made it simple.

Encryption

In the Wolfram Language, encrypting information is as easy as it could possibly be. When using Encrypt to protect data of any sort, youll enter a password in an AuthenticationDialog window to securely protect your data:

model = ExampleData[{"Geometry3D", "SpaceShuttle"}];
&#10005

model = ExampleData[{"Geometry3D", "SpaceShuttle"}];

enc = Encrypt
&#10005

enc = Encrypt[AuthenticationDialog["Password", #Password &], model]

Authentication

Thats the entire encryption process from start to finish. With just two lines of Wolfram Language code, your data is secured with a bulletproof key derived from your password and industry-standard ciphers.

Decrypt will return your initial data, exactly as it was:

Decrypt
&#10005

Decrypt[AuthenticationDialog["Password", #Password &], enc]

Using OpenSSL from any other programming language is exponentially more complicated. In order to perform the same simple yet secure encryption process in your C/C++ program with OpenSSL, you would need to read through time-consuming documentation. Python and R do not natively run OpenSSL at all—youd need to select and configure a third-party cryptography package and install OpenSSL separately.

Blockchain Security

Elliptic curve keys and digital signatures, newly supported in Version 12.1, allow Wolfram Language users to work extensively with blockchains. We currently support secp256k1, the same elliptic curve used by Bitcoin, Ethereum, ARK and a myriad of other blockchains. In future versions of the Wolfram Language, we plan to support other standard curves, such as those recommended by the NIST.

Generate elliptic curvebased private and public keys using GenerateAsymmetricKeyPair:

keys = GenerateAsymmetricKeyPair
&#10005

keys = GenerateAsymmetricKeyPair["EllipticCurve"]

Once the keys are generated, they are used to create and verify digital signatures:

message = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
&#10005

message = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";

signature = GenerateDigitalSignature
&#10005

signature = GenerateDigitalSignature[message, keys["PrivateKey"]]

VerifyDigitalSignature
&#10005

VerifyDigitalSignature[{message, signature}, keys["PublicKey"]]

The example message used here comes from block 0 of the Bitcoin blockchain. Adding support for elliptic curve digital signatures serves well for writing to blockchains. For instance, BlockchainTransactionSign uses them internally to sign a transaction before its ready to submit to a specified blockchain:

arkTX = BlockchainTransaction
&#10005

arkTX = BlockchainTransaction[<|

   "BlockchainBase" -> {"ARK", "Devnet"},
   "Recipient" -> "DLesojAmpcA4jQbJDz5JKQ73k1RervJwfi",
   "Fee" -> 500000,
   "Amount" -> 5000000, "TransactionCount" -> 1|>]

BlockchainTransactionSign
&#10005

BlockchainTransactionSign[arkTX,
 PrivateKey[
  Association["Type" -> "EllipticCurve", "CurveName" -> "secp256k1",
   "PublicCurvePoint" ->
{104531630294965477234702932341314658269653137311559363531300075335186\
469390907,
     10640048778270064292136312118618106290978266224313779661960878181\
1804637106603},
   "PrivateMultiplier" ->
    462334184832703249382743573975806080334034824670864224636440700338\
84386623284, "Compressed" -> True,
   "PublicByteArray" ->
    ByteArray[{3, 231, 26, 206, 92, 80, 143, 224, 194, 24, 207, 131,
      164, 219, 131, 21, 1, 243, 142, 42, 166, 89, 103, 207, 196, 217,
       90, 115, 24, 134, 168, 138, 59}],
   "PrivateByteArray" ->
    ByteArray[{102, 55, 48, 2, 13, 244, 228, 151, 216, 47, 103, 217,
      53, 81, 190, 188, 237, 119, 237, 194, 2, 245, 72, 113, 217, 50,
      144, 69, 50, 10, 255, 52}]]]]

You can also use digital signatures to sign and verify images or any arbitrary Wolfram Language expression:

GenerateDigitalSignature
&#10005

GenerateDigitalSignature[\!\(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(\[Infinity]\)]\(Log[
    x]\ Exp[\(-
\*SuperscriptBox[\(x\), \(2\)]\)] \[DifferentialD]x\)\), PrivateKey[
Association[
  "Type" -> "EllipticCurve", "CurveName" -> "secp256k1",
   "PublicCurvePoint" -> {
    104531630294965477234702932341314658269653137311559363531300075335\
186469390907,
     10640048778270064292136312118618106290978266224313779661960878181\
1804637106603},
   "PrivateMultiplier" -> 46233418483270324938274357397580608033403482\
467086422463644070033884386623284, "Compressed" -> True,
   "PublicByteArray" -> ByteArray[{3, 231, 26, 206, 92, 80, 143, 224,
     194, 24, 207, 131, 164, 219, 131, 21, 1, 243, 142, 42, 166, 89,
     103, 207, 196, 217, 90, 115, 24, 134, 168, 138, 59}],
   "PrivateByteArray" -> ByteArray[{102, 55, 48, 2, 13, 244, 228, 151,
      216, 47, 103, 217, 53, 81, 190, 188, 237, 119, 237, 194, 2, 245,
      72, 113, 217, 50, 144, 69, 50, 10, 255, 52}]]]]

Know Your Keys

Weve greatly expanded user flexibility and freedom with public and private key objects. In Version 12.1, PrivateKey and PublicKey can compute all of the necessary parts of a key from an arbitrary value.

Access the public key of any blockchain transaction sender on Bitcoin, Ethereum or ARK:

BlockchainTransactionData
&#10005

BlockchainTransactionData[
"a93bfdff6679bc38cfdcd16cc38e34513fa2ee97186864e22cac5723864cde13",
"SenderPublicKey", BlockchainBase -> "Ethereum"]

Use your own keys generated outside of the Wolfram ecosystem by pasting the necessary value (e.g. as a hex string). PrivateKey and PublicKey will do the rest of the work:

private = PrivateKey
&#10005

private =
 PrivateKey[<|"Type" -> "EllipticCurve",
   "PrivateHexString" ->
    "E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262"|>]

public = PublicKey
&#10005

public = PublicKey[private]

To experiment with the mathematical properties of private and public keys, you could specify an arbitrary value:

PrivateKey
&#10005

PrivateKey[<|"Type" -> "EllipticCurve", "PrivateMultiplier" -> 100|>]

Always be careful when inventing your own private keys. If you need one for practical use, its better to generate a pair using built-in, cryptographically secure random number generation with GenerateAsymmetricKeyPair.

Generally speaking, humans struggle to create long, random and strong passwords—usually opting for short passwords that are easier to reuse, making them vulnerable and easier to hack. GenerateDerivedKey, a key derivation function (used in password hashing and authentication), strengthens the key:

GenerateDerivedKey
&#10005

GenerateDerivedKey["password"]

Working with Files

Weve created EncryptFile to keep sensitive data private and only accessible by those who are authorized to do so. This enables research, computed results, Wolfram Language code or any other sensitive information to be encrypted and stored safely.

Encrypt a file containing an image, writing the result to a new file:

EncryptFile
&#10005

EncryptFile[AuthenticationDialog["Password", #Password &],
 FindFile["ExampleData/rose.gif"], "codedrose.mx"]

Use DecryptFile to get the encrypted file back, again putting the result in a new file:

DecryptFile
&#10005

DecryptFile[
 AuthenticationDialog[
  "Password", #Password &], "codedrose.mx", "rose.gif"]

Import the decrypted file:

Import
&#10005

Import["rose.gif"]

Additionally, weve added GenerateFileSignature and VerifyFileSignature for digitally signing and verifying files of any format (even cloud objects!). Both functions use the security of RSA or elliptic curves:

object = CloudPut
&#10005

object = CloudPut[123, "test"];

keys = GenerateAsymmetricKeyPair
&#10005

keys = GenerateAsymmetricKeyPair["RSA"];

signature = GenerateFileSignature
&#10005

signature = GenerateFileSignature[object, keys["PrivateKey"]]

VerifyFileSignature
&#10005

VerifyFileSignature[{object, signature}, keys["PublicKey"]]

Theres Always More

Get more out of cryptography in the Wolfram Language from our Documentation Center or by watching a livestream in which I explain the latest features in more detail. We are constantly expanding and improving upon cryptography functionality for future versions. If you have ideas on what we should prioritize for this feature, let us know in the comments.


This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. This product includes cryptographic software written by Eric Young.

Get full access to the latest Wolfram Language functionality with a Mathematica 12.1 or Wolfram|One trial.
 (2)

5. Released Today: The Math(s) Fix, 10 [−]

Wolfram Research has always believed in the power of computation to deliver better decisions. But there are two sides to achieving this: not only the best computational technology but also the best education for computational thinking.

After more than 15 years of conceptualising the idea, 10 years of build-out and 2 years of writing and editing, I have assembled The Math(s) Fix: An Education Blueprint for the AI Age (or TMF for short) and thrown it out to the world today in ink and e-ink.


Order Now

So what have I done? Propose a fundamentally new core computational subject at school with a changed assumption: computers exist and students should use them. Not just use them for remote learning or improved pedagogy but for the subject they were born out of and have rocket-boosted. Real-world maths is computer basedcalculations not done by humans but by computersbut our school curricula are not. Very different.

Todays maths education has become an unhealthy fixation for assessment, an addictive fix for policymakers to push, and therefore hard to fundamentally fix. I intended all these meanings in entitling this book The Math(s) Fix with a crucial extra one added: spelling out the solution, the fix in detail.

The Math(s) Fix preface

The Math(s) Fix uniquely maps out the vision, the solution and ways to make the change to move to this new reality—a new reality that the rapidly enveloping AI age demands of education or us humans will lose out. We dont want omnipresent computers to become omnipotent; instead we want to be in charge, computationally literate throughout society, like society has so successfully become literate (in reading and writing).

I did not want to write a dry book for maths aficionados. I set out to write an engaging and accessible book, a book for everyone to understand what’s needed, why, howand as I put it “What the hell’s the point of learning this?”. Peppered with the serious hard stuff are anecdotes, my educational failures and how my daughter’s fared. Then the objectionsarguing against my positions with what I’m confronted with. I think real maths and computation go across much of what we do in life these days so I have gone broadly through topics that are or should be related too. How management, law and medicine relate. What I’ve learnt about the politics of education in different countries. Why the educational ecosystem has become so stuck.

Fixing maths is urgent. I want to seed this change not just by complaining about what’s gone wrong but offering up a solution. Urgent doesn’t mean easy or fast. It’s neither. But with everyone’s collective efforts we can get this done just like we achieved close-to-universal education and literacy in decades gone by.

The Math(s) Fix can be a catalyst for this critical change. The more who see what real-world maths is all about, how it can help them and what we need to do to get there, the better for all of us in so many ways: decisions, achievement, equity. The book can enlighten everyone to what’s wrong so we can make it right.

Hope you can come along on this journey, and if so, let me know how you get along. Even more so, please encourage others to take a look, and a read.

Alongside the book, we are launching our campaign today: “ The Maths Fix Campaign for Core Computational Curriculum Change” or MFC5 for short. Please add your name, add your voice and support this if you agree.

Oh, and today really is my big day. Life II starts in another way as well: it’s my 50th birthday (and I’m definitely feeling more than )!

To comment, please visit the copy of this post at ConradWolfram.com

The Math(s) Fix is now available.

Order Now

 (0)

6. Using Integer Optimization to Build and Solve Sudoku Games with the Wolfram Language, 02 [−]

Using Integer Optimization to Build and Solve Sudoku Games with the Wolfram Language

Sudoku is a popular game that pushes the players analytical, mathematical and mental abilities. Solving sudoku problems has long been discussed on Wolfram Community, and there has been some fantastic code presented to solve sudoku problems. To add to that discussion, I will demonstrate several features that are new to Mathematica Version 12.1, including how this game can be solved as an integer optimization problem using the function LinearOptimization, as well as how you can generate new sudoku games.

Solve Sudoku Programmatically

In a typical sudoku game, the player is presented with a 9?9 grid/board with some numbers exposed in certain positions of the board.

This is an example of a standard sudoku board:

Standard sudoku board

The player is supposed to fill the empty spots with numbers between 1 and 9 to if its an board) on the board following three rules:

1. Each row must contain all the numbers 1–9.

2. Each column must contain all the numbers 1–9.

3. Each 3×3 block (shown as gray or white blocks) must contain all the numbers 1–9.

Applying these three rules, the player must now fill the board such that none of the rules are violated.

I will make use of SparseArray to represent the initial sudoku puzzle, building on the Sudoku Game example for LinearOptimization:

initialSudokuBoard = SparseArray
&#10005

initialSudokuBoard =
  SparseArray[{{1, 3} -> 5, {1, 4} -> 3, {2, 1} -> 8, {2, 8} -> 2, {3,
      2} -> 7, {3, 5} -> 1, {3, 7} -> 5, {4, 1} -> 4, {4, 6} -> 5, {4,
      7} -> 3, {5, 2} -> 1, {5, 5} -> 7, {5, 9} -> 6, {6, 3} -> 3, {6,
      4} -> 2, {6, 8} -> 8, {7, 2} -> 6, {7, 4} -> 5, {7, 9} -> 9, {8,
      3} -> 4, {8, 8} -> 3, {9, 6} -> 9, {9, 7} -> 7}, {9, 9}, _];
ResourceFunction["DisplaySudokuPuzzle"][initialSudokuBoard]

To solve this problem as an integer optimization problem, let be the variable for element . Let be the element of vector . When , then holds the number . Each contains only one number, so can contain only one nonzero element, i.e. :

Clear
&#10005

Clear[z];
squareConstraints =
  Table[{Total[z[i, j]] == 1,
    0 \[VectorLessEqual] z[i, j] \[VectorLessEqual] 1,
    z[i, j] \[Element] Vectors[9, Integers]}, {i, 9}, {j, 9}];

Applying the first sudoku rule, each row must contain all the numbers, i.e. , where is a nine-dimensional vector of ones:

onesVector = ConstantArray
&#10005

onesVector = ConstantArray[1, 9];
rowConstraints = Table[Sum[z[i, j], {j, 9}] == onesVector, {i, 9}];

The second rule says that each column must contain all the numbers, i.e. :

columnConstraints = Table
&#10005

columnConstraints = Table[Sum[z[i, j], {i, 9}] == onesVector, {j, 9}];

The third rule says that each 3?3 block must contain all the numbers, i.e. :

blockConstraints = Table
&#10005

blockConstraints =
  Table[Sum[z[i + m, j + n], {m, 3}, {n, 3}] ==
    onesVector, {i, {0, 3, 6}}, {j, {0, 3, 6}}];

Collectively, these make the sudoku constraints for any puzzle:

sudokuConstraints = {squareConstraints, rowConstraints, columnConstraints, blockConstraints};
&#10005

sudokuConstraints = {squareConstraints, rowConstraints,
   columnConstraints, blockConstraints};

Collect all the variables:

vars = Flatten
&#10005

vars = Flatten[Table[z[i, j], {i, 9}, {j, 9}]];

Convert the known values into constraints. If element holds number , then :

knownConstraints = MapThread
&#10005

knownConstraints =
  MapThread[
   Indexed[z @@ #1, #2] == 1 &, {initialSudokuBoard[
     "NonzeroPositions"], initialSudokuBoard["NonzeroValues"]}];

LinearOptimization is typically used to minimize a linear objective subject to a set of linear constraints. In this case, the objective is 0 since there is no objective other than interest in a feasible solution:

res = LinearOptimization
&#10005

res = LinearOptimization[0, {sudokuConstraints, knownConstraints},
   vars];
Short[res, 3]

To know which number goes into which position, the information must be extracted from the vectors . This is easily done as:

Short
&#10005

Short[pos =
  MapThread[List @@ #1 -> Range[9].#2 &, {vars, vars /. res}], 4]

Visualize the result by converting the previous output into a SparseArray:

ResourceFunction
&#10005

ResourceFunction["DisplaySudokuPuzzle"][SparseArray[pos]]

As you can see, putting the problem together and solving it took 67 lines of code. This procedure has been placed as a ResourceFunction called SolveSudokuPuzzle that users can call to solve a sudoku puzzle:

ResourceFunction
&#10005

ResourceFunction["SolveSudokuPuzzle"][initialSudokuBoard]

This function has been made quite general and has the capacity to solve sudoku puzzles of arbitrary size. The solver also accepts negative numbers being present on the board. If a negative number exists, then the solver tries to solve the puzzle with the assumption that the number at that position cannot exist.

Generating a Sudoku Puzzle

The strategy we will use to generate a sudoku puzzle is to start with a full board. From this, an element will be randomly selected and the number that lies at that element will be removed. We will then enforce a condition that the number we removed from that element cannot lie at that element. If the solver comes back with a solution despite the additional condition, it means that the number at that position is not unique and cannot leave the board. If the solver comes back with a failed result, then that number at that position is unique and can be removed.

To implement this strategy, there needs to be a way to generate a full random sudoku board. There are several approaches that one can use to generate a full sudoku board. One approach would be to randomly specify the diagonal entries of the sudoku board and allow the solver to generate a puzzle for us:

fullSudokuPuzzle = ResourceFunction
&#10005

fullSudokuPuzzle =
  ResourceFunction["SolveSudokuPuzzle"][
   SparseArray@DiagonalMatrix[RandomSample[Range[9]]]];
ResourceFunction["DisplaySudokuPuzzle"][fullSudokuPuzzle]

This will generate three hundred thousand possible puzzles. One advantage our solver has is that we can also specify that certain numbers cannot be present at a particular position. This is done by making that number negative at that position. Taking advantage of this feature, over one hundred million puzzles can be generated by modifying the procedure:

initialPuzzle = SparseArray@DiagonalMatrix
&#10005

initialPuzzle = SparseArray@DiagonalMatrix[
    RandomSample[Range[9]]*RandomChoice[{1, -1}, 9]];
refSudokuMat = ResourceFunction["SolveSudokuPuzzle"][initialPuzzle];
ResourceFunction["DisplaySudokuPuzzle"][refSudokuMat]

Of course, this is still a very small fraction of the total possible boards, but it is a start.

Now that we have a full board, let us assume that we want to keep only 50 elements from the board. The iterative code would be:

minElementsToKeep = 50;sudokuElements = RandomSample
&#10005

minElementsToKeep = 50;
sudokuElements = RandomSample[Thread[
    refSudokuMat["NonzeroPositions"] ->
     refSudokuMat["NonzeroValues"]]];
n = 81; i = 1;
While[Length[sudokuElements] > minElementsToKeep && i < n,
  newElements = sudokuElements;
  newElements[[i, 2]] *= -1;
  res = ResourceFunction["SolveSudokuPuzzle"][
    SparseArray[newElements, {9, 9}]];
  If[res === $Failed, sudokuElements = Delete[sudokuElements, i]; n--,
    i++];];

Note the extra condition, where numbers that cannot appear at certain positions are removed by making those numbers negative. We can now display our freshly minted sudoku puzzle:

sudokuPuzzle = SparseArray
&#10005

sudokuPuzzle = SparseArray[sudokuElements, {9, 9}, _];
ResourceFunction["DisplaySudokuPuzzle"][sudokuPuzzle]

It’s possible to double-check that the puzzle can be solved and that the result we get back is the same as the reference sudoku we started with:

ResourceFunction
&#10005

ResourceFunction["DisplaySudokuPuzzle"][#] & /@ {refSudokuMat,
  ResourceFunction["SolveSudokuPuzzle"][sudokuPuzzle]}

Notice that the solved puzzle recovered the reference puzzle.

A ResourceFunction called GenerateSudokuPuzzle has been developed for the users convenience that will generate sudoku puzzles of different sizes and determine how many elements need to be exposed:

{fullBoard, sudokuPuzzle} = ResourceFunction
&#10005

{fullBoard, sudokuPuzzle} =
 ResourceFunction["GenerateSudokuPuzzle"][3, 0.4]

ResourceFunction
&#10005

ResourceFunction["DisplaySudokuPuzzle"][#] & /@ {fullBoard,
  sudokuPuzzle}

Due to the general nature of the function, sudoku boards can be generated in different sizes. Here is a 4?4 board:

{fullBoard, sudokuPuzzle} = ResourceFunction
&#10005

{fullBoard, sudokuPuzzle} =
  ResourceFunction["GenerateSudokuPuzzle"][2, 0.5];
ResourceFunction["DisplaySudokuPuzzle"][#] & /@ {fullBoard,
  sudokuPuzzle}

Next is a 16?16 board. The computation time to generate boards increases considerably with size because there are now 256 binary vectors of length 16 (as opposed to 81 vectors of length 9 for the 9?9 case). The following one took about 30 seconds to generate (but will change for every run):

{fullBoard, sudokuPuzzle} = ResourceFunction
&#10005

{fullBoard, sudokuPuzzle} =
  ResourceFunction["GenerateSudokuPuzzle"][4, 0.6];
ResourceFunction["DisplaySudokuPuzzle"][#] & /@ {fullBoard,
  sudokuPuzzle}

I will be honest: I did not have the courage to solve this sudoku puzzle. I would love to hear from you if you have attempted to solve one of these large puzzles!

Determining Difficulty Levels

The avid player will probably ask the next obvious question: What is the difficulty level of the previous puzzle? This is a tricky question to answer, and I believe it is subjective. However, we can attempt to rank a generated puzzle between 1 and 10, with 1 being easy and 10 being very hard, by looking at how many positions in the board can have their elements uniquely identified by using the three rules and gradually filling the board till no unique elements are present.

So, for a sudoku puzzle with 40% of elements exposed, the difficulty level will be:

{fullBoard, sudokuPuzzle} = ResourceFunction
&#10005

{fullBoard, sudokuPuzzle} =
  ResourceFunction["GenerateSudokuPuzzle"][3, 0.4];
ResourceFunction["EstimateSudokuDifficultyLevel"][sudokuPuzzle]

You could generate a puzzle by allowing the puzzle generator to return its hardest possible puzzle by specifying the number of exposed elements to be 0. Of course, that will not be possible, so the generator will return its best puzzle that can be solved uniquely:

{fullBoard, sudokuPuzzle} = ResourceFunction
&#10005

{fullBoard, sudokuPuzzle} =
  ResourceFunction["GenerateSudokuPuzzle"][3, 0.];
ResourceFunction["EstimateSudokuDifficultyLevel"][sudokuPuzzle]

Of course, every run will yield a different number and puzzle. This is the hard puzzle that the generator returned:

ResourceFunction
&#10005

ResourceFunction["DisplaySudokuPuzzle"][sudokuPuzzle]

Solving Killer Sudoku

The killer sudoku game is a variant of the original. It follows the same three rules of the original game, but instead of having numbers specified at certain positions, the player is provided with a board that looks like this:

Killer sudoku board

Each color group is called a cage, and a number is provided for each cage. This number represents the sum of all the numbers in that cage. For example, the top-left cage contains the number 26 and consists of four red squares. This means that the total of the numbers in those four red squares must equal 26.

Within our framework, this is actually remarkably easy to do. The trick in solving the killer sudoku puzzle using LinearOptimization is to associate each of the binary vectors with another variable that actually contains the number at that position. This is done by adding the following set of constraints in addition to the sudoku solver constraints:

Short
&#10005

Short[Table[Indexed[y, {i, j}] == Range[9].z[i, j], {i, 9}, {j, 9}],
  2]

There is a ResourceFunction called SolveKillerSudokuPuzzle that incorporates this additional constraint and solves the provided puzzle.

Generating a Killer Sudoku Board

Of course, there still needs to be a way to create the killer sudoku board. My approach was to generate random Tetris blocklike patterns and then use MorphologicalComponents to extract the various blocks (I am eager to hear from readers about their creative approaches to generating a killer sudoku puzzle). The approach I outlined lives as a ResourceFunction called GenerateKillerSudokuPuzzle and allows us to generate the required information for a killer sudoku puzzle:

Short
&#10005

Short[{refSudokuBoard, {cagePos, cageVals}} =
  ResourceFunction["GenerateKillerSudokuPuzzle"][], 4]

It would help to visualize this puzzle, and that can be done using DisplayKillerSudokuPuzzle:

ResourceFunction
&#10005

ResourceFunction["DisplayKillerSudokuPuzzle"][cagePos, cageVals]

I should point out that generating the killer sudoku puzzle is actually much easier and cheaper to generate than the traditional sudoku puzzle because there are no elements to remove. This puzzle is generated from the following reference sudoku board:

ResourceFunction
&#10005

ResourceFunction["DisplaySudokuPuzzle"][refSudokuBoard]

You can manually check that the puzzle is valid by adding the numbers in the cages. Our killer sudoku puzzle can now be solved:

solvedPuzzle = ResourceFunction
&#10005

solvedPuzzle =
 ResourceFunction["SolveKillerSudokuPuzzle"][cagePos, cageVals]

During experimentation, I found that sometimes the integer optimization problem is solved within a few seconds, and sometimes it takes over 30 seconds. So, it is difficult to give a good estimate of how quickly the problem can be solved. Here is the result for this particular case:

ResourceFunction
&#10005

ResourceFunction["DisplaySudokuPuzzle"][solvedPuzzle]

I have also noticed that sometimes the solved puzzle will not match the reference sudoku board. This, in my opinion, is completely fine. In my experience, the larger the cage size, the more flexibility the solver has to get a feasible solution, and the numbers, therefore, can move around. Smaller cages, on the other hand, make the problem more restrictive.

Additional Optimization Tools

I hope I have provided you a brief glimpse into the world of optimization, especially (mixed) integer optimization, and how the optimization framework can be used to solve some fun problems. There are plenty of application examples that you can find in the documentation pages of LinearOptimization, QuadradicOptimization, SecondOrderConeOptimization, SemidefiniteOptimization and ConicOptimization.

You will surely have fun playing and creating your own killer sudoku games. I tried solving a hard one from the web, and after an hour of yelling at the paper, I realized it is just easier for the computer to do it, and, well, here we are. Feel free to share your best puzzles in the comments below, or join the conversation on Wolfram Community.

Get full access to the latest Wolfram Language functionality with a Mathematica 12.1 or Wolfram|One trial.
 (0)

7. AI and the Wolfram Language Work toward Partial Automation in the Search for Cancer, 26 [−]

AI and the Wolfram Language Work toward Partial Automation in the Search for Cancer

NOTE: The following post contains real medical images.

As more technology is folded into medical environments all over the world, Wolframs European branch has taken on work with the United Kingdoms National Health Service (NHS) in an effort to partially automate the process of cancer diagnosis. The task is to use machine learning to avoid checking thousands of similar-looking images of peoples insides by hand for signs of cancer.

The Dilemma

In the modern age, we have computers to take a lot of intellectual drudgery off our hands, but not all of it. Everyone knows what its like to have to do something thats really important to get right, but also really time-consuming. Sometimes the work can be split up among many people, but often it has to be consistently and thoroughly accomplished by one expert in particular. With image analysis for signs of cancer, if you also happen to be the most qualified person to do the job, you cannot ask someone else to take overnor can you go on autopilot. Even if youre very motivated by the importance of your task, the boredom will get you eventually, making it more and more difficult to maintain the level of quality that the job warrants. Its just human nature.

For example: Famously, in the year 1873 the amateur mathematician William Shanks (18121882) had calculated ? to an unprecedented 707 decimal placescalculating mathematical constants was a hobby of his. Unfortunately, when a mechanical calculator was used to check his results 71 years later, it turned out that only the first 527 were correct. If even someone as highly motivated as Shanks can make mistakes in repetitive tasks, anyone can.

Computing ? is something we can safely let a computer handle because it will always outperform a human. However, some jobs can only be automated with machine learning algorithms, which cannot guarantee correct results. So were back to the dilemma we started with: what do we do with tasks that are both very important and very tedious?

Hours of Looking at Insides

In a Wolfram Technical Services project with the NHS and their service provider CorporateHealth Internationalfunded by Innovate UKwe are exploring a way to review videos of the insides of people to check them for signs of bowel cancer. These videos are made by a pill camera that travels through your digestive system and continuously sends images to a recorder you wear on your body. The procedure, as explained in this video about the HI-CAP Project and another video about data science in endoscopy, is significantly easier, cheaper and more comfortable than going to the hospital to have a surgeon poke around your insides with an endoscope. For this reason and others, it has the potential to save many lives by detecting tumors early when they can still be treated easily.

The ease of gathering the data does not directly translate to ease of analysis. Each video consists of thousands of frames, and some polyps or tumors will only appear on a single frame and may not even stand out from the background all that much. This means that a small army of nursesemployed by CorporateHealth Internationalis currently needed to analyze every single frame of each video, which is a laborious process, as you can imagine.

To alleviate this workload, we work together with the Computer Vision group from the University of Barcelona, where neural networks are being developed for exactly this task of polyp identification. Currently, this network has been implemented in TensorFlow, but we plan to port it over to the Wolfram neural network framework (using some intermediary format like ONNX) to make it part of a larger data-processing pipeline for pill camera videos.

Trusting AI Results

It is not enough to simply train a network and test it on a validation set before it can be put into practice. If the people who actually have to review the videos (and therefore bear responsibility for that analysis) are not convinced of the quality of the computers results, they will double-check everything by hand regardless, or even just return to the tools they are currently using. You cant blame them for wanting to be thorough.

For this reason, we are experimenting with different ways to present computer results to nurses, allowing corrections where necessary. This means playing around with the order in which the frames are presented (e.g., chronological vs. ordering by classification); how the computer classification is presented (a number, a class, a heat map on the image, etc.); and what kind of actions the nurse can take to correct the result so it can then be fixed in the next training round of the AI.

An example of AI identification of polyps

An example of AI identification of polyps (Figure 8 from this paper).

The goal is to use the Wolfram dynamic interactivity language to build a tool that allows users to slowly build experience in such a way that they start trusting AI results more and morein particular, the parts of the video where a computer indicates no risk factors. If a few frames are unjustly highlighted as polyps because its a little overcautious, its not much work to correct the result manually. On the other hand, if the AI tells the user that 99% of the video is free of polyps and the user doesnt trust that verdict, they will still check the entire video and the addition of an AI to the process will not have saved much time at all.

Current version of the interface

Current version of the interface. Images can be navigated vertically by classification and horizontally by chronological ordering. The frame border indicates the AI classification (from green to red), while the inner coloring between frame and image shows the human verdict (white if unrated).

The Work Ahead

In complex tasks like polyp detection, computers cannot provide completely authoritative computations like the digits of ?; their role is closer to that of a second opinion from another specialist. Unlike other specialists, though, we cannot directly communicate with a computer and ask it why it made a certain decision. The computer is a sort of silent expert, if you will. While the technology is promising, it is still a work in progress with questions yet to be explored. The best we can do is to interrogate the internals of the neural network to try and understand how it works, making it important to think carefully about how this silent expert is incorporated into a decision-making process that ultimately affects peoples lives.

Get full access to the latest Wolfram Language functionality with a Mathematica 12.1 or Wolfram|One trial.
 (0)

8. Computational Video Premieres in Wolfram Language 12.1, 19 [−]

Version 12.1 of the Wolfram Language introduces the long-awaited Video object. The Video object is completely (and only) out-of-core; it can link to an extensive list of video containers with almost any codec. Most importantly, it is bundled with complete stacks for image and audio processing, machine learning and neural nets, statistics and visualization and many more capabilities. This already makes the Wolfram Language a powerful video computation platform, but there are still more features to explore.

The Video Object

A video file typically has a video and an audio track. Here is a Video object linked to a video file:

Video

&#10005

Video["ExampleData/Caminandes.mp4"]

In Version 12.1, by default, the Video object is displayed as a small thumbnail and can be played in an external player. There are other appearances to enable in-notebook players, like the Video object with a basic player:

Video

&#10005

Video["ExampleData/Caminandes.mp4", Appearance -> "Basic"]

Now you can inspect the Video object:

Duration

&#10005

Duration[Video["ExampleData/Caminandes.mp4", Appearance -> Automatic,
  AudioOutputDevice -> Automatic, SoundVolume -> Automatic]]
Information

&#10005

Information[
 Video["ExampleData/Caminandes.mp4", Appearance -> Automatic,
  AudioOutputDevice -> Automatic, SoundVolume -> Automatic]]

Most video containers support multiple video, audio and subtitle tracks. Having multiple audio or subtitle tracks in a single file is more common than having more than one video track.

This is an example of a Video object linking to a file with multiple audio and subtitle tracks:

Information

&#10005

Information[Video["ExampleData/bullfinch.mkv"]]

Accessing Parts of a Video

There are several parts of a video you may be interested in extracting. Use VideoFrameList and VideoExtractFrames to extract specific video frames. You can also use VideoFrameList to sample the video uniformly or randomly with frames:

VideoFrameList

&#10005

VideoFrameList[
 Video["ExampleData/Caminandes.mp4", Appearance -> Automatic,
  AudioOutputDevice -> Automatic, SoundVolume -> Automatic], 3]

Use this function to create a thumbnail grid (a group of smaller images that summarizes the whole video):

VideoFrameList

&#10005

VideoFrameList[
  Video["ExampleData/Caminandes.mp4", Appearance -> Automatic,
   AudioOutputDevice -> Automatic, SoundVolume -> Automatic],
  12] // ImageCollage

You can also trim a segment of a video:

VideoTrim

&#10005

VideoTrim[
 Video["ExampleData/Caminandes.mp4", Appearance -> Automatic,
  AudioOutputDevice -> Automatic, SoundVolume -> Automatic], {30, 60}]

Or extract only the audio track from a video to analyze it:

Audio

&#10005

Audio[Video["ExampleData/Caminandes.mp4", Appearance -> Automatic,
  AudioOutputDevice -> Automatic, SoundVolume -> Automatic]]
Spectrogram

&#10005

Spectrogram[%]

Performing Analysis

In Version 12.1, we have introduced VideoTimeSeries, which works on frames of a video file to perform any computationeither one frame at a time or a list of frames all at once. This is a powerful tool capable of analysis like in the examples below.

Compute the mean color of each frame over time:

VideoTimeSeries

&#10005

VideoTimeSeries[Mean,
  Video["ExampleData/Caminandes.mp4", Appearance -> Automatic,
   AudioOutputDevice -> Automatic, SoundVolume -> Automatic]] //
 ListLinePlot[#, PlotStyle -> {Red, Green, Blue}] &

Count the number of objects (cars, for example) detected in each frame of a video:

v = Video

&#10005

v = Video["http://exampledata.wolfram.com/cars.avi"];
ts = VideoTimeSeries

&#10005

ts = VideoTimeSeries[Point[ImagePosition[#, Entity["Word", "car"]]] &,
   v]

Plot the number of objects (again, using cars as an example) detected in each frame:

TimeSeriesMap

&#10005

TimeSeriesMap[Length @@ # &, ts] // ListLinePlot

Highlight the position of all detected objects (cars) on a sample frame:

HighlightImage

&#10005

HighlightImage[
 VideoExtractFrames[v, 1], {AbsolutePointSize[3], Flatten@Values[ts]}]

We can also use the multiframe version of the function to perform any analysis that requires multiple frames.

By looking at consecutive frames from a pixabay video and computing the difference between four views, we can find the transition times from one view to another and then use those times to extract one frame per scene:

v = Video

&#10005

v = Video["Musician.mp4"]
diffs = VideoTimeSeries

&#10005

diffs = VideoTimeSeries[ImageDistance @@ # &, v,
  Quantity[2, "Frames"], Quantity[1, "Frames"]]
ListLinePlot

&#10005

ListLinePlot[diffs, PlotRange -> All]
times = FindPeaks

&#10005

times = FindPeaks[diffs, Automatic, Automatic, 150]["Times"]
VideoExtractFrames

&#10005

VideoExtractFrames[v, Prepend[times, 0]]

Process a Video

The Wolfram Language already included a variety of image and audio processing functions. VideoFrameMap is a function that takes one frame or a list of video frames, filters them and writes them to a new video file. Lets use the bullfinch video:

v = Video[v = Video[
&#10005

v = Video["ExampleData/bullfinch.mkv"];
VideoFrameList[v,3]

We can start with a color negation as a simple Hello, World! example:

VideoFrameMap

&#10005

VideoFrameMap[ColorNegate, v] // VideoFrameList[#, 3] &

Or posterize frames to create a cartoonish effect:

f = With

&#10005

f = With[{tmp = ColorQuantize[#, 16, Dithering -> False]},
    tmp - EdgeDetect[tmp]] &;
VideoFrameMap

&#10005

VideoFrameMap[f, v] // VideoFrameList[#, 3] &

Use a neural net to perform semantic segmentation on the previously used video of cars:

v = Video
&#10005

v = Video["http://exampledata.wolfram.com/cars.avi"];
segment
&#10005

segment[img_] :=
 Block[{net, encData, dec, mean, var, prob},
  net = NetModel["Dilated ResNet-38 Trained on Cityscapes Data"];
  encData = Normal@NetExtract[net, "input_0"];
  dec = NetExtract[net, "Output"];
  {mean, var} = Lookup[encData, {"MeanImage", "VarianceImage"}];
  Colorize@
   NetReplacePart[
     net, {"input_0" ->
       NetEncoder[{"Image", ImageDimensions@img, "MeanImage" -> mean,
         "VarianceImage" -> var}], "Output" -> dec}][img]]
VideoFrameList
&#10005

VideoFrameList[VideoFrameMap[segment, v], 3]

Next is a video stabilization example, which is a vastly simplified version of this Version 12.0 product example. The input video is another pick from pixabay:

v = Video
&#10005

v = Video["soap_bubble.mp4"]

Here is the mask over the ground to make sure the shaking soap bubble movement does not affect our stabilization algorithm:

mask = CloudGet

&#10005

mask = CloudGet["https://wolfr.am/Mt580rl0"];

Next is a routine to find correspondence and geometric transformation between every two consecutive frames, iteratively composed with the previous transformation to get a stabilization all the way to the initial frame:

f = Identity;

&#10005

f = Identity;
VideoFrameMap[
  Module[{tmp},
    tmp = Last@
        FindGeometricTransform[##, TransformationClass -> "Rigid"] & @@
       ImageCorrespondingPoints[Sequence @@ #, Sequence[
       MaxFeatures -> 25, Method -> "ORB", Masking -> mask]];
    f = Composition[tmp, f];
    ImagePerspectiveTransformation[#[[2]], f, Sequence[
     DataRange -> Full, Padding -> "Fixed"]]] &, v,
  Quantity[2, "Frames"], Quantity[1, "Frames"]];

From Manipulate to Video

Lets switch the topic to generation of video. Manipulate has been a core way of creating animations in the Wolfram Language for over a decade. In Version 12.1, Manipulate expressions can easily be converted to video.

This is a Manipulate from the Wolfram Demonstrations Project:

&#10005

m = ResourceData["Demonstrations Project: Day and Night World Clock"]

And a video generated from it:

Video

&#10005

Video[m]

A video can also be generated from a Manipulate and a Sound or Audio object:

Export

&#10005

Export["file.mp4", {"Animation" -> m,
   "Audio" -> ExampleData[{"Audio", "PianoScale"}]}, "Rules"] // Video

A Short Note about Supported Codecs

The Wolfram Language by default uses the operating system as well as a limited version of FFmpeg for decoding and encoding a large number of multimedia containers and codecs. $VideoEncoders, $VideoDecoders, $AudioEncoders, etc. list supported encoders and decoders.

Codec support can be expanded even further by installing FFmpeg (Version 4.0.0 or higher). This is the number of decoders and the list of MP4 video decoders on macOS with FFmpeg installed:

Length /@ $VideoDecoders

&#10005

Length /@ $VideoDecoders
$VideoDecoders

&#10005

$VideoDecoders["MP4"][[All, 1]]

More to Come

Video computation in the Wolfram Language is only at its beginning stages. The new capabilities featured here are only part of an already powerful collection of video basics, and we are actively designing and developing updates to existing functions and additional capabilities for future versions, with machine learning and neural net integration at the top of the list. Let us know what you think in the comments—bugs, suggestions and feature requests are always welcome.

Get full access to the latest Wolfram Language functionality with a Mathematica 12.1 or Wolfram|One trial.

: video/avi

 (1)

9. Quantum Chemistry: Step-by-Step Chemistry Series, 14 [−]

Quantum Chemistry: Step-by-Step Chemistry Series

After working our way through chemical reactions, solutions and structure and bonding, we close out our step-by-step chemistry series with quantum chemistry. Quantum chemistry is the application of quantum mechanics to atoms and molecules in order to understand their properties.

Have you ever wondered why the periodic table is structured the way it is or why chemical bonds form in the first place? The answers to those questions and many more come from quantum chemistry. Wolfram|Alpha and its step-by-step chemistry offerings wont make the wave-particle duality any less weird, but they will help you connect chemical properties to the underlying quantum mechanical behavior.

The step-by-step solutions provide stepwise guides that can be viewed one step at a time or all at once while working through a problem. Read on for example problems covering orbital diagrams, frequency and wavelength conversions, and mass-energy equivalence.

Orbital Diagrams

One fundamental aspect of chemistry is understanding where electrons live in atoms. Building orbital diagrams provides a good way to visualize this information. The step-by-step solution provides a general framework for solving this class of problems in the Plan step. Details of how to represent the information graphically, along with explanations of core electrons, are provided. An explanation of how many electrons a given orbital set can hold is available via the Show intermediate steps button.

Example Problem

Build the orbital diagram for elemental iron.

Step-by-Step Solution

For this class of problem, just enter “ orbital diagram for elemental iron”.

“orbital diagram for elemental iron”

Frequency & Wavelength Conversion

Electromagnetic radiation is central to many techniques in analytical chemistry. Converting frequency and wavelength is a critical skill for understanding theoretical models and interpreting experimental spectra. The photon wavelength calculator provides instructions for interconversion of the frequency and wavelength of electromagnetic radiation.

Example Problem

A sodium streetlight gives off yellow light with a wavelength of 598 nm. What is the frequency of this light?

Step-by-Step Solution

The calculator can be fed known information directly via “ photon wavelength lambda=598 nm”.

“photon wavelength lambda=598 nm”

Mass-Energy Equivalence

The nuclear binding energy is useful when tracking energy changes in nuclear reactions. Converting between mass and energy is a key step in computing nuclear binding energies. The relativistic energy calculator provides instructions for converting between mass and energy.

Example Problem

The mass defect for a He nucleus is 0.0304 u. What is the binding energy for this nuclide in joules per nucleus and MeV per nucleus?

Step-by-Step Solution

The calculator can be fed known information directly via “ relativistic energy m=0.0304 u”.

“relativistic energy m=0.0304 u”

Challenge Problems

Test your problem-solving skills by using the Wolfram|Alpha tools described to solve these word problems on quantum chemistry. Answers will be provided at the end of this post!

  1. Use an orbital diagram to predict the electron configuration of the P3– anion.
  2. The Trinity test released 5.5 × 1026 MeV. What mass is equivalent to this energy?


Answers to Last Week’s Challenge Problems

Here are the answers to last weeks challenge problems on structure and bonding.

1. What is the oxidation state of hydrogen in lithium aluminum hydride?

Recall that oxidation state and oxidation number are the same. Additionally, recall that Wolfram|Alpha computes all oxidation numbers in a molecule. Note that “ hydrogen oxidation state lithium aluminum hydride” actually returns results for both hydrogen (H2) and lithium aluminum hydride.

“oxidation state lithium aluminum hydride”

What is the orbital hybridization of the central atom in SF6?

Wolfram|Alpha determines the hybridization for all elements except hydrogen (it only has one orbital and therefore cannot hybridize) in a molecule. So you would just need to determine that S is the central atom.

“orbital hybridization SF6”


Answers to the Quantum Chemistry Challenge Problems

1. Use an orbital diagram to predict the electron configuration of the P3– anion.

Wolfram|Alpha generates orbital diagrams for neutral atoms in their ground state. However, the neutral atom diagram can be used to figure out where additional electrons will go or which electrons might be removed the easiest. In this case, three extra electrons need to be added to make the trianion.

The electron configuration for the phosphorus trianion is 3s2 3p6.

“P orbital diagram”

2. The Trinity test released 5.5 x 1026 MeV. What mass is equivalent to this energy?

The mass-energy equivalence calculator can be used to solve this, but now the energy must be passed in rather than the mass.

“relativistic energy E=5.5x10^26 MeV”

We hope you’ve enjoyed reading our step-by-step chemistry series, and that our review of chemical reactions, solutions and structure and bonding, along with today’s post on quantum chemistry, have been useful in your studies. New step-by-step solution offerings for chemistry are always rolling out; equilibrium constant expressions, rate-of-reaction expressions, electron configurations, valence electrons, reaction thermochemistry and solution pH are just some of the areas on the to-do list. So stay tuned and check back frequently!

 (0)

10. Structure and Bonding: Step-by-Step Chemistry Series, 08 [−]

Structure and Bonding: Step-by-Step Chemistry Series

Were back this week with more chemistry, to explore molecular structure and bonding with Wolfram|Alpha and its step-by-step chemistry offerings. Read more on chemical reactions and solutions from previous weeks, and join us next week for our final installment on quantum chemistry!

Structure and bonding in chemistry refer to where the atoms in a molecule are and what holds those atoms together. Molecules are held together by chemical bonds between the atoms comprising the molecule. Understanding the interplay between molecular structure and the electrons involved in bonding is what facilitates the design of new molecules, the control of chemical reactions and a better understanding of the molecules around us.

To master structure- and bonding-related calculations, the step-by-step solutions provide stepwise guides that can be viewed one step at a time or all at once. Read on for example problems covering Lewis structures, oxidation numbers and orbital hybridization.

Chemical Structure

Molecular species are not visible to the naked eye, so being able to represent them in a pictoral form is fundamental to communicating chemical information. One of the most common depictions is the Lewis structure. The step-by-step solution ( introduced in 2013) walks you through counting the valence electrons, assigning them to each atom and determining the required number of bonds.

Example Problem

What is the Lewis structure of nitrogen dioxide, NO2?

Step-by-Step Solution

In this case, you can simply enter your query, “ What is the Lewis structure of NO2”.

&ldqup;What is the Lewis structure of NO2”

Oxidation Numbers

Redox reactions are a huge class of chemical reactions involving the reduction of one reactant and the oxidation of another. In order to identify the reducing and oxidizing agents, the oxidation numbers for each element in a compound must be computed. The step-by-step solution walks you through partitioning bonding electrons and accounting for the electronegativity of each element.

Example Problem

Assign oxidation numbers to all of the elements in Na2SO4.

Step-by-Step Solution

For this type of problem, you can ask for “ Na2SO4 oxidation numbers”.

“Na2SO4 oxidation numbers”

Orbital Hybridization

Atomic orbitals of similar energy and the same symmetry can mix to form hybrid orbitals. These hybrid orbitals directly affect the three-dimensional arrangement of atoms in a molecule. The step-by-step solution explains how to determine orbital hybridization from the structure diagram and steric numbers.

Example Problem

What is the hybridization on each atom in succinylacetone?

Step-by-Step Solution

Finding the hybridization is easy when you enter “ succinylacetone hybridization”.

“succinylacetone hybridization”

Challenge Problems

Test your problem-solving skills by using the Wolfram|Alpha tools described to solve these word problems on structure and bonding. Answers will be provided in the next blog post in this series.

  1. What is the oxidation state of hydrogen in lithium aluminum hydride?
  2. What is the orbital hybridization of the central atom in SF6?


Answers to Last Week’s Challenge Problems

Here are the answers to last weeks challenge problems on chemical solutions.

1. A good ratio for the salt bath used in old-fashioned ice-cream makers is five cups ice to one cup salt. What is the mass fraction of the resulting mixture?

The volume-to-mass conversions need to be done in two separate Wolfram|Alpha queries.

“mass of five cups ice”

“convert one cup salt to mass”

Then pass the results into a mass fraction query.

“mass fraction 511 g salt in 1.084 kg ice”

2. What is the molality of ethylene glycol for a solution that freezes at –5.00 °C?

First, look up the cryoscopic constant for ethylene glycol.

“cryoscopic constant ethylene glycol”

Next, plug the retrieved information into the freezing-point depression calculator.

“freezing point depression Kf=3.11 K kg/mol, i=1, Tf=-5C”

Join us next week for our final installment on quantum chemistry. And as always, if you have suggestions for other step-by-step content (in chemistry or other subjects), please let us know! You can reach us by leaving a comment below or sending in feedback at the bottom of any Wolfram|Alpha query page.

 (0)


 
 RSS- () — RSSfeedReader
: 10
:

Books (2)
Data Analysis and Visualization (2)
Developer Insights (5)
Education (3)
Image Processing (2)
Machine Learning (2)
Mathematics (3)
New Technology (2)
Other Application Areas (1)
Recreational Computation (1)
Software Development (1)
Wolfram Language (3)
Wolfram News (1)
Wolfram|Alpha (2)
:

2020-07-09, (1)
2020-07-02, (1)
2020-06-23, (1)
2020-06-16, (1)
2020-06-10, (1)
2020-06-02, (1)
2020-05-26, (1)
2020-05-19, (1)
2020-05-14, (1)
2020-05-08, (1)
:

Amy Simpson (1)
Christopher Carlson (1)
Conrad Wolfram (1)
Dariia Porechna (1)
Paritosh Mokhasi (1)
Shadi Ashnai (1)
Sjoerd Smit (1)
The WolframAlpha Chemistry Team (2)
Toni Schindler (1)