from PyQt5 import QtWidgets
from gui.core.clusteringMethods import cluster_KMeans
from gui.core.clusteringMethods import cluster_Spectral
from gui.ui.Clustering import Ui_Form
from gui.util import Qtickle
from gui.util.Modules import Modules
[docs]
class Clustering(Ui_Form, Modules):
[docs]
def setupUi(self, Form):
self.Form = Form
super().setupUi(Form)
Modules.setupUi(self, Form)
self.clusteringMethods()
[docs]
def getGuiParams(self):
"""
Overriding Modules' getGuiParams, because I'll need to do a list of
lists
in order to obtain the regressionMethods' parameters
"""
self.qt = Qtickle.Qtickle(self)
s = []
s.append(self.qt.guiSave())
for items in self.alg:
s.append(items.getGuiParams())
return s
[docs]
def setGuiParams(self, dict):
"""
Overriding Modules' setGuiParams, because we are accessing a list of
lists
And each submodule contains it's own `setGuiParams`
"""
self.qt = Qtickle.Qtickle(self)
self.qt.guiRestore(dict[0])
for i in range(len(dict)):
self.alg[i - 1].setGuiParams(dict[i])
[docs]
def selectiveSetGuiParams(self, dict):
"""
Override Modules' selective Restore function
Setup Qtickle
selectively restore the UI, the data to do that will be in the 0th
element of the dictionary
We will then iterate through the rest of the dictionary
Will now restore the parameters for the algorithms in the list,
Each of the algs have their own selectiveSetGuiParams
:param dict:
:return:
"""
self.qt = Qtickle.Qtickle(self)
self.qt.selectiveGuiRestore(dict[0])
for i in range(len(dict)):
self.alg[i - 1].selectiveSetGuiParams(dict[i])
[docs]
def run(self):
method = self.chooseMethodComboBox.currentText()
datakey = self.chooseDataComboBox.currentText()
params, modelkey = self.getMethodParams(
self.chooseMethodComboBox.currentIndex()
)
col = [str(i.text()) for i in self.variables_list.selectedItems()]
self.data[datakey].cluster(col, method, [], params)
[docs]
def hideAll(self):
for a in self.alg:
a.setHidden(True)
[docs]
def clusteringMethods(self):
self.alg = []
list_forms = [cluster_KMeans,
cluster_Spectral]
for items in list_forms:
self.alg.append(items.Ui_Form())
self.alg[-1].setupUi(self.Form)
self.clustering_vlayout.addWidget(self.alg[-1].get_widget())
self.alg[-1].setHidden(True)
[docs]
def getMethodParams(self, index):
return self.alg[index - 1].run()
[docs]
def xvar_choices(self):
try:
try:
xvarchoices = self.data[
self.chooseDataComboBox.currentText()].df.columns.levels[
0].values
except:
xvarchoices = self.data[
self.chooseDataComboBox.currentText()].columns.values
xvarchoices = [i for i in xvarchoices if
'Unnamed' not in i] # remove unnamed columns
# from choices
except:
xvarchoices = ['No valid choices!']
return xvarchoices
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Clustering()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())