Tutorial avanzati su tematiche web su nettuts.com

Ottimo sito dove poter trovare interessanti tutorial avanazati su programmazione web.

Sito web: http://nettuts.com/

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

Algoritmo a priori con php e mysql

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

L'algoritmo a priori
Questo algoritmo e' utilizzato per trovare coppie di insiemi frequenti in un insiemi di oggetti che possono essere
qualsiasi cosa. Ad esempio se analizziamo i carrelli della spesa per capire quali prodotti vengono comprati insieme,
questa informazione viene usata per posizionare i prodotti sugli scaffali ed ottimizzare i percorsi fatti.

Altre applicazioni del M-B problem:
Basket:documenti ,articoli: parole (frasi e concetti in relazione)
Basket: frasi, articoli: documenti (plagio, mirror sites su web)

Risultati del M-B Mining
Association Rules: regole del tipo se un cliente compra X1,X2,…,Xn allora compra anche Y con alta probabilita’. La probabilita’ minima che noi pretendiamo si chiama confidenza. Richiediamo che questa sia decisamente piu’ alta di quella attesa.
Ad esempio la regola latte,burro=>pane potrebbe derivare dal fatto che quasi tutti comprano pane. Mentre la regola pannolini=>birra vale con confidenza molto piu’ alta della percentuale di clienti che compra birra.

