Beispiel #1
0
        /// <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();
        }
Beispiel #2
0
        /// <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;
        }
Beispiel #3
0
        /// <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();
        }
Beispiel #4
0
        /// <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();
        }