From ae116fd7b9928d29526cee7858b5064246e1e80f Mon Sep 17 00:00:00 2001 From: Thomas MESLIN <th.meslin@gmail.com> Date: Thu, 27 Mar 2025 03:45:22 +0100 Subject: [PATCH] Generation des nodes et edges pour faire un graphe --- script/src/csv.ml | 54 ++++++++++++++++++++++++++++++ script/src/point_assos_to_gephi.ml | 13 +++++-- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/script/src/csv.ml b/script/src/csv.ml index e9e0e9b..8d60388 100644 --- a/script/src/csv.ml +++ b/script/src/csv.ml @@ -52,6 +52,10 @@ let merge_column rand_csv col_name1 col_name2 new_col_name f = {column_name = new_col_name;data = new_data} +let del_column csv nom_col = + merge_column csv nom_col nom_col "" (fun a b -> "") + + let map rand_csv col_name f = begin let idx = trouve_indice rand_csv.column_name col_name in let new_data = List.map @@ -122,5 +126,55 @@ let create_line csv l = set_arg l; add_line csv arr +let to_graph csv col_name_label = + let nodes = create ["Id";"Label"] in + let edges = create ["Source";"Target";"Type";"Id";"Weight"] in + let hash_node = Hashtbl.create (List.length csv.column_name) in + + let rec ajoute_assos node k nom_assos = match nom_assos with + |[] -> node,k + |nom_assos :: tl -> + if nom_assos <> "" && not (String.equal nom_assos col_name_label) then begin + Hashtbl.add hash_node nom_assos (string_of_int k); + ajoute_assos (add_line node [|string_of_int k;nom_assos|]) (k+1) tl + end + else + ajoute_assos node k tl + in + let nodes,k = ajoute_assos nodes 0 csv.column_name in + + let id = trouve_indice csv.column_name col_name_label in + + let ajoute_label node k = + let id = trouve_indice csv.column_name col_name_label in + let node,k = List.fold_left (fun (node,acc) arr -> + let label = arr.(id) in + Hashtbl.add hash_node label (string_of_int acc); + + (add_line node [|string_of_int acc;label|],acc + 1) + ) + (node,k) csv.data + in + node,k + in + let nodes,k = ajoute_label nodes k in + + let ajoute_arete edge label assos k poids = + add_line edge [|Hashtbl.find hash_node label;Hashtbl.find hash_node assos;"Undirected";k;poids|] + in + let ajoute_arete_ligne edge arr k_i = + let label = arr.(id) in + let edge,k,_ = List.fold_left (fun (edge,k,i) nom_col -> + if arr.(i) = "" || nom_col = "" || String.equal nom_col col_name_label + then + (edge,k,i+1) + else + (ajoute_arete edge label nom_col (string_of_int k) arr.(i),k+1,i+1)) + (edge,k_i,0) csv.column_name + in + edge,k + in + let edges,k = List.fold_left (fun (edge,k) arr -> ajoute_arete_ligne edge arr k) (edges,0) csv.data in + edges,nodes diff --git a/script/src/point_assos_to_gephi.ml b/script/src/point_assos_to_gephi.ml index a7392eb..5ce0249 100644 --- a/script/src/point_assos_to_gephi.ml +++ b/script/src/point_assos_to_gephi.ml @@ -25,7 +25,16 @@ let () = begin let _ = apply_coef coef_asso points_assos in let _ = apply_coef coef_liste points_assos in - Csv.save points_assos "../../res_script/point_assos_re_coefficiente.csv" - + + Csv.save points_assos "../../res_script/point_assos_re_coefficiente.csv"; + + let points_assos = Csv.merge_column points_assos "NOM" "Prénom" "Nom Prenom" (fun a b -> a ^ " " ^b) in + let points_assos = Csv.del_column points_assos "Formation" in + let points_assos = Csv.del_column points_assos "Total" in + let points_assos = Csv.del_column points_assos "Assos" in + let edges,nodes= Csv.to_graph points_assos "Nom Prenom" in + Csv.save nodes "../../res_script/nodes.csv"; + Csv.save edges "../../res_script/edges.csv"; + print_endline "Graphe généré avec succès !" end -- GitLab