private void Luat_Ket_Hop_Tung_Mat_Hang(float minsup, float minconf, string chuoi) { mlvDanhSachMH.Items.Clear(); chuoi = chuoi.Trim(); //Tách từng nhóm. string where = "'" + chuoi[0].ToString(); for (int i = 1; i < chuoi.Length; i++) { if (chuoi[i] != ' ' && chuoi[i] != '-') { where = where + "','" + chuoi[i].ToString(); } } where = where + "'"; string lenh = "Select Distinct tblCTHoaDon.mahd from tblSanPham, tblCTHoaDon where tblCTHoaDon.masp = tblSanPham.masp and tblSanPham.manhom in(" + where + ")"; DataTable dtHD = Connect_Database.Doc_Bang(lenh); lenh = "Select Distinct tblSanPham.masp from tblSanPham,tblCTHoaDon where tblCTHoaDon.masp=tblSanPham.masp and tblSanPham.manhom in(" + where + ")"; DataTable dtMasp = Connect_Database.Doc_Bang(lenh); dtMasp.Columns.Add("tam", typeof(string)); string[] anpha = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; for (int i = 0; i < dtMasp.Rows.Count; i++) { dtMasp.Rows[i]["tam"] = anpha[i % anpha.Length]; } //Xử lý kết nối các Transaction. List <string> trans = new List <string>(); for (int i = 0; i < dtHD.Rows.Count; i++) { string mahd = dtHD.Rows[i]["mahd"].ToString().Trim(); DataTable dthd = Connect_Database.Doc_Bang("select tblCTHoaDon.mahd, tblCTHoaDon.masp from tblCTHoaDon, tblSanPham where tblSanPham.masp = tblCTHoaDon.masp and tblCTHoaDon.mahd = '" + mahd + "'"); string str = ""; for (int j = 0; j < dthd.Rows.Count; j++) { for (int k = 0; k < dtMasp.Rows.Count; k++) { if (dtMasp.Rows[k]["masp"].ToString().Trim() == dthd.Rows[j]["masp"].ToString().Trim()) { if (!str.Contains(dtMasp.Rows[k]["tam"].ToString().Trim())) { str = str + dtMasp.Rows[k]["tam"].ToString().Trim(); k = dtMasp.Rows.Count; } } } } trans.Add(str); } //xứ lý thuật toán Aprirori ItemsetCollection db = new ItemsetCollection(); for (int i = 0; i < trans.Count(); i++) { string aa = trans.ElementAt(i).Trim(); //string[] mang =new string[aa.Length]; Itemset itemtraining = new Itemset(); for (int j = 0; j < aa.Length; j++) { itemtraining.Add(aa[j].ToString()); } // mang[j] = aa[j].ToString(); db.Add(itemtraining); } Itemset uniqueItems = db.GetUniqueItems(); ItemsetCollection L = AprioriMining.DoApriori(db, minsup); mlvDanhSachMH.View = View.Details; mlvDanhSachMH.GridLines = true; mlvDanhSachMH.FullRowSelect = true; //Thêm tiêu đề cho cột. mlvDanhSachMH.Columns.Add("Tập luật kết hợp", 450); mlvDanhSachMH.Columns.Add("Min_conf", 70); //test mining List <AssociationRule> allRules = AprioriMining.Mine(db, L, minconf); Console.Write("\n" + allRules.Count + " rules\n"); bool kq_kt = false; foreach (AssociationRule rule in allRules) { string s = rule.ToString(); string[] a = s.Split(':'); if (a[2] != "" && float.Parse(a[1]) >= minsup && float.Parse(a[2]) >= minconf) { string ss = "{"; a[0] = a[0].Replace('{', ' '); a[0] = a[0].Replace('}', ' '); a[0] = a[0].Trim(); string[] aaa = a[0].Split('-'); string sss1 = Doi_Sang_Masp(dtMasp, aaa[0]); string sss2 = Doi_Sang_Masp(dtMasp, aaa[1]); if (sss1.Trim() != "" && sss2.Trim() != "") { ss = sss1 + " => " + sss2; ListViewItem lstItem1 = new ListViewItem(); lstItem1.SubItems[0].Text = ss; lstItem1.SubItems.Add(a[2] + "%"); mlvDanhSachMH.Items.Add(lstItem1); } //Đếm tổng số luật các mặt hàng gần nhau. lblTongDSMH.Text = "" + mlvDanhSachMH.Items.Count; kq_kt = true; } //Console.Write(rule + "\n"); } if (!kq_kt) { MetroFramework.MetroMessageBox.Show(this, "Không có luật kết hợp thỏa điều kiện", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning); lblTongDSMH.Text = "0"; } }
private void btnApriori_Click(object sender, EventArgs e) { mlvTapPhoBien.Clear(); mlvTapLuatKH.Clear(); mlvDanhSachMH.Clear(); mang_luu = new List <string>(); if ((DataTable)dgvLoadDSHoaDon.DataSource == null) { MetroFramework.MetroMessageBox.Show(this, "Vui lòng import dữ liệu."); } else { DataTable dt = ((DataTable)dgvLoadDSHoaDon.DataSource).Clone(); dt.Columns.Add("tam", typeof(string)); float minsup = 0; float minconf = 0; if (txtMinSupp.Text.Trim() == "") { MetroFramework.MetroMessageBox.Show(this, "Vui lòng nhập độ phổ biến."); return; } minsup = (float)(float.Parse(txtMinSupp.Text) / 100.0); if (txtMinConf.Text.Trim() == "") { MetroFramework.MetroMessageBox.Show(this, "Vui lòng nhập độ hổ trợ."); return; } minconf = (float)(float.Parse(txtMinConf.Text) / 100.0); if (float.Parse(txtMinSupp.Text) > float.Parse(txtMinConf.Text)) { MetroFramework.MetroMessageBox.Show(this, "Không có luật kết hợp thỏa điều kiện.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning); lblTongTLKH.Text = "0"; lblTongTPB.Text = "0"; return; } //Bắt đầu thuật toán Apriori. List <string> item = new List <string>(); DataTable dtdata = Connect_Database.Doc_Bang("Select Distinct manhom From tblSanPham"); for (int i = 0; i < dtdata.Rows.Count; i++) { item.Add(dtdata.Rows[i]["manhom"].ToString().Trim()); } //xử lý kết nối các Transaction List <string> trans = new List <string>(); DataTable dtnguon = Connect_Database.Doc_Bang("select Distinct mahd from tblCTHoaDon"); for (int i = 0; i < dtnguon.Rows.Count; i++) { string mahd = dtnguon.Rows[i]["mahd"].ToString().Trim(); DataTable dthd = Connect_Database.Doc_Bang("select tblCTHoaDon.mahd, tblCTHoaDon.masp, tblSanPham.manhom from tblCTHoaDon, tblSanPham where tblSanPham.masp=tblCTHoaDon.masp and tblCTHoaDon.mahd='" + mahd + "'"); string str = ""; for (int j = 0; j < dthd.Rows.Count; j++) { if (!str.Contains(dthd.Rows[j]["manhom"].ToString().Trim())) //kiêm tra nhóm { str = str + dthd.Rows[j]["manhom"].ToString().Trim(); } } trans.Add(str); } //xứ lý thuật toán Aprirori ItemsetCollection db = new ItemsetCollection(); for (int i = 0; i < trans.Count(); i++) { string aa = trans.ElementAt(i).Trim(); //string[] mang =new string[aa.Length]; Itemset itemtraining = new Itemset(); for (int j = 0; j < aa.Length; j++) { itemtraining.Add(aa[j].ToString()); } // mang[j] = aa[j].ToString(); db.Add(itemtraining); } mlvTapPhoBien.View = View.Details; mlvTapPhoBien.GridLines = true; mlvTapPhoBien.FullRowSelect = true; //Thêm tiêu đề cho cột. mlvTapPhoBien.Columns.Add("Tập phổ biến", 205); mlvTapPhoBien.Columns.Add("Min_supp", 90); Itemset uniqueItems = db.GetUniqueItems(); ItemsetCollection L = AprioriMining.DoApriori(db, minsup); Console.Write("\n" + L.Count + " itemsets in L\n"); foreach (Itemset i in L) { string s = i.ToLuat(); string[] a = s.Split(':'); if (a[1].Trim() != "" && float.Parse(a[1]) >= minsup * 100) { ListViewItem lstItem1 = new ListViewItem(); string ss = Xu_ly_chuoi(a[0].Trim()); lstItem1.SubItems[0].Text = ss; lstItem1.SubItems.Add(a[1] + "%"); mlvTapPhoBien.Items.Add(lstItem1); } //Đếm tổng số tập phổ biến trong danh mục sản phẩm. lblTongTPB.Text = "" + mlvTapPhoBien.Items.Count; } mlvTapLuatKH.View = View.Details; mlvTapLuatKH.GridLines = true; mlvTapLuatKH.FullRowSelect = true; //Thêm tiêu đề cho cột mlvTapLuatKH.Columns.Add("Tập luật kết hợp", 300); mlvTapLuatKH.Columns.Add("Min_conf", 70); //test mining List <AssociationRule> allRules = AprioriMining.Mine(db, L, minconf); Console.Write("\n" + allRules.Count + " rules\n"); bool kq_kt = false; foreach (AssociationRule rule in allRules) { string s = rule.ToString(); string[] a = s.Split(':'); if (a[2] != "" && float.Parse(a[1]) >= minsup * 100 && float.Parse(a[2]) >= minconf * 100) { string ss = "{"; a[0] = a[0].Replace('{', ' '); a[0] = a[0].Replace('}', ' '); a[0] = a[0].Trim(); string[] aaa = a[0].Split('-'); string sss1 = Xu_ly_chuoi(aaa[0]); string sss2 = Xu_ly_chuoi(aaa[1]); ss = sss1 + " => " + sss2; mang_luu.Add(a[0]); ListViewItem lstItem1 = new ListViewItem(); lstItem1.SubItems[0].Text = ss; lstItem1.SubItems.Add(a[2] + "%"); mlvTapLuatKH.Items.Add(lstItem1); //Đếm tổng số luật kết hợp trong danh mục sản phẩm. lblTongTLKH.Text = "" + mlvTapLuatKH.Items.Count; kq_kt = true; } //Console.Write(rule + "\n"); } if (!kq_kt) { MetroFramework.MetroMessageBox.Show(this, "Không có luật kết hợp thỏa điều kiện.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } }