Changeset 14878 for branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionExcelFormatter.cs
- Timestamp:
- 04/19/17 16:53:09 (7 years ago)
- Location:
- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
-
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionExcelFormatter.cs
r14312 r14878 51 51 while (dividend > 0) { 52 52 int modulo = (dividend - 1) % 26; 53 columnName = Convert.ToChar(65 + modulo).ToString() + columnName;53 columnName = System.Convert.ToChar(65 + modulo) + columnName; 54 54 dividend = (int)((dividend - modulo) / 26); 55 55 } … … 60 60 private readonly Dictionary<string, string> variableNameMapping = new Dictionary<string, string>(); 61 61 private int currentVariableIndex = 0; 62 private string GetColumnToVariableName(string var iabelName) {63 if (!variableNameMapping.ContainsKey(var iabelName)) {62 private string GetColumnToVariableName(string varName) { 63 if (!variableNameMapping.ContainsKey(varName)) { 64 64 currentVariableIndex++; 65 variableNameMapping.Add(var iabelName, GetExcelColumnName(currentVariableIndex));66 } 67 return string.Format("${0}1", variableNameMapping[var iabelName]);65 variableNameMapping.Add(varName, GetExcelColumnName(currentVariableIndex)); 66 } 67 return string.Format("${0}1", variableNameMapping[varName]); 68 68 } 69 69 public string Format(ISymbolicExpressionTree symbolicExpressionTree) { … … 71 71 } 72 72 73 73 74 public string Format(ISymbolicExpressionTree symbolicExpressionTree, IDataset dataset) { 75 if (dataset != null) 76 return FormatWithMapping(symbolicExpressionTree, CalculateVariableMapping(symbolicExpressionTree, dataset)); 77 else return FormatWithMapping(symbolicExpressionTree, new Dictionary<string, string>()); 78 } 79 80 public string FormatWithMapping(ISymbolicExpressionTree symbolicExpressionTree, Dictionary<string,string> variableNameMapping) 81 { 82 foreach(var kvp in variableNameMapping) this.variableNameMapping.Add(kvp.Key,kvp.Value); 74 83 var stringBuilder = new StringBuilder(); 75 if (dataset != null) CalculateVariableMapping(symbolicExpressionTree, dataset); 76 84 77 85 stringBuilder.Append("="); 78 86 stringBuilder.Append(FormatRecursively(symbolicExpressionTree.Root)); 79 87 80 foreach (var variable in variableNameMapping) {88 foreach (var variable in this.variableNameMapping) { 81 89 stringBuilder.AppendLine(); 82 90 stringBuilder.Append(variable.Key + " = " + variable.Value); … … 85 93 } 86 94 87 private voidCalculateVariableMapping(ISymbolicExpressionTree tree, IDataset dataset) {88 int columnIndex = 0;95 private Dictionary<string,string> CalculateVariableMapping(ISymbolicExpressionTree tree, IDataset dataset) { 96 var mapping = new Dictionary<string,string>(); 89 97 int inputIndex = 0; 90 var usedVariables = tree.IterateNodesPrefix().OfType< VariableTreeNode>().Select(v => v.VariableName).Distinct();98 var usedVariables = tree.IterateNodesPrefix().OfType<IVariableTreeNode>().Select(v => v.VariableName).Distinct().ToArray(); 91 99 foreach (var variable in dataset.VariableNames) { 92 columnIndex++;93 100 if (!usedVariables.Contains(variable)) continue; 94 101 inputIndex++; 95 variableNameMapping[variable] = GetExcelColumnName(inputIndex); 96 } 102 mapping[variable] = GetExcelColumnName(inputIndex); 103 } 104 return mapping; 97 105 } 98 106 … … 190 198 stringBuilder.Append(variableTreeNode.Weight.ToString(CultureInfo.InvariantCulture)); 191 199 stringBuilder.Append("*"); 192 stringBuilder.Append(GetColumnToVariableName(variableTreeNode.VariableName));// + LagToString(currentLag)); 200 stringBuilder.Append(GetColumnToVariableName(variableTreeNode.VariableName)); 201 } else if (symbol is BinaryFactorVariable) { 202 var binFactorNode = node as BinaryFactorVariableTreeNode; 203 stringBuilder.AppendFormat("IF({0}=\"{1}\", {2}, 0)", 204 GetColumnToVariableName(binFactorNode.VariableName), 205 binFactorNode.VariableValue, 206 binFactorNode.Weight.ToString(CultureInfo.InvariantCulture) 207 ); 208 } else if (symbol is FactorVariable) { 209 var factorNode = node as FactorVariableTreeNode; 210 var values = factorNode.Symbol.GetVariableValues(factorNode.VariableName).ToArray(); 211 var w = factorNode.Weights; 212 // create nested if 213 for (int i = 0; i < values.Length; i++) { 214 stringBuilder.AppendFormat("IF({0}=\"{1}\", {2}, ", 215 GetColumnToVariableName(factorNode.VariableName), 216 values[i], 217 w[i].ToString(CultureInfo.InvariantCulture)); 218 } 219 stringBuilder.Append("\"\""); // return empty string on unknown value 220 stringBuilder.Append(')', values.Length); // add closing parenthesis 193 221 } else if (symbol is Power) { 194 222 stringBuilder.Append("POWER(");
Note: See TracChangeset
for help on using the changeset viewer.