Sélectionner une révision Git
graph_export.ml
graph_export.ml 4,49 Kio
let create_gexf path node_data edge_data =
let oc = open_out path in
let t = Unix.time () in
let tm = Unix.localtime t in
let date = Printf.sprintf "%4d-%02d-%02d" (tm.tm_year+1900) (tm.tm_mon+1) tm.tm_mday in (*yyyy-mm-dd*)
let node_col0 = Csv.get_column node_data |> List.hd in
let n_node = Csv.fold node_data node_col0 (fun x _ -> x+1) 0 in
let edge_col0 = Csv.get_column edge_data |> List.hd in
let n_edge = Csv.fold edge_data edge_col0 (fun x _ -> x+1) 0 in
(*Création de l'HEADER*)
output_string oc "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
output_string oc
("<gexf xmlns=\"http://gexf.net/1.3\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xsi:schemaLocation=\"http://gexf.net/1.3
http://gexf.net/1.3/gexf.xsd\"
version=\"1.3\">
<meta lastmodifieddate=\""^date^"\">
<creator>Me</creator>
<description>A test file</description>
</meta>\n");
(*End_HEADER*)
(*Start graph*)
output_string oc " <graph defaultedgetype=\"undirected\" idtype=\"integer\">\n";
(*Ajout de la categorie*)
output_string oc
" <attributes class=\"node\">
<attribute id=\"0\" title=\"cat\" type=\"string\">
<default>Eleve</default>
<options>[Eleve,Asso]</options>
</attribute>
</attributes>\n";
(*start nodes*)
output_string oc (Printf.sprintf " <nodes count=\"%d\">\n" n_node);
Csv.iter_line node_data
(fun htab ->
let id = Hashtbl.find htab "Id" in
let label = Hashtbl.find htab "Label" in
let cat = Hashtbl.find htab "Categorie" in
let nouvelle_ligne =
if cat = "Eleve" then
Printf.sprintf " <node id=\"%s\" label=\"%s\"/>\n" id label
else
Printf.sprintf
" <node id=\"%s\" label=\"%s\">
<attvalues>
<attvalue for=\"0\" value=\"%s\"/>
</attvalues>
</node>\n" id label cat
in
output_string oc nouvelle_ligne
);
(*end nodes*)
output_string oc " </nodes>\n";
(*start edges*)
output_string oc (Printf.sprintf " <edges count=\"%d\">\n" n_edge);
Csv.iter_line edge_data
(fun htab ->
let id = Hashtbl.find htab "Id" in
let src = Hashtbl.find htab "Source" in
let tgt = Hashtbl.find htab "Target" in
let weight = Hashtbl.find htab "Weight" in
let nouvelle_ligne = Printf.sprintf " <edge id=\"%s\" source=\"%s\" target=\"%s\" weight=\"%s\"/>\n" id src tgt weight in
output_string oc nouvelle_ligne
);
(*end edges*)
output_string oc " </edges>\n";
(*End graph*)
output_string oc " </graph>\n";
output_string oc "</gexf>\n";
close_out oc
let () = begin
let node_data = Csv.open_as_csv "../../res_script/nodes_avec_fantome.csv" in
(*Id,Label,Categorie*)
let edge_data = Csv.open_as_csv "../../res_script/edges_avec_fantome.csv" in
(*Source,Target,Type,Id,Weight*)
create_gexf "../../res_script/graphe_assos_actif_frantome.gexf" node_data edge_data;
print_endline "Graphe assos actif frantome crée.";
let node_data = Csv.open_as_csv "../../res_script/nodes_sans_fantome.csv" in
(*Id,Label,Categorie*)
let edge_data = Csv.open_as_csv "../../res_script/edges_sans_fantome.csv" in
(*Source,Target,Type,Id,Weight*)
create_gexf "../../res_script/graphe_assos_actif.gexf" node_data edge_data;
print_endline "Graphe assos actif crée";
let node_data = Csv.open_as_csv "../../res_script/nodes_eleve_vs_fantome.csv" in
(*Id,Label,Categorie*)
let edge_data = Csv.open_as_csv "../../res_script/edges_eleve_vs_fantome.csv" in
(*Source,Target,Type,Id,Weight*)
create_gexf "../../res_script/graphe_eleve_vs_fantome.gexf" node_data edge_data;
print_endline "Graphe actif vs fantom";
print_endline "Graphes exporté au bon format avec succès"
end