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();
}
}
}
Correlati
- Algoritmo a priori (parte 1)
- Algoritmo a priori (parte 2)
- Algoritmo a priori con php e mysql
- Struttura dati coda 2
- Struttura dati lista 2
- Muovere un oggetto 3d con macromedia director (Parte 1)
- Muovere un oggetto 3d con macromedia director (Parte 2)
- Muovere un oggetto 3d con macromedia director (Parte 3)
- Muovere muovere la camera con la tastiera con macromedia director (Parte 4)
- Guida completa alla pixel art (capitolo 2)
- Figure Isometriche in pixel art (parte 1)
- Figure Isometriche in pixel art (parte 2)
- Figure Isometriche in pixel art (parte 3)
- La guida completa ai css capitolo 2
- Installazione ambiente j2me
- Installazione ambiente j2me
- Selezionare una parte di una strinda da un campo di una tabella
- Prima applicazione j2me
- Realizzare una chat con flash e java (parte 2 il server)
- Realizzare una chat con flash e php (parte 2 il server)
- Creare un gioco isometrico (parte 1)
- Creare un gioco isometrico (parte 2 dinamicità )
- Creare un gioco isometrico (parte 3 muri e oggetti)
- Lavorare con i canali in photoshop (parte 2)
- Texture personalizzate con photoshop parte 2
- Texture personalizzate con photoshop parte 3
- Creare gioco auto parte 1
- Creare gioco auto (parte 2 velocità e benzina)
- Creare gioco auto (parte 3 tracciato)
- Creare gioco auto (parte 4 tempi)
- Creare gioco auto (parte 5 salvare i dati nel database mysql)
- Creare gioco auto (parte 6 migliorie al gioco)
- Creare gioco auto (parte 7 replay)
- Creare gioco auto (parte 8 mostrare risultati)
- Creare gioco auto (parte 9 multiplayer)
- Creare una pagina con layout a 2 colonne e menu a destra
- Creare una pagina con layout a 2 colonne e menu a sinistra
- Creare un gioco piattaforma (parte1)
- Creare un gioco piattaforma (parte2 campo di gioco)
- Creare un gioco piattaforma (parte3 vite e coins)
- Creare un gioco piattaforma (parte4 sparo)
- 20 Linee guida per realizzare Landing Page di successo
- Criptare le password con l'algoritmo MD5
- Creare un gioco pong multiplayer (parte 2 il server java)
- Creare un gioco pong multiplayer (parte 3 giocatoreA)
- Creare un gioco pong multiplayer (parte 4 giocatoreB)
- Realizzare un gioco sparo in flash (parte 2 nemici)
- Creare un gioco navicella spaziale (parte1)
- Creare un gioco navicella spaziale (parte2 nemici)
- Creare un gioco navicella spaziale (parte3 collisioni)
- Creare un gioco navicella spaziale (parte4 conclusione)
- Creare un gioco navicella spaziale (parte5 nemici)
- Realizzare una navicella spaziale che si muove e spara a 360 gradi (parte 2)
- Realizzare gioco pong in flash (parte 2 aggiungere il suono)
- Leggere le email con php parte 2 (verifica presenza allegati)
- Leggere le email con php parte 3 (leggere il contenuto)
- Leggere le email con php parte 4 (cancellare email)
Commenti
Scrivi un commento































