in src/dachshund/simple_transformer.rs [42:84]
fn compute_graph_stats_json(graph: &SimpleUndirectedGraph) -> String {
let conn_comp = graph.get_connected_components();
let largest_cc = conn_comp.iter().max_by_key(|x| x.len()).unwrap().to_vec();
let size_of_largest_cc = largest_cc.len();
let sources: Vec<NodeId> = largest_cc
.choose_multiple(&mut rand::thread_rng(), 100)
.copied()
.collect();
let betcent = graph
.get_node_betweenness_starting_from_sources(&sources, false, Some(largest_cc))
.unwrap();
let evcent = graph.get_eigenvector_centrality(0.001, 1000);
let mut removed: FxHashSet<NodeId> = FxHashSet::default();
let k_cores_2 = graph._get_k_cores(2, &mut removed);
let k_trusses_3 = graph._get_k_trusses(3, &removed).1;
let k_cores_4 = graph._get_k_cores(4, &mut removed);
let k_trusses_5 = graph._get_k_trusses(5, &removed).1;
let k_cores_8 = graph._get_k_cores(8, &mut removed);
let k_trusses_9 = graph._get_k_trusses(9, &removed).1;
let k_cores_16 = graph._get_k_cores(16, &mut removed);
let k_trusses_17 = graph._get_k_trusses(17, &removed).1;
json!({
"num_edges": graph.count_edges(),
"num_2_cores": k_cores_2.len(),
"num_4_cores": k_cores_4.len(),
"num_8_cores": k_cores_8.len(),
"num_16_cores": k_cores_16.len(),
"num_3_trusses": k_trusses_3.len(),
"num_5_trusses": k_trusses_5.len(),
"num_9_trusses": k_trusses_9.len(),
"num_17_trusses": k_trusses_17.len(),
"num_connected_components": conn_comp.len(),
"size_of_largest_cc": size_of_largest_cc,
"bet_cent": (Iterator::sum::<f64>(betcent.values()) /
(betcent.len() as f64) * 1000.0).floor() / 1000.0,
"evcent": (Iterator::sum::<f64>(evcent.values()) /
(evcent.len() as f64) * 1000.0).floor() / 1000.0,
"clust_coef": (graph.get_avg_clustering() * 1000.0).floor() / 1000.0,
})
.to_string()
}