public static StringTable ExpandIntegerColumnsUseProcessDefinition(StringTable inStringTable, string[] columnNames, ProcessDefinition processDefinition) { bool[] columnsToExpand = FindColumns(inStringTable.IndependentHeaders.ToList(), columnNames); int countAddedColumns = 0; for (int inColumnIndex = 0; inColumnIndex < processDefinition.ExpandColumnsPointers.Pointers.Count; inColumnIndex++) { ExpandColumnPointers expandColumnPointers = processDefinition.ExpandColumnsPointers.Pointers[inColumnIndex]; if (expandColumnPointers.Pointers.Count > 0) { countAddedColumns += expandColumnPointers.Pointers.Count - 1; } } StringTable outStringTable = new StringTable(); int totalRows = inStringTable.Independents.GetUpperBound(0) + 1; int totalInColumns = inStringTable.Independents.GetUpperBound(1) + 1; int totalOutColumns = totalInColumns + countAddedColumns; outStringTable.IndependentHeaders = new string[totalOutColumns]; outStringTable.Independents = new string[totalRows, totalOutColumns]; int outColumnIndex = 0; int countExpandedInColumns = 0; for (int inColumnIndex = 0; inColumnIndex < columnsToExpand.Length; inColumnIndex++) { string[] inColumn = GetColumn(inStringTable.Independents, inColumnIndex); if (columnsToExpand[inColumnIndex] == false) { outStringTable.IndependentHeaders[outColumnIndex] = inStringTable.IndependentHeaders[inColumnIndex]; PutColumn(outStringTable.Independents, inColumn, outColumnIndex); outColumnIndex++; } else { ExpandColumnPointers expandColumnPointers = processDefinition.ExpandColumnsPointers.Pointers[countExpandedInColumns]; int totalNewColumns = expandColumnPointers.Pointers.Count; for (int newColumnIndex = 0; newColumnIndex < totalNewColumns; newColumnIndex++) { ExpandColumnPointer expandColumnPointer = expandColumnPointers.Pointers[newColumnIndex]; outStringTable.IndependentHeaders[outColumnIndex] = inStringTable.IndependentHeaders[inColumnIndex] + "-" + newColumnIndex.ToString().Trim(); for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) { if (inStringTable.Independents[rowIndex, inColumnIndex] == expandColumnPointer.CategoryName & newColumnIndex == Convert.ToInt32(expandColumnPointer.NewColumnIndex)) { outStringTable.Independents[rowIndex, outColumnIndex] = "1"; } else { outStringTable.Independents[rowIndex, outColumnIndex] = "0"; } } outColumnIndex++; } countExpandedInColumns++; } } return(outStringTable); }
public static void Normalize(NumericTable numericTable, ProcessDefinition processDefinition) { int totalRows = numericTable.Independents.GetUpperBound(0) + 1; int totalColumns = numericTable.Independents.GetUpperBound(1) + 1; //Parallel.For(0, totalColumns, columnIndex => //{ // double[] column = GetColumn(numericTable.Independents, columnIndex); // double min = column.Min(); // double max = column.Max(); // double range = max - min; // for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) // { // if (range != 0) // { // column[rowIndex] = (column[rowIndex] - min) / range; // } // else // { // column[rowIndex] = 0; // } // } // PutColumn(numericTable.Independents, column, columnIndex); //}); for (int columnIndex = 0; columnIndex < totalColumns; columnIndex++) { double[] column = GetColumn(numericTable.Independents, columnIndex); double min = column.Min(); double max = column.Max(); double range = max - min; for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) { if (range != 0) { column[rowIndex] = (column[rowIndex] - min) / range; } else { column[rowIndex] = 0; } } PutColumn(numericTable.Independents, column, columnIndex); } if (processDefinition != null) { double min = numericTable.Dependants.Min(); double max = numericTable.Dependants.Max(); double range = max - min; for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) { if (range != 0) { numericTable.Dependants[rowIndex] = (numericTable.Dependants[rowIndex] - min) / range; } else { numericTable.Dependants[rowIndex] = 0; } } processDefinition.Scale = range; processDefinition.Offset = min; } }
public static StringTable ExpandIntegerColumnsUpdateProcessDefinition(StringTable inStringTable, string[] columnNames, ProcessDefinition processDefinition) { processDefinition.ExpandColumnsPointers = new ExpandColumnsPointers(); bool[] columnsToExpand = FindColumns(inStringTable.IndependentHeaders.ToList(), columnNames); int countAddedColumns = 0; for (int inColumnIndex = 0; inColumnIndex < columnsToExpand.Length; inColumnIndex++) { if (columnsToExpand[inColumnIndex] == true) { string[] column = GetColumn(inStringTable.Independents, inColumnIndex); countAddedColumns += column.Distinct().ToList().Count - 1; } } StringTable outStringTable = new StringTable(); outStringTable.DependantHeader = inStringTable.DependantHeader; outStringTable.Dependants = inStringTable.Dependants; int totalRows = inStringTable.Dependants.Length; int totalInColumns = inStringTable.Independents.GetUpperBound(1) + 1; int totalOutColumns = totalInColumns + countAddedColumns; outStringTable.IndependentHeaders = new string[totalOutColumns]; outStringTable.Independents = new string[totalRows, totalOutColumns]; int outColumnIndex = 0; for (int inColumnIndex = 0; inColumnIndex < columnsToExpand.Length; inColumnIndex++) { ExpandColumnPointers expandColumnPointers = new ExpandColumnPointers(); string[] inColumn = GetColumn(inStringTable.Independents, inColumnIndex); if (columnsToExpand[inColumnIndex] == false) { outStringTable.IndependentHeaders[outColumnIndex] = inStringTable.IndependentHeaders[inColumnIndex]; PutColumn(outStringTable.Independents, inColumn, outColumnIndex); outColumnIndex++; } else { List <string> distinctCategories = inColumn.Distinct().ToList(); int totalNewColumns = distinctCategories.Count; for (int newColumnIndex = 0; newColumnIndex < totalNewColumns; newColumnIndex++) { ExpandColumnPointer expandColumnPointer = new ExpandColumnPointer(); expandColumnPointer.NewColumnIndex = newColumnIndex; expandColumnPointer.CategoryName = distinctCategories[newColumnIndex]; outStringTable.IndependentHeaders[outColumnIndex] = inStringTable.IndependentHeaders[inColumnIndex] + "-" + newColumnIndex.ToString().Trim(); for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) { if (newColumnIndex == Convert.ToInt32(inColumn[rowIndex])) { outStringTable.Independents[rowIndex, outColumnIndex] = "1"; } else { outStringTable.Independents[rowIndex, outColumnIndex] = "0"; } } outColumnIndex++; expandColumnPointers.Pointers.Add(expandColumnPointer); } } if (expandColumnPointers.Pointers.Count > 0) { processDefinition.ExpandColumnsPointers.Pointers.Add(expandColumnPointers); } } return(outStringTable); }