//[ValidateAntiForgeryToken] public IActionResult FindSpm(float supportPercentage, DateTime startDate, DateTime endDate) { // IEnumerable<UkRetailOriginalSales> inputDataset = _dbContext.UkRetailOriginalSales.Select(a => a.CustomerID , a. ).ToList(); var customerOrders = _dbContext.UkRetailOriginalSales .Where(a => a.InvoiceDate.Date >= startDate.Date && a.InvoiceDate.Date <= endDate.Date && a.CustomerID != null && a.CustomerID < 13000 && a.Quantity > 0 && string.Compare(a.StockCode, "a") == -1) .Select(a => new { a.CustomerID, Year = a.InvoiceDate.Year, Month = a.InvoiceDate.Month, a.StockCode }) //.OrderBy(a => new { a.Year, a.Month }) .GroupBy(a => new { a.CustomerID }).AsQueryable(); //.GroupBy(a => new { a.CustomerID, a.Year, a.Month }); List <List <List <string> > > transformedSequences = new List <List <List <string> > >(); foreach (var groupCustomer in customerOrders) { var customerMonthlyorder = groupCustomer.GroupBy(a => new { a.Year, a.Month }); List <List <string> > sequence = new List <List <string> >(); foreach (var groupCustomerMontlyOrder in customerMonthlyorder) { List <string> itemset = new List <string>(); foreach (var order in groupCustomerMontlyOrder) { itemset.Add(order.StockCode); } sequence.Add(itemset); } transformedSequences.Add(sequence); } int CountUsers = transformedSequences.Count(); int support = Convert.ToInt32(Math.Floor((supportPercentage / 100) * CountUsers)); GSP gsp = new GSP(); List <SequenceSupport> frequentSequences = gsp.FindSequentialPatterns(transformedSequences, support); List <SequenceSupportPercentage> frequentSequencesPercentages = new List <SequenceSupportPercentage>(); foreach (SequenceSupport frequentSequence in frequentSequences) { SequenceSupportPercentage frequentSequencesPercentage = new SequenceSupportPercentage(); frequentSequencesPercentage.sequence = frequentSequence.sequence; frequentSequencesPercentage.support = frequentSequence.support; frequentSequencesPercentage.supportPercentage = ((float)frequentSequence.support / transformedSequences.Count()) * 100; frequentSequencesPercentages.Add(frequentSequencesPercentage); } // SavetoDatabase(frequentSequencesPercentages.Where(a => a.sequence.Count()>1).ToList()); SavetoDatabase(frequentSequencesPercentages.ToList()); //return View(frequentSequences.Where(a => a.sequence.Count>=1)); return(View(frequentSequencesPercentages)); }
public IActionResult FindSpm(string inputData, int support) { List <List <List <string> > > transformedSequences = new List <List <List <string> > >(); // List<List<string>> inputSequence = new List<List<string>>(); // List<string> itemList = new List<List<string>>(); List <string> sequenceList = new List <string>(); sequenceList = inputData.Split("\r\n").Where(r => (r != "") && (r != " ")).ToList(); //sequenceList = inputData.Split('<','>').Where(r => (r != "") && (r != "\r\n")).ToList(); foreach (string sequence in sequenceList) { List <string> sequenceItemlists = sequence.Split(' ').ToList(); List <List <string> > inputSequence = new List <List <string> >(); foreach (string sequenceItemlist in sequenceItemlists) { List <string> itemlist = sequenceItemlist.Split(',').ToList(); inputSequence.Add(itemlist); } transformedSequences.Add(inputSequence); } GSP gsp = new GSP(); List <SequenceSupport> frequentSequences = gsp.FindSequentialPatterns(transformedSequences, support); List <SequenceSupportPercentage> frequentSequencesPercentages = new List <SequenceSupportPercentage>(); foreach (SequenceSupport frequentSequence in frequentSequences) { SequenceSupportPercentage frequentSequencesPercentage = new SequenceSupportPercentage(); frequentSequencesPercentage.sequence = frequentSequence.sequence; frequentSequencesPercentage.support = frequentSequence.support; frequentSequencesPercentage.supportPercentage = ((float)frequentSequence.support / transformedSequences.Count()) * 100; frequentSequencesPercentages.Add(frequentSequencesPercentage); } return(View(frequentSequencesPercentages)); }