Jumat, 20 November 2020

PHP Fpgrowth Implementasi

Algoritma FPgrowth  digunakan agar komputer dapat mempelajari aturan hubungan, mencari pola relasi antar satu atau lebih item dalam suatu dataset (menggunakan konsep pembangunan tree dalam pencarian frequent itemset).

Algoritma ini banyak digunakan pada data transaksi atau biasa disebut market basket, misalnya sebuah swalayan memiliki market basket, dengan adanya Algoritma FPGrowth, pemilik swalayan dapat mengetahui pola pembelian seorang konsumen, jika seorang konsumen membeli item A , B, punya kemungkinan 50% dia akan membeli item C, pola ini sangat signifikan dengan adanya data transaksi selama ini. 

Tampilan Pendahuluan (Rumus/Formula):


Tampilan Masukan data Analisa dan Parameter Support dan Confidence:


Tampilan Pendataan Batasan Invoice yang sudah ada:


Hasil FPGrowth 1 Kombinasi:


Hasil FPGrowth 2 Kombinasi:


Hasil FPGrowth 3 Kombinasi:


echo"<H1>Perhitungan FPGrowth </h1>";


echo"Merupakan salah satu algoritma data mining. 

Algoritma FPGrowth digunakan agar komputer dapat mempelajari aturan hubungan, 

mencari pola relasi antar satu atau lebih item dalam suatu dataset (menggunakan konsep pembangunan tree dalam pencarian

frequent itemset).

<br>

Algoritma ini banyak digunakan pada data transaksi atau biasa disebut market basket, 

misalnya sebuah swalayan memiliki market basket, 

dengan adanya Algoritma FPGrowth, pemilik swalayan dapat mengetahui 

pola pembelian seorang konsumen, 

jika seorang konsumen membeli item A , B, punya kemungkinan 50% dia 

akan membeli item C, pola ini sangat signifikan dengan adanya data transaksi selama ini.

<br><br>

Dalam Aturan FPGrowth, ada 2 poin untuk menghasilkan aturan yang tepat, yaitu Nilai Support dan Confident.

<b>Nilai Support (s)</b> merupakan persentase jumlah kasus untuk kombinasi item tertentu.

<img src='ypathfile/app1.png' width='300' height='180'>

Dimana X∪Y merupakan jumlah transaksi yang berisi X dan Y, sementara N merupakan total jumlah seluruh transaksi. Nilai support menjadi ukuran yang sangat penting dalam aturan asosiasi karena aturan yang sangat lemah nilai support-nya berarti asosiasi tersebut sangat jarang terjadi dalam dataset (seluruh data transaksi).

<br>

<b>Nilai Confident</b>

<img src='ypathfile/app2.png' width='300' height='180'>

Nilai Confident (c) merupakan persentase keakurasian dari Aturan FPGrowth yang dihasilkan.


<hr>";


$sql="select `tanggal` from `$tbinvoice` order by `tanggal` asc limit 0,1";

$d=getField($conn,$sql);

$tanggal1=WKT($d["tanggal"]);

$tanggal2=WKT(date("Y-m-d"));

$SUP=0.2;

$CONF=50;

$catatan="";


if(isset($_GET["id"])){

$id_pengujian=$_GET["id"];

$sql="select * from `$tbpengujian` where `id_pengujian`='$id_pengujian'";

$d=getField($conn,$sql);

$id_pengujian=$d["id_pengujian"];

$nama_pengujian=$d["nama_pengujian"];

$tanggal=WKT($d["tanggal"]);

$jam=$d["jam"];

$SUP=$d["support"];

$CONF=$d["confidence"];

$rekapitulasi=$d["rekapitulasi"];

$hasil=$d["hasil"];

$catatan=$d["catatan"]; 

}

if(isset($_GET["pro"]) && $_GET["pro"]=="reset"){

  $_SESSION["chitung"]="";

unset($_SESSION["chitung"]);

  

  $tanggal=date("Y-m-d");

  $jam=date("H:i:s");

  $sql="select `tanggal` from `$tbinvoice` order by `tanggal` asc limit 0,1";

$d=getField($conn,$sql);

$tanggal1=WKT($d["tanggal"]);

$tanggal2=WKT(date("Y-m-d"));

$SUP=0.2;

$CONF=50;


}


if(isset($_POST["Hitung"]) || isset($_SESSION["chitung"])){

$nama_pengujian=$_POST["nama_pengujian"];

$catatan=$_POST["catatan"];

$_SESSION["nama_pengujian"]=$nama_pengujian;

$_SESSION["catatan"]=$catatan;

$SUP=$_POST["sup"];

$CONF=$_POST["conf"];

$TGL1=$_POST["tanggal1"];

$TGL2=$_POST["tanggal2"];

}



