Esempio n. 1
0
    def iniciar_evaluacion(self):
        algoritmo = self.comboBoxAlgoritmo.currentText()

        if self.es_regresion:
            if algoritmo == "One R" or algoritmo == "Naive Bayes":
                QMessageBox.critical(self, "Error", \
                    "El algoritmo seleccionado no funciona con problemas de regresión")
                return

        if algoritmo == "One R" and np.dtype(
                np.number) in self.data.dtypes.values:
            QMessageBox.critical(self, "Error", \
                    "One R solo funciona con todas las columnas categóricas")
            return

        self.btnAceptar.setEnabled(False)  # desactiva boton
        self.labelCargando.setVisible(True)
        self.tablaResultados.setModel(None)
        self.labelAlgoritmo.setText("")
        self.repaint()  # para que se actualice la etiqueta

        # def main_HoldOut(data, target, bandera_cat_num, algoritmo, iteraciones, arrayOrden):

        if self.es_regresion == False:
            exactitudFinal, dataframeFinal = main_HoldOut(
                self.data, self.target, self.es_regresion, algoritmo,
                self.numeroIteraciones.value(), self.arrayOrden)
            msg = "{}, exactitud promedio: {}".format(
                self.comboBoxAlgoritmo.currentText(), exactitudFinal)
            self.labelAlgoritmo.setText(msg)
            self.tablaResultados.setModel(TableModelPandas(dataframeFinal))

        # def numerico_HoldOut(data, target, bandera_cat_num, algoritmo, iteraciones):

        else:
            dataframeFinal = numerico_HoldOut(self.data, self.target,
                                              self.numeroIteraciones.value())
            self.tablaResultados.setModel(TableModelPandas(dataframeFinal))
        """
        positivo, negativo = None, None
        if not self.es_multi_clase and not self.es_regresion:
            index_val_positivo = self.comboBoxValorPositivo.currentIndex()
            index_val_negativo = 0 if index_val_positivo == 1 else 1
            val_positivo = self.comboBoxValorPositivo.itemText(index_val_positivo)
            val_negativo = self.comboBoxValorPositivo.itemText(index_val_negativo)

            positivo = val_positivo
            negativo = val_negativo
        
        k_fold = KFoldCrossValidation(self.data, self.target, num_folds,
            algoritmo, positivo, negativo)
        resultado = k_fold.iniciar_validacion()
        """

        #revisar TODO: Here
        #self.mostrar_tablas(resultado)
        self.btnAceptar.setEnabled(True)
        self.labelCargando.setVisible(False)
Esempio n. 2
0
    def mostrar_tablas(self, resultado):
        if self.es_multi_clase and not self.es_regresion:
            tabla = resultado[0]
            exactitud = resultado[1]

            msg = "{}, exactitud promedio: {}".format(
                self.comboBoxAlgoritmo.currentText(), exactitud)
            self.labelAlgoritmo.setText(msg)
            self.tablaResultados.setModel(TableModelPandas(tabla))
        else:
            self.labelAlgoritmo.setText("")
            self.tablaResultados.setModel(TableModelPandas(resultado))
Esempio n. 3
0
    def actualizar_model(self, dataframe):
        self.conjunto.panda = dataframe
        self.model = TableModelPandas(self.conjunto.panda)
        self.tabla.setModel(self.model)

        for atributo in self.conjunto.getAtributos():
            atributo.panda = self.conjunto.panda

        self.actualizar_etiquetas()
Esempio n. 4
0
    def mostrar_tablas_verosimilitudes(self):
        for atributo in self.naive.probabilidades:
            label = QLabel(self)
            label.setText(atributo)
            self.verticalLayout_7.addWidget(label)

            tabla = QTableView(self.scrollAreaWidgetContents_2)
            tabla.setMinimumSize(QtCore.QSize(0, 120))
            modelo = TableModelPandas(self.naive.probabilidades[atributo])
            tabla.setModel(modelo)

            self.verticalLayout_7.addWidget(tabla)
