private void button_AgregarAtributo_Click(object sender, EventArgs e) { // Verifica que haya datos cargados: if (InstanciasCargadasEnGrid == true) { // Crea atributo vacio: Regex regex = new Regex(""); Global.Attribute attribute = new Global.Attribute("", "", regex); // Abre PopUp: PopUpAtributo popUp = new PopUpAtributo(attribute, "Agregar"); popUp.ShowDialog(); // Si se agrego un atributo, se vuelven a cargar las instancias en el Grid: if (Global.AtributoModificado == true) { //Console.WriteLine("******************************** ATRIBUTO AGREGADO ********************************"); // Vuelve a cargar todo el Grid: CargarInstanciasEnGrid(); // Muestra detalles actualizados: MostrarInformacionDataSet(); } } }
private void dataGridView_Instancias_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) { // Busca atributo: Global.Attribute attribute = Global.BuscarAtributo(dataGridView_Instancias.CurrentCell.OwningColumn.Name); Console.WriteLine("******************************** BuscarAtributo ********************************"); Console.WriteLine(dataGridView_Instancias.CurrentCell.OwningColumn.Name); Console.WriteLine("\tAtributo: " + attribute.name + ", Tipo: " + attribute.type + ", Expresion regular: " + attribute.regularExpression); if (attribute.name != null) { // Abre PopUp: PopUpAtributo popUp = new PopUpAtributo(attribute, "Modificar"); popUp.ShowDialog(); // Si se modifico el atributo, comprueba que sus instancias cumplan con su expresion regular: if (Global.AtributoModificado == true) { // Valida todas las instancias con todas las expresiones regulares: Global.ValidarExpresionesRegulares(); // Vuelve a cargar todo el Grid: CargarInstanciasEnGrid(); // Muestra detalles actualizados: MostrarInformacionDataSet(); } } }
private void comboBox_Atributos_SelectedIndexChanged(object sender, EventArgs e) { // Ubica atributo en lista: var nombreAtributo = comboBox_Atributos.SelectedItem.ToString(); Global.Attribute attribute = Global.DataSet_Attributes.Find(x => x.name == nombreAtributo); CargarDetallesAtributo(ref attribute); }
public PopUpAtributo(Global.Attribute attribute, string modo) { InitializeComponent(); // Guarda el atributo original: AtributoOriginal = attribute; // Asigna modo de ventana: ModoVentana = modo; // Modifica ventana dependiendo el modo: if (ModoVentana == "Agregar") { label_TituloVentana.Text = "Agregar Atributo"; } else if (ModoVentana == "Modificar") { label_TituloVentana.Text = "Modificar Atributo"; // Inicializa valores del atributo: try { // Muestra valores del atributo en textBoxes: textBox_name.Text = attribute.name; textBox_type.Text = attribute.type; textBox_regularExpression.Text = attribute.regularExpression.ToString(); } catch { // Crea un nuevo atributo vacio (espacios en lugar de nulls para que no truene el programa): Regex regex = new Regex(" "); Global.Attribute atributoVacio = new Global.Attribute(" ", " ", regex); // Muestra valores del atributo en textBoxes: textBox_name.Text = attribute.name; textBox_type.Text = attribute.type; textBox_regularExpression.Text = attribute.regularExpression.ToString(); } } else { label_TituloVentana.Text = "Ventana Atributo"; } }
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Funciones ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ private void ModificarAtributo() { // Crea atributo con valores de la ventana: Regex regex = new Regex(textBox_regularExpression.Text); Global.Attribute attribute = new Global.Attribute(textBox_name.Text, textBox_type.Text, regex); // Actualiza atributo: bool atributoActualizado = Global.ActualizarAtributo(AtributoOriginal.name, attribute); // Interpreta resultado: if (atributoActualizado == true) { this.Close(); } else { MessageBox.Show("No se han podido guardar los nuevos valores del atributo. Por favor, verifique la información ingresada e intente de nuevo.", "Error: Atributo no modificado.", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void AgregarAtributo() { // Crea atributo con valores de la ventana: Regex regex = new Regex(textBox_regularExpression.Text); Global.Attribute attribute = new Global.Attribute(textBox_name.Text, textBox_type.Text, regex); // Agrega atributo al DataSet: bool atributoAgregado = Global.AgregarAtributo(attribute); // Especifica agregacion y cierra ventana: if (atributoAgregado == true) { Global.AtributoModificado = true; this.Close(); } else { MessageBox.Show("No se ha podido guardar el nuevo atributo. Por favor, verifique la información ingresada e intente de nuevo.", "Error: Atributo no agregado.", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void CargarDetallesAtributo(ref Global.Attribute attribute) { if (attribute.type == "nominal") { //++++++++++++++++++++++++++++++++++++++++++++++++ Nominales ++++++++++++++++++++++++++++++++++++++++++++++++ this.panel_DetallesNominales.BringToFront(); //++++++++++++++++++++++++++++++++++++++++ Variables locales: // Cantidad atributos erroneos: int totalWrongValues = 0; // Cantidad atributos faltantes: int totalMissingValues = 0; // Ubica indice del atributo en lista de atributos: int attributeIndex = Global.DataSet_Attributes.IndexOf(attribute); // Define lista de atributos: List <nominalValue> nominalValuesList = new List <nominalValue>(); //++++++++++++++++++++++++++++++++++++++++ Conteo de posibles valores: // Ubica valores distintos en instancias del atributo en Data: foreach (string[] instancia in Global.DataSet_Data) { // Inicializa valor: nominalValue nomValue = new nominalValue(); nomValue.value = instancia[attributeIndex]; nomValue.count = 1; // Comprueba que el valor exista en lista de valores: if (nomValue.value == "" || nomValue.value == " ") { totalMissingValues++; } else if (Global.DataSet_Attributes[attributeIndex].regularExpression.Match(nomValue.value).Success) { // Encuentra valor en lista y su indice: nominalValue nominalValue = nominalValuesList.Find(x => x.value == nomValue.value); if (nominalValue.count >= 1) { // El valor ya existe en la lista, asi que se actualiza: int nominalValueIndex = nominalValuesList.IndexOf(nominalValue); // Obtiene numero contado del elemento original: nomValue.count = nominalValue.count + 1; // Reemplaza valor original: nominalValuesList.Insert(nominalValueIndex, nomValue); nominalValuesList.RemoveAt(nominalValueIndex + 1); } else { nominalValuesList.Add(nomValue); } } else { totalWrongValues++; } } Console.WriteLine(("Valores faltantes: " + totalMissingValues)); Console.WriteLine(("Valores erroneos: " + totalWrongValues)); //++++++++++++++++++++++++++++++++++++++++ Muestra valores: this.label_tipo.Text = attribute.type; this.label_valoresFaltantes.Text = totalMissingValues.ToString(); this.label_valoresErroneos.Text = totalWrongValues.ToString(); this.listView_posiblesValores.Items.Clear(); foreach (nominalValue nom in nominalValuesList) { Console.WriteLine("valor: " + nom.value + ", total:" + nom.count); // Crea y agrega objeto de listView: ListViewItem listViewItem = new ListViewItem(new string[] { nom.value, nom.count.ToString() }); this.listView_posiblesValores.Items.Add(listViewItem); } // Muestra valores en grafica de barras: CargarGraficaDeBarras(nominalValuesList); } else if (attribute.type == "numeric") { //++++++++++++++++++++++++++++++++++++++++++++++++ Numericos ++++++++++++++++++++++++++++++++++++++++++++++++ this.panel_DetallesNumericos.BringToFront(); //++++++++++++++++++++++++++++++++++++++++ Variables locales: // Cantidad atributos erroneos: int totalWrongValues = 0; // Ubica indice del atributo en lista de atributos: int attributeIndex = Global.DataSet_Attributes.IndexOf(attribute); // Crea lista con valores del atributo en las intancias: List <int> attributeValues = new List <int>(); foreach (string[] instancia in Global.DataSet_Data) { try { if (Global.DataSet_Attributes[attributeIndex].regularExpression.Match(instancia[attributeIndex]).Success) { attributeValues.Add(int.Parse(instancia[attributeIndex])); } else { totalWrongValues++; } } catch { totalWrongValues++; } } foreach (int valor in attributeValues) { Console.Write(valor + ","); } Console.WriteLine(); int totalMissingValues = Global.DataSet_Data.Count() - attributeValues.Count() - totalWrongValues; Console.WriteLine(("Valores faltantes: " + totalMissingValues)); Console.WriteLine(("Valores erroneos: " + totalWrongValues)); //++++++++++++++++++++++++++++++++++++++++ Minimo: int minimo = attributeValues.Min(); Console.WriteLine(("Minimo: " + minimo)); //++++++++++++++++++++++++++++++++++++++++ Maximo: int maximo = attributeValues.Max(); Console.WriteLine(("Maximo: " + maximo)); //++++++++++++++++++++++++++++++++++++++++ Media: double media = attributeValues.Average(); Console.WriteLine(("Media: " + media)); //++++++++++++++++++++++++++++++++++++++++ Mediana: double mediana; int totalValues = attributeValues.Count(); int halfIndex = attributeValues.Count() / 2; var sortedNumbers = attributeValues.OrderBy(n => n); if ((totalValues % 2) == 0) { mediana = ((sortedNumbers.ElementAt(halfIndex) + sortedNumbers.ElementAt((halfIndex - 1))) / 2); } else { mediana = sortedNumbers.ElementAt(halfIndex); } Console.WriteLine(("Mediana: " + mediana)); //++++++++++++++++++++++++++++++++++++++++ Moda: var moda = attributeValues.GroupBy(n => n).OrderByDescending(g => g.Count()).Select(g => g.Key).FirstOrDefault(); Console.WriteLine(("Moda: " + moda)); //++++++++++++++++++++++++++++++++++++++++ Desviacion estandar: var desviacionEstandar = Math.Sqrt(attributeValues.Average(v => Math.Pow(v - media, 2))); Console.WriteLine(("Desviacion estandar: " + desviacionEstandar)); //++++++++++++++++++++++++++++++++++++++++ Muestra valores: this.label_tipo.Text = attribute.type; this.label_valoresFaltantes.Text = totalMissingValues.ToString(); this.label_valoresErroneos.Text = totalWrongValues.ToString(); this.label_minimo.Text = minimo.ToString(); this.label_maximo.Text = maximo.ToString(); this.label_media.Text = media.ToString(); this.label_mediana.Text = mediana.ToString(); this.label_moda.Text = moda.ToString(); this.label_desviacionEstandar.Text = desviacionEstandar.ToString(); //++++++++++++++++++++++++++++++++++++++++ Muestra Box Plot: CargarBoxPlot(attributeValues, minimo, maximo, mediana); } }