keepcalculator

06 Numbers and Powers

How Chemists Found Six Degrees of Separation in a Reaction Network

Card No. 06·38065 · Updated · Standard formula, shown below

This guide explains how researchers used network analysis to reveal that any two chemical reactions in a vast database are connected by an average of just six steps, a phenomenon dubbed the “six degrees of separation” of chemistry. You’ll learn the step-by-step method they used to construct a reaction network from known chemical transformations and compute the average path length between all pairs of reactions. No prior network analysis experience is required, but a basic familiarity with chemical reactions and Python will help.

What You’ll Need

  • A computer with Python 3.8+ installed
  • Python libraries: networkx, numpy, pandas, and matplotlib (install via pip install networkx numpy pandas matplotlib)
  • A dataset of chemical reactions in a machine-readable format (e.g., SMILES or InChI strings for reactants and products). Public sources include the USPTO reaction database or Reaxys (if you have access). For practice, you can use a small sample from the “chemical reactions” dataset on Kaggle.
  • Basic knowledge of SMILES notation (optional but helpful for understanding the data).

Step-by-Step

  1. Obtain and clean your reaction dataset. Load your reaction data into a pandas DataFrame. Each row should contain a reactant set and a product set. If your data is in SMILES, use RDKit to parse and canonicalize the molecules. Remove duplicates and reactions with missing or invalid structures.
  2. Define nodes as reactions. In this network, each reaction is a node. Assign a unique identifier to each reaction (e.g., an integer index). If you have thousands of reactions, this step is straightforward; if you have millions, consider sampling a subset to keep computation feasible.
  3. Define edges based on shared molecules. Two reactions are connected if they share at least one molecule (reactant or product). For example, if reaction A produces compound X and reaction B consumes X, then A and B are linked. To find these links, create a mapping from each molecule to the set of reactions it appears in. Then, for each molecule, connect all reactions in that set (i.e., add an edge between every pair of reactions that share that molecule).
  4. Build the graph with NetworkX. Create an empty graph: G = nx.Graph(). Add all reaction IDs as nodes. Then iterate through your molecule-to-reactions mapping and add edges using G.add_edge(rxn1, rxn2). If a molecule appears in many reactions, this can create a dense network; you may want to limit connections to reactions that share a specific role (e.g., a product of one is a reactant of another) to avoid trivial connections.
  5. Check connectivity. Use nx.is_connected(G) to see if the graph is fully connected. In practice, the network may have multiple components. To compute the average path length across the whole network, you need to consider only the largest connected component (LCC). Extract it with Gc = max(nx.connected_components(G), key=len) and create a subgraph: G_lcc = G.subgraph(Gc).copy().
  6. Compute the average shortest path length. Use average_shortest_path_length(G_lcc). This function computes the shortest path (in number of edges) between every pair of nodes in the LCC and returns the mean. This mean is the “six degrees” value. For a large network, this computation can be slow; if you have more than a few thousand nodes, consider using a sample of node pairs or the nx.approximation.average_shortest_path_length function.
  7. Interpret the result. If the average shortest path length is around 6, you’ve confirmed the six degrees of separation. For the USPTO database, the reported value is approximately 6.0. This means that, on average, any two reactions are connected by a chain of about six reaction steps.
  8. Visualize the network (optional). Use nx.draw with matplotlib to plot the network. Since the network is huge, you may want to plot a random sample of nodes or use a layout like spring_layout on a subgraph. This helps illustrate the interconnectedness.

Common Mistakes

  • Ignoring disconnected components. If you compute the average path length on the whole graph, you’ll get an error because some node pairs have no path. Always use the largest connected component.
  • Not cleaning the data. Duplicate reactions or incorrect SMILES can create spurious connections. Always canonicalize and deduplicate.
  • Using the wrong edge definition. If you connect reactions that share any molecule, you might get a very small average path length (like 2) because many reactions share common reagents (e.g., water). To get a meaningful “separation” of reactions, restrict edges to cases where a product of one is a reactant of another (or vice versa). This is the standard approach in the original study.
  • Forgetting to convert to a simple graph. NetworkX’s add_edge will add parallel edges if the same pair appears multiple times, but average_shortest_path_length ignores them anyway. However, to avoid memory issues, use G.add_edge only once per pair, or use a set to track edges.

Tips

  • Start with a small dataset (e.g., 1,000 reactions) to test your pipeline before scaling up.
  • Use RDKit to canonicalize SMILES: Chem.MolToSmiles(Chem.MolFromSmiles(smiles)) ensures that the same molecule is represented identically.
  • When building the molecule-to-reactions map, use a dictionary: mol_to_rxns = defaultdict(set) and add reaction IDs.
  • For large networks, consider using the nx.approximation.average_shortest_path_length which samples node pairs and is much faster.
  • If you want to replicate the exact result, use the USPTO database (or a large subset) and filter reactions to those with a single product and a single reactant (or use the full set with the product-to-reactant rule).

Troubleshooting

  • NetworkX raises an error about infinite path length. This happens when the graph is not connected. Compute the LCC first and use only that subgraph.
  • Computation is too slow. For large graphs, the exact computation is O(n^3). Use the approximation function or sample a subset of nodes. If you have more than 10,000 nodes, the exact method may take hours.
  • Your average path length is much lower than 6 (e.g., 2). This likely means your edge definition is too permissive. Restrict edges to reactant-product relationships.
  • Your average path length is much higher (e.g., 10). This could be due to a sparse network or many disconnected small components. Ensure you are using the LCC, and check if your dataset is too small or fragmented.
  • Memory issues when building the graph. Use a sparse representation: instead of adding all edges for a molecule with many reactions, you can use a bipartite graph approach or limit to molecules that appear in a moderate number of reactions.

Frequently Asked Questions

Q: What exactly is a reaction network?
A: A reaction network is a graph where nodes represent chemical reactions and edges represent a shared molecule (typically a product of one reaction being a reactant of another). It captures the connectivity of chemical transformations.

Q: Why is the average path length about 6?
A: The number 6 emerges from the structure of organic chemistry: there are many common intermediates (like benzene derivatives) that act as hubs, connecting diverse reactions. This is analogous to social networks where a few well-connected individuals bridge different groups.

Q: Can I use this method for any set of reactions?
A: Yes, as long as you have a list of reactions with defined reactants and products. The method is generic and works for any reaction database, though the average path length may vary depending on the diversity of reactions.

Q: What if my network has multiple disconnected components?
A: That’s common. The average path length is only meaningful within a connected component. Researchers typically report the value for the largest connected component, which usually contains the vast majority of reactions.

Q: How large does the dataset need to be?
A: To observe the six-degree phenomenon, you need a substantial and diverse set of reactions—typically thousands to millions. Small, homogeneous datasets may not exhibit this property.

Q: Is this related to the “small-world” phenomenon?
A: Yes. The six degrees of separation is a classic example of a small-world network, characterized by short average path lengths and high clustering. Reaction networks exhibit both properties.

Related

Method: the standard formula for this calculation, rounded as each result states. See how the calculators work or report an error.

More cards in this drawer

The whole Numbers and Powers drawer →