The TNO PET Lab consists of generic software components, procedures, and functionalities developed and maintained on a regular basis to facilitate and aid in the development of PET solutions. The lab is a cross-project initiative allowing us to integrate and reuse previously developed PET functionalities to boost the development of new protocols and solutions.
The package tno.sdg.graph.gen.graphbin
is part of the TNO Python Toolbox.
The research activities that led to this protocol and implementation were supported by TNO's Appl.AI programme.
Limitations in (end-)use: the content of this software package may solely be
used for applications that comply with international export control laws.
This implementation of software has not been audited. Use at your own risk.
Documentation of the tno.sdg.graph.gen.graphbin
package can be found
here.
Easily install the tno.sdg.graph.gen.graphbin
package using pip:
$ python -m pip install tno.sdg.graph.gen.graphbin
The package has two groups of optional dependencies:
tests
: Required packages for running the tests included in this packagescripts
: The packages required to run the example script
This repository implements part of the GraphBin algorithm. Currently, the edge
generation step of GraphBin is implemented, but not the node generation. It is
only supported to generate synthetic graphs "from scratch", i.e. without a
source graph from which characteristics are learned. Instead, the current
implementation provides the method GraphBin.from_scratch
, which generates a
new random graph based on the provided parameters.
The parameters are as follows:
n_samples
: The number of nodes to generateparam_feature
: Parameter governing exponential distribution from which the value of the "feature" is sampled (i.e. transaction amount)param_degree
: Parameter governing the powerlaw distribution from which the degrees of the nodes are sampledcor
: Specify the correlation betweenparam_feature
andparam_degree
param_edges
: Roughly related to the strength of the binning on the edge probabilities
Below, examples of feature and degree distributions are shown for different
values of param_feature
and param_degree
.
Be sure to install the scripts
optional dependency group (see installation
instructions).
import matplotlib.pyplot as plt
import networkx as nx
from tno.sdg.graph.gen.graphbin import GraphBin
N = 200
graphbin = GraphBin.from_scratch(
n_samples=N,
param_feature=2000,
param_degree=19,
cor=0.3,
param_edges=4000,
random_state=80,
)
graph = graphbin.generate()
Plot the node degree & node feature.
plt.figure(figsize=(15, 10), dpi=300)
plt.scatter(graph.degree, graph.feature, s=150, alpha=0.65)
plt.xlabel("Node degree")
plt.ylabel("Node feature")
plt.title("Node degree and node feature (node-level feature), for " + str(N) + " nodes")
plt.show()
And the graph:
plt.figure(figsize=(15, 10), dpi=300)
G = nx.Graph()
G.add_nodes_from(graph.index)
G.add_edges_from(tuple(map(tuple, graph.edges)))
pos = nx.spring_layout(G, k=100 / N)
nx.draw(G, node_size=350, node_color=graph.feature, pos=pos)
plt.title("Synthetic graph with nodes colored by feature value")
plt.show()