echo"<form action='' method='post'>";

echo"<table width='100%' border='1'>";

echo"<tr bgcolor='#ffff00'><td colspan='3'>Parameter FPGROWTH</tr>";

echo"<tr><td>Nama Pengujian<td>:<td><input type='text' name='nama_pengujian' value='$nama_pengujian'></tr>";

echo"<tr><td>Batas Minimum Support<td>:<td><input type='text' name='sup' value='$SUP'> </tr>";

echo"<tr><td>Batas Minimum Confident<td>:<td><input type='text' name='conf' value='$CONF'> </tr>";


echo"<tr><td>Batas Tanggal<td>:<td>

<input type='text' name='tanggal1' value='$tanggal1' id='tanggal1'> 

s/d

<input type='text' name='tanggal2' value='$tanggal2' id='tanggal2'> 

</tr>";


echo"<tr><td>Catatan<td>:<td><input type='text' name='catatan' value='$catatan'></tr>";


echo"<tr><td colspan='3' align='right'>

<input type='submit' class='btn btn-success'  value='HITUNG / ANALISA FPGROWTH' name='Hitung'>

<a href='?mnu=fpgrowth&pro=reset&id=$id_pengujian'><input type='button' class='btn btn-danger'  value='RESET' name='RESET'></a>


</tr>";

echo"</table>";

echo"</form>";


