echo option value=.rows-nama_file..rows- nama_file.option; menampilkan nama file dataset
} ? selecttdtr
trtd colspan=3brbrbutton type=submit class=submit_btnJalankan Algoritmabuttontdtr mebuat tombol simpan
table form
4.6 Halaman Hasil Aturan Asosiasi
Antarmuka untuk menampilkan hasil aturan asosiasi yang terbentuk :
Gambar 4. 5 Halaman Aturan Asosiasi
Berikut script dan perintah query yang digunakan untuk halaman association rules:
?php include apriori.php; menyatakan dan mengevaluasi seluruh program yang ada di file
apriori.php file = dataset._POST[data]; parameter baru untuk memangil file yang terletak di
folder dataset total_transaksi = countfilefile; parameter baru untuk menghitung
jumlah semua transaksi minsup = _POST[minsup]100total_transaksi+1; parameter baru untuk
menghitung minimum support minconf = _POST[minconf]; parameter baru untuk menghitung minimum
confidence kopi = new Apriori;
kopi-setSumTranstotal_transaksi; kopi-setMaxScan10;
kopi-setMinSuproundminsup; kopi-setMinConfminconf;
kopi-setDelimiter,; kopi-processfile;
echo p align=center class=warning Total Transaksi : .kopi- getSumTrans.br menampilkan total transaksi
Minimum Support : ._POST[minsup]. br menampilkan minimum support Minimum Confidence : .minconf. phr;menampilkan minimum confdence
kopi-printAssociationRules; menampilakn hasil asosiasi kopi-saveAssociationRulesoutputassociationRules.txt;
?
Untuk proses apriori scripnya sebagai berikut sumber : https:github.comVTwo-GroupApriori-
Algorithmblobmasterclass.apriori.php
?php class Apriori {
private delimiter = ,;
private minSup = 0; private minConf = 0;
private sumTrans = 0;
private rules = array; private table = array;
private allitem = array; private allsups = array;
private keys = array; private freqItmsts = array;
private phase = 1; private maxPhase = 10;
private fiTime = 0; private arTime = 0;
menginput jumlah transaksi public function setSumTransint
{ this-sumTrans = int; } mengambil nilai jumlah transaksi
public function getSumTrans { return this-sumTrans; }
menentukan karakter pemisah pada data transaksi public function setDelimiterchar
{ this-delimiter = char; } menentukan nilai minimum support
public function setMinSupint { this-minSup = int; }
menentukan nilai minimum confidence public function setMinConfint
{ this-minConf = int; }
menentukan nilai maksimum fase atau scan public function setMaxScanint
{ this-maxPhase = int; } mengambil hasil nilai karakter pemisah pada data transaksi
public function getDelimiter { return this-delimiter; }
mengambil nilai minimum support public function getMinSup
{ return this-minSup; } mengambil nilai minimum confidence
public function getMinConf { return this-minConf; }
mengambil nilai max fase public function getMaxScan
{ return this-maxPhase; } fungsi untuk membuat tabel array dari data transaksi
private function makeTabledb {
table = array; array = array;
counter = 1; memeriksa apakah data transaksi berbentuk array
ifis_arraydb {
db = filedb; } num = countdb;
fori=0; inum; i++ {
tmp = explodethis-delimiter, db[i]; memecah item2 menu num1 = counttmp; hitung jumlah item yg sudah dipecah
x = array; forj=0; jnum1; j++
{ x = trimtmp[j]; hilangkan spasi kiri kanan
ifx=== { continue;
} ifissetthis-keys[v-k][x] { this-keys[v-k][x] = counter;
this-keys[k-v][counter] = x; counter++;
} ifissetarray[this-keys[v-k][x]] {
array[this-keys[v-k][x]] = 1; this-allsups[this-keys[v-k][x]] = 1;
} else { array[this-keys[v-k][x]]++;
this-allsups[this-keys[v-k][x]]++; }
table[i][this-keys[v-k][x]] = 1; }
} tmp = array;
foreacharray as item = sup { ifsup=this-minSup
{ tmp[] = arrayitem; } }
this-allitem[this-phase] = tmp; this-table = table;
}
private function scanarr, implodeArr = {
cr = 0; ifimplodeArr
{ ifissetthis-allsups[implodeArr]
{ return this-allsups[implodeArr];
} }
else {
sortarr; implodeArr = implodethis-delimiter, arr;
ifissetthis-allsups[implodeArr] {
return this-allsups[implodeArr]; }
} num = countthis-table;
num1 = countarr; fori=0; inum; i++
{ bool = true;
forj=0; jnum1; j++ {
ifissetthis-table[i][arr[j]] {
bool = false;
break; }
} ifbool
{ cr++;
} }
this-allsups[implodeArr] = cr; return cr;
} fungsi untuk menggabungkan itemset
private function combinearr1, arr2 {
result = array; num = countarr1;
num1 = countarr2; fori=0; inum; i++
{ ifissetresult[k][arr1[i]]
{ result[v][] = arr1[i];
result[k][arr1[i]] = 1; }
} fori=0; inum1; i++
{ ifissetresult[k][arr2[i]]
{
result[v][] = arr2[i]; result[k][arr2[i]] = 1;
} }
return result[v]; }
fungsi untuk membentuk nama itemset berdasarkan nama asli dari transaksi private function realNamearr
{ result = ;
num = countarr; forj=0; jnum; j++
{ ifj
{ result .= this-delimiter; } result .= this-keys[k-v][arr[j]];
} return result;
} fungsi untuk memeriksa aturan asosiasi
private function checkRulea, b {
a_num = counta; b_num = countb;
fori=0; ia_num; i++ {
forj=0; jb_num; j++ { ifa[i]==b[j]
{ return false; }
} }
return true; }
fungsi untuk menghitung prosentase confidence private function confidencesup_a, sup_ab
{ return roundsup_ab sup_a 100, 2; } memeriksa subset
private function subsetsitems {
result = array; num = countitems;
members = pow2, num; fori=0; imembers; i++
{ b = sprintf0.num.b, i;
tmp = array; forj=0; jnum; j++
{ ifb[j]==1 { tmp[] = items[j]; }
} iftmp
{ sorttmp;
result[] = tmp; }
} return result;
}
private function freqItemsetsdb {
this-fiTime = this-startTimer; this-makeTabledb;
while1 {
ifthis-phase=this-maxPhase { break; }
num = countthis-allitem[this-phase]; cr = 0;
fori=0; inum; i++ { forj=i; jnum; j++
{ ifi==j
{ continue; } item = this-combinethis-allitem[this-phase][i], this-allitem[this-
phase][j]; sortitem;
implodeArr = implodethis-delimiter, item; ifissetthis-freqItmsts[implodeArr]
{ sup = this-scanitem, implodeArr;
ifsup=this-minSup {
this-allitem[this-phase+1][] = item; this-freqItmsts[implodeArr] = 1;
cr++; }
} }
} ifcr=1
{ break; } this-phase++;
} foreachthis-freqItmsts as k = v
{ arr = explodethis-delimiter, k;
num = countarr; ifnum=3
{ subsets = this-subsetsarr;
num1 = countsubsets; fori=0; inum1; i++ {
ifcountsubsets[i]num { unsetthis-freqItmsts[implodethis-delimiter, subsets[i]]; }
else { break; }
} }
} this-fiTime = this-stopTimerthis-fiTime; }
public function processdb {
checked = result = array; this-freqItemsetsdb;
this-arTime = this-startTimer;
foreachthis-freqItmsts as k = v {
arr = explodethis-delimiter, k; subsets = this-subsetsarr;
num = countsubsets; fori=0; inum; i++
{ forj=0; jnum; j++ {
ifthis-checkRulesubsets[i], subsets[j] {
n1 = this-realNamesubsets[i]; n2 = this-realNamesubsets[j];
scan = this-scanthis-combinesubsets[i], subsets[j]; c1 = this-confidencethis-scansubsets[i], scan;
c2 = this-confidencethis-scansubsets[j], scan;
ifc1=this-minConf { result[n1][n2] = c1; }
ifc2=this-minConf { result[n2][n1] = c2; }
checked[n1.this-delimiter.n2] = 1; checked[n2.this-delimiter.n1] = 1;
} }
} }
this-arTime = this-stopTimerthis-arTime; return this-rules = result;
}
untuk mencetak frequent itemsets public function printFreqItemsets
{ echo Time: .this-fiTime. secondsbr
================================================================== =============br ;
foreachthis-freqItmsts as k = v {
tmp = ; tmp1 = ;
k = explodethis-delimiter, k; num = countk;
fori=0; inum; i++ {
ifi {
tmp .= this-delimiter.this-realNamek[i]; tmp1 .= this-delimiter.k[i];
} else
{ tmp = this-realNamek[i];
tmp1 = k[i]; }
} echo {.tmp.} = .this-allsups[tmp1].br ;
} }
public function saveFreqItemsetsfilename {
content = ;
foreachthis-freqItmsts as k = v {
tmp = ; tmp1 = ;
k = explodethis-delimiter, k; num = countk;
fori=0; inum; i++ {
ifi { tmp .= this-delimiter.this-realNamek[i];
tmp1 .= this-delimiter.k[i]; } else {
tmp = this-realNamek[i]; tmp1 = k[i];
} }
content .= {.tmp.} = .this-allsups[tmp1].\n; }
file_put_contentsfilename, content; }
public function getFreqItemsets {
result = array; foreachthis-freqItmsts as k = v
{ tmp = array;
tmp[sup] = this-allsups[k]; k = explodethis-delimiter, k;
num = countk;
fori=0; inum; i++ { tmp[] = this-realNamek[i]; }
result[] = tmp; }
return result; }
public function printAssociationRules {
no=1; ifthis-rules==null{
echo h3Tidak ada aturan asosiasi yang terbentukh3; }
else{ echo h3 align=center Association Rules Aturan Asosiasi yang
terbentukh3 th;
echo table border=1 h3 align=center width=700pxtheadtr bgcolor=BDBDBD align=centerthNoththAssociation
RuleththConfidencethtrtheadtbody; foreachthis-rules as a = arr
{ foreacharr as b = conf { echo tr bgcolor=E6E6E6 td align=centernotdtda =
btdtd style=color:red width=100px align=centerconftdtr; echo trtd colspan=2Dari seluruh
pelanggan yang membeli a, conf juga membeli btdtr; no++;
} }
echo tbodytable; }
}
public function saveAssociationRulesfilename { content = ;
foreachthis-rules as a = arr {
foreacharr as b = conf { content .= a = b = conf\nDari seluruh pelanggan yang membeli a, conf
juga membeli b\n\n; } }
file_put_contentsfilename,content; }
public function getAssociationRules { return this-rules; }
untuk memulai timer private function startTimer
{ listusec, sec = explode , microtime; return floatusec + floatsec;
}
untuk menghentikan timer private function stopTimerstart, round=2
{ endtime = this-startTimer-start; round = pow10, round;
return roundendtimeroundround; }
} ?
4.7 Halaman Association Rules Terakhir