数据库提取数据,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)
{
&