USER MANUAL INCREMENTAL UPDATING PADA APLIKASI FUZZY TEMPORAL ASSOCIATION RULE UNTUK DATA TRANSAKSI
TRI ENDAH WIJAYANTI G64104067
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR 2008
User Manual Incremental Updating pada Aplikasi Fuzy Temporal Association Rule Mining Tahap 1 : Pembersihan Data Pada tahap ini, transaksi yang mengandung 1 jenis barang saja dihapuskan. Kemudian, barang yang sama namun berulang lebih dari 1 record secara berurutan dijadikan 1 record saja. Proses pembersihan masih manual, dalam arti dilihat satu persatu lalu dihapuskan. Proses ini juga dilakukan lebih dari 1 kali agar data benar-benar bersih. Tahap 2 : Transformasi Data Tanggal yang semula berformat date ditransformasikan ke dalam bentuk numerik (datenum). Prosesnya dan perintah dalam Matlab, adalah sebagai berikut, Perintah : DateNumber = datenum(DateString) DateString diisi dengan tanggal, yaitu tahun, bulan, hari Contoh : DateString untuk tanggal 1 Maret 2004, yaitu 2004,03,01 DateNumber = datenum (2004,03,01) DateNumber = 732007 ID dari barang yang semula berupa 1 digit ditransformasikan menjadi 2 digit. Hal ini disebabkan oleh proses perhitungan yang menggunakan matriks pada Matlab, sehingga ukuran dari ID harus sama. Contoh : ID 1 sampai 9 diubah menjadi 10, 20, 30, ..., 90 ID 10 sampai 18 diubah menjadi 11, 12, 13, ..., 19 ID 19 diubah menjadi 21 ID 20 sampai 27 diubah menjadi 22, 23, 24, ..., 29 ID 28, 29 diubah menjadi 31, 32 ID 30 sampai 35 diubah menjadi 33, 34,..., 38 Proses transformasi masih menggunakan cara khusus, yaitu menggunakan fungsi find and replace pada excel. Tahap 3 : Seleksi Data Pada tahap ini, data transaksi tanggal 1 Maret – 21 Mei 2004 dibagi menjadi 11 minggu. Setiap minggu terdiri dari 7 hari. Kemudian, setiap minggu dibuat mejadi 50, 100, dan 150 transaksi. Prosesnya adalah sebagai berikut : 1. Pembagian peluang setiap tanggal Caranya : Fungsi getpartisi.m : fungsi ini mencari banyaknya transaksi pembelian yang terjadi setiap minggu. Code : function partisi=getpartisi(z) data = z; d=data; [k l] = size (d); b=1; j=1; x=1; s=[ ]; bn=[ ]; s=0.4; for i=1:k if (i==k) b=b+0; else p=num2str(d(i,j)); p1=num2str(d((i+1),j)); p2=num2str(d(i,(j+1))); p3=num2str(d((i+1),(j+1))); if (strcmp(p,p1)==1) if (strcmp(p2,p3)==1) b=b+0;
1
else b=b+1; end else b=0; if (strcmp(p2,p3)==1) b=b+0; else b=b+1; end end end bn=[bn;b]; end [f g]=size(bn); p=[ ]; for i=1:f if (i==f) part=bn(i,1); p=[p;part]; elseif (bn(i,1)<=bn((i+1),1)) part = 0; elseif (bn(i,1)>bn((i+1),1)) part = bn(i,1); p=[p;part]; end end partisi=p; d=xlsread(minggupertama.xls'); %membaca file m=getpartisi(d) % jalankan fungsi getpartisi pel = 0; %inisialisasi for i=1:a peluang=(m(i,1)/count)*50 (atau) *100 (atau) *150; % menghitung peluang yang terjadi, bisa 50, 100, dan 150 transaksi pel=[pel;peluang]; %manghimpun peluang end 2. Setelah semua peluang dari masing-masing minggu diperoleh, tahap selanjutnya adalah memilih transaksi berdasarkan TID secara acak menggunakan kalkulator sesuai dengan peluang dari masing-masing tanggal. Simpan hasilnya dalam folder dengan nama yang berbeda untuk tiap minggu dan jenis transaksinya. Tahap 4 : Data Mining Tahap ini merupakan proses data mining untuk incremental updating pada aplikasi Fuzzy Temporal Association Rule yang telah dikerjakan pada penelitian sebelumnya oleh Handayani Retno Suminar pada tahun 2007. Hasil yang telah diperoleh dari enelitian sebelumnya akan digunakan pada proses incremental updating. %nama program yang dijalankan adalah FTAR_IU function varargout = FTAR_IU_OutputFcn(hObject, eventdata, handles) %menginisialisasikan variabel menjadi variabel global agar dapat dipakai di fungsi yang lain global data global minggu global hari global bulan global c1
2
global c2 global f1 global support global con global kc2 global Mn global part1 global data2 global data3 global matriksc2 global matriks_x global matriks_w global hasil_CK global cLK global LK global kc1 %fungsi untuk membaca file yang ditambahkan dalam bentuk .xls function tmbh_file_Callback(hObject, eventdata, handles) filenya = guidata(gcbo); [filename2, pathname2] = uigetfile({'*xls';'*.*'},'Pilih data2 '); if isequal(filename2,0) return; else Fileku = fullfile(pathname2,filename2); set(handles.file2,'String',Fileku); eval (['data=xlsread(''' filename2 ''');']); set (filenya.figure1,'Userdata',data); % data transaksi yang dibaca disimpan dengan variable data end %fungsi untuk menampilkan file yang dipilih function file2_Callback(hObject, eventdata, handles) %fungsi untuk menyimpan support threshold yang dimasukkan oleh pengguna function support_Callback(hObject, eventdata, handles) global support global con s1=str2num(get(handles.support,'String')); support=s1/100; guidata(hObject,handles); %fungsi untuk menyimpan confidence threshold yang dimasukkan oleh pengguna function confidence_Callback(hObject, eventdata, handles) global s global con conf=str2num(get(handles.confidence,'String')); con=conf/100; handles.con=con; guidata(hObject,handles); %fungsi yeng memproses fuzzy calendar yang pertama function fc1_Callback(hObject, eventdata, handles) %mendefinisikan variable yang dapat dipakai oleh fungsi lain global data global dt2 global c1 global c2 global f1 global support global con
3
global part1 global kc2 k1=get(handles.fc1,'Value'); fileku = guidata(gcbo); data=get(fileku.figure1,'Userdata'); data1=data; switch k1 %pilihan fuzzy calendar case 1 kal1='Awal Minggu'; case 2 kal1='Tengah Minggu'; case 3 kal1='Akhir Minggu'; case 4 kal1='Awal Bulan'; case 5 kal1='Tengah Bulan'; case 6 kal1='Akhir Bulan'; case 7 kal1='Awal Tahun'; case 8 kal1='Tengah Tahun'; case 9 kal1='Akhir Tahun'; end d=[ ]; %fungsi weekday fungsi yang mengambil jenis hari dalam 1 minggu, %misalnya 1 untuk Senin, 2 untuk Selasa, dst. %fungsi day fungsi yang mengambil tanggal dalam bulan, yaitu %tanggal 1 sampai 30 atau 31. %fungsi month fungsi yang mengambil jenis bulan dalam 1 tahun, %misalnya 1 untuk Januari sampai 12 untuk Desember. if (strcmp(kal1,'Awal Minggu')==1) [k l]=size(data1); for baris_data=1:k a=weekday(data(baris_data,1)); y=beginningdotw(a,0,0,2,4); %fungsi yang mengambil derajat keanggotaan untuk awal minggu hasil=y; d=[d;hasil]; end c1=d; elseif (strcmp(kal1,'Tengah Minggu')==1) [k l]=size(data1); for baris_data=1:k a=weekday(data(baris_data,1)); % fungsi yang mengambil derajat keanggotaan untuk tengah minggu y=middledotw(a,2,4,6); hasil=y; d=[d;hasil]; end c1=d; elseif (strcmp(kal1,'Akhir Minggu')==1) [k l]=size(data1); for baris_data=1:k a=weekday(data(baris_data,1));
4
% fungsi yang mengambil derajat keanggotaan untuk akhir minggu y=enddotw(a,4,6,7,7); hasil=y; d=[d;hasil]; end c1=d; elseif (strcmp(kal1,'Awal Bulan')==1) [k l]=size(data1); for baris_data=1:k b=day(data(baris_data,1)); %fungsi yang mengambil derajat keanggotaan untuk awal bulan y=beginningdotm(b,0,0,5,15); hasil=y; d=[d;hasil]; end c1=d; elseif (strcmp(kal1,'Tengah Bulan')==1) [k l]=size(data1); for baris_data=1:k b=day(data(baris_data,1)); %fungsi yang mengambil derajat keanggotaan untuk tengah bulan y=middledotm(b,10,15,16,21); hasil=y; d=[d;hasil]; end c1=d; elseif (strcmp(kal1,'Akhir Bulan')==1) [k l]=size(data1); for baris_data=1:k b=day(data(baris_data,1)); %fungsi yang mengambil derajat keanggotaan untuk akhir bulan y=enddotm(b,15,26,31,31); hasil=y; d=[d;hasil]; end c1=d; elseif (strcmp(kal1,'Awal Tahun')==1) [k l]=size(data1); for baris_data=1:k c=month(data(baris_data,1)); %fungsi yang mengambil derajat keanggotaan untuk awal tahun y=beginningmoty(c,0,0,3,6); hasil=y; d=[d;hasil]; end c1=d; elseif (strcmp(kal1,'Tengah Tahun')==1) [k l]=size(data1); for baris_data=1:k c=month(data(baris_data,1)); %fungsi yang mengambil derajat keanggotaan untuk tengah tahun y=middlemoty(c,3,6,7,10); hasil=y; d=[d;hasil]; end
5
c1=d; elseif (strcmp(kal1,'Akhir Tahun')==1) [k l]=size(data1); for baris_data=1:k c=month(data(baris_data,1)); %fungsi yang mengambil derajat keanggotaan untuk akhir tahun y=endmoty(c,7,10,12,12); hasil=y; d=[d;hasil]; end c1=d; end handles.c1=c1; guidata(hObject,handles); %fungsi yang sama juga berlaku pada fuzzy calendar yang kedua, %hanya saja variabel kal1 diubah menjadi kal2, d diubah menjadi d1, %y diubah menjadi x, dan c1 diubah menjadi c2. %fungsi untuk melakukan operasi pada fuzzy calendar function operator_Callback(hObject, eventdata, handles) %mendefinisikan variabel menjadi variabel global sehingga dapat %dipakai oleh fungsi lain. global c1 global c2 global f1 global support global con %definisi variabel op=get(handles.operator,'Value'); switch op %pilihan operator fuzzy calendar case 1 ope='FC1'; case 2 ope='FC2'; case 3 ope='AND'; case 4 ope='OR'; case 5 ope='XOR'; case 6 ope='FC1 - FC2'; case 7 ope='FC2 - FC1'; case 8 ope='NOT FC1'; case 9 ope='NOT FC2'; end guidata(hObject,handles); %operasi kondisional yang menghitung bobot dari masing-masing partisi if (strcmp(ope,'FC1')==1) f1=c1;%bobot elseif (strcmp(ope,'FC2')==1) f1=c2;%bobot elseif (strcmp(ope,'AND')==1) f1=c1.*c2;%bobot elseif (strcmp(ope,'OR')==1)
6
f1=(c1+c2)-(c1.*c2);%bobot elseif (strcmp(ope,'XOR')==1) f1=(c1.*((1-c2).*(1-c2)))+(c2.*((1-c1).*(1-c1)))+(c1.*c2.*(1-c1.*c2));%bobot elseif (strcmp(ope,'FC1 - FC2')==1) f1=c1-(c1.*c2);%bobot elseif (strcmp(ope,'FC2 - FC1')==1) f1=c2-(c2.*c1);%bobot elseif (strcmp(ope,'NOT FC1')==1) f1=1-c1;%bobot elseif (strcmp(ope,'NOT FC2')==1) f1=1-c2;%bobot end guidata(hObject,handles); %fungsi untuk mencari frequent itemset baru dengan adanya penambahan data function cr_lk_baru_Callback(hObject, eventdata, handles) %mendefinisikan variable yang dapat dipakai oleh fungsi lain global data global f1 global support global part1 global mn_unik global Mn global matriksc2 global LK global cLK global matriksX_baru global matriksc2_gabung global LK3_baru global cLK3_baru global LK2_baru global cLK2_baru global t3 %fungsi untuk menghitung waktu eksekusi time3=clock; set(handles.lk,'String',''); %fungsi untuk menandakan masih dalam eksekusi tm3= waitbar(0,'Loading...'); for i=1:1000 waitbar(i/1000) end %mengambil jumlah transaksi di masing-masing partisi d=data; part=getpartisi(d [part3 part4]=size(part);%part1 diambil [g h]=size(d); q=1; j=1; mn=[]; %menghitung weighted count threshold dimasing-masing partisi for i=1:g if (i==1) m=support.*part(j,1).*f1(i,1); elseif (i==g) m=support.*part(j,1).*f1(i,1); else p0=num2str(d(i-1,1));
7
p=num2str(d(i,1)); p1=num2str(d((i+1),1)); if (strcmp(p,p1)==1 && strcmp(p0,p1)==1) m=support.*part(j,1).*f1(i,1); elseif (strcmp(p,p1)~=1 && strcmp(p0,p1)==1) m=support.*part(j,1).*f1(i,1); j=j+1; elseif (strcmp(p,p1)==1 && strcmp(p0,p1)~=1) j=j+1; m=support.*part(j,1).*f1(i,1); end end mn=[mn;m]; end %mendapatkan data tanggal date=[]; for i=1:g tgl1=d(i,1); date=[date;tgl1]; end %mendapatkan data bobot w_data=[]; for i=1:g w_dt=f1(i,1); w_data=[w_data;w_dt]; end mn_unik2=unik(mn,date); [brs klm]=size(mn_unik2); %menghitung cumulative weighted count threshold Mn2=[]; for i=1:brs for j=1:brs if (i==j) M(i,j)=mn_unik2(i,klm); elseif (i>j) M(i,j)=0; elseif (i<j) M(i,j)=M(i,j-1)+mn_unik2(j,klm); end end end Mn2=M; d=data; [k l] = size (d); b=1; t=2; j=1; x(1,1)=d(1,3); %menyusun items yang ada pada tiap transaksi menjadi bentuk matriks sesuai dengan TID-nya for i=2:k if (i==k) x(t,b)=d(i,3); else p=num2str(d(i-1,j)); p1=num2str(d(i,j)); p2=num2str(d(i-1,(j+1)));
8
p3=num2str(d(i,(j+1))); p4=num2str(d(i+1,(j+1))); if (strcmp (p2,p3)==1)&&(strcmp(p3,p4)==1) x(t,b)=d(i,3); t=t+1; elseif (strcmp(p2,p3)==1)&&(strcmp(p3,p4)~=1) x(t,b)=d(i,3); t=2; elseif (strcmp(p2,p3)~=1)&&(strcmp(p3,p4)==1) b=b+1; x(t-1,b)=d(i,3); end end end matriks_x2=x; [v w]=size(x); TID2=[ ]; com2=[ ]; IDtrans2=[ ]; %ngambil TID supaya unik for i=1:k T=d(i,2); TID2=[TID2;T]; end TIDunik2=unique(TID2); %membuat kombinasi 2 items (com) %menyusun ID transaksi secera berurutan (IDtrans) for j=1:w for i=1:v if (i==v) kom2=[ ]; com2=[com2;kom2]; else for p=i:v if (p==v) kom2=[ ]; com2=[com2;kom2]; elseif (x(i,j)==0 && x(p+1,j)==0) kom2=[ ]; com2=[com2;kom2]; elseif (x(i,j)~=0 && x(p+1,j)~=0) s=num2str(x(i,j)); s1=num2str(x(p+1,j)); kom2=strcat(s,s1); com2=[com2;kom2]; trans2=TIDunik2(j,1); IDtrans2=[IDtrans2;trans2]; end end end end end m1=mn_unik2; bbt=unik(w_data,date); %bobot yang diperoleh dibuat unik tgl_u=unique(date); %tanggal yang diperoleh dibuat unik t=getpartisi(d); [a b]=size(t);
9
[y z]=size(IDtrans2); f=0; ts=tgl_u(1,1); tgl=ts; bobot=bbt(1,1); m_hasil=m1(1,1); i=1; u=2; tanggal=[ ]; w1=[ ]; m2=[ ]; for j=1:y if (j==y) tgl=tgl; tanggal=[tanggal;tgl]; bobot=bobot; w1=[w1;bobot]; m_hasil=m_hasil; m2=[m2;m_hasil]; elseif (i==(a+1)) tgl=[]; tanggal=[tanggal;tgl]; bobot=[ ]; w1=[w1;bobot]; m_hasil=[ ]; m2=[m2;m_hasil]; elseif (f==t(i,1)) i=i+1; tgl=tgl_u(i,1); tanggal=[tanggal;tgl]; bobot=bbt(u,1); w1=[w1;bobot]; m_hasil=m1(u,1); m2=[m2;m_hasil]; u=u+1; f=0; else c1=num2str(IDtrans2(j,1)); c2=num2str(IDtrans2((j+1),1)); if (strcmp(c1,c2)==1) f=f+0; tgl=tgl; tanggal=[tanggal;tgl]; bobot=bobot; w1=[w1;bobot]; m_hasil=m_hasil; m2=[m2;m_hasil]; else f=f+1; tgl=tgl; tanggal=[tanggal;tgl]; bobot=bobot; w1=[w1;bobot]; m_hasil=m_hasil; m2=[m2;m_hasil]; end end end
10
%kombinasi 2 items diubah dari string menjadi numerik agar dapat disusun menjadi matriks words=str2num(com2); %tanggal dan kombinasi 2 items yang telah diperoleh disusun dalam bentuk matriks matriksc2_baru=matriks(tanggal,words); %menghitung weighted count dari kombinasi 2 items count2=kandidat_c2(w1,matriksc2_baru); %mencari kandidat 2 itemset yang lebih besar dari cumulative weighted count threshold kc2=getc2(Mn2,matriksc2_baru,count2,tanggal); CK2=[]; hasil_CK2=[kc2;CK2]; %banyaknya jumlah partisi tambah_n=part1+part3; %menggabungkan nilai weighted count threshold m_unik=[mn_unik;mn_unik2]; %menghitung nilai Mn=M(k+1)n+r y=part1+1; m_tambah=0; for i=y:tambah_n m_tambah=m_tambah+m_unik(y,1); y=y+1; end Mn_baru=Mn(2,part1)+ m_tambah; %mencari count frequent itemsets (Lbaru) LK2=[]; cLK2=[]; [a b]=size(cLK); for i=1:a if(cLK(i,1)>=Mn_baru) LK2=[LK2;LK(i,1)]; cLK2=[cLK2;cLK(i,1)]; else LK2=[LK2;[]]; cLK2=[cLK2;[]]; end end LK2_baru=LK2; cLK2_baru=cLK2; %menggabungkan Lbaru dgn C2baru C2_baru=[LK2;hasil_CK2]; %menggabungkan item menjadi CK kc_baru=C2_baru; CK_baru=[]; for i=1:100 [a b]=size(kc_baru); if(a==1|a==0) break; else p=get_ck(kc_baru); z=p; end CK_baru=z; end hasil_CK_baru=[C2_baru;CK_baru];
11
%memeriksa basisdata baru setelah digabung %membandingkan M(i+1)n sehingga menjadi LK_update LK1=LK'; cLK1=cLK'; bbt1=bbt'; [a b]=size(matriksc2_baru); [c d]=size(LK1); e=a-c; LK_gabung=[LK1;zeros(e,d)]; matriksX_baru=[LK_gabung matriksc2_baru]; matriksc2_gabung=[cLK1 bbt1]; [x y]=size(hasil_CK_baru); [f g]=size(matriksX_baru); countLK3=[]; itemLK3=[]; LK3=[]; cLK3=[]; if (a==0) LK2=[]; else for i=1:x z=gabung(hasil_CK_baru(i)); [r s]=size(z); if(s==2) a=hasil_CK_baru(i); count3=0; for k=1:g for j=1:f p=num2str(a); p1=num2str(matriksX_baru(j,k)); if (strcmp(p,p1)==1) count3=count3+matriksc2_gabung(1,k); else count3=count3+0; end end end elseif(s>2) %mencari kombinasi 2 item dari 3 itemset t=z'; [v w]=size(t); com_baru=[]; for h=1:w for m=1:v if (m==v) kom_baru=[ ]; com_baru=[com_baru;kom_baru]; else for q=m:v if (q==v) kom_baru=[ ]; com_baru=[com_baru;kom_baru]; elseif (t(m,h)==0 && t(q+1,h)==0) kom_baru=[ ]; com_baru=[com_baru;kom_baru]; elseif (t(m,h)~=0 && t(q+1,h)~=0) s=num2str(t(m,h)); s1=num2str(t(q+1,h));
12
kom_baru=strcat(s,s1); com_baru=[com_baru;kom_baru]; end end end end end z=gbng(com_baru()); count3=tambah(z,matriksX_baru,matriksc2_gabung); end itemLK3=[itemLK3;hasil_CK_baru(i)]; countLK3=[countLK3;count3]; end for i=1:x if (countLK3(i,1)>=Mn_baru) LK3=[LK3;itemLK3(i,1)]; cLK3=[cLK3;countLK3(i,1)]; else LK3=[LK3;[]]; cLK3=[cLK3;[]]; end end end a= LK3; b=cLK3; [LK3_baru,cLK3_baru]=cek_baru(a,b); close(tm3) C2_barustr=num2str(LK3_baru); guidata(hObject,handles); t3=etime(clock,time3);%selesai menghitung waktu eksekusi %menampilkan frequent itemset pada form lk set(handles.lk_baru,'String',C2_barustr); %menampilkan waktu eksekusi pada form wkt_lk set(handles.wkt_lk_baru,'String',t3); %fungsi yang mencari aturan asosiasi berdasarkan pada frequent itemset yang diperoleh sebelumnya function cr_ar_baru_Callback(hObject, eventdata, handles) %definisi variabel global global data global LK3_baru global cLK3_baru global support global con global f1 global LK2_baru global cLK2_baru global t4 time4=clock; dt=data; [a b]=size(LK2_baru); z=[]; s=[]; r=[]; tm4= waitbar(0,'Loading...'); for i=1:1000 waitbar(i/1000) end
13
for i=1:a x=pecah(LK2_baru(i)); [c d]=size(x); for j=1:c j=cLK2_baru(i); s=[s;j]; end for l=1:c l=i; r=[r;l]; end z=[z;x]; end if(a==0) ambil_baru=[r,z]; else k=gbng(z()); ambil_baru=[r,k]; end ambil_data=[dt(:,1),dt(:,3)]; gabung_data=[ambil_data;ambil_baru]; f1_baru=[f1;s]; matriksc1_baru=matriks(gabung_data(:,1),gabung_data(:,2)); RuleGbg2=rule(gabung_data,f1_baru,matriksc1_baru,LK3_baru,cLK3_baru,con); close (tm4) assrule2=num2str(RuleGbg2); t4=etime(clock,time4); %menampilkan aturan asosiasi yang diperoleh pada form ar set(handles.ar_baru,'String',assrule2); %menampilkan waktu eksekusi aturan asosiasi pada form wk_ar set(handles.wkt_ar_baru,'String',t4); %fungsi yang menampilkan form hasil frequent itemset terbaru function lk_baru_Callback(hObject, eventdata, handles) %fungsi yang menampilkan form hasil atruan asosiasi terbaru function ar_Callback baru_ (hObject, eventdata, handles) %fungsi yang menampilkan form waktu hasil eksekusi frequent itemset terbaru function wkt_lk_ baru_Callback(hObject, eventdata, handles) %fungsi yang menampilkan form waktu hasil eksekusi aturan asosiasi terbaru function wkt_ar_baru_Callback(hObject, eventdata, handles) %fungsi untuk membersihkan isi form support threshold function hps_supp_Callback(hObject, eventdata, handles) guidata(hObject,handles); clc; set(handles.support,'String',''); %fungsi untuk membersihkan isi form confidence threshold function hps_conf_Callback(hObject, eventdata, handles) guidata(hObject,handles); clc; set(handles.confidence,'String',''); %fungsi untuk membersihkan isi form frequent itemset terbaru beserta waktu eksekusinya function hps_lk_ baru_Callback(hObject, eventdata, handles) guidata(hObject,handles); clc; set(handles.lk_ baru,'String','');
14
set(handles.wkt_lk _baru,'String',''); %fungsi untuk membersihkan isi form aturan asosiasi terbaru beserta waktu eksekusinya function hps_ar_ baru_Callback(hObject, eventdata, handles) guidata(hObject,handles); clc; set(handles.ar_ baru,'String',''); set(handles.wkt_ar_ baru,'String',''); %fungsi untuk menghapus semua form isian pada aplikasi FTAR_IU function hps_all_Callback(hObject, eventdata, handles) global t1 global t2 global t3 global t4 guidata(hObject,handles); clc; set(handles.support,'String',''); set(handles.confidence,'String',''); set(handles.lk,'String',''); set(handles.ar,'String',''); set(handles.wkt_lk,'String',''); set(handles.wkt_ar,'String',''); set(handles.file,'String',''); set(handles.file2,'String',''); set(handles.lk_baru,'String',''); set(handles.wkt_lk_baru,'String',''); set(handles.ar_baru,'String',''); set(handles.wkt_ar_baru,'String',''); set(handles.totalwkt,'String',''); t1=0; t2=0; t3=0; t4=0; %fungsi untuk menghitung semua waktu eksekusi function Total_Callback(hObject, eventdata, handles) global t1 global t2 global t3 global t4 set(handles.totalwkt,'String',''); t=t1+t2+t3+t4; guidata(hObject,handles); set(handles.totalwkt,'String',t);%untuk menapilkan total waktu %fungsi untuk keluar dari aplikasi Program_FTAR_IU function keluar_Callback(hObject, eventdata, handles) delete(handles.figure1); Fungsi-fungsi yang mendukung Program_FTAR_IU 1. Fungsi-fungsi fuzzy calendar • Fungsi beginning of the week function y=beginningdotw(x,a,b,c,d) if (x<=a) y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=1;
15
•
•
•
•
•
elseif (x>=c && x<=d) y=(d-x)/(d-c); elseif (x>=d) y=0; end Fungsi middle of the week function y=middledotw(x,a,b,c) if (x<=a) y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=(c-x)/(c-b); elseif (x>=c) y=0; end Fungsi end of the week function y=enddotw(x,a,b,c,d) if (x<=a) y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=1; elseif (x>=c && x<=d) y=(d-x)/(d-c); elseif (x>=d) y=0; end Fungsi beginning of the month function y=beginningdotm(x,a,b,c,d) if (x<=a) y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=1; elseif (x>=c && x<=d) y=(d-x)/(d-c); elseif (x>=d) y=0; end Fungsi middle of the month function y=middledotm(x,a,b,c,d) if (x<=a) y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=1; elseif (x>=c && x<=d) y=(d-x)/(d-c); elseif (x>=d) y=0; end Fungsi end of the month function y=enddotm(x,a,b,c,d) if (x<=a)
16
•
•
•
y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=1; elseif (x>=c && x<=d) y=(d-x)/(d-c); elseif (x>=d) y=0; end Fungsi beginning of the year function y=enddotm(x,a,b,c,d) if (x<=a) y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=1; elseif (x>=c && x<=d) y=(d-x)/(d-c); elseif (x>=d) y=0; end Fungsi middle of the year function y=middlemoty(x,a,b,c,d) if (x<=a) y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=1; elseif (x>=c && x<=d) y=(d-x)/(d-c); elseif (x>=d) y=0; end Fungsi end of the year function y=endmoty(x,a,b,c,d) if (x<=a) y=0; elseif (x>=a && x<=b) y=(x-a)/(b-a); elseif (x>=b && x<=c) y=1; elseif (x>=c && x<=d) y=(d-x)/(d-c); elseif (x>=d) y=0; end
2. Fungsi mendapatkan jumlah transaksi dari setiap partisi function partisi=getpartisi(z) data = z; d=data; [k l] = size (d); b=1; j=1; x=1;
17
s=[ ]; bn=[ ]; s=0.4; for i=1:k if (i==k) b=b+0; else p=num2str(d(i,j)); p1=num2str(d((i+1),j)); p2=num2str(d(i,(j+1))); p3=num2str(d((i+1),(j+1))); if (strcmp(p,p1)==1) if (strcmp(p2,p3)==1) b=b+0; else b=b+1; end else b=0; if (strcmp(p2,p3)==1) b=b+0; else b=b+1; end end end bn=[bn;b]; end [f g]=size(bn); p=[ ]; for i=1:f if (i==f) part=bn(i,1); p=[p;part]; elseif (bn(i,1)<=bn((i+1),1)) part = 0; elseif (bn(i,1)>bn((i+1),1)) part = bn(i,1); p=[p;part]; end end partisi=p; 3. Fungsi weighted count threshold menjadi unik function p=unik(A,B) d = A; d1= B; [k l]=size(d); y=[ ]; for i=1:k if (i==k) x=d(i,1); y=[y;x]; else p1=num2str(d1(i,1)); p2=num2str(d1(i+1,1)); if (strcmp(p1,p2)==1) x=[ ];
18
elseif (strcmp(p1,p2)~=1) x=d(i,1); y=[y;x]; end end end p=y; 4. Fungsi untuk membuat TID menjadi unik function p=unique(A) d = A; [k l]=size(d); y=[ ]; for i=1:k if (i==k) x=d(i,1); y=[y;x]; else p1=num2str(d(i,1)); p2=num2str(d(i+1,1)); if (strcmp(p1,p2)==1) x=[ ]; elseif (strcmp(p1,p2)~=1) x=d(i,1); y=[y;x]; end end end p=y; 5. Fungsi yang membuat tanggal menjadi unik function p=uniktgl(A) d = A; [k l]=size(d); y=[ ]; for i=1:k if (i==k) x=d(i,1); y=[y;x]; else p1=num2str(d(i,1)); p2=num2str(d(i+1,1)); if (strcmp(p1,p2)==1) x=[ ]; elseif (strcmp(p1,p2)~=1) x=d(i,1); y=[y;x]; end end end p=y; 6. Fungsi matriks function p=matriks(A,B) d=A; d2=B; [a b]=size(d2); y1=[ ]; j=1;
19
l=2; y(1,1)=d2(1,1); for i=2:a if (i==a) y(l,j)=d2(i,1); else tgl0=num2str(d(i-1,1)); tgl1=num2str(d(i,1)); tgl2=num2str(d(i+1,1)); if (strcmp(tgl1,tgl2)==1 && strcmp(tgl0,tgl1)==1) y(l,j)=d2(i,1); l=l+1; elseif (strcmp(tgl1,tgl2)~=1 && strcmp(tgl0,tgl1)==1) y(l,j)=d2(i,1); l=2; elseif (strcmp(tgl1,tgl2)==1 && strcmp(tgl0,tgl1)~=1) l=2; j=j+1; y(l-1,j)=d2(i,1); end end end p=y; 7. Fungsi untuk menghitung weighted count dari kombinasi 2 items function p=kandidat_c2(A,B) d = A; y=B; [a b]=size(d); y1=[ ]; j=1; l=2; [q r]=size(y); muncul=[ ]; mcl=1; for j=1:r for i=1:q for k=i:q if (y(i,j)==0) break; elseif (k==q) mcl=mcl+0; muncul=[muncul;mcl]; mcl=1; else item1=num2str(y(i,j)); item2=num2str(y(k+1,j)); if (strcmp(item1,item2)==1) mcl=mcl+1; else mcl=mcl+0; end end end end end count=[]; for i=1:a
20
cnt=muncul(i,1).*d(i,1); count=[count;cnt]; end p=count; 8. Fungsi untuk mendapatkan kandidat 2 itemset function x=getc2(A,B,C,D); d = C; d2= D; [a b]=size(d); j=1; l=2; item=B; count(1,1)=d(1,1); M=A; count=c_matriks(d,d2); itemc2=[]; countc2=[]; [brs klm]=size(item); for j=1:klm if (j==klm) break; else for i=1:brs counts=count(i,j); if (item(i,j)==1) continue; elseif (counts>=M(j,j)) for h=(j+1):klm for g=1:brs p1=num2str(item(i,j)); p2=num2str(item(g,h)); if (strcmp(p1,p2)==1) counts=counts+count(g,h); if (counts>=M(j,h)) item(g,h)=1; break; elseif (counts<M(j,h)) continue; end elseif (strcmp(p1,p2)~=1) continue; end end end itemc2=[itemc2;item(i,j)]; countc2=[countc2;counts]; elseif (counts<M(j,j)) itemc2=[itemc2;[]]; end end end end [t u]=size(countc2); countsc2=[]; itemsc2=[]; for o=1:t if (countc2(o,u)>=M(klm-1,klm))
21
countsc2=[countsc2;countc2(o,u)]; itemsc2=[itemsc2;itemc2(o,u)]; else countsc2=[countsc2;[]]; itemsc2=[itemsc2;[]]; end end k=itemsc2; [a b]=size(k); x1=[]; for i=1:a for j=i:a if (k(i,1)==0) y=[]; elseif (j==a) y=k(i,1); x1=[x1;y]; break; else p1=num2str(k(i,1)); p2=num2str(k(j+1,1)); if (strcmp(p1,p2)==1) y=k(i,1); k(j+1,1)=0; else y=k(i,1); end end end end x=x1; 9. Fungsi untuk mendapatkan semua kandidat k itemst function hsl=get_ck(data) itm_string=data; p=gabung(itm_string); [brs klm]=size(p); ck=[]; if (brs==0 | brs==1) x1=[]; else for i=1:brs if (i==brs) break; else for j=i:brs if (strcmp(num2str(p(i,(2:klm))),num2str(p(j,(1:(klm-1)))))==1) c=strcat(num2str(data(i,1)),num2str(p(j,klm))); ck=[ck;c]; else continue; end end end end [a b]=size(ck); if (a==0) x1=[];
22
else x1=str2num(ck); end end hsl=x1; 10. Fungsi untuk menggabungkan urutan angka yang terpisah-pisah menjadi gabungan 2 angka, misal 1 1 2 1 menjadi 11 21. function p=gabung(itm) itm_string=num2str(itm); [a b]=size(itm_string); c2_gbg=[]; x=2; j=1; for j=1:b if(j==b) break; elseif (j==x) x=x+2; continue; elseif (j==b-1) for i=1:a p1=num2str(itm_string(i,j)); p2=num2str(itm_string(i,j+1)); c2=strcat(p1,p2); c2_gbg=[c2_gbg;c2]; end else for i=1:a p1=num2str(itm_string(i,j)); p2=num2str(itm_string(i,j+1)); c2=strcat(p1,p2); c2_gbg=[c2_gbg;c2]; end end end %supaya yang sudah digabung dirubah menjadi bentuk matriks c2str=str2num(c2_gbg); [a b]=size(itm_string); [c d]=size(c2str); j=1; h=1; n=(c/a)-1; for i=1:c pjg=c; pjg=(pjg-(a*n)); if (i==c) x(h,j)=c2str(i,1); break; elseif (i==pjg) n=n-1; x(h,j)=c2str(i,1); h=1; j=j+1; else x(h,j)=c2str(i,1); h=h+1; end
23
end p=x; 11. function p = gbng(item); c2str=str2num(item); [c d]=size(c2str); j=1; h=1; for i=1:c if (i==c) x(h,j)=c2str(i,1); break; else x(h,j)=c2str(i,1); h=h+1; end end p=x; 12. function result = tambah(A,B,C) ukuranA=size(A,1); [x y]=size(B); ukuranC=size(C,2); matrik_bobot=[]; for a=1:ukuranA for j=1:y bobot=0; for i=1:x if(A(a,1)==B(i,j)) bobot=bobot+C(j); end end matrik_bobot=[matrik_bobot; bobot]; end end [a b]=size(matrik_bobot); baris=a/ukuranA; kolom=ukuranA; a=0; for i=1:kolom for j=1:baris a=a+1; matrik(j,i)=matrik_bobot(a,1); end end [row, coloumn] = size(matrik); result_matriks = []; for i=1 : coloumn hasil_terkecil = 0; for j=1 : row if (matrik(j,i) ~= 0 && (hasil_terkecil > matrik(j,i))) hasil_terkecil = matrik(j,i); end if (hasil_terkecil == 0) hasil_terkecil = matrik(j,i); end
24
end result_matriks = [result_matriks hasil_terkecil]; end result = 0; for i=1 : coloumn result = result + result_matriks(i); end 13. function a=rule(d,f1,matriksc1,LK,cLK,con) rule=[]; countc1=kandidat_c1(f1,matriksc1); [kc1,co1]=getc1(matriksc1,countc1,d(:,1)); brg=[kc1;LK]; weight=[co1;cLK]; nilai_AR=[]; z=LK; [r c]=size(z); p=0; m_count=[]; tho_ars=[]; [r1 r2]=size(LK); if (r1==0) RuleGbg='Tidak Ada'; else for o=1:r ar=AR(z(o,1)); [b k]=size(ar); for l=1:b ar_mat(l,o)=ar(l,1); end [q w]=size(brg); for i=1:b for j=1:q p1=num2str(ar(i,1)); p2=num2str(brg(j,1)); if (strcmp(p1,p2)==1) tho_ar(i,o)=weight(j,1); break; else continue; end end end rule=[rule;ar]; end [t u]=size(cLK); comrl=[]; comrls=[]; coLK=[]; res=[]; countrule=[]; countrules=[]; rls=[]; for i=1:t coLK=[coLK cLK(i,1)]; end y1=[]; y5=[];
25
[f g]=size(ar_mat); for n=1:g b=ar_mat(:,n); [br kl]=size(b); for i=1:br for j=1:br if (b(i,1)==0 | b(j,1)==0) break; elseif (tho_ar(i,n)==0) continue; else countrl=(coLK(1,n))/tho_ar(i,n); if (countrl >= con) x1=num2str(b(i,1)); x2=num2str(b(j,1)); y=strcat(x1,x2); re=strcat(x1,'0',x2); y2=str2num(y); y4=str2num(re); y5=[y5;y4]; y1=[y1;y2]; countrule=[countrule;countrl]; else countrule=[countrule;[]]; y1=[y1;[]]; end end end end comrls=[comrls;y5]; countrules=[countrules;countrule]; comrl=[comrl;y1]; end [a b]=size(comrl); sinyal=1; nilai=[]; arule=[]; for i=1:a x=gabung(comrl(i,1)); [c d]=size(x); sinyal=1; for j=1:d if (j==d) break; elseif (sinyal==0) ar_rule=[]; nilainya=[]; break; elseif (sinyal==1) for k=j:d if (k==d) break; else p1=num2str(x(1,j)); p2=num2str(x(1,k+1)); if (strcmp(p1,p2)==1) ar_rule=[]; nilainya=[];
26
sinyal=0; break; else ar_rule=comrls(i,1); nilainya=countrules(i,1); sinyal=1; end end end end end nilai=[nilai;nilainya]; arule=[arule;ar_rule]; end [br kl]=size(arule); NilaiRule=[]; AssRule=[]; for i=1:br if ((i==br) & (arule(i,1) ~= 0)) AsRule=arule(i,1); NRule=nilai(i,1); elseif ((i==br) & (arule(i,1) == 0)) AsRule=[]; NRule=[]; else for j=i:br if (j==br) break; else p1=num2str(arule(i,1)); p2=num2str(arule(j+1,1)); if (arule(i,1)==0) AsRule=[]; NRule=[]; break; elseif (strcmp(p1,p2)==1) AsRule=arule(i,1); NRule=nilai(i,1); nilai(j+1,1)=0; arule(j+1,1)=0; else AsRule=arule(i,1); NRule=nilai(i,1); continue; end end end end AssRule=[AssRule;AsRule]; NilaiRule=[NilaiRule;NRule]; end [w e]=size(AssRule); if (w==0) RuleGbg='Tidak Ada'; else for j=1:2 if (j==1) for i=1:w
27
RuleGbg(i,j)=AssRule(i,1); end elseif (j==2) for i=1:w RuleGbg(i,j)=NilaiRule(i,1); end end end end end a=RuleGbg; 14. Fungsi untuk menghitung weighted count dari 1 item function p=kandidat_c1(A,B) d = A; y = B; [a b]=size(d); y1=[ ]; j=1; l=2; [q r]=size(y); muncul=[ ]; mcl=1; for j=1:r for i=1:q for k=i:q if (y(i,j)==0) break; elseif (y(i,j)==99) muncul=[muncul;0]; break; elseif (k==q) mcl=mcl+0; muncul=[muncul;mcl]; mcl=1; else item1=num2str(y(i,j)); item2=num2str(y(k+1,j)); if (strcmp(item1,item2)==1) mcl=mcl+1; y(k+1,j)=99; else mcl=mcl+0; end end end end end count=[]; for i=1:a cnt=muncul(i,1).*d(i,1); count=[count;cnt]; end p=count; 15. Fungsi untuk mendapatkan kandidat 1 itemset function [x,o]=getc1(A,B,C,D); d = C; d2= D;
28
[a b]=size(d); j=1; l=2; item=B; count(1,1)=d(1,1); M=A; count=c_matriks(d,d2); itemc2=[]; countc2=[]; [brs klm]=size(item); for j=1:klm for i=1:brs if (count(i,j)~=0) itemc2=[itemc2;item(i,j)]; countc2=[countc2;count(i,j)]; else itemc2=[itemc2;[]]; countc2=[countc2;[]]; end end end [t u]=size(itemc2); cost=[]; items=[]; for i=1:t cos=countc2(i,1); if (i==t) if (itemc2(i,1)==99) cost=[cost;[]]; items=[items;[]]; else cost=[cost;cos]; items=[items;itemc2(i,1)]; end elseif (itemc2(i,1)==99) cost=[cost;[]]; items=[items;[]]; else for j=i:t if (j==t) break; else p1=num2str(itemc2(i,1)); p2=num2str(itemc2(j+1,1)); if (strcmp(p1,p2)==1) cos=cos+countc2(j+1,1); itemc2(j+1,1)=99; else cos=cos+0; end end end cost=[cost;cos]; items=[items;itemc2(i,1)]; end end x=items; o=cost;
29
16. Fungsi untuk mendapatkan semua kemungkinan aturan asosiasi function x=AR(A) a=gabung(A); [brs klm]=size(a); if (klm==2) for i=1:klm mat(i,1)=a(1,i); end rule=mat; else for i=1:klm mat(i,1)=a(1,i); end [k l]=size(mat); kom=[]; nl=[]; for i=1:k if i==k break; else for j=i:k if j==k break; else p=num2str(mat(i,1)); p1=num2str(mat(j+1,1)); com=strcat(p,p1); kom=[kom;com]; end end end end komnum=str2num(kom); z=komnum; ar=[]; for i=1:100 [a b]=size(z); if (a==k) break; else p=get_ar(z); z=p; end ar=[ar;z]; end rule=[mat;komnum;ar]; end x=rule;
30
Cara menjalankan aplikasi 1. 2.
Jalankan aplikasi Matlab Anda, dapat berupa Matlab 6.5 dan Matlab 7.01 ke atas. Pilih direktori tempat Anda menyimpan seluruh program dalam satu folder. Lihat gambar :
3.
Ketik FTAR_IU pada command window Matlab Lihat gambar :
31
4.
Tampilan FTAR_IU seperti di bawah ini
5. 6. 7. 8. 9.
Tekan tombol Baca File, kemudian pilih file .xls dimana terdapat data transaksi. Isi support threshold dan confidence threshold. Pilih fuzzy calendar yang sesuai. Pilih operator fuzzy calendar. Tekan tombol Frequent Itemsets (L). Hasil akan muncul pada layar di bawahnya, beserta waktu eksekusinya. Tekan tombol Aturan Asosiasi & Confidence. Hasil akan muncul pada layar di bawahnya, beserta waktu eksekusinya. Tekan tombol Tambah File, kemudian pilih file .xls dimana terdapat data transaksi. Pilih fuzzy calendar yang sesuai. Pilih operator fuzzy calendar. Tekan tombol Frequent Itemsets Baru (L’). Hasil akan muncul pada layar di bawahnya, beserta waktu eksekusinya. Tekan tombol Aturan Asosiasi Baru & Confidence Baru. Hasil akan muncul pada layar di bawahnya, beserta waktu eksekusinya. Untuk melihat total waktu eksekusi setelah terjadi penambahan data tekan tombol Total Waktu (s). Untuk membersihkan layar tekan tombol C atau Hapus Semua. Untuk keluar dari aplikasi, tekan tombol EXIT. Selesai.
10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
32