Cerca articolo o scritps su sastgroup.com
es: banca sella

Discuti il tutorial sul forum !

Algoritmo a priori (parte 2)

Obiettivo
In questo articolo tratteremo come implementare l'algoritmo a priori in java per trovare coppie di articoli (prodotti)
che hanno alta frequenza tra un insieme di prodotti venduti.

Codice

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.swing.table.*;
import java.lang.*;

public class apriori extends JInternalFrame
{
public Vector items=new Vector(); //tutti gli items
public int soglia;  //soglia
Vector frequenti=new Vector(); //items frequenti
Vector pergrafico=new Vector();
JLabel lab;
String ndatab,nus,npass;

public Vector generaItems(Vector list,int livello)
{
//inizializzazione connessione
Connection conn=null;
Vector temp=new Vector();
Vector auxv=new Vector();

try{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection ("jdbc:oracle:oci8:@" + ndatab,nus,npass);
}
catch(Exception ez){}

//livello=0
//ritorna una vettore avente come elementi 1-items
if(livello==0)
{
for(int i=0;i<items.size();i++)
{
Vector interno=new Vector();
int bau=issolofrequente(((String)items.elementAt(i)),conn,soglia);
if(bau>soglia)
{
interno.addElement(items.elementAt(i));
temp.addElement(interno);
}
}
}
//livello>0
//ritorna una vettore avente come elementi piu di 2-items
else if(livello!=0)
{
for(int i=0;i<list.size();i++) //per ogni elem di list
{
//prendo l'ultimo elemento dell'elemento corrente del vettore 
Object ultimo = ((Vector)list.elementAt(i)).lastElement();
//cosi calcolo l'indice da cui inserire l'item
int indice_ultimo=items.lastIndexOf(ultimo);
for(int j=indice_ultimo+1;j<items.size();j++) //per ogni items
{
Vector aux=new Vector();
Vector aux2=new Vector();
aux = (Vector) list.elementAt(i); //num di elem
for(int h=0;h<aux.size();h++)
{
aux2.addElement(aux.elementAt(h));
}
aux2.addElement(items.elementAt(j));
int bau=isfrequente(aux2,conn,soglia);
if(bau>soglia){
temp.addElement(aux2);
}
}
}
}
return temp;
}

//vede se è frequente un solo item
public int issolofrequente(String elem,Connection con,int soglia)
{
int contatore=0;
String QUERY="select SYSTEM.acquisti.transid from SYSTEM.acquisti where items='"+elem+"'";
try{
Statement stmt = con.createStatement ();
ResultSet rslt = stmt.executeQuery (QUERY);
ResultSetMetaData rsmd=rslt.getMetaData();
//fa il ciclo dei campi
while(rslt.next()){
contatore++;
}
stmt.close();
rslt.close();
}
catch(Exception ez){
System.out.println("fallita");
}
if(contatore>soglia)return contatore;
else return 0;
}

//vede se è frequente piu di un item
public int isfrequente(Vector list,Connection con,int soglia)
{
int contatore=0;
String QUERY="select SYSTEM.acquisti.transid from SYSTEM.acquisti where items='"+list.elementAt(0)+"'";
for(int i=1;i<list.size();i++){
QUERY+="intersect select SYSTEM.acquisti.transid due from SYSTEM.acquisti where items='"+list.elementAt(i)+"'";

try{
Statement stmt = con.createStatement ();
ResultSet rslt = stmt.executeQuery (QUERY);
ResultSetMetaData rsmd=rslt.getMetaData();
//fa il ciclo dei campi
while(rslt.next()){
contatore++;
}
stmt.close();
rslt.close();
}
catch(Exception ez){
System.out.println("fallita");
}
if(contatore>soglia)return contatore;
else return 0;
}

public void stampa(Vector vett)
{
Enumeration e = vett.elements();
while(e.hasMoreElements()){
System.out.println(""+(e.nextElement()).toString());
}
}

public double confidenza(int supporto_tutti,Vector vett,Connection con,int soglia)
{
Vector vettore=new Vector();
for(int i=0;i<vett.size()-1;i++)
vettore.add((String)vett.elementAt(i));

double conf=supporto_tutti*1.0F/isfrequente(vettore,con,soglia)*1.0F;
return conf;
}

public apriori()
{}

public apriori(String datab,String us,String pass,String so)
{
setSize(600,500);
setLocation(100,100);
setClosable(true);
setMaximizable(true);
setIconifiable(true);
setResizable(true);

ndatab=datab;
nus=us;
npass=pass;

String[] columnNames =

"items", "support", "confidence"
};

Object[][] cells =
{ };

setTitle("algoritmo a priori soglia by sandro stracuzzi:"+so);
DefaultTableModel model= new DefaultTableModel(cells, columnNames); 
JPanel pannello=new JPanel(new BorderLayout());
JTable tabella;
lab=new JLabel("");

soglia=Integer.parseInt(so);
System.out.println(soglia);

Vector due=new Vector(); //items frequenti
Vector pulito=new Vector(); //items frequenti
//apriori ist=new apriori();

//inizializzazione connessione
Connection conn=null;
try{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection ("jdbc:oracle:oci8:@" + ndatab,nus,npass);
}
catch(Exception ez){}

//calcolo tempo
long start = 0;
long end = 0;
start = System.currentTimeMillis( );

//carico items
String QUERY="select distinct SYSTEM.acquisti.items from SYSTEM.acquisti";
try{
Statement stmt = conn.createStatement ();
ResultSet rslt = stmt.executeQuery (QUERY);
ResultSetMetaData rsmd=rslt.getMetaData();
//fa il ciclo dei campi
while(rslt.next()){
items.addElement(""+rslt.getString("items"));
}
stmt.close();
rslt.close();
}
catch(Exception ez){
System.out.println("fallita");
}

//prova
for(int k=0;k<items.size();k++){
if(k==0){
frequenti=generaItems(items,k);
//stampa(frequenti);
//cicla il vettore per mettere nella tabella
for(int x=0;x<frequenti.size();x++){
String[] newCells = new String[3];
newCells[0] = ""+(frequenti.elementAt(x)).toString();
newCells[1] = ""+isfrequente(((Vector)frequenti.elementAt(x)),conn,soglia);
newCells[2] = "-";
model.addRow(newCells); 
}
due=frequenti;
}
else{
frequenti=generaItems(due,k);
for(int x=0;x<frequenti.size();x++){
String[] newCells = new String[3];
newCells[0] = ""+(frequenti.elementAt(x)).toString();
newCells[1] = ""+isfrequente((Vector)frequenti.elementAt(x),conn,soglia);
newCells[2] = ""+confidenza(Integer.parseInt(newCells[1]),(Vector)frequenti.elementAt(x),conn,soglia); //supporto tutti,items 
model.addRow(newCells); 
}
due=frequenti;
}
}

//System.out.println(pergrafico);

tabella=new JTable(model);
pannello.add(new JScrollPane(tabella)); 
getContentPane().add(pannello,BorderLayout.CENTER);
getContentPane().add(lab,BorderLayout.SOUTH);

TableChangeListener modelListener = new TableChangeListener ();
tabella.getModel().addTableModelListener(modelListener);
tabella.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

end = System.currentTimeMillis( );
lab.setText("elapsed time = " +(end - start)/8 + " milliseconds");
}

class TableChangeListener implements TableModelListener
{
public TableChangeListener (){}
public void tableChanged(TableModelEvent event)
{
int row = event.getFirstRow();
int column = event.getColumn();
//int rowcount= event.getRowCount();
//int columncount= event.getColumnCount();
TableModel model = (TableModel)event.getSource();
String columnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);
//grafico a=new grafico((Vector)data);
//a.show();
}
}

}

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • blinkbits
  • BlinkList
  • blogmarks
  • co.mments
  • del.icio.us
  • De.lirio.us
  • digg
  • Fark
  • feedmelinks
  • Furl
  • LinkaGoGo
  • Ma.gnolia
  • NewsVine
  • Reddit
  • scuttle
  • Smarking
  • Spurl
  • YahooMyWeb
  • DZone
  • Internetmedia
  • Snap2r
  • Technorati


Correlati


Commenti

Scrivi un commento





Commenti recenti:


Ultimi dal forum