/// <summary> /// Process sequential pattern algorithm. /// </summary> private void ExecuteProcessCommand() { var sessions = InputSessions.ToArray(); var classes = PatternHelper.SelectClasses(sessions); StringBuilder ob = new StringBuilder(); ob.AppendLine($"Классы: {string.Join(", ", classes)}."); ob.AppendLine($"Длина: {sessions.Sum(s => s.Length)}."); var patterns = PatternHelper.GeneratePatterns(classes, 2, MaxPatternLength); var results = ( from p in patterns let count = PatternHelper.CalculateCount(p, sessions) let support = PatternHelper.CalculateSupport(p, sessions) where support > 0 select new { Pattern = p, Count = count, Support = support }) .ToArray(); var maxSupport = results.Length == 0 ? 0 : results.Select(r => r.Support).Max(); ob.AppendLine("Шаблоны:"); foreach (var result in results) { ob.Append("⟨"); ob.Append(string.Join(",", result.Pattern)); ob.Append("⟩"); ob.Append(". μ = "); ob.Append(result.Count); ob.Append(". λ = "); ob.Append(Math.Round(result.Support, 5)); ob.Append("."); if (result.Support == maxSupport) { ob.Append(" - MAX"); } ob.AppendLine(); } double sumSup = results.Sum(_ => _.Support); ob.AppendLine("Сумма поддержки: " + Math.Round(sumSup, 5)); double sumlengths = results.Sum(_ => _.Pattern.Length); double sumWeightedSup = results.Sum(_ => _.Support * ((double)_.Pattern.Length / sumlengths)); ob.AppendLine("Взв.сумма поддержка: " + Math.Round(sumWeightedSup, 5)); double sumAvgSup = results.Sum(_ => _.Support) / results.Where(p => p.Support > 0).Count(); ob.AppendLine("Сред.сумма поддержка: " + Math.Round(sumAvgSup, 5)); ob.AppendLine("Затраченное время:"); var func = TimeFunc.SelectedItem.Value; for (int i = 0; i < InputSessions.Count; i++) { var time = InputSessions[i].Sum(e => func(e)); ob.AppendLine($"Сессия #{i + 1}: {time}"); } OutputData = ob.ToString(); }
/// <summary> /// Selected time calculation function changed. /// </summary> private void OnSelectedTimeFuncChanged(object sender, EventArgs ev) { var func = TimeFunc.SelectedItem.Value; var data = string.Join(Environment.NewLine, InputSessions.Select(s => s.Sum(e => func(e)))); OutputData = data; }
/// <summary> /// Import UAD from entered text. /// </summary> private void ExecuteImportText() { string[][] sessions = InputData? .Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries) .Select(s => s.Split(new char[] { '⟨', '⟩', '<', '>', ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)) .ToArray(); InputSessions.Clear(); InputSessions.AddRange(sessions); var data = string.Join(Environment.NewLine, sessions.Select(s => string.Join(", ", s))); InputData = data; TimeFunc.SelectFirst(); }
/// <summary> /// Selected classification function changed. /// </summary> private void OnSelectedClassFuncChanged(object sender, EventArgs ev) { var func = ClassFunc.SelectedItem.Value; var sessions = Files.SelectMany(f => f.Sessions) .Select(s => s.Events .SelectMany(e => func(e)) .ToArray()); InputSessions.Clear(); InputSessions.AddRange(sessions); var data = string.Join(Environment.NewLine, sessions.Select(s => string.Join(", ", s))); InputData = data; TimeFunc.SelectFirst(); }