⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 代码.txt

📁 apriori用于购物篮分析的原代码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                for( int k=0;k<l;k++)
                {
                    for( int j=0;j<405;j++)
                    {
                        if(temp[k].equals(drugName[j]))
                        {
                            matrix[i][j] = '1';
                        }
                    }
                    temp[k]="";
                }    
                rsName1.close();
            }
             }
      catch(Exception ex)
      {
            ex.printStackTrace();
      }
    }
    
    private String GetRsult( NumberCount ncc[],float persent_t )
    {
         String ncct ="";
        int headNumber = 1;
        for(int y= 0;y<ncc.length ;y++)
        {
          if(ncc[y]!=null&&ncc[y].GetIsTerm(1060,persent_t))
          {
              ncct += String.valueOf(headNumber)+",";
              int item[]= ncc[y].GetNumberArray();
               for(int t = 0; t<item.length;t++)
               {
                      if(t==0)
                      {
                        ncct += drugName[item[t]];
                      }
                      else
                      {
                         ncct += "+" +drugName[item[t]];
                      }
                      if(t==(item.length-1))
                      {
                          ncct +=":";
                      }
               }
            ncct += String.valueOf(ncc[y].GetCount())+";";
            headNumber++;
          }
        }
      return ncct;
    }
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO 将在此处添加您的处理代码:                                                   找频繁项集
        jPanel1.setVisible(true);
            if(!CheckPass())
            {
                return;
            }
      try{ 
            SetTable();
            double persent_d =(Float.valueOf(jTextField1.getText()))/100.0;
            float persent_t = Float.valueOf(String.valueOf( persent_d));
             NumberCount ncc[]=null;                 //定义NumberCount类的数组
            String ncct ="";
             switch(Integer.valueOf(jTextField4.getText()))
             {
                 case 1:
                 {
                    ncc= GetOneItem_t(persent_t);///一项集
                     break;
                 }
                 case 2:
                 {
                     
                    ncc= GetOneItem_t(persent_t);///一项集
                     ncct = GetRsult(ncc,persent_t);
                     ncc =  GetTwoItems_t(persent_t);///二项集
                     ncct += GetRsult(ncc,persent_t);
                     break;
                 }
                 default:
                 {
                    ncc= GetOneItem_t(persent_t);///一项集
                     ncct = GetRsult(ncc,persent_t);
                     ncc=  GetTwoItems_t(persent_t);///二项集
                     ncct += GetRsult(ncc,persent_t);
                     ncc = GetThreeItems_t(persent_t);///三项集
                     ncct += GetRsult(ncc,persent_t);
                     break;
                 }
             }
              if(ncct.equals(""))
              {
                  ncct="没有找到符合条件的信息!!!";
              }
                //////*/
                  jTextPane2.setText(ncct); 
      }
      catch(Exception ex)
      {
            ex.printStackTrace();
      }
    }                                        
   
    private NumberCount[] GetItem()        //找出所有的一项集
    {
        NumberCount ItemNumerCount[]=new NumberCount[405];
        int count[] = new int[405];
        for( int i=0;i<405;i++)
        {
             count[i]=0;
             for(int j=0;j<1060;j++)
             {
                if(matrix[j][i]=='1')
                {
                    count[i]++;      //支持度记数
                }
             }
             int CountArray[] = {i};   //将药物编号转为数组
             ItemNumerCount[i] = new NumberCount(CountArray,count[i]); //将药物编号和支持度记数存入ItemNumerCount[i]
        }
        return ItemNumerCount;
    }    
    
    private NumberCount[] GetOneItem_t(float ComparePercent)     //找出频繁1项集
    {
        int t = 0;
        NumberCount Item[] = GetItem();  //调用 GetItem(),将返回值存入Item[]
        for(int i = 0 ;i<Item.length&&Item[i]!=null;i++)
        {
            if(Item[i].GetIsTerm(1060,ComparePercent))    //在NUMBERCOUNT中,判断支持度是否满足
            {
                t++;
            }
        }
        NumberCount OneItem[] =new NumberCount[t];              //把Item[]中符合条件的存入OneItem[tx]
        int tx=0;
        for(int i = 0 ;i<Item.length&&Item[i]!=null;i++)
        {
            if(Item[i].GetIsTerm(1060,ComparePercent)&&tx<t)
            {
                OneItem[tx]=Item[i];
                tx++;
            }
        }
        OneNumberCount = OneItem;
        return OneItem;
    }
    /////////////////////
    private NumberCount[] GetTwoItems_t(float ComparePercent)  //找出频繁2项集
    {
           NumberCount OneItem[] = GetOneItem_t(ComparePercent); //先找到频繁1项集
           int NumberTermLength = OneItem.length;
           int ArrayLength=NumberTermLength;
           int TermsArray[] = new int[ArrayLength];  //定义一个与1项集长度相等的整型数组
           int ArrayNumber=0;
           for(int i= 0 ;i<NumberTermLength;i++ )         //将1项集的编号存入到TermsArray数组
           {
               int tarray[] = OneItem[i].GetNumberArray();    //调用GetNumberArray(),得到一个1项集编号
               for(int j= 0 ;j< tarray.length&&ArrayNumber<ArrayLength;j++)
               {
                    TermsArray[ArrayNumber]=tarray[j];
                    ArrayNumber++;
               }
           }
           Terms TowTerms = new Terms(TermsArray,2);
           int TermsTowArray[][] =TowTerms.GetTerms();   //得到两两组合的2维数组
           int TowLenth = TermsTowArray.length;
           NumberCount TwoItems[] = new NumberCount[TowLenth];
           int t=0;
           for(int i = 0 ;i<TowLenth;i++)
           {
               int towCount = Andmatrix(TermsTowArray[i]);
               NumberCount tNumberCount = new NumberCount(TermsTowArray[i],towCount);
               if(tNumberCount.GetIsTerm(1060,ComparePercent))
               {
                    TwoItems[t] = tNumberCount;
                    t++;
               }
           }
           TwoNumberCount =TwoItems;
           return TwoItems;
    }
    
    private NumberCount[] GetThreeItems_t(float ComparePercent)   //找频繁3项集
    {
           NumberCount TowItem[] = GetTwoItems_t(ComparePercent);
           int NumberTermLength = TowItem.length;
           int ArrayLength=NumberTermLength*2;
           int TermsArray[] = new int[ArrayLength];
           int ArrayNumber=0;
           for(int i= 0 ;i<NumberTermLength&&TowItem[i]!=null;i++ )
           {
               int tarray[] = TowItem[i].GetNumberArray();
               for(int j= 0 ;j< tarray.length&&ArrayNumber<ArrayLength;j++)
               {
                    TermsArray[ArrayNumber]=tarray[j];
                    ArrayNumber++;
               }
           }
           Different Diff = new Different(TermsArray);
           int TermsArray_t[]=Diff.GetDifferentNumbes();
           Terms TowTerms = new Terms(TermsArray_t,3);
           int TermsThreeArray[][] =TowTerms.GetTerms();
           int ThreeLenth = TermsThreeArray.length;
           NumberCount ThreeItems[] = new NumberCount[ThreeLenth];
           int t=0;
           for(int i = 0 ;i<ThreeLenth;i++)
           {
               int ThreeCount = Andmatrix(TermsThreeArray[i]);
               NumberCount tNumberCount = new NumberCount(TermsThreeArray[i],ThreeCount);
               if(tNumberCount.GetIsTerm(1060,ComparePercent))
               {
                   ThreeItems[t] =tNumberCount;
                   t++;
               }
           } 
           ThreeNumberCount =ThreeItems;
           return ThreeItems;
    }
    
    private String GetTwoItem(float ComparePercent,float Percent_G)   //找2项集的关联规则
    {
        String Two_G="";
        GetTwoItems_t(ComparePercent);
        for(int i=0 ;i<TwoNumberCount.length&&TwoNumberCount[i]!=null;i++)
        {
            int[] TowItem = TwoNumberCount[i].GetNumberArray();  //找到一个2项集的编号存入到TowItem数组里
            
            for(int j=0;j<OneNumberCount.length&&OneNumberCount[j]!=null;j++)
            {
                int OneItem[] =OneNumberCount[j].GetNumberArray();  //存入1项集的编号
                if(TowItem[0]==OneItem[0]||TowItem[1]==OneItem[0])
                {
                    float Per_t = TwoNumberCount[i].GetCount()/(Float.valueOf(OneNumberCount[j].GetCount()));
                    if(Per_t>=Percent_G)
                    {
                        Per_t = Per_t*100;
                        String Per_s = String.valueOf(Per_t);
                        Per_s = Per_s.substring(0,Per_s.indexOf("."));
                        if(TowItem[0]==OneItem[0])
                        {
                            Two_G += drugName[TowItem[1]]+"=>"+drugName[TowItem[0]]+"="+Per_s+"% ; ";
                        }
                        else
                        {
                            Two_G += drugName[TowItem[0]]+"=>"+drugName[TowItem[1]]+"="+Per_s+"% ; ";
                        }
                    }
                }
            }
        }
        return Two_G;
    }
    ///////////////////
    private String GetThreeItem(float ComparePercent,float Percent_G)   //找三项集的关联规则
    {
        String Three_G="";
        GetThreeItems_t(ComparePercent);
        for(int i=0;i<ThreeNumberCount.length&&ThreeNumberCount[i]!=null;i++)
        {
            int ThreeArray[] = ThreeNumberCount[i].GetNumberArray();//找到一个3项集的编号存入到ThreeArray数组里
            Terms ThreeItem = new Terms(ThreeArray,2); 
            int ThreeTwoArray[][] = ThreeItem.GetTerms();
            for(int n=0;n<ThreeTwoArray.length;n++)
            {
                for(int j= 0 ;j<TwoNumberCount.length&&TwoNumberCount[j]!=null;j++)
                {
                    int TowItem[] = TwoNumberCount[j].GetNumberArray();
                    if(ThreeTwoArray[n][0]==TowItem[0]&&ThreeTwoArray[n][1]==TowItem[1])
                    {
                        for(int m= 0 ;m<ThreeArray.length;m++)
                        {
                            if(ThreeArray[m]!=TowItem[0]&&ThreeArray[m]!=TowItem[1])
                            { 
                                float Per_t = ThreeNumberCount[i].GetCount()/(Float.valueOf(TwoNumberCount[j].GetCount()));//出现一种药的时候另外两中药出现的概率
                                if(Per_t> Percent_G)
                                {
                                    Per_t = Per_t*100;
                                    String Per_s = String.valueOf(Per_t);
                                    Per_s = Per_s.substring(0,Per_s.indexOf("."));
                                    Three_G+=drugName[ThreeArray[m]]+"=>";
                                    Three_G+=drugName[TowItem[0]]+"+"+drugName[TowItem[1]]+":"+Per_s+"% ; ";
                                }
                                for(int o=0;o<OneNumberCount.length&&OneNumberCount!=null;o++)
                                {
                                    int OneItem[]=OneNumberCount[o].GetNumberArray();
                                    if(OneItem[0]==ThreeArray[m])
                                    {
                                        float Per_O = ThreeNumberCount[i].GetCount()/(Float.valueOf(OneNumberCount[o].GetCount()));
                                        if(Per_O> Percent_G)
                                        {
                                            Per_O = Per_O*100;
                                            String Per_s = String.valueOf(Per_O);
                                            Per_s = Per_s.substring(0,Per_s.indexOf("."));
                                            Three_G+=drugName[TowItem[0]]+"+"+drugName[TowItem[1]]+"=>";
                                            Three_G+=drugName[ThreeArray[m]]+":"+Per_s+"% ; ";
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return Three_G;
    }
    /////////////////////*/
    private int Andmatrix(int ColNumber[])              //找频繁项集支持度记数的方法,参数传递的是项集编号的个数
    {
                int tcount= 0;
                for(int i = 0 ; i<ColNumber.length;i++)
                {
                    if(ColNumber[i]<0)
                    {
                        return tcount;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -