def run(self): blendranges = [] submodel_blend_names = [] submodel_predictions = [] datakey = self.chooseDatacomboBox.currentText() refcol = ('comp', self.optimizeSubRangesComboBox.currentText()) # start with the low model blendranges.append( [-9999, float(self.lowPredictionMaxSpinBox.value())]) submodel_blend_names.append(self.lowPredictionComboBox.currentText()) submodel_predictions.append( self.data[datakey].df[('predict', self.lowPredictionComboBox.currentText())]) # append the intermediate submodels for i in range(0, self.index): temp_vals = self.subwidgets[i].getValues() blendranges.append(temp_vals[1]) submodel_blend_names.append(temp_vals[0]) submodel_predictions.append(self.data[datakey].df[('predict', temp_vals[0])]) # append the high model blendranges.append( [float(self.highPredictionMinSpinBox.value()), 9999]) submodel_blend_names.append(self.highPredictionComboBox.currentText()) submodel_predictions.append( self.data[datakey].df[('predict', self.highPredictionComboBox.currentText())]) # append the reference model as a catch-all blendranges.append([-9999, 9999]) submodel_blend_names.append( self.referencePredictionComboBox.currentText()) submodel_predictions.append(self.data[datakey].df[( 'predict', self.referencePredictionComboBox.currentText())]) if self.optimizeSubRangesCheckBox.isChecked(): truevals = self.data[datakey].df[refcol] else: truevals = None sm_obj = sm.sm(blendranges) # optimize blending if reference data is provided if truevals is not None: predictions_blended = sm_obj.do_blend(submodel_predictions, truevals=truevals) else: # otherwise just blend the predictions together predictions_blended = sm_obj.do_blend(submodel_predictions) # save the blended predictions self.data[datakey].df[('predict', 'Blended-Predict ' + str(sm_obj.blendranges))] = predictions_blended
def setup(self): blendranges = [] datakey = self.chooseDataComboBox.currentText() # start with the low model blendranges.append( [-9999, float(self.lowPredictionMaxSpinBox.value())]) # append the intermediate submodels for i in range(0, self.index_spin.value()): temp_vals = self.subwidgets[i].getValues() blendranges.append(temp_vals[1]) # append the high model blendranges.append( [float(self.highPredictionMinSpinBox.value()), 9999]) sm_obj = sm.sm(blendranges) # save the blended predictions try: self.data[datakey].df[('predict', 'Blended-Predict ' + str(sm_obj.blendranges))] = 99999 except: pass
def run(self): blendranges = [] submodel_names = [] x_ref = [] x = [] submodels = [] # TODO there are some inefficiencies with this code:103:111 # For example you are running through the UI to collect the data # And then running through the data to collect more data # You're doing this with seperate for loops. this could be done # with just one for loop. Example lines 103 and 111. self.submodel_gui_info = [[ self.lowModelComboBox.currentText(), [-9999, int(self.lowModelMaxSpinBox.value())] ]] for i in range(1, self.index): self.submodel_gui_info.append(self.subwidgets[i].getValues()) self.submodel_gui_info.append([ self.highModelComboBox.currentText(), [int(self.highModelMinSpinBox.value()), 9999] ]) self.submodel_gui_info.append( [self.referenceModelComboBox.currentText(), [-9999, 9999]]) datakey = self.chooseDataComboBox.currentText() for sub_gui in self.submodel_gui_info: min_temp = sub_gui[1][0] max_temp = sub_gui[1][1] blendranges.append([min_temp, max_temp]) submodel_names.append(sub_gui[0]) if self.optimizeSubmodelRangesCheckBox.isChecked(): trueval_data = self.optimizeSubmodelRangesComboBox.currentText() else: trueval_data = None # Check if reference data name has been provided # if so, get reference data values if trueval_data is not None: truevals = self.data[trueval_data].df[self.model_yvars[ submodel_names[0]]] else: truevals = None # step through the submodel names and get the actual models and the x data for i in submodel_names: x.append(self.data[datakey].df[self.model_xvars[i]]) submodels.append(self.models[i]) if trueval_data is not None: x_ref.append(self.data[trueval_data].df[self.model_xvars[i]]) # create the submodel object sm_obj = sm.sm(blendranges, submodels) # optimize blending if reference data is provided (otherwise, modelranges will be used as blending ranges) if truevals is not None: ref_predictions = sm_obj.predict(x_ref) ref_predictions_blended = sm_obj.do_blend(ref_predictions, truevals=truevals) # get predictions for each submodel separately predictions = sm_obj.predict(x) # blend the predictions together predictions_blended = sm_obj.do_blend(predictions) # save the individual and blended predictions for i, j in enumerate(predictions): self.data[datakey].df[('predict', submodel_names[i] + '-Predict')] = j self.data[datakey].df[('predict', 'Blended-Predict')] = predictions_blended