Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • f249f51e4cd845102e5de96f00848a2283dd4cf2
  • main par défaut protégée
2 résultats

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