数据库提取数据,Apriopri 分析 (C#)
我有一个数据表,里面记录了超市客户购物信息
我想从数据库中提取客户每次购物的数据,此数据按时间分组,
每个组我用一个数组表示例如第一组 a[0][...],这样的话进行分析,
找出频繁购物序列,
我想了想,现在还没有想好,各位有什么好主意帮我分析分析
这个是别人写的Apriopri程序,我看着有点迷茫,帮我分析一下吧
ItemSet.cs  
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace testApriori1
{
      public class ItemSet
      {
      private string items;
      private int sup;
      public string Items
           {
           get { return items; }
           set { items = value; }
           }
      public int Sup
           {
      get { return sup; }
      set { sup = value; }
           }
      public ItemSet()//对象初始化
           {
           items = null;
           sup = 0;
           }
      }
}  
TestApriori.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Collections;
namespace testApriori1
{
      public class TestApriori
      {
      static void Main(string[] args)
           {
           Console.Write(DateTime.Now);
           ArrayList D = GetEventsFromDB();//事务数据集
           ArrayList I = GetItems1FromDB();//初始项目集合
           float s = 0.01f;//支持度
           List L = new List();//所有频繁项集
           L = Apriori(D, I, s);
           for (int i = 0; i < L.Count; i++)
                {
                Console.WriteLine(L[i].Items);
                Console.WriteLine(L[i].Sup);
                }
                Console.Write(DateTime.Now);
                Console.Read();
           }
#region-----用Apriori算法进行迭代-----
///  
/// 用Apriori算法进行迭代
///  
static List Apriori(ArrayList D,ArrayList I,float sup)
{
      List L = new List();//所有频繁项集
      if (I.Count == 0) return L;
      else
      {
           int[] Icount = new int[I.Count];//初始项集计数器,初始化为0
           ArrayList Ifrequent = new ArrayList();//初始项集中的频繁项集
           //遍历事务数据集,对项集进行计数
           Regex r=new Regex(",");
           for (int i = 0; i < D.Count; i++)
                {
                string[] subD=r.Split(D[i].ToString());
                for (int j = 0; j < I.Count;j++ )
                     {
                     string[] subI = r.Split(I[j].ToString());
                     bool subIInsubD=true;
                     for(int m=0;m
                          {
                          bool subImInsubD=false;
                          for(int n=0;n
                          if (subI[m] == subD[n])  
                               {
                               subImInsubD = true;  
                               continue;  
                               }
                          if(subImInsubD==false) subIInsubD=false;
                          }
                     if(subIInsubD==true) Icount[j]++;
                     }
                }
           //从初始项集中将支持度大于给定值的项转到L中
           for (int i = 0; i < Icount.Length;i++ )
                {
                if (Icount[i] >= sup * D.Count)  
                     {
 &