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

Discuti il tutorial sul forum !

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


Correlati


Commenti

Scrivi un commento





Commenti recenti:


Ultimi dal forum