if(isset($_POST["Hitung"]) || isset($_SESSION["chitung"])){

$nama_pengujian=$_POST["nama_pengujian"];

$catatan=$_POST["catatan"];

$SUP=$_POST["sup"];

$CONF=$_POST["conf"];

$TGL1=$_POST["tanggal1"];

$TGL2=$_POST["tanggal2"];

$tanggal1=BAL($TGL1);

$tanggal2=BAL($TGL2);

$sql="select distinct(id_invoice) from `$tbinvoice` where not id_invoice=''  and `tanggal` between '$tanggal1' and '$tanggal2'  order by `id_invoice` desc ";

$jum0=getJum($conn,$sql);

  


$gabx="<b>Informasi Transaksi/Invoice  $TGL1 s/d $TGL2</b>";

$gabx.="<table width='100%' border='1'>";

$gabx.="<tr bgcolor='#ffff00'><td>No<td>Kode<td>List  Item</tr>";

$total=0;


$m=0;

  $jum0=getJum($conn,$sql);

if($jum0 <1){

echo"Maaf data Transaksi/Invoice $TGL1 s/d $TGL2 belum tersedia...<br>";

}

else{

$arr=getData($conn,$sql);

foreach($arr as $d) {

$clr="#dddddd";if($m%2==0){$clr="$eeeeee";}

$id_invoice=$d["id_invoice"];

$gab="$id_invoice#";

$mlist="";

//$sqlg="select `id_barang` from `$tbinvoice` where `id_invoice`='$id_invoice'";

$sqlg="select `id_produk`  from `$tbinvoice` where `id_invoice`='$id_invoice'";

$arrg=getData($conn,$sqlg);

foreach($arrg as $dg) {

$id_produk=$dg["id_produk"];

$np=getProduk($conn,$id_produk);

$jd0=cekAda($gab,$id_produk);

if($jd0>0){$gab.="#";$mlist.="#";$clr="#fff00f";}

$gab.="$id_produk#";

$mlist.="$np ($id_produk),";

}

$gab=substr($gab,0,strlen($gab)-1);

$arG[$m]=$gab;

//echo $arG[$m]."<br>";

$m++;

$mlist=substr($mlist,0,strlen($mlist)-1);

$gabx.="<tr bgcolor='$clr'><td>$m<td>$id_invoice<td>$mlist</tr>";

}//foreach

}//jum0

$gabx.="</table><br><br>";

echo $gabx;

//======================================================================

if( $jum0>0){

$record="<b>Perhitungan $jum0 Data Transaksi yang Terjadi Antara $TGL1 s/d $TGL2 <br>

Dengan Batas Ambang Support $SUP dan batas Ambang Confident $CONF adalah sebagai berikut</b><br>";

$_SESSION["cket"]="<b>Perhitungan dari $jum0 Data Transaksi yang Terjadi Antara $TGL1 s/d $TGL2</b> dengan Batas Ambang Support $SUP % dan batas Ambang Confident $CONF %";


$sqlg="select distinct(id_produk) from `$tbinvoice`";

$arrg=getData($conn,$sqlg);

$n=0;


echo $record;


$gab="<b>Hasil Pembentukan FP-tree itemset I ( k=1)</b><br>

Transaksi dengan pembangkitan itemset k=1, 

maka itemset yang dapat dibentuk beserta dengan jumlah kemunculan nya dalam seluruh transaksi sebagai berikut :<br>";

$gab.="<table width='60%' border='1'>";

$gab.="<tr bgcolor='#ffff00'><td>No<td>Kode<td>Nama Item<td>Jumlah<td>Support<td>Confident</tr>";

$total=0;

foreach($arrg as $dg) {

$id_produk=$dg["id_produk"];

$nm=getProduk($conn,$id_produk);

$jump=hitJumlah1($arG,$id_produk);

$support=($jump/$jum0)*100;

$support_="($jump/$jum0)x100";

$cc0="$id_produk";

$confident=($jump/$jump)*100; if($confident>100){$confident=100;}

if($support>=$SUP && $confident>=$CONF){//

$cc=$id_produk;

$arP[$n]=$cc;

$arN[$n]=$nm;

$arJ[$n]=$jump;

$arS[$n]=$support;

$total+=$jump;

$ARI[$cc]=$jump;

$confident_="($jump/".$ARI[$arP[$n]].")x100";

$arC[$n]=$confident;

$no=$n+1;

$clr="#dddddd";if($no%2==0){$clr="$eeeeee";}

$gab.="<tr bgcolor='$clr'><td>$no<td>$id_produk<td>$nm<td>$jump

<td><label title='$support_'>$support</label>

<td><label title='$confident_'>$confident</label></tr>";

$n++;

}

}

$gab.="<tr bgcolor='#ff00f0'><td colspan='3'>

Total Transaksi<td colspan='3'  align='left'>$total</tr>";

$gab.="</table><br>";

echo $gab;

$record.=$gab;

//https://prpm.trigunadharma.ac.id/public/fileJurnal/hpqZ6%20Ali%20Ikhwan%20.pdf

$gab="<b>Hasil Pembentukan FP-tree itemset II  (k=2)</b><br>

lanjut pada tahap iterasi kedua dengan nilai k=2, 

berarti kita akan membentuk kombinasi dari 2 buah itemset sebagai berikut :";


$gab.="<table width='80%' border='1'>";

$gab.="<tr bgcolor='#ffff00'><th>No<th>Kode1-Kode2<th>Nama Item1-Nama Item2-<th>Jumlah<th>Support<th>Confident</tr>";

$n=0;

$total=0;

$JTX1=count($arP);

for($i=0;$i<$JTX1-1;$i++){

$id_produk1=$arP[$i];

$nm1=$arN[$i];

for($j=$i+1;$j<$JTX1;$j++){

$id_produk2=$arP[$j];

$nm2=$arN[$j];

$jump=hitJumlah2($arG,$id_produk1,$id_produk2);

$support=($jump/$jum0)*100;

$support_="($jump/$jum0)x100";

$cc0=$id_produk1;

$confident=($jump/$ARI[$cc0])*100;if($confident>100){$confident=100;}

if($support>=$SUP && $confident>=$CONF){//

$cc="$id_produk1-$id_produk2";

$arP2[$n]=$cc;

$arN2[$n]="$nm1-$nm2";

$arJ2[$n]=$jump;

$arS2[$n]=$support;

$total+=$jump;

$confident_="($jump/".$ARI[$cc0].")x100";

$arC2[$n]=$confident;

$ARI2[$cc]=$jump;

$no=$n+1;

$clr="#dddddd";if($no%2==0){$clr="$eeeeee";}

$gab.="<tr bgcolor='$clr'><td>$no<td>$arP2[$n]<td>$arN2[$n]<td>$arJ2[$n]

<td><label title='$support_'>$support</label>

<td><label title='$confident_'>$confident</label></tr>";


$n++;

}

}//j

}//i

$gab.="<tr bgcolor='#ff00f0'><td colspan='3'>Total Transaksi<td colspan='3' align='left'>$total</tr>";

$gab.="</table><br>";

echo $gab;

$record.=$gab;


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

error_reporting(0);

$kes="<b>Aturan FPGrowth :</b><br><ul>";


$gab="<b>Hasil Pembentukan FP-tree itemset III  (k=3)</b><br>

lanjut pada tahap iterasi kedua dengan nilai k=3, 

berarti kita akan membentuk kombinasi dari 3 buah itemset sebagai berikut :";


$gab.="<table width='100%' border='1'>";

$gab.="<tr bgcolor='#ffff00'><th>No<th>Kode1-Kode2-Kode3<th>Nama Item1-Nama Item2-Nama Item3

<th>Jumlah<th>Support<th>Confident</tr>";

$n=0;

$total=0;

$JTX1=count($arP);

for($i=0;$i<$JTX1-2;$i++){

$id_produk1=$arP[$i];

$nm1=$arN[$i];

for($j=$i+1;$j<$JTX1-1;$j++){

$id_produk2=$arP[$j];

$nm2=$arN[$j];

for($k=$j+1;$k<$JTX1;$k++){

$id_produk3=$arP[$k];

$nm3=$arN[$k];

$jump=hitJumlah3($arG,$id_produk1,$id_produk2,$id_produk3);

$support=($jump/$jum0)*100;

$support_="($jump/$jum0)x100";

$cc0="$id_produk1-$id_produk2";

$confident=($jump/$ARI2[$cc0])*100;if($confident>100){$confident=100;}

if($support>=$SUP && $confident>=$CONF){//

$cc="$id_produk1-$id_produk2-$id_produk3";

$kes.="<li>Jika membeli $nm1  ($id_produk1) dan $nm2  ($id_produk2) maka akan membeli $nm3 ($id_produk3) =$confident %</li>";

$arP3[$n]=$cc;

$arN3[$n]="$nm1-$nm2-$nm3";

$arJ3[$n]=$jump;

$total+=$jump;

$arS3[$n]=$support;

$confident_="($jump/".$ARI2[$cc0].")x100";

$arC3[$n]=$confident;

$ARI3[$cc]=$jump;

$no=$n+1;

$clr="#dddddd";if($no%2==0){$clr="$eeeeee";}

$gab.="<tr bgcolor='$clr'><td>$no<td>$arP3[$n]<td>$arN3[$n]<td>$arJ3[$n]

<td><label title='$support_'>$support</label>

<td><label title='$confident_'>$confident</label></tr>";


$n++;

}

}//k

}//j

}//i

$kes.="</ul>";


$gab.="<tr bgcolor='#ff00f0'><td colspan='3'>Total Transaksi<td colspan='3' align='left'>$total</tr>";

$gab.="</table><br><hr>";

echo $gab;

echo $kes;


$record.=$gab;

$record.=$kes;

$_SESSION["crecord"]=$record;

$_SESSION["chasil"]=$kes;


echo"<img src='ypathfile/print2.jpg' title='PRINT'  width='150' height='130' OnClick='PRINT()'> ||";

echo"<a href='?mnu=fpgrowth&pro=save&id=$id_pengujian'><img src='ypathfile/save.jpg' title='SIMPAN' width='120' height='100'></a>";


}// $jum0>0




   


   $time_end = microtime(true);

   $time = $time_end - $time_start;

   $_SESSION["cdurasi"]=$time;

   echo "<hr>Lama Proses $time seconds\n";

   

   

}//isset hitung








if(isset($_GET["pro"]) && $_GET["pro"]=="save"){

  $tanggal=date("Y-m-d");

  $id_pengujian=$_GET["id"];

  $nama_pengujian=$_SESSION["nama_pengujian"];

  $catatan=$_SESSION["catatan"];

  $rekapitulasi=$_SESSION["chasil"];

  $durasi=$_SESSION["cdurasi"];

  $hasil=$_SESSION["cket"];

  

  $_SESSION["chitung"]="";

unset($_SESSION["chitung"]);

  $_SESSION["cdurasi"]="";

unset($_SESSION["cdurasi"]);

  

  $tanggal=date("Y-m-d");

  $jam=date("H:i:s");

  

$sql=" Update  `$tbpengujian` set `nama_pengujian`='$nama_pengujian', `catatan`='$catatan',`rekapitulasi`='$rekapitulasi Durasi: $durasi ms', `hasil`='$hasil' where `id_pengujian`='$id_pengujian'";

$simpan=process($conn,$sql);

if($simpan) {echo "<script>alert('Data $nama_pengujian berhasil disimpan !');document.location.href='?mnu=pengujian';</script>";}

else{echo"<script>alert('Data $nama_pengujian gagal disimpan...');document.location.href='?mnu=pengujian';</script>";}

}


?>




OKS

Tidak ada komentar:

Posting Komentar

global_priv WARNING Selalu

 Jika muncul pesan kesalahan: Warning in .\libraries\classes\Dbal\DbiMysqli.php#209  mysqli::query(): (HY000/1034): Index for table 'glo...