Esempio n. 5
0
    def mostrar_tablas_frecuencias(self):
        frecuencias = self.naive.frecuencias
        for atributo in frecuencias:
            label = QLabel(self)
            label.setText(atributo)
            self.verticalLayout_6.addWidget(label)

            tabla = QTableView(self.scrollAreaWidgetContents)
            tabla.setMinimumSize(QtCore.QSize(0, 120))
            modelo = TableModelPandas(frecuencias[atributo])
            tabla.setModel(modelo)

            self.verticalLayout_6.addWidget(tabla)

        label = QLabel(self)
        label.setText(self.target)
        self.verticalLayout_6.addWidget(label)

        tabla = QTableView(self.scrollAreaWidgetContents)
        tabla.setMinimumSize(QtCore.QSize(0, 120))
        modelo = TableModelPandas(self.naive.frec_target)
        tabla.setModel(modelo)

        self.verticalLayout_6.addWidget(tabla)
Esempio n. 6
0
    def cargar_tablas_frecuencias(self):
        frecuencias = one_r.generar_frecuencias(self.data, self.target)

        for i in frecuencias:
            label = QLabel(self)
            label.setText(i)
            self.verticalLayout_4.addWidget(label)

            tabla = QTableView(self.scrollAreaWidgetContents)
            tabla.setMinimumSize(QtCore.QSize(0, 200))
            modelo = TableModelPandas(frecuencias[i])
            tabla.setModel(modelo)

            self.verticalLayout_4.addWidget(tabla)

        self.cargar_reglas(frecuencias)
Esempio n. 7
0
    def procesar_instancia(self):
        """ Se ejecuta al presionar el boton aceptar """
        self.tablaDistancias.setModel(None)  # limpia la tabla

        lista_valores = self.obtener_valores_campos()

        if "" in lista_valores:
            QMessageBox.critical(self, "Error",
                                 "Deben llenarse todos los campos")
        else:
            self.knn.set_k(self.spinBoxK.value())

            # Falta verificar que los datos sean del tipo correcto
            resultado, distancias = self.knn.get_prediccion(lista_valores)
            self.labelResultado.setText(str(resultado))

            model = TableModelPandas(distancias)
            self.tablaDistancias.setModel(model)
Esempio n. 8
0
    def iniciar_algoritmo(self):
        self.btnAceptar.setEnabled(False) # desactiva boton
        self.tablaResultado.setModel(None)
        self.labelPromedioSilhouette.setText("")
        self.repaint() # para que se actualice la etiqueta

        k = self.spinBoxK.value()
        corridas = self.spinBoxCorridas.value()
        iteraciones = self.spinBoxIteraciones.value()

        self.kmeans.setCorridas(corridas)
        self.kmeans.setIteraciones(iteraciones)

        resultados = self.kmeans.generar_clusters(n_clusters=k)
        self.data["Cluster"] = resultados[0]
        self.data["Silhouette"] = resultados[1]
        promedio_silhouette = resultados[2]

        self.tablaResultado.setModel(TableModelPandas(self.data))
        self.labelPromedioSilhouette.setText("Silhouette score: " + \
            str(promedio_silhouette))

        self.btnAceptar.setEnabled(True)
