#!/usr/bin/env python3 import glob import os import time import argparse from pathlib import Path from pyctbn.legacy import JsonImporter from pyctbn.legacy import SamplePath from pyctbn.legacy import StructureConstraintBasedEstimator def structure_constraint_based_estimation_example(network_file_path): Path("./data").mkdir(parents=True, exist_ok=True) # read_files = glob.glob(os.path.join("./data/", "*.json")) # importer = JsonImporter( file_path=network_file_path, samples_label='samples', structure_label='dyn.str', variables_label='variables', time_key='Time', variables_key='Name' ) start_time = time.time() # importer.import_data(0) # construct a SamplePath Object passing a filled AbstractImporter object s1 = SamplePath(importer=importer) # build the trajectories s1.build_trajectories() # build the information about the net s1.build_structure() # construct a StructureEstimator object passing a correctly build SamplePath object # and the independence tests significance, if you have prior knowledge about # the net structure create a list of tuples # that contains them and pass it as known_edges parameter se1 = StructureConstraintBasedEstimator( sample_path=s1, exp_test_alfa=1e-6, chi_test_alfa=1e-4, known_edges=[], thumb_threshold=25 ) # call the algorithm to estimate the structure se1.estimate_structure() end_time = time.time() print("Elaspsed time: %d seconds" % (end_time - start_time)) # obtain the adjacency matrix of the estimated structure #print(se1.adjacency_matrix()) Path("./res").mkdir(parents=True, exist_ok=True) # save the estimated structure to a json file # (remember to specify the path AND the .json extension).... se1.save_results("./res/results0.json") # ...or save it also in a graphical model fashion # (remember to specify the path AND the .png extension) #se1.save_plot_estimated_structure_graph("./res/result0.png") parser = argparse.ArgumentParser() parser.add_argument('filename', help="path of the network in json format") args = parser.parse_args() structure_constraint_based_estimation_example(args.filename)