Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

NetworkX Graph attributes in a single table

I am trying to create a table displaying the attributes of nodes in a NetworkX (using Python) graph. The functions used to get these attributes generate a list of the nodes with their assigned attribute and are generated like in the following:

import networkx as nx

# degrees of nodes
pprint(g.degree())

# clustering coefficient
pprint(nx.clustering(g))

I should like to be able to compile these into a table with intuitive overview in the following format:

node    degree    clustering coefficient
----------------------------------------
a       2         3
b       1         1
...

Any tips on how to do so? Perhaps using a dict and tabulate but I am not quite sure… Would be grateful for any tips!

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Edit
I found a way to do some simple printing, but it isn’t formatted very nicely and doesn’t make for nice syntax:

for n in g.nodes():
    print(n, g.degree(n), nx.clustering(g, n))

>Solution :

I would use a Pandas dataframe (pd.DataFrame) to store this data, which I would construct in a list comprehension of dictionaries (each dictionary corresponding to a row in the final data frame). Here’s how I would do that with two attributes, in_degree and out_degree for each node:

import pandas as pd
import networkx as nx
g = nx.DiGraph()

# ... populate the Digraph ...

def compute_indegree(node, digraph):
  return digraph.in_degree(node)

def compute_outdegree(node, digraph):
  return digraph.out_degree(node)

attr_dicts = [
  { 'node': node,
    'in_degree': compute_indegree(node, g), \
    'out_degree': compute_outdegree(node, g)} \
  for node in g.nodes
]

dataframe = pd.DataFrame(attr_dicts)
dataframe.set_index('node', inplace=True)
print(dataframe)

The final print line neatly formats the resulting DataFrame:

Printline results

If you modify or add the above functions compute_indegree and compute_outdegree to return other stats like your clustering coefficient, the table will still populate as above.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading