package kmeans;
import java.util.ArrayList;
import java.util.List;
public class Test {
/**
* k均值算法的计算过程非常直观:
* 1、从D中随机取k个元素,作为k个簇的各自的中心。
* 2、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
* 3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
* 4、将D中全部元素按照新的中心重新聚类。
* 5、重复第4步,直到聚类结果不再变化。
* 6、将结果输出。
*/
static ArrayList<Teams> teamList = new ArrayList<Teams>();
static String[] nameArray = {
"骑士","猛龙","热火","老鹰","凯尔特人","黄蜂","步行者","活塞","公牛","奇才","魔术","雄鹿","尼克斯","篮网","76人",
"勇士","马刺","雷霆","快船","开拓者","小牛","灰熊","火箭","爵士","国王","掘金","鹈鹕","森林狼","太阳","湖人"
};
//季后赛最高胜场为16场
static double maxPlayoffs = 16;
//13/14赛季常规赛最高胜场
static double max14 = 62;
//13/14赛季常规赛战绩
static double[] to14Array = {
33,48,54,38,25,43,56,29,48,44,23,15,37,44,19,
51,62,59,57,54,49,50,54,25,28,36,34,40,48,27
};
//13/14赛季季后赛战绩
static double[] off14Array = {
0,3,13,3,0,0,10,0,1,6,0,0,0,5,0,
3,16,10,6,5,3,3,2,0,0,0,0,0,0,0
};
static double max15 = 67;
static double[] to15Array = {
53,49,37,60,40,33,38,32,50,46,25,41,17,38,18,
67,55,45,56,51,50,55,56,38,29,30,45,16,39,21
};
static double[] off15Array = {
14,0,0,8,0,0,0,0,6,6,0,2,0,2,0,
16,3,0,7,1,1,6,9,0,0,0,0,0,0,0
};
static double max16 = 73;
static double[] to16Array = {
57,56,48,48,48,48,45,44,42,41,35,33,32,21,10,
73,67,55,53,44,42,42,41,40,33,33,30,29,23,17
};
static double[] off16Array = {
16,10,7,4,2,3,3,0,0,0,0,0,0,0,0,
15,6,11,2,5,1,0,1,0,0,0,0,0,0,0
};
static double max17 = 67;
static double[] to17Array = {
51,51,41,43,53,36,42,37,41,49,29,42,31,20,28,
67,61,47,51,41,33,43,55,51,32,40,34,31,24,26
};
static {
for (int i = 0; i < nameArray.length; i++) {
Teams team = new Teams();
team.setName(nameArray[i]);
team.setTo14((max14 - to14Array[i])/max14);
team.setTo15((max15 - to15Array[i])/max15);
team.setTo16((max16 - to16Array[i])/max16);
team.setTo17((max17 - to17Array[i])/max17);
team.setPlayoffs14((maxPlayoffs - off14Array[i])/maxPlayoffs);
team.setPlayoffs15((maxPlayoffs - off15Array[i])/maxPlayoffs);
team.setPlayoffs16((maxPlayoffs - off16Array[i])/maxPlayoffs);
teamList.add(team);
}
}
private static String a = new String("ab");
public static void main(String[] args) {
// 定义簇的原始中心,此数据通过[0,1]规范化获得
Teams A = new Teams(0.1774193548387097, 0.0, 0.0, 0.0, 0.8125, 0.0, 0.0625,"勇士");
Teams B = new Teams(0.08064516129032258, 0.16417910447761194, 0.273972602739726, 0.23880597014925373, 0.625, 0.5625, 0.875,"快船");
Teams C = new Teams(0.41935483870967744, 0.5522388059701493, 0.547945205479452, 0.40298507462686567, 1.0, 1.0, 1.0,"掘金");
Teams D = new Teams(0.5483870967741935, 0.5671641791044776, 0.547945205479452, 0.5223880597014925, 1.0, 1.0, 1.0,"国王");
Teams E = new Teams(0.6935483870967742, 0.7313432835820896, 0.863013698630137, 0.582089552238806, 1.0, 1.0, 1.0,"76人");
DataProcessImpl dpimpl = new DataProcessImpl();
String[] cat = new String[teamList.size()];
for (int j = 0; j < 10; j++) {
int countA = 0;
int countB = 0;
int countC = 0;
int countD = 0;
int countE = 0;
Teams A1 = new Teams(0, 0, 0, 0, 0, 0, 0, "");
Teams B1 = new Teams(0, 0, 0, 0, 0, 0, 0, "");
Teams C1 = new Teams(0, 0, 0, 0, 0, 0, 0, "");
Teams D1 = new Teams(0, 0, 0, 0, 0, 0, 0, "");
Teams E1 = new Teams(0, 0, 0, 0, 0, 0, 0, "");
List<String> listA = new ArrayList<String>();
List<String> listB = new ArrayList<String>();
List<String> listC = new ArrayList<String>();
List<String> listD = new ArrayList<String>();
List<String> listE = new ArrayList<String>();
for (int i = 0; i < teamList.size(); i++) {
cat[i] = dpimpl.getCat(teamList.get(i), A, B, C, D, E);
// System.out.print(teamList.get(i).getName() + cat[i]+ " ");
if (cat[i].equals("A")) {
countA++;
A1.setTo14(A1.getTo14() + teamList.get(i).getTo14());
A1.setTo15(A1.getTo15() + teamList.get(i).getTo15());
A1.setTo16(A1.getTo16() + teamList.get(i).getTo16());
A1.setTo17(A1.getTo17() + teamList.get(i).getTo17());
A1.setPlayoffs14(A1.getPlayoffs14() + teamList.get(i).getPlayoffs14());
A1.setPlayoffs15(A1.getPlayoffs15() + teamList.get(i).getPlayoffs15());
A1.setPlayoffs16(A1.getPlayoffs16() + teamList.get(i).getPlayoffs16());
listA.add(teamList.get(i).name);
} else if (cat[i].equals("B")) {
countB++;
B1.setTo14(B1.getTo14() + teamList.get(i).getTo14());
B1.setTo15(B1.getTo15() + teamList.get(i).getTo15());
B1.setTo16(B1.getTo16() + teamList.get(i).getTo16());
B1.setTo17(B1.getTo17() + teamList.get(i).getTo17());
B1.setPlayoffs14(B1.getPlayoffs14() + teamList.get(i).getPlayoffs14());
B1.setPlayoffs15(B1.getPlayoffs15() + teamList.get(i).getPlayoffs15());
B1.setPlayoffs16(B1.getPlayoffs16() + teamList.get(i).getPlayoffs16());
listB.add(teamList.get(i).name);
} else if (cat[i].equals("C")) {
countC++;
C1.setTo14(C1.getTo14() + teamList.get(i).getTo14());
C1.setTo15(C1.getTo15() + teamList.get(i).getTo15());
C1.setTo16(C1.getTo16() + teamList.get(i).getTo16());
C1.setTo17(C1.getTo17() + teamList.get(i).getTo17());
C1.setPlayoffs14(C1.getPlayoffs14() + teamList.get(i).getPlayoffs14());
C1.setPlayoffs15(C1.getPlayoffs15() + teamList.get(i).getPlayoffs15());
C1.setPlayoffs16(C1.getPlayoffs16() + teamList.get(i).getPlayoffs16());
listC.add(teamList.get(i).name);
}else if(cat[i].equals("D")){
countD++;
D1.setTo14(D1.getTo14() + teamList.get(i).getTo14());
D1.setTo15(D1.getTo15() + teamList.get(i).getTo15());
D1.setTo16(D1.getTo16() + teamList.get(i).getTo16());
D1.setTo17(D1.getTo17() + teamList.get(i).getTo17());
D1.setPlayoffs14(D1.getPlayoffs14() + teamList.get(i).getPlayoffs14());
D1.setPlayoffs15(D1.getPlayoffs15() + teamList.get(i).getPlayoffs15());
D1.setPlayoffs16(D1.getPlayoffs16() + teamList.get(i).getPlayoffs16());
listD.add(teamList.get(i).name);
}else if(cat[i].equals("E")){
countE++;
E1.setTo14(E1.getTo14() + teamList.get(i).getTo14());
E1.setTo15(E1.getTo15() + teamList.get(i).getTo15());
E1.setTo16(E1.getTo16() + teamList.get(i).getTo16());
E1.setTo17(E1.getTo17() + teamList.get(i).getTo17());
E1.setPlayoffs14(E1.getPlayoffs14() + teamList.get(i).getPlayoffs14());
E1.setPlayoffs15(E1.getPlayoffs15() + teamList.get(i).getPlayoffs15());
E1.setPlayoffs16(E1.getPlayoffs16() + teamList.get(i).getPlayoffs16());
listE.add(teamList.get(i).name);
}
}
A.setTo14(A1.getTo14() / countA);
A.setTo15(A1.getTo15() / countA);
A.setTo16(A1.getTo16() / countA);
A.setTo17(A1.getTo17() / countA);
B.setTo14(B1.getTo14() / countB);
B.setTo15(B1.getTo15() / countB);
B.setTo16(B1.getTo16() / countB);
B.setTo17(B1.getTo17() / countB);
C.setTo14(C1.getTo14() / countC);
C.setTo15(C1.getTo15() / countC);
C.setTo16(C1.getTo16() / countC);
C.setTo17(C1.getTo17() / countC);
D.setTo14(D1.getTo14() / countD);
D.setTo15(D1.getTo15() / countD);
D.setTo16(D1.getTo16() / countD);
D.setTo17(D1.getTo17() / countD);
E.setTo14(E1.getTo14() / countE);
E.setTo15(E1.getTo15() / countE);
E.setTo