Esempio n. 9
0
    def __init__(self, ruta, conexion=None, query=None, *args, **kwargs):
        QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)

        self.conexion = conexion
        self.query = query

        self.ruta = ruta
        self.conjunto = ConjuntoDatos(self.ruta, self.conexion, self.query)

        # si hay una conexión y un query entonces mostrar la opción para cambiar el query
        if self.conexion != None and self.query != None:
            self.agregar_opcion_cambiar_query()


        self.respaldos = Respaldos(self.conjunto) # para hacer los respaldos
        self.num_version = 1 # numero de versión para el nombre de los respaldos
        self.num_instancias_agregadas = 0 # cada que se agregan 10 instancias se hace un respaldo
        self.num_instancias_eliminadas = 0 # cada que se eliminar 10 instancias se hacer un respaldo
        self.cargar_respaldos()

        # action nuevo para cargar nuevo dataset
        self.actionNuevo.triggered.connect(self.cargar_nuevo_dataset)

        # conectar eventos para las opciones de los algoritmos
        self.actionZero_R.triggered.connect(self.zeroR)
        self.actionOne_R.triggered.connect(self.mostrar_ventana_oneR)
        self.actionNaive_Bayes.triggered.connect(self.mostrar_ventana_naive_bayes)
        self.actionK_NN.triggered.connect(self.mostrar_ventana_knn)
        self.actionK_Means.triggered.connect(self.mostrar_ventana_kmeans)

        # conectar eventos para las opciones de evalución de algoritmos
        self.actionKFold.triggered.connect(self.mostrar_ventana_kfold)
        self.actionHoldOut.triggered.connect(self.mostrar_ventana_hold_out)

        # id de la instancia en la que se dio clic en la tabla
        self.currentIdRow = None

        # utilizando un modelo los datos en la tabla se cargan muchisimo más rápido
        self.model = TableModelPandas(self.conjunto.panda)
        self.tabla.setModel(self.model)        

        self.llenar_combo_boxes()
        self.mostrar_atributo() # muestra los datos del atributo seleccionado por defecto en el combo box

        #evento cuando se cambia de elemento en el combo box
        self.comboBoxAtributos.currentIndexChanged.connect(lambda x: self.mostrar_atributo())

        #evento boton actualizar atributo
        self.btnActualizar.clicked.connect(self.actualizar_atributo)

        # muestrar la información general del conjunto de datos
        self.labelNumInstancias.setText(str(self.conjunto.getNumInstancias()))
        self.labelNumAtributos.setText(str(self.conjunto.getNumAtributos()))
        
        self.iniciar_target()
        self.lineEditValorFaltante.setText(str(self.conjunto.getSimboloFaltante()))
        self.lineEditRuta.setText(str(self.conjunto.getRutaRespaldos()))

        # toolbar
        self.agregar_actions_toolbar()

        # evento boton eliminar atributo
        self.btnEliminarAtributo.clicked.connect(self.eliminar_atributo)

        # evento boton mostar moda
        self.btnModas.clicked.connect(self.mostrar_ventanas_modas)

        # evento boton descripcion
        self.btnDescripcion.clicked.connect(self.mostrar_descripcion)

        # evento boton valores fuera de dominio
        self.btnFueraDominio.clicked.connect(self.mostrar_fuera_dominio)
        # evento boton valores faltantes
        self.btnFaltantes.clicked.connect(self.mostrar_val_faltantes)

        self.tabla.setSelectionMode(QAbstractItemView.SingleSelection)

        # este menú se muestra al dar clic sobre un id en la tabla
        self.menu_clic_tabla = QMenu("opciones")
        self.action_editar = QAction(QtGui.QIcon('iconos/editar.png'), "Editar")
        self.action_editar.triggered.connect(self.mostrar_editar_instancia)
        self.menu_clic_tabla.addAction(self.action_editar)
        self.tabla.verticalHeader().sectionPressed.connect(self.mostrar_menu_editar)

        #event boton actualizar target, simbolo faltante y ruta
        self.btnActualizarInfo.clicked.connect(self.actualizar_info_general)
        self.btnHistograma.clicked.connect(self.mostrar_histograma)
        self.btnBoxPlot.clicked.connect(self.mostrar_boxplot)

        # conectar evento agregar instancia. Estos eventos se emiten desde otras ventanas
        self.signal_agregar_instancia.connect(self.instancia_agregada)
        self.signal_eliminar_instancias.connect(self.instancias_eliminadas)
        self.signal_editar_instancia.connect(self.actualizar_etiquetas)
        self.signal_agregar_columna.connect(self.atributo_agregado)
        self.signal_reemplazo_faltantes.connect(self.actualizar_model)