from PyQt5 import QtWidgets
from gui.ui.StratifiedFolds import Ui_Form
from gui.util.Modules import Modules
from libpyhat.spectral_data import SpectralData
from libpyhat.utils.utils import rows_match
[docs]
class StratifiedFolds(Ui_Form, Modules):
[docs]
def setupUi(self, Form):
super().setupUi(Form)
Modules.setupUi(self, Form)
[docs]
def run(self):
Modules.data_count += 1
self.train_ind = Modules.data_count
Modules.data_count += 1
self.test_ind = Modules.data_count
datakey = self.chooseDataToStratifyComboBox.currentText()
nfolds = self.nFoldsSpinBox.value()
try:
testfold = int(self.testFoldsSpinBox.value())
except:
testfold = 1
comp_label = self.data[datakey].comp_label
meta_label = self.data[datakey].meta_label
colname = (comp_label, self.chooseVarComboBox.currentText())
tiebreaker_col = self.tiebreaker_comboBox.currentText()
if tiebreaker_col == 'None':
tiebreaker_col = None
else:
tiebreaker_col = (comp_label, tiebreaker_col)
self.data[datakey].stratified_folds(nfolds, colname, tiebreaker_col)
self.data[datakey + '-Train'] = SpectralData(
rows_match(
self.data[datakey].df, (meta_label, 'Folds'),
[testfold], invert=True
), name=datakey + '-Train'
)
self.data[datakey + '-Test'] = SpectralData(
rows_match(
self.data[datakey].df, (meta_label, 'Folds'),
[testfold]
), name=datakey + '-Test'
)
self.list_amend(self.datakeys, self.train_ind, datakey + '-Train')
self.list_amend(self.datakeys, self.test_ind, datakey + '-Test')
print(self.datakeys)
print(
'Test set: ' + str(self.data[datakey + '-Test'].df.index.shape[0])
)
print(
'Training set: ' + str(
self.data[datakey + '-Train'].df.index.shape[0]
)
)
[docs]
def strat_fold_change_vars(self):
self.chooseVarComboBox.clear()
try:
comp_label = self.data[
self.chooseDataToStratifyComboBox.currentText()].comp_label
choices = \
self.data[self.chooseDataToStratifyComboBox.currentText()].df[
comp_label].columns.values
except:
choices = ['No composition columns!']
self.chooseVarComboBox.addItems(choices)
choices = ['None'] + list(choices)
self.tiebreaker_comboBox.addItems(choices)
[docs]
def strat_fold_change_testfolds(self):
self.testFoldsSpinBox.setMaximum(self.nFoldsSpinBox.value())
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = StratifiedFolds()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())