Anda di halaman 1dari 5

AIM: To implement Apriori Algorithm

Program:
-------------------------------------------------------------------------------------------------------------------------------------
class Apriori
{
static int min_support=2;
static boolean found=false;
String candidateSet="C", freqSet="L";

void generateSet(String candidateSet,String freqSet) throws Exception


{
SetGeneration itemset = new SetGeneration(candidateSet,freqSet);
}

public static void main (String arg[]) throws Exception


{
Apriori a = new Apriori();
int i=1;
String C="",L="";
while(!(found))
{
C=a.candidateSet+i;
L=a.freqSet+i;
a.generateSet(C,L);
i++;
}
}
}

import java.sql.*;

class SetGeneration
{
String C="", L="";
int cols;
Connection conn=null;
Statement main_st=null ,st =null;
ResultSet main_rs=null ,rs =null;
ResultSetMetaData rsm=null;

SetGeneration(String candidateSet,String freqSet) throws Exception


{
C=candidateSet;
L=freqSet;
loadConnection();
generateCandidateSet();
generateFreqSet();
if(foundSet())
{
Apriori temp =new Apriori();
temp.found=true;
closeConnection();
}
}

void loadConnection()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=./src/db/Shop.mdb";
conn =DriverManager.getConnection(url,"","");
conn.setAutoCommit(false);
main_st =
conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
main_rs=main_st.executeQuery("Select * from Transaction");
rsm=main_rs.getMetaData();
cols=rsm.getColumnCount();

st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}
catch(Exception e1) { System.out.println("Error1 "+ e1.getMessage()); }
}

void closeConnection()
{
try { conn.close(); }

catch(Exception e2) { System.out.println("Error2 "+ e2.getMessage()); }


}

void generateCandidateSet() throws Exception


{
if(C.equalsIgnoreCase("C1"))
{
String q1="create table "+C+" (item1 varchar(3),count integer) ";
st.executeUpdate(q1);
for(int i=2;i<=cols;i++)
{
String q2 ="insert into "+C+" values ( '"+rsm.getColumnName(i)+"',0 )";
st.executeUpdate(q2);
}

for(int i=2;i<=cols;i++)
{
main_rs.beforeFirst();
int cnt=0;
while(main_rs.next())
{
if(main_rs.getBoolean(rsm.getColumnName(i)))
cnt++;
}
st.executeUpdate("update "+ C+" set count="+cnt +" where item1='"+rsm.getColumnName(i)+"'");
}
conn.commit();
}
else
{
int x=Integer.parseInt(C.substring(1));
x=x-1;
String F="L"+x;
String q1 = "Select * from " +F;
rs=st.executeQuery(q1);
ResultSetMetaData m = rs.getMetaData();
int max = m.getColumnCount();
String q2="Select ";
for(int i=1;i<max;i++)
{
q2+="p.item"+i+" as item"+i+",";
}
q2+="q.item"+(max-1)+" as item"+(max)+",q.count ";
q2+="into "+C+" from " +F+" as q,"+F+" as p ";
q2+="where ";
for(int i=1;i<max-1 && max!=2;i++)
{
q2+="p.item"+i+"=q.item"+i+" and ";
}
q2+="p.item"+(max-1)+"<q.item"+(max-1);
st.executeUpdate(q2);
st.executeUpdate("update "+C+" set count=0");

rs =st.executeQuery("Select * from "+C);


m=rs.getMetaData();
max=m.getColumnCount();

Statement st1=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rst=st1.executeQuery("Select * from "+C);;
while(main_rs.next())
{
String temp="";
String q3="";

rs.beforeFirst();
while(rs.next())
{
for(int i=1;i<max;i++)
{
if ((main_rs.getBoolean(rs.getString(i))))
{
temp+=rs.getString(i);

}
}
if(temp.length()==(max-1))
{
for(int i=0;i<temp.length();i++)
{
q3+="item"+(i+1)+"='"+temp.charAt(i)+"' and ";
}
q3=q3.substring(0, q3.length()-4);

st1.executeUpdate("update "+C+" set count=count+"+1+" where "+q3);


}
temp=""; q3="";
}
}
}
}

void generateFreqSet() throws Exception


{
String q = "Select * into " + L + " from " + C + " where count >= 2 ";
st.executeUpdate(q);
conn.commit();
}
boolean foundSet()throws Exception
{
rs=st.executeQuery("Select * from "+L);
int cnt=0;
while(rs.next())
cnt++;
if(cnt==0)
printSet();

return(cnt==0);

}
void printSet()throws Exception
{
int x=Integer.parseInt(C.substring(1));
x=x-1;
String F="L"+x;
String q1 = "Select * from " +F;
rs=st.executeQuery(q1);
ResultSetMetaData m = rs.getMetaData();
int max = m.getColumnCount();

while(rs.next())
{
for(int i=1;i<max;i++)
System.out.print(rs.getString(i)+"\t");

System.out.println("count="+rs.getInt("count"));
}
}
}
OUTPUT:
A B E F count=2

Transaction
T_no A B C D E F
1 Yes Yes No No Yes Yes
2 No Yes No Yes No No
3 No Yes Yes No No No
4 Yes Yes No Yes No Yes
5 Yes No Yes No No Yes
6 No Yes Yes No No No
7 Yes No Yes No No Yes
8 Yes Yes Yes No Yes Yes
9 Yes Yes Yes No No No

C1 L1
item1 count item1 count
A 6 A 6
B 7 B 7
C 6 C 6
D 2 D 2
E 2 E 2
F 5 F 5
C2 L2
C2 L2
item1 item2 count item1 item2 count
A C 4 A C 4
A D 1 A E 2
A E 2 A F 5
A F 5 B C 4
B C 4 B D 2
B D 2 B E 2
B E 2 B F 3
B F 3 C F 3
C D 0 E F 2
C E 1
C F 3
D E 0
D F 1
E F 2
C3 L3
item1 item2 item3 count item1 item2 item3 count
A B F 3 A B F 3
A B E 2 A B E 2
A B C 2 A B C 2
A C F 3 A C F 3
A C E 1 A E F 2
A E F 2 B E F 2
B C F 1
B C E 1
B C D 0
B D F 1
B D E 0
B E F 2
C4 L4
item1 item2 item3 item4 count item1 item2 item3 item4 count
A B E F 2 A B E F 2
A B C E 1
A B C F 1
C5 L5
item1 item2 item3 item4 item5 count item1 item2 item3 item4 item5 count

Anda mungkin juga menyukai