fn compute_graph_stats_json()

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()
    }