📄 代码.txt
字号:
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 + -