Halaman Hasil Aturan Asosiasi

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