@@ -357,7 +357,7 @@ def __init__(
357357 self .pixdim = pixdim
358358 if self .flag_valid :
359359 self .process_data ()
360- if 'ref_missing ' in self .data .keys ():
360+ if 'ref_missing_pred ' in self .data .keys ():
361361 self .complete_missing_cases ()
362362 if 'weights_labels' in self .data .keys ():
363363 self .weights_labels = self .data ['weights_labels' ]
@@ -428,11 +428,11 @@ def process_data(self):
428428
429429 """
430430 data = self .data
431- df_resdet = None
432- df_resseg = None
433- df_resmt = None
434- df_resmcc = None
435- df_rescal = None
431+ df_resdet = pd . DataFrame ()
432+ df_resseg = pd . DataFrame ()
433+ df_resmt = pd . DataFrame ()
434+ df_resmcc = pd . DataFrame ()
435+ df_rescal = pd . DataFrame ()
436436 if self .category == "InS" :
437437 MLLS = MultiLabelLocSegPairwiseMeasure (
438438 pred_loc = data ["pred_loc" ],
@@ -475,7 +475,7 @@ def process_data(self):
475475
476476 )
477477 df_resdet , df_resmt = MLDT .per_label_dict ()
478- df_resseg = None
478+ df_resseg = pd . DataFrame ()
479479 elif self .category in ["ImLC" , "SemS" ]:
480480 if 'names' in data .keys ():
481481 list_names = data ['names' ]
@@ -504,12 +504,12 @@ def process_data(self):
504504 # print(df_cal, 'CAL')
505505 if self .category == "ImLC" :
506506 df_resdet = df_bin
507- df_resseg = None
507+ df_resseg = pd . DataFrame ()
508508 df_resmt = df_mt
509509 df_resmcc = df_mcc
510510 df_rescal = df_cal
511511 else :
512- df_resdet = None
512+ df_resdet = pd . DataFrame ()
513513 df_resseg = df_bin
514514 df_resmt = df_mt
515515 df_resmcc = df_mcc
@@ -518,12 +518,14 @@ def process_data(self):
518518 self .resmt = df_resmt
519519 self .resmcc = df_resmcc
520520 self .rescal = df_rescal
521- self .create_mapping_column_nan_replaced_seg ()
521+ print ('After process state of resdet' , self .resdet , ' and resseg ' ,self .resseg )
522+ if self .category == 'SemS' :
523+ self .create_mapping_column_nan_replaced_seg ()
522524 return
523525
524526 def create_mapping_column_nan_replaced_seg (self ):
525527 """
526- For each measure (segmentation) for which nan are possible
528+ For each measure (semantic segmentation) for which nan are possible
527529 creates an additional column in which nans are replaced by value (worse or best according to situation
528530 """
529531 list_to_map = []
@@ -547,8 +549,6 @@ def create_mapping_column_nan_replaced_seg(self):
547549
548550 return
549551
550-
551-
552552
553553 def identify_empty_ref (self ):
554554 """
@@ -650,37 +650,50 @@ def label_aggregation(self, option='average',dict_args={}):
650650 # print('DET', self.resdet,'CAL',self.rescal, 'SEG',self.resseg,'MT', self.resmt,'MCC', self.resmcc)
651651 df_grouped_all = merge_list_df ([self .resdet , self .resseg , self .resmt ,self .resmcc , self .rescal ])
652652 return df_grouped_all
653- df_all_labels = merge_list_df ([self .resdet , self .resseg , self .resmt ], on = ['label' ,'case' ])
654- df_all_labels ['weights_labels' ] = 1
655- df_all_labels ['prevalence_labels' ] = 1
656- for k in self .weights_labels .keys ():
657- df_all_labels ['weights_labels' ] = np .where (df_all_labels ['label' ]== k ,self .weights_labels [k ],df_all_labels ['weights_labels' ])
658- for (c ,rc ) in enumerate (self .data ['ref_class' ]):
659- values ,counts = np .unique (rc , return_counts = True )
660- for (v ,co ) in zip (values ,counts ):
661- df_all_labels ['prevalence_labels' ] = np .where (np .logical_and (df_all_labels ['case' ]== c , df_all_labels ['label' ]== v ),co ,df_all_labels ['prevalence_labels' ])
662- wm = lambda x : np .ma .average (np .ma .masked_array (x ,np .isnan (x )), weights = df_all_labels .loc [x .index , "prevalence_labels" ])
663- wm2 = lambda x : np .ma .average (np .ma .masked_array (x ,np .isnan (x )), weights = df_all_labels .loc [x .index , "weights_labels" ])
664- wm3 = lambda x : np .ma .average (np .ma .masked_array (x ,np .isnan (x )))
665- list_measures = self .measures_boundary + self .measures_overlap + self .measures_detseg + self .measures_pcc + self .measures_mt
666- dict_measures = {k :[('prevalence' ,wm ),('weights' ,wm2 ),('average' ,wm3 )] for k in list_measures }
667- df_grouped_lab = df_all_labels .groupby ('case' ,as_index = False ).agg (dict_measures ).reset_index ()
668- df_grouped_lab .columns = ['_' .join (col ).rstrip ('_' ) for col in df_grouped_lab .columns .values ]
653+ if self .category == 'ImLC' :
654+ print (self .resdet , self .resmt , self .rescal , self .resmcc )
655+ df_all_labels = merge_list_df ([self .resdet , self .resmt , self .rescal ], on = 'label' )
656+
657+ else :
658+ df_all_labels = merge_list_df ([self .resdet , self .resseg , self .resmt ], on = ['label' ,'case' ])
659+ if df_all_labels is not None :
660+ df_all_labels ['weights_labels' ] = 1
661+ df_all_labels ['prevalence_labels' ] = 1
662+ for k in self .weights_labels .keys ():
663+ df_all_labels ['weights_labels' ] = np .where (df_all_labels ['label' ]== k ,self .weights_labels [k ],df_all_labels ['weights_labels' ])
664+ for (c ,rc ) in enumerate (self .data ['ref_class' ]):
665+ values ,counts = np .unique (rc , return_counts = True )
666+ for (v ,co ) in zip (values ,counts ):
667+ df_all_labels ['prevalence_labels' ] = np .where (np .logical_and (df_all_labels ['case' ]== c , df_all_labels ['label' ]== v ),co ,df_all_labels ['prevalence_labels' ])
668+ wm = lambda x : np .ma .average (np .ma .masked_array (x ,np .isnan (x )), weights = df_all_labels .loc [x .index , "prevalence_labels" ])
669+ wm2 = lambda x : np .ma .average (np .ma .masked_array (x ,np .isnan (x )), weights = df_all_labels .loc [x .index , "weights_labels" ])
670+ wm3 = lambda x : np .ma .average (np .ma .masked_array (x ,np .isnan (x )))
671+ list_measures = self .measures_boundary + self .measures_overlap + self .measures_detseg + self .measures_pcc + self .measures_mt
672+ dict_measures = {k :[('prevalence' ,wm ),('weights' ,wm2 ),('average' ,wm3 )] for k in list_measures }
673+ df_grouped_lab = df_all_labels .groupby ('case' ,as_index = False ).agg (dict_measures ).reset_index ()
674+ df_grouped_lab .columns = ['_' .join (col ).rstrip ('_' ) for col in df_grouped_lab .columns .values ]
669675
670676 # print(df_grouped_lab, " grouped lab ")
671- df_grouped_all = merge_list_df ([df_grouped_lab .reset_index (), self .resmcc , self .rescal ], on = ['case' ])
672- # print(df_grouped_all, 'grouped all')
677+ df_grouped_all = merge_list_df ([df_grouped_lab .reset_index (), self .resmcc , self .rescal ], on = ['case' ])
678+ else :
679+ df_grouped_all = merge_list_df ([self .rescal ,self .resmcc ],on = ['case' ])
680+ print (df_grouped_all , 'grouped all' )
673681 return df_grouped_all
674682
675683 def get_stats_res (self ):
676684 """
677685 Create summary statistics overall and per label available in self.stats_lab and self.stats_all
678686 """
679687 df_stats_all = self .grouped_lab .describe ()
688+ self .stats_all = df_stats_all
689+ print (self .resdet , self .resseg )
690+ if len (self .resdet .index )== 0 and len (self .resseg .index )== 0 :
691+ return
692+
680693 df_all_labels = merge_list_df ([self .resdet , self .resseg , self .resmt ], on = ['label' ,'case' ])
681694 df_stats_lab = df_all_labels .groupby ('label' ).describe ()
682695 self .stats_lab = df_stats_lab
683- self . stats_all = df_stats_all
696+
684697 return
685698
686699
0 commit comments