Algoritmo A-Priori
Si procede a livelli:
Read( s ); /*soglia di supporto
L1:= {a | a appare con frequenza >= s };
L2:= {{a,b} | a,b L1,{a,b} appare con frequenza >= s };
L3:= {{a,b,c} | {a,b}, {a,c}, {b,c}, L2 {a,b,c} appare con frequenza >= s };
ETC….

Il database
Il database a cui ci riferiremo è mysql.Il nostro database è cosi composto:

CREATE TABLE `definitivo_analisi` (
`id` int(11) NOT NULL auto_increment,
`codice` varchar(100) default NULL,
`utente` varchar(255) default NULL,
`data` varchar(255) default NULL
PRIMARY KEY (`id`)
) TYPE=MyISAM;

dove "codice" e' il codice del prodotto, "utente" e' chi lo ha acquistato e "data" e' la data di acquisto.
Il codice php è il seguente:

<?
echo"<form action=apriori.php method=post>";
echo"inserisci soglia<input type=text name=s><input type=submit value=analizza>";
echo"</form>";
set_time_limit(500); //di default è 30 , questo setta limit off

echo"<center><table><tr bgcolor=orange>Spiegazione</tr><tr><td>";
echo"Questa utility ci permette di vedere quali prodotti acquistano insieme gli utenti,in modo da mettere questi prodotti vicini ";
echo".Il supporto è il numero di volte in cui i prodotti compaiono tra gli acquisti. La soglia è il numero di volte minime da considerare.";
echo"<br>";

$arrai = array();
$items = array();

//carica l'array con gli item venduti
$cnt=0;
connessione_al_db();
$dati=mysql_query("select distinct codice from definitivo_analisi");
$numero_righe=mysql_num_rows($dati);
while($array=mysql_fetch_array($dati)){
$arrai[$cnt]=$array[codice];
$cnt++;
}

$conta=0;
$soglia=$s;
//1 item
for($i=0;$i<=strlen($arrai)+1;$i++){
if(issolofrequente($arrai[$i],$soglia)==1){
$items[$conta]=$arrai[$i];
$conta++;
}
}

//2 item
for($i=0;$i<=strlen($arrai)+1;$i++){
for($j=0;$j<=strlen($arrai)+1;$j++){
if(isduefrequente($arrai[$i],$arrai[$j],$soglia)==1){}
}
}

//3 item
for($i=0;$i<=strlen($arrai)+1;$i++){
for($j=0;$j<=strlen($arrai)+1;$j++){
for($z=0;$z<=strlen($arrai)+1;$z++){
if(istrefrequente($arrai[$i],$arrai[$j],$arrai[$z],$soglia)==1){}
}
}
}

//calcola la frequenza di un solo item
function issolofrequente($uno,$due)
{
connessione_al_db();
$contatore=0;
$dati=mysql_query("select utente from definitivo_analisi where codice='$uno'");
$numero_righe=mysql_num_rows($dati);
while($array=mysql_fetch_array($dati)){
$contatore++;
}
if($contatore>=$due)
{
echo "codice: <b>".$uno."</b> supporto:";
echo "<b>".$contatore."</b><br>";
return 1;
}
else return 0;
}

//calcola la frequenza di due items
function isduefrequente($uno,$due,$tre)
{
if($uno!=$due)
{
connessione_al_db();
$contatore=0;
$dati=mysql_query("select utente from definitivo_analisi where codice='$uno'");
while($array=mysql_fetch_array($dati)){
$utente=$array[utente];
$dati2=mysql_query("select utente from definitivo_analisi where codice='$due'");
while($array2=mysql_fetch_array($dati2)){
if($utente==$array2[utente]) $contatore++;
}
}
if($contatore>=$tre)
{
echo "codice:<b>".$uno."</b>-<b>".$due."</b> supporto:";
echo "<b>".$contatore."</b><br>";
return 1;
}
else return 0;
}
else return 0;
}

//calcola la frequenza di tre items
function istrefrequente($uno,$due,$tre,$quattro)
{
if($uno!=$due)if($uno!=$tre)if($due!=$tre)
{
connessione_al_db();
$contatore=0;
$dati=mysql_query("select utente from definitivo_analisi where codice='$uno'");
while($array=mysql_fetch_array($dati)){
$utente=$array[utente];
$dati2=mysql_query("select utente from definitivo_analisi where codice='$due'");
while($array2=mysql_fetch_array($dati2)){
$utente2=$array2[utente];
$dati3=mysql_query("select utente from definitivo_analisi where codice='$tre'");
while($array3=mysql_fetch_array($dati3)){
$utente3=$array3[utente];
if($utente==$utente2)
if($utente==$array3[utente])
$contatore++;
}}}
if($contatore>=$quattro)
{
echo "codice:<b>".$uno."</b>-<b>".$due."</b>-<b>".$tre."</b> supporto:";
echo "<b>".$contatore."</b><br>";
return 1;
}
else return 0;
}
else return 0;
}
echo"</td></tr></table>";
?>

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

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

Algoritmo a priori (parte 1)

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.

L'algoritmo a priori
Questo algoritmo e' utilizzato per trovare coppie di insiemi frequenti in un insiemi di oggetti che possono essere
qualsiasi cosa. Ad esempio se analizziamo i carrelli della spesa per capire quali prodotti vengono comprati insieme,
questa informazione viene usata per posizionare i prodotti sugli scaffali ed ottimizzare i percorsi fatti.

Altre applicazioni del M-B problem:
Basket:documenti ,articoli: parole (frasi e concetti in relazione)
Basket: frasi, articoli: documenti (plagio, mirror sites su web)

Risultati del M-B Mining
Association Rules: regole del tipo se un cliente compra X1,X2,…,Xn allora compra anche Y con alta probabilita’. La probabilita’ minima che noi pretendiamo si chiama confidenza. Richiediamo che questa sia decisamente piu’ alta di quella attesa.
Ad esempio la regola latte,burro=>pane potrebbe derivare dal fatto che quasi tutti comprano pane. Mentre la regola pannolini=>birra vale con confidenza molto piu’ alta della percentuale di clienti che compra birra.

Algoritmo A-Priori
Si procede a livelli:
Read( s ); /*soglia di supporto
L1:= {a | a appare con frequenza >= s };
L2:= {{a,b} | a,b L1,{a,b} appare con frequenza >= s };
L3:= {{a,b,c} | {a,b}, {a,c}, {b,c}, L2 {a,b,c} appare con frequenza >= s };
ETC….

Il database
Il database a cui ci riferiremo è oracle versione 9.

Il programma java è nella seconda parte.

La nostra tabella è cosi composta:

-- Create table
create table SYSTEM.ACQUISTI
(
TRANSID VARCHAR2(6),
ITEMS VARCHAR2(20),
MESE VARCHAR2(2),
ANNO VARCHAR2(2)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);

-- Create table
create table SYSTEM.CATEGORIE
(
NOMECAT VARCHAR2(20),
CODICECAT VARCHAR2(10)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);

-- Create table
create table SYSTEM.PRODOTTI
(
NOME VARCHAR2(20),
MARCA VARCHAR2(20),
MODELLO VARCHAR2(30),
QUANTITA NUMBER,
CODICECATEGORIA VARCHAR2(10),
CODICESOTTOCATEGORIA VARCHAR2(10),
IMMAGINE VARCHAR2(40),
CODICE VARCHAR2(10),
PREZZO NUMBER
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);

-- Create table
create table SYSTEM.SOTTOCATEGORIE
(
NOMESOTTOCATEGORIA VARCHAR2(20),
CODICESOTTOCATEGORIA VARCHAR2(10),
CODICECATEGORIA VARCHAR2(20)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);

Links
http://alpha.dmi.unict.it/DB2Vecchio/Datamining/dm-01-14-10-04.ppt

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


Commenti recenti:


Ultimi dal forum

Adult all inclusive caribbean vacation fine moms sex
Sex with gear shifter casual sex in chloride new mexico
Adult bookstores in chesapeake virginia voyuar sex stories
Goth babe sex ass like that adult videos
Irritation after sex adult and dvd and rental
Adult baby sissy punishment cheap adult merchant account
Where can i find adult bibs marie carey adult film star
Adult hotsatin adult entertainment couples brooklyn
Apr linas adult video television list pictures of passionate sex
Hardcore black lesbian sex sex in maimi
Adult losing virginity stories adult susak1977
Free sex in texon texas ideas for crazy sex
Adult foot fetish webcam tease and denial sex stories
Castles adult superstore sex encyclopeida
Problema date mese di ottobre