@@ -31,12 +31,6 @@ def track_similarity(trajA, trajB, method):
31
31
similarity. Values close to 1 correspond to high similarity
32
32
"""
33
33
34
- # trajA_id = trajA.df['track.id'].unique()[0]
35
- # trajB_id = trajB.df['track.id'].unique()[0]
36
-
37
- # print("Similarity between Track",trajA_id, "& Track",trajB_id,"using",
38
- # str(method),"method:")
39
-
40
34
methods = ['pcm' , 'frechet_dist' , 'area_between_two_curves' ,
41
35
'curve_length_measure' , 'dtw' ]
42
36
@@ -61,9 +55,34 @@ def track_similarity(trajA, trajB, method):
61
55
else :
62
56
similarity = 1 / (1 + similarity_method (trajA_np , trajB_np ))
63
57
return similarity
58
+
59
+ def trajCollections_similarity (trajCollectionA ,trajCollectionB ,method ):
60
+
61
+ n = len (trajCollectionA .trajectories )
62
+ m = len (trajCollectionB .trajectories )
63
+
64
+ if (n != m ):
65
+ raise RuntimeError ('Trajectory collections should be the same size !' )
64
66
67
+ traj1_name = []
68
+ traj2_name = []
69
+ similarity = []
70
+
71
+ for i in range (n ):
72
+
73
+ traj = trajCollectionA .trajectories [i ]
74
+ gen_traj = trajCollectionB .trajectories [i ]
75
+
76
+ traj1_name .append (traj .df ['track.id' ].unique ()[0 ])
77
+ traj2_name .append (gen_traj .df ['track.id' ].unique ()[0 ])
78
+ simi = track_similarity (traj ,gen_traj , method )
79
+ similarity .append (simi )
80
+
81
+ df = pd .DataFrame (list (zip (traj1_name , traj2_name , similarity )),
82
+ columns = ['Trajectory_1' , 'Trajectory_2' , 'Similarity' ])
83
+ return (df )
65
84
66
- def crossed_similarity (list_traj , method ):
85
+ def crossed_similarity (trajCollection , method ):
67
86
68
87
""" Compute similarity measures of a list of trajectories
69
88
@@ -80,14 +99,19 @@ def crossed_similarity(list_traj, method):
80
99
81
100
df{dataframe} -- Dataframe with summary of similarity
82
101
measuresof all posible combinations from
83
- the trajectory list (list_traj)
102
+ the trajectory list (list_traj)
103
+
84
104
"""
85
105
86
- n = (len (list_traj ))
87
-
106
+ n = (len (trajCollection . trajectories ))
107
+
88
108
if (n <= 1 ):
89
109
raise RuntimeError ('More than 1 trajectory is required' )
90
-
110
+
111
+ trajVector = []
112
+ for i in (trajCollection .trajectories ):
113
+ trajVector .append (i )
114
+
91
115
number_comb = factorial (n )/ (factorial (n - 2 )* factorial (2 ))
92
116
93
117
start = timer ()
@@ -96,7 +120,7 @@ def crossed_similarity(list_traj, method):
96
120
similarity = []
97
121
i = 0
98
122
99
- for combo in combinations (list_traj , 2 ):
123
+ for combo in combinations (trajVector , 2 ):
100
124
traj1_name .append (combo [0 ].df ['track.id' ].unique ()[0 ])
101
125
traj2_name .append (combo [1 ].df ['track.id' ].unique ()[0 ])
102
126
simi = track_similarity (combo [0 ], combo [1 ], method )
@@ -106,16 +130,24 @@ def crossed_similarity(list_traj, method):
106
130
if (i % 10 == 0 or i == number_comb ):
107
131
print (round (i / number_comb * 100 , 1 ), "% of " , "calculations" , sep = '' ,
108
132
end = '\r ' )
109
-
133
+
110
134
df = pd .DataFrame (list (zip (traj1_name , traj2_name , similarity )),
111
- columns = ['Trajectory_1' , 'Trajectory_2' , 'Correlation' ])
112
- df = df .sort_values (by = ['Correlation' ], ascending = False
135
+ columns = ['Trajectory_1' , 'Trajectory_2' , 'Similarity' ])
136
+
137
+ df_2 = pd .DataFrame (list (zip (traj2_name , traj1_name , similarity )),
138
+ columns = ['Trajectory_1' , 'Trajectory_2' , 'Similarity' ])
139
+
140
+ frames = [df , df_2 ]
141
+
142
+ df = pd .concat (frames , ignore_index = True )
143
+
144
+ df = df .sort_values (by = ['Similarity' ], ascending = False
113
145
).reset_index (drop = True )
114
-
115
146
end = timer ()
116
147
time = end - start
117
148
118
149
print ("\n %s similarity measures in %0.2f seconds" % (i , time ))
150
+
119
151
return (df )
120
152
121
153
@@ -139,17 +171,14 @@ def get_similarity_matrix(df):
139
171
similarity_diagonal = [1 ] * number_uniqtraj
140
172
df_diagonal = pd .DataFrame (list (zip (uniq_traj , uniq_traj ,
141
173
similarity_diagonal )), columns = ['Trajectory_1' ,
142
- 'Trajectory_2' , 'Correlation ' ])
174
+ 'Trajectory_2' , 'Similarity ' ])
143
175
frames = [df , df_diagonal ]
144
176
df = pd .concat (frames , ignore_index = True )
145
177
146
- df = df .sort_values (by = ['Correlation ' ], ascending = False ).reset_index (
178
+ df = df .sort_values (by = ['Similarity ' ], ascending = False ).reset_index (
147
179
drop = True )
148
- df = df .pivot (index = 'Trajectory_1' , columns = 'Trajectory_2' ,
149
- values = 'Correlation' ).copy ()
150
-
151
- df = df .transpose ().fillna (0 )+ df .fillna (0 )
152
- df = df .replace (2 , 1 )
180
+
181
+ df = df .pivot (index = 'Trajectory_1' , columns = 'Trajectory_2' ,values = 'Similarity' ).copy ()
153
182
154
183
return (df )
155
184
@@ -162,10 +191,10 @@ def plot_similarity_matrix(df_similarity_matrix, title):
162
191
df{dataframe} -- Similarity matrix of trajectories
163
192
"""
164
193
165
- sum_corr = list (df_similarity_matrix .sum ().sort_values (
166
- ascending = True ). index . values )
167
- df = df_similarity_matrix .sort_values ( by = sum_corr ). sort_index (
168
- axis = 0 , level = sum_corr )
194
+ sum_corr = list (df_similarity_matrix .sum ().sort_values (ascending = True ). index . values )
195
+ df_similarity_matrix = df_similarity_matrix [ sum_corr ]
196
+ df = df_similarity_matrix .reindex ( sum_corr )
197
+
169
198
f = plt .figure (figsize = (19 , 15 ))
170
199
plt .matshow (df , fignum = f .number )
171
200
plt .title (title , y = 1.2 , fontsize = 25 )
0 commit comments