1
0
Fork 0

Complete Major changes in project structure

parallel_struct_est
philpMartin 5 years ago
parent 2859e531e1
commit 78e00ae3e4
  1. 68
      main_package/classes/dynamic_graph.py
  2. 32
      main_package/classes/importer.py
  3. 21
      main_package/classes/node.py
  4. 8
      main_package/classes/sample_path.py
  5. 15
      main_package/classes/trajectory.py

@ -0,0 +1,68 @@
import numpy as np
import sample_path as sp
import node
class DynamicGraph():
def __init__(self, sample_path):
self.sample_path = sample_path
self.graph = {}
self.states_number = 0
def initialize_graph(self, trajectory):
for(node_id,state) in enumerate(trajectory.get_states()):
n = node.Node(state, node_id)
self.graph[state] = {"Arcs":{}, "Time":0.0, "Node":n}
self.states_number += 1
def build_graph_from_first_traj(self, trajectory):
self.initialize_graph(trajectory)
matrix_traj = trajectory.get_trajectory_as_matrix()
for indx in range(len(matrix_traj) - 1):
self.add_transaction(matrix_traj, indx)
def add_transaction(self, matrix_traj, indx):
current_state = matrix_traj[indx][1]
next_state = matrix_traj[indx + 1][1]
self.graph[current_state]["Time"] += matrix_traj[indx + 1][0] - matrix_traj[indx][0]
next_node = self.graph[next_state]["Node"]
if next_node not in self.graph[current_state]["Arcs"].keys():
self.graph[current_state]["Arcs"][next_node] = 1
else:
self.graph[current_state]["Arcs"][next_node] += 1
def append_new_trajectory(self, trajectory):
matrix_traj = trajectory.get_trajectory_as_matrix()
for indx in range(len(matrix_traj) - 1):
current_state = matrix_traj[indx][1]
next_state = matrix_traj[indx + 1][1]
if current_state not in self.graph.keys():
current_node = node.Node(current_state, self.states_number)
self.graph[current_state] = {"Arcs":{}, "Time":0.0, "Node":current_node}
self.states_number += 1
if next_state not in self.graph.keys():
next_node = node.Node(next_state, self.states_number)
self.graph[next_state] = {"Arcs":{}, "Time":0.0, "Node":next_node}
self.states_number += 1
self.add_transaction(matrix_traj, indx)
def build_graph(self):
for indx, trajectory in enumerate(self.sample_path.trajectories):
if indx == 0:
self.build_graph_from_first_traj(trajectory)
else:
self.append_new_trajectory(trajectory)
######Veloci Tests#######
s1 = sp.SamplePath()
s1.build_trajectories()
print(s1.get_number_trajectories())
g1 = DynamicGraph(s1)
g1.build_graph()
print(g1.graph)
print(g1.states_number)

@ -33,8 +33,8 @@ class Importer():
for file in read_files: for file in read_files:
my_df = pd.read_csv(file) #TODO:Aggiungere try-catch controllo correttezza dei tipi di dato presenti nel dataset e.g. i tipi di dato della seconda colonna devono essere float my_df = pd.read_csv(file) #TODO:Aggiungere try-catch controllo correttezza dei tipi di dato presenti nel dataset e.g. i tipi di dato della seconda colonna devono essere float
self.df_list.append(my_df) self.df_list.append(my_df)
def merge_value_columns(self, df): def merge_value_columns(self, df):
""" Effettua il merging di tutte le colonne che contengono i valori delle variabili in un unica colonna chiamata State. """ Effettua il merging di tutte le colonne che contengono i valori delle variabili in un unica colonna chiamata State.
@ -45,6 +45,15 @@ class Importer():
""" """
df['State'] = df[df.columns[2:]].apply(lambda row: ''.join(row.values.astype(str)), axis=1) df['State'] = df[df.columns[2:]].apply(lambda row: ''.join(row.values.astype(str)), axis=1)
def drop_unneccessary_columns(self, df):
cols = df.columns.values[2:-1]
print(cols)
df.drop(cols, axis=1, inplace=True)
def drop_unneccessary_columns_in_all_frames(self):
for data_frame in self.df_list:
self.drop_unneccessary_columns(data_frame)
def merge_value_columns_in_all_frames(self): def merge_value_columns_in_all_frames(self):
for data_frame in self.df_list: for data_frame in self.df_list:
self.merge_value_columns(data_frame) self.merge_value_columns(data_frame)
@ -55,30 +64,9 @@ class Importer():
def clear_data_frames(self): def clear_data_frames(self):
for data_frame in self.df_list: for data_frame in self.df_list:
data_frame = data_frame.iloc[0:0] data_frame = data_frame.iloc[0:0]
"""def build_trajectories(self):
for data_frame in self.df_list:
self.merge_value_columns(data_frame)
trajectory = data_frame[['Time','State']].to_numpy()
self.trajectories.append(trajectory)
#Clear the data_frame
data_frame = data_frame.iloc[0:0]"""
#imp = Importer("../data")
#imp.import_data_from_csv()
#imp.build_trajectories()
#print(imp.trajectories[0])

@ -0,0 +1,21 @@
class Node():
def __init__(self, state_id, node_id=-1):
self.state_id = state_id
self.node_id = node_id
def __key(self):
return (self.state_id)
def __hash__(self):
return hash(self.__key())
def __eq__(self, other):
if isinstance(other, Node):
return self.__key() == other.__key()
return NotImplemented
def __repr__(self):
return "<%s, %d>"% (self.state_id, self.node_id)

@ -1,12 +1,13 @@
import pandas as pd import pandas as pd
import numpy as np import numpy as np
import os
import importer as imp import importer as imp
import trajectory as tr import trajectory as tr
class SamplePath(): class SamplePath():
def __init__(self, files_path): def __init__(self, files_path=os.getcwd() + "/main_package/data"):
self.importer = imp.Importer(files_path) self.importer = imp.Importer(files_path)
self.trajectories = [] self.trajectories = []
@ -14,6 +15,7 @@ class SamplePath():
def build_trajectories(self): def build_trajectories(self):
self.importer.import_data_from_csv() self.importer.import_data_from_csv()
self.importer.merge_value_columns_in_all_frames() self.importer.merge_value_columns_in_all_frames()
self.importer.drop_unneccessary_columns_in_all_frames()
for data_frame in self.importer.get_data_frames(): for data_frame in self.importer.get_data_frames():
trajectory = tr.Trajectory(data_frame) trajectory = tr.Trajectory(data_frame)
self.trajectories.append(trajectory) self.trajectories.append(trajectory)
@ -26,9 +28,9 @@ class SamplePath():
######Veloci Tests####### ######Veloci Tests#######
s1 = SamplePath("../data") s1 = SamplePath()
s1.build_trajectories() s1.build_trajectories()
print(s1.get_number_trajectories()) print(s1.get_number_trajectories())
print(type(s1.trajectories[0].get_trajectory()[0][1])) #print(s1.trajectories[0].get_trajectory())

@ -1,16 +1,17 @@
import pandas as pd import pandas as pd
import numpy as np import numpy as np
import importer
class Trajectory(): class Trajectory():
def __init__(self, data_frame): def __init__(self, data_frame):
self.actual_trajectory = self.build_trajectory(data_frame) self.actual_trajectory = data_frame
def build_trajectory(self, data_frame):
return data_frame[['Time','State']].to_numpy()
def get_trajectory(self): def get_trajectory(self):
return self.actual_trajectory return self.actual_trajectory
def get_trajectory_as_matrix(self):
return self.actual_trajectory[['Time','State']].to_numpy()
def get_states(self):
return self.actual_trajectory['State'].unique()