Esempio n. 1
0
 // 读入数据按钮
 private void button2_Click(object sender, EventArgs e)
 {
     openFileDialog1.InitialDirectory = openPath;
     openFileDialog1.RestoreDirectory = true;
     openFileDialog1.FileName         = "EX1_Order.csv";
     openFileDialog1.CheckFileExists  = true;
     openFileDialog1.CheckPathExists  = true;
     openFileDialog1.Multiselect      = false;
     if (openFileDialog1.ShowDialog() == DialogResult.OK && File.Exists(openFileDialog1.FileName.ToString()))
     {
         openPath = openFileDialog1.FileName.ToString();
         Apriori.SetData(openPath);
         textBox.AppendText("成功从\"" + openPath + "\"读入数据。" + Environment.NewLine);
         GenFreqBtn.Enabled  = true;
         Gen2FreqBtn.Enabled = true;
         minsup.Enabled      = true;
         ShowFreqBtn.Enabled = false;
         ShowRuleBtn.Enabled = false;
         IntRecBtn.Enabled   = false;
         minint.Enabled      = false;
         recnum.Enabled      = false;
         productid.Enabled   = false;
     }
     else
     {
         textBox.AppendText("请检查文件是否存在!" + Environment.NewLine);
     }
 }
Esempio n. 2
0
 // 生成数据按钮
 private void button1_Click_1(object sender, EventArgs e)
 {
     if (int.TryParse(minuid.Text, out int a) &&
         int.TryParse(maxuid.Text, out int b) &&
         int.TryParse(minpid.Text, out int c) &&
         int.TryParse(maxpid.Text, out int d) &&
         int.TryParse(dataAmount.Text, out int h))
     {
         folderBrowserDialog1.SelectedPath = "C:\\Users\\13614\\OneDrive\\4\\电子商务\\实验";
         if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
         {
             string path = folderBrowserDialog1.SelectedPath;
             Apriori.GenData(a, b, c, d, h, path);
             textBox.AppendText("成功在\"" + path + "\"生成EX1_Order.csv文件和EX1_ProductInfo.csv文件。" + Environment.NewLine);
         }
     }
     else
     {
         textBox.AppendText("请检查数据输入是否有误!" + Environment.NewLine);
     }
     ShowFreqBtn.Enabled = false;
     ShowRuleBtn.Enabled = false;
     IntRecBtn.Enabled   = false;
     GenFreqBtn.Enabled  = false;
     Gen2FreqBtn.Enabled = false;
 }
Esempio n. 3
0
        private Apriori GetNextItemset()
        {
            Apriori retObj = new Apriori(K + 1);

            retObj.GetCandidateSet(this); // this扩展到retObj的候选项集
            retObj.CalSupCount();
            return(retObj);
        }
Esempio n. 4
0
        public Rule(double minSup, double minInt, int untilWhichSet)
        {
            outResult.pid      = new List <int>();
            outResult.pInfo    = new List <List <string> >();
            outResult.interest = new List <double>();
            outResult.header   = new List <string>();
            minInterest        = minInt;

            Apriori.minSupPer = minSup;
            allSets           = Apriori.GetAllSets(allSets, untilWhichSet);
        }
Esempio n. 5
0
        static public List <Apriori> GetAllSets(List <Apriori> allSets, int untilWhichSet)
        {
            Apriori set = new Apriori(1);

            set.GetFirstItemset();
            while (set.freqSet.freqSet.Count > 0 && allSets.Count < untilWhichSet)
            {
                allSets.Add(set);
                set = set.GetNextItemset();
            }
            return(allSets);
        }
Esempio n. 6
0
 private void GetCandidateSet(Apriori SrcSet)
 {
     // 组合得到K+1集
     // 组合方法是两个项0~k-2的元素相等的话,那么就能产生新项{0~k-2,第一项k-1,第二项k-1}
     // 找出频繁项集内的两个项尝试组合
     for (int i = 0; i < SrcSet.freqSet.freqSet.Count; ++i)
     {
         for (int j = i + 1; j < SrcSet.freqSet.freqSet.Count; ++j)
         {
             // 对于每个频繁项集内的元素
             for (int k = 0; k < SrcSet.K; ++k)
             {
                 // 如果两个项第k个元素相等
                 if (SrcSet.freqSet.freqSet[i][k] != SrcSet.freqSet.freqSet[j][k])
                 {
                     // 如果k不是最后一个,直接跳过
                     if (k != SrcSet.K - 1)
                     {
                         break;
                     }
                     else
                     {
                         // 组合的结果unit
                         List <int> unit = new List <int>();
                         // 组合生成候选项集的项
                         for (int g = 0; g < SrcSet.K + 1; ++g)
                         {
                             if (g != SrcSet.K)
                             {
                                 unit.Add(SrcSet.freqSet.freqSet[i][g]);
                             }
                             else
                             {
                                 unit.Add(SrcSet.freqSet.freqSet[j][g - 1]);
                             }
                         }
                         if (!SrcSet.IsInFreq(unit))
                         {
                             freqSet.freqSet.Add(unit);
                             freqSet.supCount.Add(0);
                         }
                     }
                 }
             }
         }
     }
 }