diff --git a/data/breast-cancer-wisconsin.csv b/data/breast-cancer-wisconsin.csv index b4e7ac3..ea69fa8 100755 --- a/data/breast-cancer-wisconsin.csv +++ b/data/breast-cancer-wisconsin.csv @@ -1,700 +1,700 @@ "id","clump_thickness","size_uniformity","shape_uniformity","marginal_adhesion","epithelial_size","bare_nucleoli","bland_chromatin","normal_nucleoli","mitoses","class*" -1000025,5,1,1,1,2,1,3,1,1,2 -1002945,5,4,4,5,7,10,3,2,1,2 -1015425,3,1,1,1,2,2,3,1,1,2 -1016277,6,8,8,1,3,4,3,7,1,2 -1017023,4,1,1,3,2,1,3,1,1,2 -1017122,8,10,10,8,7,10,9,7,1,4 -1018099,1,1,1,1,2,10,3,1,1,2 -1018561,2,1,2,1,2,1,3,1,1,2 -1033078,2,1,1,1,2,1,1,1,5,2 -1033078,4,2,1,1,2,1,2,1,1,2 -1035283,1,1,1,1,1,1,3,1,1,2 -1036172,2,1,1,1,2,1,2,1,1,2 -1041801,5,3,3,3,2,3,4,4,1,4 -1043999,1,1,1,1,2,3,3,1,1,2 -1044572,8,7,5,10,7,9,5,5,4,4 -1047630,7,4,6,4,6,1,4,3,1,4 -1048672,4,1,1,1,2,1,2,1,1,2 -1049815,4,1,1,1,2,1,3,1,1,2 -1050670,10,7,7,6,4,10,4,1,2,4 -1050718,6,1,1,1,2,1,3,1,1,2 -1054590,7,3,2,10,5,10,5,4,4,4 -1054593,10,5,5,3,6,7,7,10,1,4 -1056784,3,1,1,1,2,1,2,1,1,2 -1057013,8,4,5,1,2,?,7,3,1,4 -1059552,1,1,1,1,2,1,3,1,1,2 -1065726,5,2,3,4,2,7,3,6,1,4 -1066373,3,2,1,1,1,1,2,1,1,2 -1066979,5,1,1,1,2,1,2,1,1,2 -1067444,2,1,1,1,2,1,2,1,1,2 -1070935,1,1,3,1,2,1,1,1,1,2 -1070935,3,1,1,1,1,1,2,1,1,2 -1071760,2,1,1,1,2,1,3,1,1,2 -1072179,10,7,7,3,8,5,7,4,3,4 -1074610,2,1,1,2,2,1,3,1,1,2 -1075123,3,1,2,1,2,1,2,1,1,2 -1079304,2,1,1,1,2,1,2,1,1,2 -1080185,10,10,10,8,6,1,8,9,1,4 -1081791,6,2,1,1,1,1,7,1,1,2 -1084584,5,4,4,9,2,10,5,6,1,4 -1091262,2,5,3,3,6,7,7,5,1,4 -1096800,6,6,6,9,6,?,7,8,1,2 -1099510,10,4,3,1,3,3,6,5,2,4 -1100524,6,10,10,2,8,10,7,3,3,4 -1102573,5,6,5,6,10,1,3,1,1,4 -1103608,10,10,10,4,8,1,8,10,1,4 -1103722,1,1,1,1,2,1,2,1,2,2 -1105257,3,7,7,4,4,9,4,8,1,4 -1105524,1,1,1,1,2,1,2,1,1,2 -1106095,4,1,1,3,2,1,3,1,1,2 -1106829,7,8,7,2,4,8,3,8,2,4 -1108370,9,5,8,1,2,3,2,1,5,4 -1108449,5,3,3,4,2,4,3,4,1,4 -1110102,10,3,6,2,3,5,4,10,2,4 -1110503,5,5,5,8,10,8,7,3,7,4 -1110524,10,5,5,6,8,8,7,1,1,4 -1111249,10,6,6,3,4,5,3,6,1,4 -1112209,8,10,10,1,3,6,3,9,1,4 -1113038,8,2,4,1,5,1,5,4,4,4 -1113483,5,2,3,1,6,10,5,1,1,4 -1113906,9,5,5,2,2,2,5,1,1,4 -1115282,5,3,5,5,3,3,4,10,1,4 -1115293,1,1,1,1,2,2,2,1,1,2 -1116116,9,10,10,1,10,8,3,3,1,4 -1116132,6,3,4,1,5,2,3,9,1,4 -1116192,1,1,1,1,2,1,2,1,1,2 -1116998,10,4,2,1,3,2,4,3,10,4 -1117152,4,1,1,1,2,1,3,1,1,2 -1118039,5,3,4,1,8,10,4,9,1,4 -1120559,8,3,8,3,4,9,8,9,8,4 -1121732,1,1,1,1,2,1,3,2,1,2 -1121919,5,1,3,1,2,1,2,1,1,2 -1123061,6,10,2,8,10,2,7,8,10,4 -1124651,1,3,3,2,2,1,7,2,1,2 -1125035,9,4,5,10,6,10,4,8,1,4 -1126417,10,6,4,1,3,4,3,2,3,4 -1131294,1,1,2,1,2,2,4,2,1,2 -1132347,1,1,4,1,2,1,2,1,1,2 -1133041,5,3,1,2,2,1,2,1,1,2 -1133136,3,1,1,1,2,3,3,1,1,2 -1136142,2,1,1,1,3,1,2,1,1,2 -1137156,2,2,2,1,1,1,7,1,1,2 -1143978,4,1,1,2,2,1,2,1,1,2 -1143978,5,2,1,1,2,1,3,1,1,2 -1147044,3,1,1,1,2,2,7,1,1,2 -1147699,3,5,7,8,8,9,7,10,7,4 -1147748,5,10,6,1,10,4,4,10,10,4 -1148278,3,3,6,4,5,8,4,4,1,4 -1148873,3,6,6,6,5,10,6,8,3,4 -1152331,4,1,1,1,2,1,3,1,1,2 -1155546,2,1,1,2,3,1,2,1,1,2 -1156272,1,1,1,1,2,1,3,1,1,2 -1156948,3,1,1,2,2,1,1,1,1,2 -1157734,4,1,1,1,2,1,3,1,1,2 -1158247,1,1,1,1,2,1,2,1,1,2 -1160476,2,1,1,1,2,1,3,1,1,2 -1164066,1,1,1,1,2,1,3,1,1,2 -1165297,2,1,1,2,2,1,1,1,1,2 -1165790,5,1,1,1,2,1,3,1,1,2 -1165926,9,6,9,2,10,6,2,9,10,4 -1166630,7,5,6,10,5,10,7,9,4,4 -1166654,10,3,5,1,10,5,3,10,2,4 -1167439,2,3,4,4,2,5,2,5,1,4 -1167471,4,1,2,1,2,1,3,1,1,2 -1168359,8,2,3,1,6,3,7,1,1,4 -1168736,10,10,10,10,10,1,8,8,8,4 -1169049,7,3,4,4,3,3,3,2,7,4 -1170419,10,10,10,8,2,10,4,1,1,4 -1170420,1,6,8,10,8,10,5,7,1,4 -1171710,1,1,1,1,2,1,2,3,1,2 -1171710,6,5,4,4,3,9,7,8,3,4 -1171795,1,3,1,2,2,2,5,3,2,2 -1171845,8,6,4,3,5,9,3,1,1,4 -1172152,10,3,3,10,2,10,7,3,3,4 -1173216,10,10,10,3,10,8,8,1,1,4 -1173235,3,3,2,1,2,3,3,1,1,2 -1173347,1,1,1,1,2,5,1,1,1,2 -1173347,8,3,3,1,2,2,3,2,1,2 -1173509,4,5,5,10,4,10,7,5,8,4 -1173514,1,1,1,1,4,3,1,1,1,2 -1173681,3,2,1,1,2,2,3,1,1,2 -1174057,1,1,2,2,2,1,3,1,1,2 -1174057,4,2,1,1,2,2,3,1,1,2 -1174131,10,10,10,2,10,10,5,3,3,4 -1174428,5,3,5,1,8,10,5,3,1,4 -1175937,5,4,6,7,9,7,8,10,1,4 -1176406,1,1,1,1,2,1,2,1,1,2 -1176881,7,5,3,7,4,10,7,5,5,4 -1177027,3,1,1,1,2,1,3,1,1,2 -1177399,8,3,5,4,5,10,1,6,2,4 -1177512,1,1,1,1,10,1,1,1,1,2 -1178580,5,1,3,1,2,1,2,1,1,2 -1179818,2,1,1,1,2,1,3,1,1,2 -1180194,5,10,8,10,8,10,3,6,3,4 -1180523,3,1,1,1,2,1,2,2,1,2 -1180831,3,1,1,1,3,1,2,1,1,2 -1181356,5,1,1,1,2,2,3,3,1,2 -1182404,4,1,1,1,2,1,2,1,1,2 -1182410,3,1,1,1,2,1,1,1,1,2 -1183240,4,1,2,1,2,1,2,1,1,2 -1183246,1,1,1,1,1,?,2,1,1,2 -1183516,3,1,1,1,2,1,1,1,1,2 -1183911,2,1,1,1,2,1,1,1,1,2 -1183983,9,5,5,4,4,5,4,3,3,4 -1184184,1,1,1,1,2,5,1,1,1,2 -1184241,2,1,1,1,2,1,2,1,1,2 -1184840,1,1,3,1,2,?,2,1,1,2 -1185609,3,4,5,2,6,8,4,1,1,4 -1185610,1,1,1,1,3,2,2,1,1,2 -1187457,3,1,1,3,8,1,5,8,1,2 -1187805,8,8,7,4,10,10,7,8,7,4 -1188472,1,1,1,1,1,1,3,1,1,2 -1189266,7,2,4,1,6,10,5,4,3,4 -1189286,10,10,8,6,4,5,8,10,1,4 -1190394,4,1,1,1,2,3,1,1,1,2 -1190485,1,1,1,1,2,1,1,1,1,2 -1192325,5,5,5,6,3,10,3,1,1,4 -1193091,1,2,2,1,2,1,2,1,1,2 -1193210,2,1,1,1,2,1,3,1,1,2 -1193683,1,1,2,1,3,?,1,1,1,2 -1196295,9,9,10,3,6,10,7,10,6,4 -1196915,10,7,7,4,5,10,5,7,2,4 -1197080,4,1,1,1,2,1,3,2,1,2 -1197270,3,1,1,1,2,1,3,1,1,2 -1197440,1,1,1,2,1,3,1,1,7,2 -1197510,5,1,1,1,2,?,3,1,1,2 -1197979,4,1,1,1,2,2,3,2,1,2 -1197993,5,6,7,8,8,10,3,10,3,4 -1198128,10,8,10,10,6,1,3,1,10,4 -1198641,3,1,1,1,2,1,3,1,1,2 -1199219,1,1,1,2,1,1,1,1,1,2 -1199731,3,1,1,1,2,1,1,1,1,2 -1199983,1,1,1,1,2,1,3,1,1,2 -1200772,1,1,1,1,2,1,2,1,1,2 -1200847,6,10,10,10,8,10,10,10,7,4 -1200892,8,6,5,4,3,10,6,1,1,4 -1200952,5,8,7,7,10,10,5,7,1,4 -1201834,2,1,1,1,2,1,3,1,1,2 -1201936,5,10,10,3,8,1,5,10,3,4 -1202125,4,1,1,1,2,1,3,1,1,2 -1202812,5,3,3,3,6,10,3,1,1,4 -1203096,1,1,1,1,1,1,3,1,1,2 -1204242,1,1,1,1,2,1,1,1,1,2 -1204898,6,1,1,1,2,1,3,1,1,2 -1205138,5,8,8,8,5,10,7,8,1,4 -1205579,8,7,6,4,4,10,5,1,1,4 -1206089,2,1,1,1,1,1,3,1,1,2 -1206695,1,5,8,6,5,8,7,10,1,4 -1206841,10,5,6,10,6,10,7,7,10,4 -1207986,5,8,4,10,5,8,9,10,1,4 -1208301,1,2,3,1,2,1,3,1,1,2 -1210963,10,10,10,8,6,8,7,10,1,4 -1211202,7,5,10,10,10,10,4,10,3,4 -1212232,5,1,1,1,2,1,2,1,1,2 -1212251,1,1,1,1,2,1,3,1,1,2 -1212422,3,1,1,1,2,1,3,1,1,2 -1212422,4,1,1,1,2,1,3,1,1,2 -1213375,8,4,4,5,4,7,7,8,2,2 -1213383,5,1,1,4,2,1,3,1,1,2 -1214092,1,1,1,1,2,1,1,1,1,2 -1214556,3,1,1,1,2,1,2,1,1,2 -1214966,9,7,7,5,5,10,7,8,3,4 -1216694,10,8,8,4,10,10,8,1,1,4 -1216947,1,1,1,1,2,1,3,1,1,2 -1217051,5,1,1,1,2,1,3,1,1,2 -1217264,1,1,1,1,2,1,3,1,1,2 -1218105,5,10,10,9,6,10,7,10,5,4 -1218741,10,10,9,3,7,5,3,5,1,4 -1218860,1,1,1,1,1,1,3,1,1,2 -1218860,1,1,1,1,1,1,3,1,1,2 -1219406,5,1,1,1,1,1,3,1,1,2 -1219525,8,10,10,10,5,10,8,10,6,4 -1219859,8,10,8,8,4,8,7,7,1,4 -1220330,1,1,1,1,2,1,3,1,1,2 -1221863,10,10,10,10,7,10,7,10,4,4 -1222047,10,10,10,10,3,10,10,6,1,4 -1222936,8,7,8,7,5,5,5,10,2,4 -1223282,1,1,1,1,2,1,2,1,1,2 -1223426,1,1,1,1,2,1,3,1,1,2 -1223793,6,10,7,7,6,4,8,10,2,4 -1223967,6,1,3,1,2,1,3,1,1,2 -1224329,1,1,1,2,2,1,3,1,1,2 -1225799,10,6,4,3,10,10,9,10,1,4 -1226012,4,1,1,3,1,5,2,1,1,4 -1226612,7,5,6,3,3,8,7,4,1,4 -1227210,10,5,5,6,3,10,7,9,2,4 -1227244,1,1,1,1,2,1,2,1,1,2 -1227481,10,5,7,4,4,10,8,9,1,4 -1228152,8,9,9,5,3,5,7,7,1,4 -1228311,1,1,1,1,1,1,3,1,1,2 -1230175,10,10,10,3,10,10,9,10,1,4 -1230688,7,4,7,4,3,7,7,6,1,4 -1231387,6,8,7,5,6,8,8,9,2,4 -1231706,8,4,6,3,3,1,4,3,1,2 -1232225,10,4,5,5,5,10,4,1,1,4 -1236043,3,3,2,1,3,1,3,6,1,2 -1241232,3,1,4,1,2,?,3,1,1,2 -1241559,10,8,8,2,8,10,4,8,10,4 -1241679,9,8,8,5,6,2,4,10,4,4 -1242364,8,10,10,8,6,9,3,10,10,4 -1243256,10,4,3,2,3,10,5,3,2,4 -1270479,5,1,3,3,2,2,2,3,1,2 -1276091,3,1,1,3,1,1,3,1,1,2 -1277018,2,1,1,1,2,1,3,1,1,2 -128059,1,1,1,1,2,5,5,1,1,2 -1285531,1,1,1,1,2,1,3,1,1,2 -1287775,5,1,1,2,2,2,3,1,1,2 -144888,8,10,10,8,5,10,7,8,1,4 -145447,8,4,4,1,2,9,3,3,1,4 -167528,4,1,1,1,2,1,3,6,1,2 -169356,3,1,1,1,2,?,3,1,1,2 -183913,1,2,2,1,2,1,1,1,1,2 -191250,10,4,4,10,2,10,5,3,3,4 -1017023,6,3,3,5,3,10,3,5,3,2 -1100524,6,10,10,2,8,10,7,3,3,4 -1116116,9,10,10,1,10,8,3,3,1,4 -1168736,5,6,6,2,4,10,3,6,1,4 -1182404,3,1,1,1,2,1,1,1,1,2 -1182404,3,1,1,1,2,1,2,1,1,2 -1198641,3,1,1,1,2,1,3,1,1,2 -242970,5,7,7,1,5,8,3,4,1,2 -255644,10,5,8,10,3,10,5,1,3,4 -263538,5,10,10,6,10,10,10,6,5,4 -274137,8,8,9,4,5,10,7,8,1,4 -303213,10,4,4,10,6,10,5,5,1,4 -314428,7,9,4,10,10,3,5,3,3,4 -1182404,5,1,4,1,2,1,3,2,1,2 -1198641,10,10,6,3,3,10,4,3,2,4 -320675,3,3,5,2,3,10,7,1,1,4 -324427,10,8,8,2,3,4,8,7,8,4 -385103,1,1,1,1,2,1,3,1,1,2 -390840,8,4,7,1,3,10,3,9,2,4 -411453,5,1,1,1,2,1,3,1,1,2 -320675,3,3,5,2,3,10,7,1,1,4 -428903,7,2,4,1,3,4,3,3,1,4 -431495,3,1,1,1,2,1,3,2,1,2 -432809,3,1,3,1,2,?,2,1,1,2 -434518,3,1,1,1,2,1,2,1,1,2 -452264,1,1,1,1,2,1,2,1,1,2 -456282,1,1,1,1,2,1,3,1,1,2 -476903,10,5,7,3,3,7,3,3,8,4 -486283,3,1,1,1,2,1,3,1,1,2 -486662,2,1,1,2,2,1,3,1,1,2 -488173,1,4,3,10,4,10,5,6,1,4 -492268,10,4,6,1,2,10,5,3,1,4 -508234,7,4,5,10,2,10,3,8,2,4 -527363,8,10,10,10,8,10,10,7,3,4 -529329,10,10,10,10,10,10,4,10,10,4 -535331,3,1,1,1,3,1,2,1,1,2 -543558,6,1,3,1,4,5,5,10,1,4 -555977,5,6,6,8,6,10,4,10,4,4 -560680,1,1,1,1,2,1,1,1,1,2 -561477,1,1,1,1,2,1,3,1,1,2 -563649,8,8,8,1,2,?,6,10,1,4 -601265,10,4,4,6,2,10,2,3,1,4 -606140,1,1,1,1,2,?,2,1,1,2 -606722,5,5,7,8,6,10,7,4,1,4 -616240,5,3,4,3,4,5,4,7,1,2 -61634,5,4,3,1,2,?,2,3,1,2 -625201,8,2,1,1,5,1,1,1,1,2 -63375,9,1,2,6,4,10,7,7,2,4 -635844,8,4,10,5,4,4,7,10,1,4 -636130,1,1,1,1,2,1,3,1,1,2 -640744,10,10,10,7,9,10,7,10,10,4 -646904,1,1,1,1,2,1,3,1,1,2 -653777,8,3,4,9,3,10,3,3,1,4 -659642,10,8,4,4,4,10,3,10,4,4 -666090,1,1,1,1,2,1,3,1,1,2 -666942,1,1,1,1,2,1,3,1,1,2 -667204,7,8,7,6,4,3,8,8,4,4 -673637,3,1,1,1,2,5,5,1,1,2 -684955,2,1,1,1,3,1,2,1,1,2 -688033,1,1,1,1,2,1,1,1,1,2 -691628,8,6,4,10,10,1,3,5,1,4 -693702,1,1,1,1,2,1,1,1,1,2 -704097,1,1,1,1,1,1,2,1,1,2 -704168,4,6,5,6,7,?,4,9,1,2 -706426,5,5,5,2,5,10,4,3,1,4 -709287,6,8,7,8,6,8,8,9,1,4 -718641,1,1,1,1,5,1,3,1,1,2 -721482,4,4,4,4,6,5,7,3,1,2 -730881,7,6,3,2,5,10,7,4,6,4 -733639,3,1,1,1,2,?,3,1,1,2 -733639,3,1,1,1,2,1,3,1,1,2 -733823,5,4,6,10,2,10,4,1,1,4 -740492,1,1,1,1,2,1,3,1,1,2 -743348,3,2,2,1,2,1,2,3,1,2 -752904,10,1,1,1,2,10,5,4,1,4 -756136,1,1,1,1,2,1,2,1,1,2 -760001,8,10,3,2,6,4,3,10,1,4 -760239,10,4,6,4,5,10,7,1,1,4 -76389,10,4,7,2,2,8,6,1,1,4 -764974,5,1,1,1,2,1,3,1,2,2 -770066,5,2,2,2,2,1,2,2,1,2 -785208,5,4,6,6,4,10,4,3,1,4 -785615,8,6,7,3,3,10,3,4,2,4 -792744,1,1,1,1,2,1,1,1,1,2 -797327,6,5,5,8,4,10,3,4,1,4 -798429,1,1,1,1,2,1,3,1,1,2 -704097,1,1,1,1,1,1,2,1,1,2 -806423,8,5,5,5,2,10,4,3,1,4 -809912,10,3,3,1,2,10,7,6,1,4 -810104,1,1,1,1,2,1,3,1,1,2 -814265,2,1,1,1,2,1,1,1,1,2 -814911,1,1,1,1,2,1,1,1,1,2 -822829,7,6,4,8,10,10,9,5,3,4 -826923,1,1,1,1,2,1,1,1,1,2 -830690,5,2,2,2,3,1,1,3,1,2 -831268,1,1,1,1,1,1,1,3,1,2 -832226,3,4,4,10,5,1,3,3,1,4 -832567,4,2,3,5,3,8,7,6,1,4 -836433,5,1,1,3,2,1,1,1,1,2 -837082,2,1,1,1,2,1,3,1,1,2 -846832,3,4,5,3,7,3,4,6,1,2 -850831,2,7,10,10,7,10,4,9,4,4 -855524,1,1,1,1,2,1,2,1,1,2 -857774,4,1,1,1,3,1,2,2,1,2 -859164,5,3,3,1,3,3,3,3,3,4 -859350,8,10,10,7,10,10,7,3,8,4 -866325,8,10,5,3,8,4,4,10,3,4 -873549,10,3,5,4,3,7,3,5,3,4 -877291,6,10,10,10,10,10,8,10,10,4 -877943,3,10,3,10,6,10,5,1,4,4 -888169,3,2,2,1,4,3,2,1,1,2 -888523,4,4,4,2,2,3,2,1,1,2 -896404,2,1,1,1,2,1,3,1,1,2 -897172,2,1,1,1,2,1,2,1,1,2 -95719,6,10,10,10,8,10,7,10,7,4 -160296,5,8,8,10,5,10,8,10,3,4 -342245,1,1,3,1,2,1,1,1,1,2 -428598,1,1,3,1,1,1,2,1,1,2 -492561,4,3,2,1,3,1,2,1,1,2 -493452,1,1,3,1,2,1,1,1,1,2 -493452,4,1,2,1,2,1,2,1,1,2 -521441,5,1,1,2,2,1,2,1,1,2 -560680,3,1,2,1,2,1,2,1,1,2 -636437,1,1,1,1,2,1,1,1,1,2 -640712,1,1,1,1,2,1,2,1,1,2 -654244,1,1,1,1,1,1,2,1,1,2 -657753,3,1,1,4,3,1,2,2,1,2 -685977,5,3,4,1,4,1,3,1,1,2 -805448,1,1,1,1,2,1,1,1,1,2 -846423,10,6,3,6,4,10,7,8,4,4 -1002504,3,2,2,2,2,1,3,2,1,2 -1022257,2,1,1,1,2,1,1,1,1,2 -1026122,2,1,1,1,2,1,1,1,1,2 -1071084,3,3,2,2,3,1,1,2,3,2 -1080233,7,6,6,3,2,10,7,1,1,4 -1114570,5,3,3,2,3,1,3,1,1,2 -1114570,2,1,1,1,2,1,2,2,1,2 -1116715,5,1,1,1,3,2,2,2,1,2 -1131411,1,1,1,2,2,1,2,1,1,2 -1151734,10,8,7,4,3,10,7,9,1,4 -1156017,3,1,1,1,2,1,2,1,1,2 -1158247,1,1,1,1,1,1,1,1,1,2 -1158405,1,2,3,1,2,1,2,1,1,2 -1168278,3,1,1,1,2,1,2,1,1,2 -1176187,3,1,1,1,2,1,3,1,1,2 -1196263,4,1,1,1,2,1,1,1,1,2 -1196475,3,2,1,1,2,1,2,2,1,2 -1206314,1,2,3,1,2,1,1,1,1,2 -1211265,3,10,8,7,6,9,9,3,8,4 -1213784,3,1,1,1,2,1,1,1,1,2 -1223003,5,3,3,1,2,1,2,1,1,2 -1223306,3,1,1,1,2,4,1,1,1,2 -1223543,1,2,1,3,2,1,1,2,1,2 -1229929,1,1,1,1,2,1,2,1,1,2 -1231853,4,2,2,1,2,1,2,1,1,2 -1234554,1,1,1,1,2,1,2,1,1,2 -1236837,2,3,2,2,2,2,3,1,1,2 -1237674,3,1,2,1,2,1,2,1,1,2 -1238021,1,1,1,1,2,1,2,1,1,2 -1238464,1,1,1,1,1,?,2,1,1,2 -1238633,10,10,10,6,8,4,8,5,1,4 -1238915,5,1,2,1,2,1,3,1,1,2 -1238948,8,5,6,2,3,10,6,6,1,4 -1239232,3,3,2,6,3,3,3,5,1,2 -1239347,8,7,8,5,10,10,7,2,1,4 -1239967,1,1,1,1,2,1,2,1,1,2 -1240337,5,2,2,2,2,2,3,2,2,2 -1253505,2,3,1,1,5,1,1,1,1,2 -1255384,3,2,2,3,2,3,3,1,1,2 -1257200,10,10,10,7,10,10,8,2,1,4 -1257648,4,3,3,1,2,1,3,3,1,2 -1257815,5,1,3,1,2,1,2,1,1,2 -1257938,3,1,1,1,2,1,1,1,1,2 -1258549,9,10,10,10,10,10,10,10,1,4 -1258556,5,3,6,1,2,1,1,1,1,2 -1266154,8,7,8,2,4,2,5,10,1,4 -1272039,1,1,1,1,2,1,2,1,1,2 -1276091,2,1,1,1,2,1,2,1,1,2 -1276091,1,3,1,1,2,1,2,2,1,2 -1276091,5,1,1,3,4,1,3,2,1,2 -1277629,5,1,1,1,2,1,2,2,1,2 -1293439,3,2,2,3,2,1,1,1,1,2 -1293439,6,9,7,5,5,8,4,2,1,2 -1294562,10,8,10,1,3,10,5,1,1,4 -1295186,10,10,10,1,6,1,2,8,1,4 -527337,4,1,1,1,2,1,1,1,1,2 -558538,4,1,3,3,2,1,1,1,1,2 -566509,5,1,1,1,2,1,1,1,1,2 -608157,10,4,3,10,4,10,10,1,1,4 -677910,5,2,2,4,2,4,1,1,1,2 -734111,1,1,1,3,2,3,1,1,1,2 -734111,1,1,1,1,2,2,1,1,1,2 -780555,5,1,1,6,3,1,2,1,1,2 -827627,2,1,1,1,2,1,1,1,1,2 -1049837,1,1,1,1,2,1,1,1,1,2 -1058849,5,1,1,1,2,1,1,1,1,2 -1182404,1,1,1,1,1,1,1,1,1,2 -1193544,5,7,9,8,6,10,8,10,1,4 -1201870,4,1,1,3,1,1,2,1,1,2 -1202253,5,1,1,1,2,1,1,1,1,2 -1227081,3,1,1,3,2,1,1,1,1,2 -1230994,4,5,5,8,6,10,10,7,1,4 -1238410,2,3,1,1,3,1,1,1,1,2 -1246562,10,2,2,1,2,6,1,1,2,4 -1257470,10,6,5,8,5,10,8,6,1,4 -1259008,8,8,9,6,6,3,10,10,1,4 -1266124,5,1,2,1,2,1,1,1,1,2 -1267898,5,1,3,1,2,1,1,1,1,2 -1268313,5,1,1,3,2,1,1,1,1,2 -1268804,3,1,1,1,2,5,1,1,1,2 -1276091,6,1,1,3,2,1,1,1,1,2 -1280258,4,1,1,1,2,1,1,2,1,2 -1293966,4,1,1,1,2,1,1,1,1,2 -1296572,10,9,8,7,6,4,7,10,3,4 -1298416,10,6,6,2,4,10,9,7,1,4 -1299596,6,6,6,5,4,10,7,6,2,4 -1105524,4,1,1,1,2,1,1,1,1,2 -1181685,1,1,2,1,2,1,2,1,1,2 -1211594,3,1,1,1,1,1,2,1,1,2 -1238777,6,1,1,3,2,1,1,1,1,2 -1257608,6,1,1,1,1,1,1,1,1,2 -1269574,4,1,1,1,2,1,1,1,1,2 -1277145,5,1,1,1,2,1,1,1,1,2 -1287282,3,1,1,1,2,1,1,1,1,2 -1296025,4,1,2,1,2,1,1,1,1,2 -1296263,4,1,1,1,2,1,1,1,1,2 -1296593,5,2,1,1,2,1,1,1,1,2 -1299161,4,8,7,10,4,10,7,5,1,4 -1301945,5,1,1,1,1,1,1,1,1,2 -1302428,5,3,2,4,2,1,1,1,1,2 -1318169,9,10,10,10,10,5,10,10,10,4 -474162,8,7,8,5,5,10,9,10,1,4 -787451,5,1,2,1,2,1,1,1,1,2 -1002025,1,1,1,3,1,3,1,1,1,2 -1070522,3,1,1,1,1,1,2,1,1,2 -1073960,10,10,10,10,6,10,8,1,5,4 -1076352,3,6,4,10,3,3,3,4,1,4 -1084139,6,3,2,1,3,4,4,1,1,4 -1115293,1,1,1,1,2,1,1,1,1,2 -1119189,5,8,9,4,3,10,7,1,1,4 -1133991,4,1,1,1,1,1,2,1,1,2 -1142706,5,10,10,10,6,10,6,5,2,4 -1155967,5,1,2,10,4,5,2,1,1,2 -1170945,3,1,1,1,1,1,2,1,1,2 -1181567,1,1,1,1,1,1,1,1,1,2 -1182404,4,2,1,1,2,1,1,1,1,2 -1204558,4,1,1,1,2,1,2,1,1,2 -1217952,4,1,1,1,2,1,2,1,1,2 -1224565,6,1,1,1,2,1,3,1,1,2 -1238186,4,1,1,1,2,1,2,1,1,2 -1253917,4,1,1,2,2,1,2,1,1,2 -1265899,4,1,1,1,2,1,3,1,1,2 -1268766,1,1,1,1,2,1,1,1,1,2 -1277268,3,3,1,1,2,1,1,1,1,2 -1286943,8,10,10,10,7,5,4,8,7,4 -1295508,1,1,1,1,2,4,1,1,1,2 -1297327,5,1,1,1,2,1,1,1,1,2 -1297522,2,1,1,1,2,1,1,1,1,2 -1298360,1,1,1,1,2,1,1,1,1,2 -1299924,5,1,1,1,2,1,2,1,1,2 -1299994,5,1,1,1,2,1,1,1,1,2 -1304595,3,1,1,1,1,1,2,1,1,2 -1306282,6,6,7,10,3,10,8,10,2,4 -1313325,4,10,4,7,3,10,9,10,1,4 -1320077,1,1,1,1,1,1,1,1,1,2 -1320077,1,1,1,1,1,1,2,1,1,2 -1320304,3,1,2,2,2,1,1,1,1,2 -1330439,4,7,8,3,4,10,9,1,1,4 -333093,1,1,1,1,3,1,1,1,1,2 -369565,4,1,1,1,3,1,1,1,1,2 -412300,10,4,5,4,3,5,7,3,1,4 -672113,7,5,6,10,4,10,5,3,1,4 -749653,3,1,1,1,2,1,2,1,1,2 -769612,3,1,1,2,2,1,1,1,1,2 -769612,4,1,1,1,2,1,1,1,1,2 -798429,4,1,1,1,2,1,3,1,1,2 -807657,6,1,3,2,2,1,1,1,1,2 -8233704,4,1,1,1,1,1,2,1,1,2 -837480,7,4,4,3,4,10,6,9,1,4 -867392,4,2,2,1,2,1,2,1,1,2 -869828,1,1,1,1,1,1,3,1,1,2 -1043068,3,1,1,1,2,1,2,1,1,2 -1056171,2,1,1,1,2,1,2,1,1,2 -1061990,1,1,3,2,2,1,3,1,1,2 -1113061,5,1,1,1,2,1,3,1,1,2 -1116192,5,1,2,1,2,1,3,1,1,2 -1135090,4,1,1,1,2,1,2,1,1,2 -1145420,6,1,1,1,2,1,2,1,1,2 -1158157,5,1,1,1,2,2,2,1,1,2 -1171578,3,1,1,1,2,1,1,1,1,2 -1174841,5,3,1,1,2,1,1,1,1,2 -1184586,4,1,1,1,2,1,2,1,1,2 -1186936,2,1,3,2,2,1,2,1,1,2 -1197527,5,1,1,1,2,1,2,1,1,2 -1222464,6,10,10,10,4,10,7,10,1,4 -1240603,2,1,1,1,1,1,1,1,1,2 -1240603,3,1,1,1,1,1,1,1,1,2 -1241035,7,8,3,7,4,5,7,8,2,4 -1287971,3,1,1,1,2,1,2,1,1,2 -1289391,1,1,1,1,2,1,3,1,1,2 -1299924,3,2,2,2,2,1,4,2,1,2 -1306339,4,4,2,1,2,5,2,1,2,2 -1313658,3,1,1,1,2,1,1,1,1,2 -1313982,4,3,1,1,2,1,4,8,1,2 -1321264,5,2,2,2,1,1,2,1,1,2 -1321321,5,1,1,3,2,1,1,1,1,2 -1321348,2,1,1,1,2,1,2,1,1,2 -1321931,5,1,1,1,2,1,2,1,1,2 -1321942,5,1,1,1,2,1,3,1,1,2 -1321942,5,1,1,1,2,1,3,1,1,2 -1328331,1,1,1,1,2,1,3,1,1,2 -1328755,3,1,1,1,2,1,2,1,1,2 -1331405,4,1,1,1,2,1,3,2,1,2 -1331412,5,7,10,10,5,10,10,10,1,4 -1333104,3,1,2,1,2,1,3,1,1,2 -1334071,4,1,1,1,2,3,2,1,1,2 -1343068,8,4,4,1,6,10,2,5,2,4 -1343374,10,10,8,10,6,5,10,3,1,4 -1344121,8,10,4,4,8,10,8,2,1,4 -142932,7,6,10,5,3,10,9,10,2,4 -183936,3,1,1,1,2,1,2,1,1,2 -324382,1,1,1,1,2,1,2,1,1,2 -378275,10,9,7,3,4,2,7,7,1,4 -385103,5,1,2,1,2,1,3,1,1,2 -690557,5,1,1,1,2,1,2,1,1,2 -695091,1,1,1,1,2,1,2,1,1,2 -695219,1,1,1,1,2,1,2,1,1,2 -824249,1,1,1,1,2,1,3,1,1,2 -871549,5,1,2,1,2,1,2,1,1,2 -878358,5,7,10,6,5,10,7,5,1,4 -1107684,6,10,5,5,4,10,6,10,1,4 -1115762,3,1,1,1,2,1,1,1,1,2 -1217717,5,1,1,6,3,1,1,1,1,2 -1239420,1,1,1,1,2,1,1,1,1,2 -1254538,8,10,10,10,6,10,10,10,1,4 -1261751,5,1,1,1,2,1,2,2,1,2 -1268275,9,8,8,9,6,3,4,1,1,4 -1272166,5,1,1,1,2,1,1,1,1,2 -1294261,4,10,8,5,4,1,10,1,1,4 -1295529,2,5,7,6,4,10,7,6,1,4 -1298484,10,3,4,5,3,10,4,1,1,4 -1311875,5,1,2,1,2,1,1,1,1,2 -1315506,4,8,6,3,4,10,7,1,1,4 -1320141,5,1,1,1,2,1,2,1,1,2 -1325309,4,1,2,1,2,1,2,1,1,2 -1333063,5,1,3,1,2,1,3,1,1,2 -1333495,3,1,1,1,2,1,2,1,1,2 -1334659,5,2,4,1,1,1,1,1,1,2 -1336798,3,1,1,1,2,1,2,1,1,2 -1344449,1,1,1,1,1,1,2,1,1,2 -1350568,4,1,1,1,2,1,2,1,1,2 -1352663,5,4,6,8,4,1,8,10,1,4 -188336,5,3,2,8,5,10,8,1,2,4 -352431,10,5,10,3,5,8,7,8,3,4 -353098,4,1,1,2,2,1,1,1,1,2 -411453,1,1,1,1,2,1,1,1,1,2 -557583,5,10,10,10,10,10,10,1,1,4 -636375,5,1,1,1,2,1,1,1,1,2 -736150,10,4,3,10,3,10,7,1,2,4 -803531,5,10,10,10,5,2,8,5,1,4 -822829,8,10,10,10,6,10,10,10,10,4 -1016634,2,3,1,1,2,1,2,1,1,2 -1031608,2,1,1,1,1,1,2,1,1,2 -1041043,4,1,3,1,2,1,2,1,1,2 -1042252,3,1,1,1,2,1,2,1,1,2 -1057067,1,1,1,1,1,?,1,1,1,2 -1061990,4,1,1,1,2,1,2,1,1,2 -1073836,5,1,1,1,2,1,2,1,1,2 -1083817,3,1,1,1,2,1,2,1,1,2 -1096352,6,3,3,3,3,2,6,1,1,2 -1140597,7,1,2,3,2,1,2,1,1,2 -1149548,1,1,1,1,2,1,1,1,1,2 -1174009,5,1,1,2,1,1,2,1,1,2 -1183596,3,1,3,1,3,4,1,1,1,2 -1190386,4,6,6,5,7,6,7,7,3,4 -1190546,2,1,1,1,2,5,1,1,1,2 -1213273,2,1,1,1,2,1,1,1,1,2 -1218982,4,1,1,1,2,1,1,1,1,2 -1225382,6,2,3,1,2,1,1,1,1,2 -1235807,5,1,1,1,2,1,2,1,1,2 -1238777,1,1,1,1,2,1,1,1,1,2 -1253955,8,7,4,4,5,3,5,10,1,4 -1257366,3,1,1,1,2,1,1,1,1,2 -1260659,3,1,4,1,2,1,1,1,1,2 -1268952,10,10,7,8,7,1,10,10,3,4 -1275807,4,2,4,3,2,2,2,1,1,2 -1277792,4,1,1,1,2,1,1,1,1,2 -1277792,5,1,1,3,2,1,1,1,1,2 -1285722,4,1,1,3,2,1,1,1,1,2 -1288608,3,1,1,1,2,1,2,1,1,2 -1290203,3,1,1,1,2,1,2,1,1,2 -1294413,1,1,1,1,2,1,1,1,1,2 -1299596,2,1,1,1,2,1,1,1,1,2 -1303489,3,1,1,1,2,1,2,1,1,2 -1311033,1,2,2,1,2,1,1,1,1,2 -1311108,1,1,1,3,2,1,1,1,1,2 -1315807,5,10,10,10,10,2,10,10,10,4 -1318671,3,1,1,1,2,1,2,1,1,2 -1319609,3,1,1,2,3,4,1,1,1,2 -1323477,1,2,1,3,2,1,2,1,1,2 -1324572,5,1,1,1,2,1,2,2,1,2 -1324681,4,1,1,1,2,1,2,1,1,2 -1325159,3,1,1,1,2,1,3,1,1,2 -1326892,3,1,1,1,2,1,2,1,1,2 -1330361,5,1,1,1,2,1,2,1,1,2 -1333877,5,4,5,1,8,1,3,6,1,2 -1334015,7,8,8,7,3,10,7,2,3,4 -1334667,1,1,1,1,2,1,1,1,1,2 -1339781,1,1,1,1,2,1,2,1,1,2 -1339781,4,1,1,1,2,1,3,1,1,2 -13454352,1,1,3,1,2,1,2,1,1,2 -1345452,1,1,3,1,2,1,2,1,1,2 -1345593,3,1,1,3,2,1,2,1,1,2 -1347749,1,1,1,1,2,1,1,1,1,2 -1347943,5,2,2,2,2,1,1,1,2,2 -1348851,3,1,1,1,2,1,3,1,1,2 -1350319,5,7,4,1,6,1,7,10,3,4 -1350423,5,10,10,8,5,5,7,10,1,4 -1352848,3,10,7,8,5,8,7,4,1,4 -1353092,3,2,1,2,2,1,3,1,1,2 -1354840,2,1,1,1,2,1,3,1,1,2 -1354840,5,3,2,1,3,1,1,1,1,2 -1355260,1,1,1,1,2,1,2,1,1,2 -1365075,4,1,4,1,2,1,1,1,1,2 -1365328,1,1,2,1,2,1,2,1,1,2 -1368267,5,1,1,1,2,1,1,1,1,2 -1368273,1,1,1,1,2,1,1,1,1,2 -1368882,2,1,1,1,2,1,1,1,1,2 -1369821,10,10,10,10,5,10,10,10,7,4 -1371026,5,10,10,10,4,10,5,6,3,4 -1371920,5,1,1,1,2,1,3,2,1,2 -466906,1,1,1,1,2,1,1,1,1,2 -466906,1,1,1,1,2,1,1,1,1,2 -534555,1,1,1,1,2,1,1,1,1,2 -536708,1,1,1,1,2,1,1,1,1,2 -566346,3,1,1,1,2,1,2,3,1,2 -603148,4,1,1,1,2,1,1,1,1,2 -654546,1,1,1,1,2,1,1,1,8,2 -654546,1,1,1,3,2,1,1,1,1,2 -695091,5,10,10,5,4,5,4,4,1,4 -714039,3,1,1,1,2,1,1,1,1,2 -763235,3,1,1,1,2,1,2,1,2,2 -776715,3,1,1,1,3,2,1,1,1,2 -841769,2,1,1,1,2,1,1,1,1,2 -888820,5,10,10,3,7,3,8,10,2,4 -897471,4,8,6,4,3,4,10,6,1,4 -897471,4,8,8,5,4,5,10,4,1,4 +1000025,5.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1002945,5.0,4.0,4.0,5.0,7.0,10.0,3.0,2.0,1.0,2.0 +1015425,3.0,1.0,1.0,1.0,2.0,2.0,3.0,1.0,1.0,2.0 +1016277,6.0,8.0,8.0,1.0,3.0,4.0,3.0,7.0,1.0,2.0 +1017023,4.0,1.0,1.0,3.0,2.0,1.0,3.0,1.0,1.0,2.0 +1017122,8.0,10.0,10.0,8.0,7.0,10.0,9.0,7.0,1.0,4.0 +1018099,1.0,1.0,1.0,1.0,2.0,10.0,3.0,1.0,1.0,2.0 +1018561,2.0,1.0,2.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1033078,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,5.0,2.0 +1033078,4.0,2.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1035283,1.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1036172,2.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1041801,5.0,3.0,3.0,3.0,2.0,3.0,4.0,4.0,1.0,4.0 +1043999,1.0,1.0,1.0,1.0,2.0,3.0,3.0,1.0,1.0,2.0 +1044572,8.0,7.0,5.0,10.0,7.0,9.0,5.0,5.0,4.0,4.0 +1047630,7.0,4.0,6.0,4.0,6.0,1.0,4.0,3.0,1.0,4.0 +1048672,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1049815,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1050670,10.0,7.0,7.0,6.0,4.0,10.0,4.0,1.0,2.0,4.0 +1050718,6.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1054590,7.0,3.0,2.0,10.0,5.0,10.0,5.0,4.0,4.0,4.0 +1054593,10.0,5.0,5.0,3.0,6.0,7.0,7.0,10.0,1.0,4.0 +1056784,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1057013,8.0,4.0,5.0,1.0,2.0,?,7.0,3.0,1.0,4.0 +1059552,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1065726,5.0,2.0,3.0,4.0,2.0,7.0,3.0,6.0,1.0,4.0 +1066373,3.0,2.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1066979,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1067444,2.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1070935,1.0,1.0,3.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1070935,3.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1071760,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1072179,10.0,7.0,7.0,3.0,8.0,5.0,7.0,4.0,3.0,4.0 +1074610,2.0,1.0,1.0,2.0,2.0,1.0,3.0,1.0,1.0,2.0 +1075123,3.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1079304,2.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1080185,10.0,10.0,10.0,8.0,6.0,1.0,8.0,9.0,1.0,4.0 +1081791,6.0,2.0,1.0,1.0,1.0,1.0,7.0,1.0,1.0,2.0 +1084584,5.0,4.0,4.0,9.0,2.0,10.0,5.0,6.0,1.0,4.0 +1091262,2.0,5.0,3.0,3.0,6.0,7.0,7.0,5.0,1.0,4.0 +1096800,6.0,6.0,6.0,9.0,6.0,?,7.0,8.0,1.0,2.0 +1099510,10.0,4.0,3.0,1.0,3.0,3.0,6.0,5.0,2.0,4.0 +1100524,6.0,10.0,10.0,2.0,8.0,10.0,7.0,3.0,3.0,4.0 +1102573,5.0,6.0,5.0,6.0,10.0,1.0,3.0,1.0,1.0,4.0 +1103608,10.0,10.0,10.0,4.0,8.0,1.0,8.0,10.0,1.0,4.0 +1103722,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,2.0,2.0 +1105257,3.0,7.0,7.0,4.0,4.0,9.0,4.0,8.0,1.0,4.0 +1105524,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1106095,4.0,1.0,1.0,3.0,2.0,1.0,3.0,1.0,1.0,2.0 +1106829,7.0,8.0,7.0,2.0,4.0,8.0,3.0,8.0,2.0,4.0 +1108370,9.0,5.0,8.0,1.0,2.0,3.0,2.0,1.0,5.0,4.0 +1108449,5.0,3.0,3.0,4.0,2.0,4.0,3.0,4.0,1.0,4.0 +1110102,10.0,3.0,6.0,2.0,3.0,5.0,4.0,10.0,2.0,4.0 +1110503,5.0,5.0,5.0,8.0,10.0,8.0,7.0,3.0,7.0,4.0 +1110524,10.0,5.0,5.0,6.0,8.0,8.0,7.0,1.0,1.0,4.0 +1111249,10.0,6.0,6.0,3.0,4.0,5.0,3.0,6.0,1.0,4.0 +1112209,8.0,10.0,10.0,1.0,3.0,6.0,3.0,9.0,1.0,4.0 +1113038,8.0,2.0,4.0,1.0,5.0,1.0,5.0,4.0,4.0,4.0 +1113483,5.0,2.0,3.0,1.0,6.0,10.0,5.0,1.0,1.0,4.0 +1113906,9.0,5.0,5.0,2.0,2.0,2.0,5.0,1.0,1.0,4.0 +1115282,5.0,3.0,5.0,5.0,3.0,3.0,4.0,10.0,1.0,4.0 +1115293,1.0,1.0,1.0,1.0,2.0,2.0,2.0,1.0,1.0,2.0 +1116116,9.0,10.0,10.0,1.0,10.0,8.0,3.0,3.0,1.0,4.0 +1116132,6.0,3.0,4.0,1.0,5.0,2.0,3.0,9.0,1.0,4.0 +1116192,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1116998,10.0,4.0,2.0,1.0,3.0,2.0,4.0,3.0,10.0,4.0 +1117152,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1118039,5.0,3.0,4.0,1.0,8.0,10.0,4.0,9.0,1.0,4.0 +1120559,8.0,3.0,8.0,3.0,4.0,9.0,8.0,9.0,8.0,4.0 +1121732,1.0,1.0,1.0,1.0,2.0,1.0,3.0,2.0,1.0,2.0 +1121919,5.0,1.0,3.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1123061,6.0,10.0,2.0,8.0,10.0,2.0,7.0,8.0,10.0,4.0 +1124651,1.0,3.0,3.0,2.0,2.0,1.0,7.0,2.0,1.0,2.0 +1125035,9.0,4.0,5.0,10.0,6.0,10.0,4.0,8.0,1.0,4.0 +1126417,10.0,6.0,4.0,1.0,3.0,4.0,3.0,2.0,3.0,4.0 +1131294,1.0,1.0,2.0,1.0,2.0,2.0,4.0,2.0,1.0,2.0 +1132347,1.0,1.0,4.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1133041,5.0,3.0,1.0,2.0,2.0,1.0,2.0,1.0,1.0,2.0 +1133136,3.0,1.0,1.0,1.0,2.0,3.0,3.0,1.0,1.0,2.0 +1136142,2.0,1.0,1.0,1.0,3.0,1.0,2.0,1.0,1.0,2.0 +1137156,2.0,2.0,2.0,1.0,1.0,1.0,7.0,1.0,1.0,2.0 +1143978,4.0,1.0,1.0,2.0,2.0,1.0,2.0,1.0,1.0,2.0 +1143978,5.0,2.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1147044,3.0,1.0,1.0,1.0,2.0,2.0,7.0,1.0,1.0,2.0 +1147699,3.0,5.0,7.0,8.0,8.0,9.0,7.0,10.0,7.0,4.0 +1147748,5.0,10.0,6.0,1.0,10.0,4.0,4.0,10.0,10.0,4.0 +1148278,3.0,3.0,6.0,4.0,5.0,8.0,4.0,4.0,1.0,4.0 +1148873,3.0,6.0,6.0,6.0,5.0,10.0,6.0,8.0,3.0,4.0 +1152331,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1155546,2.0,1.0,1.0,2.0,3.0,1.0,2.0,1.0,1.0,2.0 +1156272,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1156948,3.0,1.0,1.0,2.0,2.0,1.0,1.0,1.0,1.0,2.0 +1157734,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1158247,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1160476,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1164066,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1165297,2.0,1.0,1.0,2.0,2.0,1.0,1.0,1.0,1.0,2.0 +1165790,5.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1165926,9.0,6.0,9.0,2.0,10.0,6.0,2.0,9.0,10.0,4.0 +1166630,7.0,5.0,6.0,10.0,5.0,10.0,7.0,9.0,4.0,4.0 +1166654,10.0,3.0,5.0,1.0,10.0,5.0,3.0,10.0,2.0,4.0 +1167439,2.0,3.0,4.0,4.0,2.0,5.0,2.0,5.0,1.0,4.0 +1167471,4.0,1.0,2.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1168359,8.0,2.0,3.0,1.0,6.0,3.0,7.0,1.0,1.0,4.0 +1168736,10.0,10.0,10.0,10.0,10.0,1.0,8.0,8.0,8.0,4.0 +1169049,7.0,3.0,4.0,4.0,3.0,3.0,3.0,2.0,7.0,4.0 +1170419,10.0,10.0,10.0,8.0,2.0,10.0,4.0,1.0,1.0,4.0 +1170420,1.0,6.0,8.0,10.0,8.0,10.0,5.0,7.0,1.0,4.0 +1171710,1.0,1.0,1.0,1.0,2.0,1.0,2.0,3.0,1.0,2.0 +1171710,6.0,5.0,4.0,4.0,3.0,9.0,7.0,8.0,3.0,4.0 +1171795,1.0,3.0,1.0,2.0,2.0,2.0,5.0,3.0,2.0,2.0 +1171845,8.0,6.0,4.0,3.0,5.0,9.0,3.0,1.0,1.0,4.0 +1172152,10.0,3.0,3.0,10.0,2.0,10.0,7.0,3.0,3.0,4.0 +1173216,10.0,10.0,10.0,3.0,10.0,8.0,8.0,1.0,1.0,4.0 +1173235,3.0,3.0,2.0,1.0,2.0,3.0,3.0,1.0,1.0,2.0 +1173347,1.0,1.0,1.0,1.0,2.0,5.0,1.0,1.0,1.0,2.0 +1173347,8.0,3.0,3.0,1.0,2.0,2.0,3.0,2.0,1.0,2.0 +1173509,4.0,5.0,5.0,10.0,4.0,10.0,7.0,5.0,8.0,4.0 +1173514,1.0,1.0,1.0,1.0,4.0,3.0,1.0,1.0,1.0,2.0 +1173681,3.0,2.0,1.0,1.0,2.0,2.0,3.0,1.0,1.0,2.0 +1174057,1.0,1.0,2.0,2.0,2.0,1.0,3.0,1.0,1.0,2.0 +1174057,4.0,2.0,1.0,1.0,2.0,2.0,3.0,1.0,1.0,2.0 +1174131,10.0,10.0,10.0,2.0,10.0,10.0,5.0,3.0,3.0,4.0 +1174428,5.0,3.0,5.0,1.0,8.0,10.0,5.0,3.0,1.0,4.0 +1175937,5.0,4.0,6.0,7.0,9.0,7.0,8.0,10.0,1.0,4.0 +1176406,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1176881,7.0,5.0,3.0,7.0,4.0,10.0,7.0,5.0,5.0,4.0 +1177027,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1177399,8.0,3.0,5.0,4.0,5.0,10.0,1.0,6.0,2.0,4.0 +1177512,1.0,1.0,1.0,1.0,10.0,1.0,1.0,1.0,1.0,2.0 +1178580,5.0,1.0,3.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1179818,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1180194,5.0,10.0,8.0,10.0,8.0,10.0,3.0,6.0,3.0,4.0 +1180523,3.0,1.0,1.0,1.0,2.0,1.0,2.0,2.0,1.0,2.0 +1180831,3.0,1.0,1.0,1.0,3.0,1.0,2.0,1.0,1.0,2.0 +1181356,5.0,1.0,1.0,1.0,2.0,2.0,3.0,3.0,1.0,2.0 +1182404,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1182410,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1183240,4.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1183246,1.0,1.0,1.0,1.0,1.0,?,2.0,1.0,1.0,2.0 +1183516,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1183911,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1183983,9.0,5.0,5.0,4.0,4.0,5.0,4.0,3.0,3.0,4.0 +1184184,1.0,1.0,1.0,1.0,2.0,5.0,1.0,1.0,1.0,2.0 +1184241,2.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1184840,1.0,1.0,3.0,1.0,2.0,?,2.0,1.0,1.0,2.0 +1185609,3.0,4.0,5.0,2.0,6.0,8.0,4.0,1.0,1.0,4.0 +1185610,1.0,1.0,1.0,1.0,3.0,2.0,2.0,1.0,1.0,2.0 +1187457,3.0,1.0,1.0,3.0,8.0,1.0,5.0,8.0,1.0,2.0 +1187805,8.0,8.0,7.0,4.0,10.0,10.0,7.0,8.0,7.0,4.0 +1188472,1.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1189266,7.0,2.0,4.0,1.0,6.0,10.0,5.0,4.0,3.0,4.0 +1189286,10.0,10.0,8.0,6.0,4.0,5.0,8.0,10.0,1.0,4.0 +1190394,4.0,1.0,1.0,1.0,2.0,3.0,1.0,1.0,1.0,2.0 +1190485,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1192325,5.0,5.0,5.0,6.0,3.0,10.0,3.0,1.0,1.0,4.0 +1193091,1.0,2.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1193210,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1193683,1.0,1.0,2.0,1.0,3.0,?,1.0,1.0,1.0,2.0 +1196295,9.0,9.0,10.0,3.0,6.0,10.0,7.0,10.0,6.0,4.0 +1196915,10.0,7.0,7.0,4.0,5.0,10.0,5.0,7.0,2.0,4.0 +1197080,4.0,1.0,1.0,1.0,2.0,1.0,3.0,2.0,1.0,2.0 +1197270,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1197440,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,7.0,2.0 +1197510,5.0,1.0,1.0,1.0,2.0,?,3.0,1.0,1.0,2.0 +1197979,4.0,1.0,1.0,1.0,2.0,2.0,3.0,2.0,1.0,2.0 +1197993,5.0,6.0,7.0,8.0,8.0,10.0,3.0,10.0,3.0,4.0 +1198128,10.0,8.0,10.0,10.0,6.0,1.0,3.0,1.0,10.0,4.0 +1198641,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1199219,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,1.0,2.0 +1199731,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1199983,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1200772,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1200847,6.0,10.0,10.0,10.0,8.0,10.0,10.0,10.0,7.0,4.0 +1200892,8.0,6.0,5.0,4.0,3.0,10.0,6.0,1.0,1.0,4.0 +1200952,5.0,8.0,7.0,7.0,10.0,10.0,5.0,7.0,1.0,4.0 +1201834,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1201936,5.0,10.0,10.0,3.0,8.0,1.0,5.0,10.0,3.0,4.0 +1202125,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1202812,5.0,3.0,3.0,3.0,6.0,10.0,3.0,1.0,1.0,4.0 +1203096,1.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1204242,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1204898,6.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1205138,5.0,8.0,8.0,8.0,5.0,10.0,7.0,8.0,1.0,4.0 +1205579,8.0,7.0,6.0,4.0,4.0,10.0,5.0,1.0,1.0,4.0 +1206089,2.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1206695,1.0,5.0,8.0,6.0,5.0,8.0,7.0,10.0,1.0,4.0 +1206841,10.0,5.0,6.0,10.0,6.0,10.0,7.0,7.0,10.0,4.0 +1207986,5.0,8.0,4.0,10.0,5.0,8.0,9.0,10.0,1.0,4.0 +1208301,1.0,2.0,3.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1210963,10.0,10.0,10.0,8.0,6.0,8.0,7.0,10.0,1.0,4.0 +1211202,7.0,5.0,10.0,10.0,10.0,10.0,4.0,10.0,3.0,4.0 +1212232,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1212251,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1212422,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1212422,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1213375,8.0,4.0,4.0,5.0,4.0,7.0,7.0,8.0,2.0,2.0 +1213383,5.0,1.0,1.0,4.0,2.0,1.0,3.0,1.0,1.0,2.0 +1214092,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1214556,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1214966,9.0,7.0,7.0,5.0,5.0,10.0,7.0,8.0,3.0,4.0 +1216694,10.0,8.0,8.0,4.0,10.0,10.0,8.0,1.0,1.0,4.0 +1216947,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1217051,5.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1217264,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1218105,5.0,10.0,10.0,9.0,6.0,10.0,7.0,10.0,5.0,4.0 +1218741,10.0,10.0,9.0,3.0,7.0,5.0,3.0,5.0,1.0,4.0 +1218860,1.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1218860,1.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1219406,5.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1219525,8.0,10.0,10.0,10.0,5.0,10.0,8.0,10.0,6.0,4.0 +1219859,8.0,10.0,8.0,8.0,4.0,8.0,7.0,7.0,1.0,4.0 +1220330,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1221863,10.0,10.0,10.0,10.0,7.0,10.0,7.0,10.0,4.0,4.0 +1222047,10.0,10.0,10.0,10.0,3.0,10.0,10.0,6.0,1.0,4.0 +1222936,8.0,7.0,8.0,7.0,5.0,5.0,5.0,10.0,2.0,4.0 +1223282,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1223426,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1223793,6.0,10.0,7.0,7.0,6.0,4.0,8.0,10.0,2.0,4.0 +1223967,6.0,1.0,3.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1224329,1.0,1.0,1.0,2.0,2.0,1.0,3.0,1.0,1.0,2.0 +1225799,10.0,6.0,4.0,3.0,10.0,10.0,9.0,10.0,1.0,4.0 +1226012,4.0,1.0,1.0,3.0,1.0,5.0,2.0,1.0,1.0,4.0 +1226612,7.0,5.0,6.0,3.0,3.0,8.0,7.0,4.0,1.0,4.0 +1227210,10.0,5.0,5.0,6.0,3.0,10.0,7.0,9.0,2.0,4.0 +1227244,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1227481,10.0,5.0,7.0,4.0,4.0,10.0,8.0,9.0,1.0,4.0 +1228152,8.0,9.0,9.0,5.0,3.0,5.0,7.0,7.0,1.0,4.0 +1228311,1.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1230175,10.0,10.0,10.0,3.0,10.0,10.0,9.0,10.0,1.0,4.0 +1230688,7.0,4.0,7.0,4.0,3.0,7.0,7.0,6.0,1.0,4.0 +1231387,6.0,8.0,7.0,5.0,6.0,8.0,8.0,9.0,2.0,4.0 +1231706,8.0,4.0,6.0,3.0,3.0,1.0,4.0,3.0,1.0,2.0 +1232225,10.0,4.0,5.0,5.0,5.0,10.0,4.0,1.0,1.0,4.0 +1236043,3.0,3.0,2.0,1.0,3.0,1.0,3.0,6.0,1.0,2.0 +1241232,3.0,1.0,4.0,1.0,2.0,?,3.0,1.0,1.0,2.0 +1241559,10.0,8.0,8.0,2.0,8.0,10.0,4.0,8.0,10.0,4.0 +1241679,9.0,8.0,8.0,5.0,6.0,2.0,4.0,10.0,4.0,4.0 +1242364,8.0,10.0,10.0,8.0,6.0,9.0,3.0,10.0,10.0,4.0 +1243256,10.0,4.0,3.0,2.0,3.0,10.0,5.0,3.0,2.0,4.0 +1270479,5.0,1.0,3.0,3.0,2.0,2.0,2.0,3.0,1.0,2.0 +1276091,3.0,1.0,1.0,3.0,1.0,1.0,3.0,1.0,1.0,2.0 +1277018,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +128059,1.0,1.0,1.0,1.0,2.0,5.0,5.0,1.0,1.0,2.0 +1285531,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1287775,5.0,1.0,1.0,2.0,2.0,2.0,3.0,1.0,1.0,2.0 +144888,8.0,10.0,10.0,8.0,5.0,10.0,7.0,8.0,1.0,4.0 +145447,8.0,4.0,4.0,1.0,2.0,9.0,3.0,3.0,1.0,4.0 +167528,4.0,1.0,1.0,1.0,2.0,1.0,3.0,6.0,1.0,2.0 +169356,3.0,1.0,1.0,1.0,2.0,?,3.0,1.0,1.0,2.0 +183913,1.0,2.0,2.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +191250,10.0,4.0,4.0,10.0,2.0,10.0,5.0,3.0,3.0,4.0 +1017023,6.0,3.0,3.0,5.0,3.0,10.0,3.0,5.0,3.0,2.0 +1100524,6.0,10.0,10.0,2.0,8.0,10.0,7.0,3.0,3.0,4.0 +1116116,9.0,10.0,10.0,1.0,10.0,8.0,3.0,3.0,1.0,4.0 +1168736,5.0,6.0,6.0,2.0,4.0,10.0,3.0,6.0,1.0,4.0 +1182404,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1182404,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1198641,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +242970,5.0,7.0,7.0,1.0,5.0,8.0,3.0,4.0,1.0,2.0 +255644,10.0,5.0,8.0,10.0,3.0,10.0,5.0,1.0,3.0,4.0 +263538,5.0,10.0,10.0,6.0,10.0,10.0,10.0,6.0,5.0,4.0 +274137,8.0,8.0,9.0,4.0,5.0,10.0,7.0,8.0,1.0,4.0 +303213,10.0,4.0,4.0,10.0,6.0,10.0,5.0,5.0,1.0,4.0 +314428,7.0,9.0,4.0,10.0,10.0,3.0,5.0,3.0,3.0,4.0 +1182404,5.0,1.0,4.0,1.0,2.0,1.0,3.0,2.0,1.0,2.0 +1198641,10.0,10.0,6.0,3.0,3.0,10.0,4.0,3.0,2.0,4.0 +320675,3.0,3.0,5.0,2.0,3.0,10.0,7.0,1.0,1.0,4.0 +324427,10.0,8.0,8.0,2.0,3.0,4.0,8.0,7.0,8.0,4.0 +385103,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +390840,8.0,4.0,7.0,1.0,3.0,10.0,3.0,9.0,2.0,4.0 +411453,5.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +320675,3.0,3.0,5.0,2.0,3.0,10.0,7.0,1.0,1.0,4.0 +428903,7.0,2.0,4.0,1.0,3.0,4.0,3.0,3.0,1.0,4.0 +431495,3.0,1.0,1.0,1.0,2.0,1.0,3.0,2.0,1.0,2.0 +432809,3.0,1.0,3.0,1.0,2.0,?,2.0,1.0,1.0,2.0 +434518,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +452264,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +456282,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +476903,10.0,5.0,7.0,3.0,3.0,7.0,3.0,3.0,8.0,4.0 +486283,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +486662,2.0,1.0,1.0,2.0,2.0,1.0,3.0,1.0,1.0,2.0 +488173,1.0,4.0,3.0,10.0,4.0,10.0,5.0,6.0,1.0,4.0 +492268,10.0,4.0,6.0,1.0,2.0,10.0,5.0,3.0,1.0,4.0 +508234,7.0,4.0,5.0,10.0,2.0,10.0,3.0,8.0,2.0,4.0 +527363,8.0,10.0,10.0,10.0,8.0,10.0,10.0,7.0,3.0,4.0 +529329,10.0,10.0,10.0,10.0,10.0,10.0,4.0,10.0,10.0,4.0 +535331,3.0,1.0,1.0,1.0,3.0,1.0,2.0,1.0,1.0,2.0 +543558,6.0,1.0,3.0,1.0,4.0,5.0,5.0,10.0,1.0,4.0 +555977,5.0,6.0,6.0,8.0,6.0,10.0,4.0,10.0,4.0,4.0 +560680,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +561477,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +563649,8.0,8.0,8.0,1.0,2.0,?,6.0,10.0,1.0,4.0 +601265,10.0,4.0,4.0,6.0,2.0,10.0,2.0,3.0,1.0,4.0 +606140,1.0,1.0,1.0,1.0,2.0,?,2.0,1.0,1.0,2.0 +606722,5.0,5.0,7.0,8.0,6.0,10.0,7.0,4.0,1.0,4.0 +616240,5.0,3.0,4.0,3.0,4.0,5.0,4.0,7.0,1.0,2.0 +61634,5.0,4.0,3.0,1.0,2.0,?,2.0,3.0,1.0,2.0 +625201,8.0,2.0,1.0,1.0,5.0,1.0,1.0,1.0,1.0,2.0 +63375,9.0,1.0,2.0,6.0,4.0,10.0,7.0,7.0,2.0,4.0 +635844,8.0,4.0,10.0,5.0,4.0,4.0,7.0,10.0,1.0,4.0 +636130,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +640744,10.0,10.0,10.0,7.0,9.0,10.0,7.0,10.0,10.0,4.0 +646904,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +653777,8.0,3.0,4.0,9.0,3.0,10.0,3.0,3.0,1.0,4.0 +659642,10.0,8.0,4.0,4.0,4.0,10.0,3.0,10.0,4.0,4.0 +666090,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +666942,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +667204,7.0,8.0,7.0,6.0,4.0,3.0,8.0,8.0,4.0,4.0 +673637,3.0,1.0,1.0,1.0,2.0,5.0,5.0,1.0,1.0,2.0 +684955,2.0,1.0,1.0,1.0,3.0,1.0,2.0,1.0,1.0,2.0 +688033,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +691628,8.0,6.0,4.0,10.0,10.0,1.0,3.0,5.0,1.0,4.0 +693702,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +704097,1.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +704168,4.0,6.0,5.0,6.0,7.0,?,4.0,9.0,1.0,2.0 +706426,5.0,5.0,5.0,2.0,5.0,10.0,4.0,3.0,1.0,4.0 +709287,6.0,8.0,7.0,8.0,6.0,8.0,8.0,9.0,1.0,4.0 +718641,1.0,1.0,1.0,1.0,5.0,1.0,3.0,1.0,1.0,2.0 +721482,4.0,4.0,4.0,4.0,6.0,5.0,7.0,3.0,1.0,2.0 +730881,7.0,6.0,3.0,2.0,5.0,10.0,7.0,4.0,6.0,4.0 +733639,3.0,1.0,1.0,1.0,2.0,?,3.0,1.0,1.0,2.0 +733639,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +733823,5.0,4.0,6.0,10.0,2.0,10.0,4.0,1.0,1.0,4.0 +740492,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +743348,3.0,2.0,2.0,1.0,2.0,1.0,2.0,3.0,1.0,2.0 +752904,10.0,1.0,1.0,1.0,2.0,10.0,5.0,4.0,1.0,4.0 +756136,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +760001,8.0,10.0,3.0,2.0,6.0,4.0,3.0,10.0,1.0,4.0 +760239,10.0,4.0,6.0,4.0,5.0,10.0,7.0,1.0,1.0,4.0 +76389,10.0,4.0,7.0,2.0,2.0,8.0,6.0,1.0,1.0,4.0 +764974,5.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,2.0,2.0 +770066,5.0,2.0,2.0,2.0,2.0,1.0,2.0,2.0,1.0,2.0 +785208,5.0,4.0,6.0,6.0,4.0,10.0,4.0,3.0,1.0,4.0 +785615,8.0,6.0,7.0,3.0,3.0,10.0,3.0,4.0,2.0,4.0 +792744,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +797327,6.0,5.0,5.0,8.0,4.0,10.0,3.0,4.0,1.0,4.0 +798429,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +704097,1.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +806423,8.0,5.0,5.0,5.0,2.0,10.0,4.0,3.0,1.0,4.0 +809912,10.0,3.0,3.0,1.0,2.0,10.0,7.0,6.0,1.0,4.0 +810104,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +814265,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +814911,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +822829,7.0,6.0,4.0,8.0,10.0,10.0,9.0,5.0,3.0,4.0 +826923,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +830690,5.0,2.0,2.0,2.0,3.0,1.0,1.0,3.0,1.0,2.0 +831268,1.0,1.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,2.0 +832226,3.0,4.0,4.0,10.0,5.0,1.0,3.0,3.0,1.0,4.0 +832567,4.0,2.0,3.0,5.0,3.0,8.0,7.0,6.0,1.0,4.0 +836433,5.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +837082,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +846832,3.0,4.0,5.0,3.0,7.0,3.0,4.0,6.0,1.0,2.0 +850831,2.0,7.0,10.0,10.0,7.0,10.0,4.0,9.0,4.0,4.0 +855524,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +857774,4.0,1.0,1.0,1.0,3.0,1.0,2.0,2.0,1.0,2.0 +859164,5.0,3.0,3.0,1.0,3.0,3.0,3.0,3.0,3.0,4.0 +859350,8.0,10.0,10.0,7.0,10.0,10.0,7.0,3.0,8.0,4.0 +866325,8.0,10.0,5.0,3.0,8.0,4.0,4.0,10.0,3.0,4.0 +873549,10.0,3.0,5.0,4.0,3.0,7.0,3.0,5.0,3.0,4.0 +877291,6.0,10.0,10.0,10.0,10.0,10.0,8.0,10.0,10.0,4.0 +877943,3.0,10.0,3.0,10.0,6.0,10.0,5.0,1.0,4.0,4.0 +888169,3.0,2.0,2.0,1.0,4.0,3.0,2.0,1.0,1.0,2.0 +888523,4.0,4.0,4.0,2.0,2.0,3.0,2.0,1.0,1.0,2.0 +896404,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +897172,2.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +95719,6.0,10.0,10.0,10.0,8.0,10.0,7.0,10.0,7.0,4.0 +160296,5.0,8.0,8.0,10.0,5.0,10.0,8.0,10.0,3.0,4.0 +342245,1.0,1.0,3.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +428598,1.0,1.0,3.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +492561,4.0,3.0,2.0,1.0,3.0,1.0,2.0,1.0,1.0,2.0 +493452,1.0,1.0,3.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +493452,4.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +521441,5.0,1.0,1.0,2.0,2.0,1.0,2.0,1.0,1.0,2.0 +560680,3.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +636437,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +640712,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +654244,1.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +657753,3.0,1.0,1.0,4.0,3.0,1.0,2.0,2.0,1.0,2.0 +685977,5.0,3.0,4.0,1.0,4.0,1.0,3.0,1.0,1.0,2.0 +805448,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +846423,10.0,6.0,3.0,6.0,4.0,10.0,7.0,8.0,4.0,4.0 +1002504,3.0,2.0,2.0,2.0,2.0,1.0,3.0,2.0,1.0,2.0 +1022257,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1026122,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1071084,3.0,3.0,2.0,2.0,3.0,1.0,1.0,2.0,3.0,2.0 +1080233,7.0,6.0,6.0,3.0,2.0,10.0,7.0,1.0,1.0,4.0 +1114570,5.0,3.0,3.0,2.0,3.0,1.0,3.0,1.0,1.0,2.0 +1114570,2.0,1.0,1.0,1.0,2.0,1.0,2.0,2.0,1.0,2.0 +1116715,5.0,1.0,1.0,1.0,3.0,2.0,2.0,2.0,1.0,2.0 +1131411,1.0,1.0,1.0,2.0,2.0,1.0,2.0,1.0,1.0,2.0 +1151734,10.0,8.0,7.0,4.0,3.0,10.0,7.0,9.0,1.0,4.0 +1156017,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1158247,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1158405,1.0,2.0,3.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1168278,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1176187,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1196263,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1196475,3.0,2.0,1.0,1.0,2.0,1.0,2.0,2.0,1.0,2.0 +1206314,1.0,2.0,3.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1211265,3.0,10.0,8.0,7.0,6.0,9.0,9.0,3.0,8.0,4.0 +1213784,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1223003,5.0,3.0,3.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1223306,3.0,1.0,1.0,1.0,2.0,4.0,1.0,1.0,1.0,2.0 +1223543,1.0,2.0,1.0,3.0,2.0,1.0,1.0,2.0,1.0,2.0 +1229929,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1231853,4.0,2.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1234554,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1236837,2.0,3.0,2.0,2.0,2.0,2.0,3.0,1.0,1.0,2.0 +1237674,3.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1238021,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1238464,1.0,1.0,1.0,1.0,1.0,?,2.0,1.0,1.0,2.0 +1238633,10.0,10.0,10.0,6.0,8.0,4.0,8.0,5.0,1.0,4.0 +1238915,5.0,1.0,2.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1238948,8.0,5.0,6.0,2.0,3.0,10.0,6.0,6.0,1.0,4.0 +1239232,3.0,3.0,2.0,6.0,3.0,3.0,3.0,5.0,1.0,2.0 +1239347,8.0,7.0,8.0,5.0,10.0,10.0,7.0,2.0,1.0,4.0 +1239967,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1240337,5.0,2.0,2.0,2.0,2.0,2.0,3.0,2.0,2.0,2.0 +1253505,2.0,3.0,1.0,1.0,5.0,1.0,1.0,1.0,1.0,2.0 +1255384,3.0,2.0,2.0,3.0,2.0,3.0,3.0,1.0,1.0,2.0 +1257200,10.0,10.0,10.0,7.0,10.0,10.0,8.0,2.0,1.0,4.0 +1257648,4.0,3.0,3.0,1.0,2.0,1.0,3.0,3.0,1.0,2.0 +1257815,5.0,1.0,3.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1257938,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1258549,9.0,10.0,10.0,10.0,10.0,10.0,10.0,10.0,1.0,4.0 +1258556,5.0,3.0,6.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1266154,8.0,7.0,8.0,2.0,4.0,2.0,5.0,10.0,1.0,4.0 +1272039,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1276091,2.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1276091,1.0,3.0,1.0,1.0,2.0,1.0,2.0,2.0,1.0,2.0 +1276091,5.0,1.0,1.0,3.0,4.0,1.0,3.0,2.0,1.0,2.0 +1277629,5.0,1.0,1.0,1.0,2.0,1.0,2.0,2.0,1.0,2.0 +1293439,3.0,2.0,2.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1293439,6.0,9.0,7.0,5.0,5.0,8.0,4.0,2.0,1.0,2.0 +1294562,10.0,8.0,10.0,1.0,3.0,10.0,5.0,1.0,1.0,4.0 +1295186,10.0,10.0,10.0,1.0,6.0,1.0,2.0,8.0,1.0,4.0 +527337,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +558538,4.0,1.0,3.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +566509,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +608157,10.0,4.0,3.0,10.0,4.0,10.0,10.0,1.0,1.0,4.0 +677910,5.0,2.0,2.0,4.0,2.0,4.0,1.0,1.0,1.0,2.0 +734111,1.0,1.0,1.0,3.0,2.0,3.0,1.0,1.0,1.0,2.0 +734111,1.0,1.0,1.0,1.0,2.0,2.0,1.0,1.0,1.0,2.0 +780555,5.0,1.0,1.0,6.0,3.0,1.0,2.0,1.0,1.0,2.0 +827627,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1049837,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1058849,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1182404,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1193544,5.0,7.0,9.0,8.0,6.0,10.0,8.0,10.0,1.0,4.0 +1201870,4.0,1.0,1.0,3.0,1.0,1.0,2.0,1.0,1.0,2.0 +1202253,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1227081,3.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1230994,4.0,5.0,5.0,8.0,6.0,10.0,10.0,7.0,1.0,4.0 +1238410,2.0,3.0,1.0,1.0,3.0,1.0,1.0,1.0,1.0,2.0 +1246562,10.0,2.0,2.0,1.0,2.0,6.0,1.0,1.0,2.0,4.0 +1257470,10.0,6.0,5.0,8.0,5.0,10.0,8.0,6.0,1.0,4.0 +1259008,8.0,8.0,9.0,6.0,6.0,3.0,10.0,10.0,1.0,4.0 +1266124,5.0,1.0,2.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1267898,5.0,1.0,3.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1268313,5.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1268804,3.0,1.0,1.0,1.0,2.0,5.0,1.0,1.0,1.0,2.0 +1276091,6.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1280258,4.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0,1.0,2.0 +1293966,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1296572,10.0,9.0,8.0,7.0,6.0,4.0,7.0,10.0,3.0,4.0 +1298416,10.0,6.0,6.0,2.0,4.0,10.0,9.0,7.0,1.0,4.0 +1299596,6.0,6.0,6.0,5.0,4.0,10.0,7.0,6.0,2.0,4.0 +1105524,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1181685,1.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1211594,3.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1238777,6.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1257608,6.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1269574,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1277145,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1287282,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1296025,4.0,1.0,2.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1296263,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1296593,5.0,2.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1299161,4.0,8.0,7.0,10.0,4.0,10.0,7.0,5.0,1.0,4.0 +1301945,5.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1302428,5.0,3.0,2.0,4.0,2.0,1.0,1.0,1.0,1.0,2.0 +1318169,9.0,10.0,10.0,10.0,10.0,5.0,10.0,10.0,10.0,4.0 +474162,8.0,7.0,8.0,5.0,5.0,10.0,9.0,10.0,1.0,4.0 +787451,5.0,1.0,2.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1002025,1.0,1.0,1.0,3.0,1.0,3.0,1.0,1.0,1.0,2.0 +1070522,3.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1073960,10.0,10.0,10.0,10.0,6.0,10.0,8.0,1.0,5.0,4.0 +1076352,3.0,6.0,4.0,10.0,3.0,3.0,3.0,4.0,1.0,4.0 +1084139,6.0,3.0,2.0,1.0,3.0,4.0,4.0,1.0,1.0,4.0 +1115293,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1119189,5.0,8.0,9.0,4.0,3.0,10.0,7.0,1.0,1.0,4.0 +1133991,4.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1142706,5.0,10.0,10.0,10.0,6.0,10.0,6.0,5.0,2.0,4.0 +1155967,5.0,1.0,2.0,10.0,4.0,5.0,2.0,1.0,1.0,2.0 +1170945,3.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1181567,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1182404,4.0,2.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1204558,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1217952,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1224565,6.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1238186,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1253917,4.0,1.0,1.0,2.0,2.0,1.0,2.0,1.0,1.0,2.0 +1265899,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1268766,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1277268,3.0,3.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1286943,8.0,10.0,10.0,10.0,7.0,5.0,4.0,8.0,7.0,4.0 +1295508,1.0,1.0,1.0,1.0,2.0,4.0,1.0,1.0,1.0,2.0 +1297327,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1297522,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1298360,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1299924,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1299994,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1304595,3.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1306282,6.0,6.0,7.0,10.0,3.0,10.0,8.0,10.0,2.0,4.0 +1313325,4.0,10.0,4.0,7.0,3.0,10.0,9.0,10.0,1.0,4.0 +1320077,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1320077,1.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1320304,3.0,1.0,2.0,2.0,2.0,1.0,1.0,1.0,1.0,2.0 +1330439,4.0,7.0,8.0,3.0,4.0,10.0,9.0,1.0,1.0,4.0 +333093,1.0,1.0,1.0,1.0,3.0,1.0,1.0,1.0,1.0,2.0 +369565,4.0,1.0,1.0,1.0,3.0,1.0,1.0,1.0,1.0,2.0 +412300,10.0,4.0,5.0,4.0,3.0,5.0,7.0,3.0,1.0,4.0 +672113,7.0,5.0,6.0,10.0,4.0,10.0,5.0,3.0,1.0,4.0 +749653,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +769612,3.0,1.0,1.0,2.0,2.0,1.0,1.0,1.0,1.0,2.0 +769612,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +798429,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +807657,6.0,1.0,3.0,2.0,2.0,1.0,1.0,1.0,1.0,2.0 +8233704,4.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +837480,7.0,4.0,4.0,3.0,4.0,10.0,6.0,9.0,1.0,4.0 +867392,4.0,2.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +869828,1.0,1.0,1.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0 +1043068,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1056171,2.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1061990,1.0,1.0,3.0,2.0,2.0,1.0,3.0,1.0,1.0,2.0 +1113061,5.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1116192,5.0,1.0,2.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1135090,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1145420,6.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1158157,5.0,1.0,1.0,1.0,2.0,2.0,2.0,1.0,1.0,2.0 +1171578,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1174841,5.0,3.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1184586,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1186936,2.0,1.0,3.0,2.0,2.0,1.0,2.0,1.0,1.0,2.0 +1197527,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1222464,6.0,10.0,10.0,10.0,4.0,10.0,7.0,10.0,1.0,4.0 +1240603,2.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1240603,3.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1241035,7.0,8.0,3.0,7.0,4.0,5.0,7.0,8.0,2.0,4.0 +1287971,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1289391,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1299924,3.0,2.0,2.0,2.0,2.0,1.0,4.0,2.0,1.0,2.0 +1306339,4.0,4.0,2.0,1.0,2.0,5.0,2.0,1.0,2.0,2.0 +1313658,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1313982,4.0,3.0,1.0,1.0,2.0,1.0,4.0,8.0,1.0,2.0 +1321264,5.0,2.0,2.0,2.0,1.0,1.0,2.0,1.0,1.0,2.0 +1321321,5.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1321348,2.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1321931,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1321942,5.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1321942,5.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1328331,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1328755,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1331405,4.0,1.0,1.0,1.0,2.0,1.0,3.0,2.0,1.0,2.0 +1331412,5.0,7.0,10.0,10.0,5.0,10.0,10.0,10.0,1.0,4.0 +1333104,3.0,1.0,2.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1334071,4.0,1.0,1.0,1.0,2.0,3.0,2.0,1.0,1.0,2.0 +1343068,8.0,4.0,4.0,1.0,6.0,10.0,2.0,5.0,2.0,4.0 +1343374,10.0,10.0,8.0,10.0,6.0,5.0,10.0,3.0,1.0,4.0 +1344121,8.0,10.0,4.0,4.0,8.0,10.0,8.0,2.0,1.0,4.0 +142932,7.0,6.0,10.0,5.0,3.0,10.0,9.0,10.0,2.0,4.0 +183936,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +324382,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +378275,10.0,9.0,7.0,3.0,4.0,2.0,7.0,7.0,1.0,4.0 +385103,5.0,1.0,2.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +690557,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +695091,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +695219,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +824249,1.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +871549,5.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +878358,5.0,7.0,10.0,6.0,5.0,10.0,7.0,5.0,1.0,4.0 +1107684,6.0,10.0,5.0,5.0,4.0,10.0,6.0,10.0,1.0,4.0 +1115762,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1217717,5.0,1.0,1.0,6.0,3.0,1.0,1.0,1.0,1.0,2.0 +1239420,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1254538,8.0,10.0,10.0,10.0,6.0,10.0,10.0,10.0,1.0,4.0 +1261751,5.0,1.0,1.0,1.0,2.0,1.0,2.0,2.0,1.0,2.0 +1268275,9.0,8.0,8.0,9.0,6.0,3.0,4.0,1.0,1.0,4.0 +1272166,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1294261,4.0,10.0,8.0,5.0,4.0,1.0,10.0,1.0,1.0,4.0 +1295529,2.0,5.0,7.0,6.0,4.0,10.0,7.0,6.0,1.0,4.0 +1298484,10.0,3.0,4.0,5.0,3.0,10.0,4.0,1.0,1.0,4.0 +1311875,5.0,1.0,2.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1315506,4.0,8.0,6.0,3.0,4.0,10.0,7.0,1.0,1.0,4.0 +1320141,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1325309,4.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1333063,5.0,1.0,3.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1333495,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1334659,5.0,2.0,4.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0 +1336798,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1344449,1.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1350568,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1352663,5.0,4.0,6.0,8.0,4.0,1.0,8.0,10.0,1.0,4.0 +188336,5.0,3.0,2.0,8.0,5.0,10.0,8.0,1.0,2.0,4.0 +352431,10.0,5.0,10.0,3.0,5.0,8.0,7.0,8.0,3.0,4.0 +353098,4.0,1.0,1.0,2.0,2.0,1.0,1.0,1.0,1.0,2.0 +411453,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +557583,5.0,10.0,10.0,10.0,10.0,10.0,10.0,1.0,1.0,4.0 +636375,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +736150,10.0,4.0,3.0,10.0,3.0,10.0,7.0,1.0,2.0,4.0 +803531,5.0,10.0,10.0,10.0,5.0,2.0,8.0,5.0,1.0,4.0 +822829,8.0,10.0,10.0,10.0,6.0,10.0,10.0,10.0,10.0,4.0 +1016634,2.0,3.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1031608,2.0,1.0,1.0,1.0,1.0,1.0,2.0,1.0,1.0,2.0 +1041043,4.0,1.0,3.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1042252,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1057067,1.0,1.0,1.0,1.0,1.0,?,1.0,1.0,1.0,2.0 +1061990,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1073836,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1083817,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1096352,6.0,3.0,3.0,3.0,3.0,2.0,6.0,1.0,1.0,2.0 +1140597,7.0,1.0,2.0,3.0,2.0,1.0,2.0,1.0,1.0,2.0 +1149548,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1174009,5.0,1.0,1.0,2.0,1.0,1.0,2.0,1.0,1.0,2.0 +1183596,3.0,1.0,3.0,1.0,3.0,4.0,1.0,1.0,1.0,2.0 +1190386,4.0,6.0,6.0,5.0,7.0,6.0,7.0,7.0,3.0,4.0 +1190546,2.0,1.0,1.0,1.0,2.0,5.0,1.0,1.0,1.0,2.0 +1213273,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1218982,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1225382,6.0,2.0,3.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1235807,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1238777,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1253955,8.0,7.0,4.0,4.0,5.0,3.0,5.0,10.0,1.0,4.0 +1257366,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1260659,3.0,1.0,4.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1268952,10.0,10.0,7.0,8.0,7.0,1.0,10.0,10.0,3.0,4.0 +1275807,4.0,2.0,4.0,3.0,2.0,2.0,2.0,1.0,1.0,2.0 +1277792,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1277792,5.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1285722,4.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1288608,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1290203,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1294413,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1299596,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1303489,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1311033,1.0,2.0,2.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1311108,1.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +1315807,5.0,10.0,10.0,10.0,10.0,2.0,10.0,10.0,10.0,4.0 +1318671,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1319609,3.0,1.0,1.0,2.0,3.0,4.0,1.0,1.0,1.0,2.0 +1323477,1.0,2.0,1.0,3.0,2.0,1.0,2.0,1.0,1.0,2.0 +1324572,5.0,1.0,1.0,1.0,2.0,1.0,2.0,2.0,1.0,2.0 +1324681,4.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1325159,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1326892,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1330361,5.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1333877,5.0,4.0,5.0,1.0,8.0,1.0,3.0,6.0,1.0,2.0 +1334015,7.0,8.0,8.0,7.0,3.0,10.0,7.0,2.0,3.0,4.0 +1334667,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1339781,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1339781,4.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +13454352,1.0,1.0,3.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1345452,1.0,1.0,3.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1345593,3.0,1.0,1.0,3.0,2.0,1.0,2.0,1.0,1.0,2.0 +1347749,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1347943,5.0,2.0,2.0,2.0,2.0,1.0,1.0,1.0,2.0,2.0 +1348851,3.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1350319,5.0,7.0,4.0,1.0,6.0,1.0,7.0,10.0,3.0,4.0 +1350423,5.0,10.0,10.0,8.0,5.0,5.0,7.0,10.0,1.0,4.0 +1352848,3.0,10.0,7.0,8.0,5.0,8.0,7.0,4.0,1.0,4.0 +1353092,3.0,2.0,1.0,2.0,2.0,1.0,3.0,1.0,1.0,2.0 +1354840,2.0,1.0,1.0,1.0,2.0,1.0,3.0,1.0,1.0,2.0 +1354840,5.0,3.0,2.0,1.0,3.0,1.0,1.0,1.0,1.0,2.0 +1355260,1.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1365075,4.0,1.0,4.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1365328,1.0,1.0,2.0,1.0,2.0,1.0,2.0,1.0,1.0,2.0 +1368267,5.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1368273,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1368882,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +1369821,10.0,10.0,10.0,10.0,5.0,10.0,10.0,10.0,7.0,4.0 +1371026,5.0,10.0,10.0,10.0,4.0,10.0,5.0,6.0,3.0,4.0 +1371920,5.0,1.0,1.0,1.0,2.0,1.0,3.0,2.0,1.0,2.0 +466906,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +466906,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +534555,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +536708,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +566346,3.0,1.0,1.0,1.0,2.0,1.0,2.0,3.0,1.0,2.0 +603148,4.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +654546,1.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,8.0,2.0 +654546,1.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,1.0,2.0 +695091,5.0,10.0,10.0,5.0,4.0,5.0,4.0,4.0,1.0,4.0 +714039,3.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +763235,3.0,1.0,1.0,1.0,2.0,1.0,2.0,1.0,2.0,2.0 +776715,3.0,1.0,1.0,1.0,3.0,2.0,1.0,1.0,1.0,2.0 +841769,2.0,1.0,1.0,1.0,2.0,1.0,1.0,1.0,1.0,2.0 +888820,5.0,10.0,10.0,3.0,7.0,3.0,8.0,10.0,2.0,4.0 +897471,4.0,8.0,6.0,4.0,3.0,4.0,10.0,6.0,1.0,4.0 +897471,4.0,8.0,8.0,5.0,4.0,5.0,10.0,4.0,1.0,4.0 diff --git a/js/tsne_vis (original).js b/js/tsne_vis (original).js deleted file mode 100644 index f9d1f87..0000000 --- a/js/tsne_vis (original).js +++ /dev/null @@ -1,2817 +0,0 @@ -// t-SNE.js object and other global variables - -var toggleValue = false; var k; var points = []; var all_fields; var pointsbeta = []; var KNNEnabled = true; -// These are the dimensions for the square shape of the main panel\ -var dimensions = document.getElementById('modtSNEcanvas').offsetWidth; - -// These are the dimensions for the overview panel -var dim = document.getElementById('tSNEcanvas').offsetWidth; - -var format; var new_file; var opt; var step_counter; var final_dataset; var max_counter; var dists; var dists2d; var all_labels; var runner; var tsne; var count_canvas = 0; var x_position = []; var y_position = []; var x_position2 = []; var y_position2 = []; var cost_each; var beta_all = []; -var points2d = []; var ArrayContainsDataFeatures = []; var ArrayContainsDataFeaturesCleared = []; -var InitialStatePoints = []; - -function getfile(file){ - new_file = file; //uploaded file data -} - -// Parse data -var getData = function() { - // form controls - var value = document.getElementById("param-dataset").value; - - format = document.getElementById("param-dataset").value.split("."); //get the actual format - if (format[value.split(".").length-1] == "csv") { - parseData("./data/"+value); - }else{ - parseData(new_file, init); - } -}; - -function parseData(url) { - Papa.parse(url, { //for csv file! - download: true, - header: true, - dynamicTyping: true, - skipEmptyLines: true, - complete: function(results) { - results.data = results.data.filter(function (el) { - var counter = 0; - for(key in el) { - if(el.hasOwnProperty(key)) { - var value = el[key]; - if (key === 'name'){ - }else{ - if(typeof(value) !== 'number' || value === undefined || key === "Version"){ //add more limitations if needed! - delete el[key]; - }else{ - el[counter] = el[key]; - delete el[key]; - counter = counter + 1; - } - } - } - } - return el; - }); - Papa.parse(url, { //for csv file! - download: true, - header: true, - dynamicTyping: true, - skipEmptyLines: true, - complete: function(data) { - doStuff(data.data); - } - }); - function doStuff(results_all){ - init(results.data, results_all, results.meta.fields); - } - } - }); -} - -function setContinue(){ - d3v3.select("#SvgAnnotator").style("z-index", 2); -} - -var ringNotes = []; -var gAnnotationsAll = []; -var AnnotationsAll = []; -var draggable = []; - -function setReset(){ - d3.selectAll("#SvgAnnotator > *").remove(); - d3.selectAll("#OverviewtSNE > *").remove(); - d3.selectAll("#correlation > *").remove(); - d3.selectAll("#modtSNEcanvas_svg > *").remove(); - d3.selectAll("#kNNBar > *").remove(); - for (var i=0; i < InitialStatePoints.length; i++){ - InitialStatePoints[i].selected = true; - } - redraw(InitialStatePoints); -} - -function setLayerProj(){ - d3.select("#modtSNEcanvas").style("z-index", 2); - d3.select("#modtSNEcanvas_svg").style("z-index", 1); -} - -function setLayerComp(){ - d3.select("#modtSNEcanvas_svg").style("z-index", 3); -} - -function setLayerSche(){ - d3.select("#modtSNEcanvas_svg").style("z-index", 3); - toggleValue = true; -} - - - - -function setAnnotator(){ - - var viewport2 = getViewport(); - var vw2 = viewport2[0]; - var vh2 = viewport2[1]; - var textarea = document.getElementById("comment").value; - - var annotations = [ - { - "cx": 232, - "cy": 123, - "r": 103, - "text": textarea, - "textOffset": [ - 114, - 88 - ] - } - ]; - - var ringNote = d3v3.ringNote() - .draggable(true); - - var svgAnnotator = d3v3.select("#SvgAnnotator") - .attr("width", vw2 * 0.5) - .attr("height", vh2 * 0.888) - .style("z-index", 3); - - - var gAnnotations = svgAnnotator.append("g") - .attr("class", "annotations") - .call(ringNote, annotations); - - // Styling individual annotations based on bound data - gAnnotations.selectAll(".annotation circle") - .classed("shaded", function(d) { return d.shaded; }); - - - ringNotes.push(ringNote); - gAnnotationsAll.push(gAnnotations); - AnnotationsAll.push(annotations); - draggable.push(true); -} - - - // Hide or show the controls - d3.select("#controls") - .on("change", function() { - if(ringNotes[0]){ - for (var i = 0; i < ringNotes.length; i++){ - ringNotes[i].draggable(draggable[i] = !draggable[i]); - gAnnotationsAll[i] - .call(ringNotes[i], AnnotationsAll[i]) - .selectAll(".annotation circle") - .classed("shaded", function(d) { return d.shaded; }); - } - } else{ - alert("Cannot hide the annotators' controls because, currently, there are no annotations into the visual representation.") - } - }); - - // Three.js render loop - function animate() { - requestAnimationFrame(animate); - renderer.render(scene, camera); - } - - var MainCanvas; - var Child; - var renderer; - var fov = 21; - var near = 10; - var far = 7000; - var camera; - var scene; - -// function that executes after data is successfully loaded -function init(data, results_all, fields) { - - MainCanvas = document.getElementById('modtSNEcanvas'); - Child = document.getElementById('modtSNEDiv'); - - // Add canvas - renderer = new THREE.WebGLRenderer({ canvas: MainCanvas}); - renderer.setSize(dimensions, dimensions); - Child.append(renderer.domElement); - scene = new THREE.Scene(); - scene.background = new THREE.Color(0xffffff); - - // Set up camera and scene - camera = new THREE.PerspectiveCamera( - fov, - dimensions / dimensions, - near, - far - ); - animate(); - step_counter = 0; - max_counter = document.getElementById("param-maxiter-value").value; - opt = {}; - var fields; - fields.push("beta"); - fields.push("cost"); - all_fields = fields; - opt.epsilon = document.getElementById("param-learningrate-value").value; // epsilon is learning rate (10 = default) - opt.perplexity = document.getElementById("param-perplexity-value").value; // roughly how many neighbors each point influences (30 = default) - tsne = new tsnejs.tSNE(opt); - final_dataset = data; - dataFeatures = results_all; - var object; - for (let k = 0; k < dataFeatures.length; k++){ - ArrayContainsDataFeatures.push(Object.values(dataFeatures[k]).concat(k)); - object = []; - Object.values(dataFeatures[k]).forEach(function(dataFeature){ - if(typeof(dataFeature) == "number"){ - object.push(dataFeature); - } - }); - ArrayContainsDataFeaturesCleared.push(object); - } - - $("#datasetDetails").html("Number of Dimensions: " + (ArrayContainsDataFeatures[0].length - 1) + ", Number of Samples: " + final_dataset.length); - dists = computeDistances(data, document.getElementById("param-distance").value, document.getElementById("param-transform").value); - tsne.initDataDist(dists); - all_labels = []; - for(var i = 0; i < data.length; i++) { - if (final_dataset[i]["name"] != "" || final_dataset[i]["name"] != "undefined"){ - all_labels[i] = final_dataset[i]["name"]; - } - else{ - all_labels[i]; - } - } - for(var i = 0; i < final_dataset.length; i++) {final_dataset[i].beta = tsne.beta[i]; beta_all[i] = tsne.beta[i];} - runner = setInterval(step, 0); -} - -// initialize distance matrix -function initDist(data) { - var dist = new Array(data.length); - for(var i = 0; i < data.length; i++) { - dist[i] = new Array(data.length); - } - for(var i = 0; i < data.length; i++) { - for(var j = 0; j < data.length; j++) { - dist[i][j] = 0; - } - } - return dist; -} - -// calculate euclidean distance -function euclideanDist(data) { - dist = initDist(data); - for(var i = 0; i < data.length; i++) { - for(var j = i + 1; j < data.length; j++) { - for(var d in data[0]) { - if(d != "name") { - dist[i][j] += Math.pow(data[i][d] - data[j][d], 2); - } - } - dist[i][j] = Math.sqrt(dist[i][j]); - dist[j][i] = dist[i][j]; - } - } - return dist; -} - -// calculate jaccard dist -function jaccardDist(data) { - dist = initDist(data); - for(var i = 0; i < data.length; i++) { - for(var j = i + 1; j < data.length; j++) { - for(var d in data[0]) { - if(d != "name") { - x = data[i][d]; - y = data[j][d]; - if(x == y) { - dist[i][j] += 1; - } - } - } - dist[j][i] = dist[i][j]; - } - } - return dist; -} - -// normalize distances to prevent numerical issues -function normDist(data, dist) { - var max_dist = 0; - for(var i = 0; i < data.length; i++) { - for(var j = i + 1; j < data.length; j++) { - if(dist[i][j] > max_dist) max_dist = dist[i][j]; - } - } - for(var i = 0; i < data.length; i++) { - for(var j = 0; j < data.length; j++) { - dist[i][j] /= max_dist; - } - } - return dist; -} - -function noTrans(data) { - return data; -} - -// Log transform -function logTrans(data) { - for(var i = 0; i < data.length; i++) { - for(var d in data[0]) { - if(d != "name") { - X = data[i][d]; - data[i][d] = Math.log10(X + 1); - } - } - } - return data; -} - -// asinh transform -function asinhTrans(data) { - for(var i = 0; i < data.length; i++) { - for(var d in data[0]) { - if(d != "name") { - X = data[i][d]; - data[i][d] = Math.log(X + Math.sqrt(X * X + 1)); - } - } - } - return data; -} -// binarize -function binTrans(data) { - for(var i = 0; i < data.length; i++) { - for(var d in data[0]) { - if(d != "name") { - X = data[i][d]; - if(X > 0) data[i][d] = 1; - if(X < 0) data[i][d] = 0; - } - } - } - return data; -} - -function computeDistances(data, distFunc, transFunc) { - dist = eval(distFunc)(eval(transFunc)(data)); - dist = normDist(data, dist); - return dist; -} - -// function that updates embedding -function updateEmbedding() { - var Y = tsne.getSolution(); // here we get the solution from the actual t-sne - var xExt = d3.extent(Y, d => d[0]); - var yExt = d3.extent(Y, d => d[1]); - var maxExt = [Math.min(xExt[0], yExt[0]), Math.max(xExt[1], yExt[1])]; - - var x = d3.scaleLinear() - .domain(maxExt) - .range([10, +dimensions-10]); - - var y = d3.scaleLinear() - .domain(maxExt) - .range([10, +dimensions-10]); - - for(var i = 0; i < final_dataset.length; i++) { - x_position[i] = x(Y[i][0]); - y_position[i] = y(Y[i][1]); - points[i] = {id: i, x: x_position[i], y: y_position[i], beta: final_dataset[i].beta, cost: final_dataset[i].cost, selected: true, DimON: null, starplot: false}; - points2d[i] = {id: i, x: x_position[i], y: y_position[i], selected: true}; - points[i] = extend(points[i], ArrayContainsDataFeaturesCleared[i]); - points[i] = extend(points[i], dataFeatures[i]); - } - InitialStatePoints = points; - function extend(obj, src) { - for (var key in src) { - if (src.hasOwnProperty(key)) obj[key] = src[key]; - } - return obj; - } - if (step_counter == max_counter){ - ShepardHeatMap(); - OverviewtSNE(points); - BetatSNE(points); - } -} - -function ShepardHeatMap () { - var margin = { top: 35, right: 15, bottom: 15, left: 35 }, - dim2 = Math.min(parseInt(d3.select("#sheparheat").style("width")), parseInt(d3.select("#sheparheat").style("height"))) - width = dim2- margin.left - margin.right, - height = dim2 - margin.top - margin.bottom, - buckets = 10, - gridSize = width / buckets, - dim_1 = ["0.0", "0.2", "0.4", "0.6", "0.8", "1.0"], - dim_2 = ["0.0", "0.4", "0.6", "1.0"] - - // Create the svg canvas - var svg = d3.select("#sheparheat") - .attr("width", width + margin.left + margin.right) - .attr("height", height + margin.top + margin.bottom) - .append("g") - .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); -dists2d = computeDistances(points2d, document.getElementById("param-distance").value, document.getElementById("param-transform").value); - -var dist_list2d = []; -var dist_list = []; - for (var j=0; j data[l-1].dim2/10){ - counnum[l] = counnum[l] + 1; - } - }else if (l % 10 == 1){ - temp_loop = data[l].dim1-1; - if (dist_list_all[0][k] < data[l].dim1/10 && dist_list_all[1][k] < data[l].dim2/10 && dist_list_all[0][k] > temp_loop/10){ - counnum[l] = counnum[l] + 1; - } - }else{ - if (dist_list_all[0][k] <= data[l].dim1/10 && dist_list_all[1][k] <= data[l].dim2/10 && dist_list_all[1][k] >= data[l-1].dim2/10 && dist_list_all[0][k] > temp_loop/10){ - counnum[l] = counnum[l] + 1; - } - } - } - counter = counter + counnum[l]; - } - for (var m=0; m" + Math.round(d.value); - }); - - tip(svg.append("g")); - - var dim1Labels = svg.selectAll(".dim1Label") - .data(dim_1) - .enter().append("text") - .text(function (d) { return d; }) - .attr("x", 0) - .attr("y", function (d, i) { return i * gridSize * 2; }) - .style("text-anchor", "end") - .style("font-size", "10px") - .attr("transform", "translate(-6," + gridSize / 4 + ")") - .attr("class","mono"); - - var title = svg.append("text") - .attr("class", "mono") - .attr("x", -(gridSize * 7)) - .attr("y", -26) - .style("font-size", "12px") - .attr("transform", "rotate(-90)") - .attr("class","mono") - .text("Input Distance"); - - - var title = svg.append("text") - .attr("class", "mono") - .attr("x", gridSize * 3 ) - .attr("y", -26) - .style("font-size", "12px") - .text("Output Distance"); - - var dim2Labels = svg.selectAll(".dim2Label") - .data(dim_2) - .enter().append("text") - .text(function(d) { return d; }) - .attr("x", function(d, i) { return i * gridSize * 3.2; }) - .attr("y", 0) - .style("text-anchor", "middle") - .style("font-size", "10px") - .attr("transform", "translate(" + gridSize / 4 + ", -6)") - .attr("class","mono"); - - var heatMap = svg.selectAll(".dim2") - .data(data) - .enter().append("rect") - .attr("x", function(d) { return (d.dim2 - 1) * gridSize; }) - .attr("y", function(d) { return (d.dim1 - 1) * gridSize; }) - .attr("rx", 0.4) - .attr("ry", 0.4) - .attr("class", "dim2 bordered") - .attr("width", gridSize-2) - .attr("height", gridSize-2) - .style("fill", colors[0]) - .attr("class", "square") - .on('mouseover', tip.show) - .on('mouseout', tip.hide); - - - - heatMap.transition() - .style("fill", function(d) { return colorScale(d.value); }); - - heatMap.append("title").text(function(d) { return d.value; }); - - var heatleg = d3.select("#legend4"); - - heatleg.append("g") - .attr("class", "legendLinear") - .attr("transform", "translate(0,10)"); - - var legend = d3.legendColor() - .labelFormat(d3.format(",.0f")) - .cells(9) - .title("Number of Points") - .scale(colorScale); - - heatleg.select(".legendLinear") - .call(legend); - }); -} - -// perform single t-SNE iteration -function step() { - step_counter++; - if(step_counter <= max_counter) { - var cost = tsne.step(); - cost_each = cost[1]; - for(var i = 0; i < final_dataset.length; i++) final_dataset[i].cost = cost_each[i]; - $("#cost").html("Number of Iteration: " + tsne.iter + ", Overall Cost: " + cost[0].toFixed(3)); - } - else { - clearInterval(runner); - } - updateEmbedding(); -} - -function resize(canvas) { - // Lookup the size the browser is displaying the canvas. - var displayWidth = canvas.clientWidth; - var displayHeight = canvas.clientHeight; - - // Check if the canvas is not the same size. - if (canvas.width != displayWidth || - canvas.height != displayHeight) { - - // Make the canvas the same size - canvas.width = displayWidth; - canvas.height = displayHeight; - } -} - -var Arrayx = []; -var Arrayy = []; -var XYDistId = []; -var Arrayxy = []; -var DistanceDrawing1D = []; -var allTransformPoints = []; -var p; -var pFinal = []; -var paths; -var path; -var ArrayLimit = []; -var minimum; -var correlationResults = []; -var ArrayContainsDataFeaturesLimit = []; - -function OverviewtSNE(points){ - if (step_counter == 1){ - d3.select("#OverviewtSNE").select("g").remove(); - d3.select("#correlation").select("g").remove(); - d3.selectAll("#modtSNEcanvas_svg > *").remove(); - Arrayx = []; - Arrayy = []; - XYDistId = []; - Arrayxy = []; - DistanceDrawing1D = []; - allTransformPoints = []; - p; - pFinal = []; - paths; - path; - ArrayLimit = []; - minimum; - correlationResults = []; - ArrayContainsDataFeaturesLimit = []; - } - var canvas = document.getElementById('tSNEcanvas'); - gl = canvas.getContext('experimental-webgl'); - - // If we don't have a GL context, give up now - if (!gl) { - alert('Unable to initialize WebGL. Your browser or machine may not support it.'); - return; - } - if (all_labels[0] == undefined){ - var colorScale = d3.scaleOrdinal(d3.schemeCategory10).domain(["No Category"]).range(["#0000ff"]); - } - else{ - var colorScale = d3.scaleOrdinal(d3.schemeCategory10).domain(all_labels); - } - d3.select("#legend3").select("svg").remove(); - var svg = d3.select("#legend3").append("svg"); - - svg.append("g") - .attr("class", "legendOrdinal") - .attr("transform", "translate(8,5)"); - - var legendOrdinal = d3.legendColor() - .shape("path", d3.legendSize(100)) - .shapePadding(15) - .scale(colorScale); - - svg.select(".legendOrdinal") - .call(legendOrdinal); - - let vertices = []; - let colors = []; - - for (var i=0; i1 to 0->2 - let zeroToTwo = zeroToOne * 2.0; - let zeroToTwo2 = zeroToOne2 * 2.0; - - // convert from 0->2 to -1->+1 (clipspace) - let clipSpace = zeroToTwo - 1.0; - let clipSpace2 = zeroToTwo2 - 1.0; - singleObj = clipSpace; - vertices.push(singleObj); - singleObj = clipSpace2 * -1; - vertices.push(singleObj); - singleObj = 0.0; - vertices.push(singleObj); - } - for (var i=0; i XYDistId[(m * allTransformPoints.length) + j].distance) { - minimum = XYDistId[(m * allTransformPoints.length) + j].distance; - } - } - - for (var l = 0; l < paths.nodes().length ; l++) { - if (XYDistId[(l * allTransformPoints.length) + j].distance == minimum){ - allTransformPoints[j].bucketID = l; - } - } - } - - var arrays = [], size = allTransformPoints.length; - while (XYDistId.length > 0) { - arrays.push(XYDistId.splice(0, size)); - } - - var arraysCleared = []; - for (var j = 0; j < allTransformPoints.length; j++){ - for (var m=0; m < arrays.length; m++) { - if (allTransformPoints[j].bucketID == m){ - arraysCleared.push(arrays[m][j].concat(allTransformPoints[j].bucketID, Arrayxy[m], arrays[m][j].distance, arrays[m][j].id)); - } - } - } - - for (var i=0; i dist) return 1; - return 0; - }); - } - - var arraysConnected = []; - if (paths.nodes().length == 1) { - arraysConnected = arraysSplitted[0]; - } else { - for (var m=0; m < paths.nodes().length - 1; m++) { - arraysConnected = arraysSplitted[m].concat(arraysSplitted[m+1]); - } - } - - var Order = []; - for (var temp = 0; temp < arraysConnected.length; temp++) { - Order.push(arraysConnected[temp][6]); - } - - for (var i = 0; i < points.length; i++){ - points[i].selected = false; - for (var j = 0; j < ArrayLimit.length; j++){ - if (ArrayLimit[j][6] == points[i].id){ - points[i].selected = true; - } - } - } - redraw(points); - - ArrayContainsDataFeatures = mapOrder(ArrayContainsDataFeatures, Order, 5); - - for (var i = 0; i < ArrayContainsDataFeatures.length; i++){ - for (var j = 0; j < arraysConnected.length; j++){ - if (ArrayContainsDataFeatures[i][5] == arraysConnected[j][6]){ - ArrayContainsDataFeaturesLimit.push(ArrayContainsDataFeatures[i]); - } - } - } - - for (var loop = 0; loop < ArrayContainsDataFeaturesLimit.length; loop++) { - ArrayContainsDataFeaturesLimit[loop].push(loop); - } - - for (var k = 0; k < Arrayxy.length - 1 ; k++){ - d3.select('#modtSNEcanvas_svg').append('line') - .attr("x1", Arrayxy[k][0]) - .attr("y1", Arrayxy[k][1]) - .attr("x2", Arrayxy[k+1][0]) - .attr("y2", Arrayxy[k+1][1]) - .style("stroke","black") - .style("stroke-width",2); - } - - var SignStore = []; - const arrayColumn = (arr, n) => arr.map(x => x[n]); - for (var temp = 0; temp < ArrayContainsDataFeaturesLimit[0].length - 2; temp++) { - var tempData = new Array( - arrayColumn(ArrayContainsDataFeaturesLimit, temp), - arrayColumn(ArrayContainsDataFeaturesLimit, ArrayContainsDataFeaturesLimit[0].length - 1) - ); - if (isNaN(pearsonCorrelation(tempData, 0, 1))) { - } else{ - SignStore.push([temp, pearsonCorrelation(tempData, 0, 1)]); - correlationResults.push(["Dimension "+temp, Math.abs(pearsonCorrelation(tempData, 0, 1))]); - } - } - correlationResults = correlationResults.sort( - function(a,b) { - if (a[1] == b[1]) - return a[0] < b[0] ? -1 : 1; - return a[1] < b[1] ? 1 : -1; - } - ); - - for (var j = 0; j < correlationResults.length; j++) { - for (var i = 0; i < SignStore.length; i++) { - if (SignStore[i][1]*(-1) == correlationResults[j][1]) { - correlationResults[j][1] = parseInt(correlationResults[j][1] * 100) * (-1); - correlationResults[j].push(j); - //correlationResults[j][1] = correlationResults[j][1].toFixed(2)*(-1); - } - if (SignStore[i][1] == correlationResults[j][1]) { - correlationResults[j][1] = parseInt(correlationResults[j][1] * 100); - correlationResults[j].push(j); - } - } - } - ///////////////////////////////////////////////////////////// - ///////////////// Set-up SVG and wrappers /////////////////// - ///////////////////////////////////////////////////////////// - - - var mainGroup = svg.append("g") - .attr("class","mainGroupWrapper") - .attr("transform","translate(" + main_margin.left + "," + main_margin.top + ")") - .append("g") //another one for the clip path - due to not wanting to clip the labels - .attr("clip-path", "url(#clip)") - .style("clip-path", "url(#clip)") - .attr("class","mainGroup") - - var miniGroup = svg.append("g") - .attr("class","miniGroup") - .attr("transform","translate(" + (main_margin.left + main_width + main_margin.right + mini_margin.left) + "," + mini_margin.top + ")"); - - var brushGroup = svg.append("g") - .attr("class","brushGroup") - .attr("transform","translate(" + (main_margin.left + main_width + main_margin.right + mini_margin.left) + "," + mini_margin.top + ")"); - - ///////////////////////////////////////////////////////////// - ////////////////////// Initiate scales ////////////////////// - ///////////////////////////////////////////////////////////// - - main_xScale = d3v3.scale.linear().range([0, main_width]); - mini_xScale = d3v3.scale.linear().range([0, mini_width]); - - main_yScale = d3v3.scale.ordinal().rangeBands([0, main_height], 0.4, 0); - mini_yScale = d3v3.scale.ordinal().rangeBands([0, mini_height], 0.4, 0); - //Based on the idea from: http://stackoverflow.com/questions/21485339/d3-brushing-on-grouped-bar-chart - main_yZoom = d3v3.scale.linear() - .range([0, main_height]) - .domain([0, main_height]); - - //Create x axis object - main_xAxis = d3v3.svg.axis() - .scale(main_xScale) - .orient("bottom") - .ticks(8) - .outerTickSize(0); - - //Add group for the x axis - d3v3.select(".mainGroupWrapper").append("g") - .attr("class", "x axis") - .attr("transform", "translate(" + 0 + "," + (main_height + 5) + ")"); - - //Create y axis object - main_yAxis = d3v3.svg.axis() - .scale(main_yScale) - .orient("left") - .tickSize(0) - .outerTickSize(0); - - //Add group for the y axis - mainGroup.append("g") - .attr("class", "y axis") - .attr("transform", "translate(-5,0)"); - - ///////////////////////////////////////////////////////////// - /////////////////////// Update scales /////////////////////// - ///////////////////////////////////////////////////////////// - //Update the scales - main_xScale.domain([-100, 100]); - mini_xScale.domain([-100, 100]); - main_yScale.domain(correlationResults.map(function(d) { return d[0]; })); - mini_yScale.domain(correlationResults.map(function(d) { return d[0]; })); - - //Create the visual part of the y axis - d3v3.select(".mainGroup").select(".y.axis").call(main_yAxis); - d3v3.select(".mainGroupWrapper").select(".x.axis").call(main_xAxis); - - ///////////////////////////////////////////////////////////// - ///////////////////// Label axis scales ///////////////////// - ///////////////////////////////////////////////////////////// - - textScale = d3v3.scale.linear() - .domain([15,50]) - .range([12,6]) - .clamp(true); - - ///////////////////////////////////////////////////////////// - ///////////////////////// Create brush ////////////////////// - ///////////////////////////////////////////////////////////// - - //What should the first extent of the brush become - a bit arbitrary this - var brushExtent = parseInt(Math.max( 1, Math.min( 20, Math.round(correlationResults.length * 0.75) ) )); - - brush = d3v3.svg.brush() - .y(mini_yScale) - .extent([mini_yScale(correlationResults[0][0]), mini_yScale(correlationResults[brushExtent][0])]) - .on("brush", brushmove) - - //Set up the visual part of the brush - gBrush = d3v3.select(".brushGroup").append("g") - .attr("class", "brush") - .call(brush); - - gBrush.selectAll(".resize") - .append("line") - .attr("x2", mini_width); - - gBrush.selectAll(".resize") - .append("path") - .attr("d", d3v3.svg.symbol().type("triangle-up").size(20)) - .attr("transform", function(d,i) { - return i ? "translate(" + (mini_width/2) + "," + 4 + ") rotate(180)" : "translate(" + (mini_width/2) + "," + -4 + ") rotate(0)"; - }); - - gBrush.selectAll("rect") - .attr("width", mini_width); - - //On a click recenter the brush window - gBrush.select(".background") - .on("mousedown.brush", brushcenter) - .on("touchstart.brush", brushcenter); - /////////////////////////////////////////////////////////////////////////// - /////////////////// Create a rainbow gradient - for fun /////////////////// - /////////////////////////////////////////////////////////////////////////// - - defs = svg.append("defs") - - //Create two separate gradients for the main and mini bar - just because it looks fun - createGradient("gradient-main", "60%"); - createGradient("gradient-mini", "13%"); - - //Add the clip path for the main bar chart - defs.append("clipPath") - .attr("id", "clip") - .append("rect") - .attr("x", -main_margin.left) - .attr("width", main_width + main_margin.left) - .attr("height", main_height); - - ///////////////////////////////////////////////////////////// - /////////////// Set-up the mini bar chart /////////////////// - ///////////////////////////////////////////////////////////// - - //The mini brushable bar - //DATA JOIN - var mini_bar = d3v3.select(".miniGroup").selectAll(".bar") - .data(correlationResults, function(d) { return +d[2]; }); - - //UDPATE - mini_bar - .attr("width", function(d) { return Math.abs(mini_xScale(d[1]) - mini_xScale(0)); }) - .attr("y", function(d,i) { return mini_yScale(d[0]); }) - .attr("height", mini_yScale.rangeBand()) - - //ENTER - mini_bar.enter().append("rect") - .attr("class", "bar") - .attr("x", function (d) { return mini_xScale(Math.min(0, d[1])); }) - .attr("width", function(d) { return Math.abs(mini_xScale(d[1]) - mini_xScale(0)); }) - .attr("y", function(d,i) { return mini_yScale(d[0]); }) - .attr("height", mini_yScale.rangeBand()) - .style("fill", "url(#gradient-mini)"); - - //EXIT - mini_bar.exit() - .remove(); - - //Start the brush - //gBrush.call(brush.event); - gBrush.call(brush.event); - } - }); - -} - -//Function runs on a brush move - to update the big bar chart -function updateBarChart() { - - ///////////////////////////////////////////////////////////// - ////////// Update the bars of the main bar chart //////////// - ///////////////////////////////////////////////////////////// - - var bar = d3v3.select(".mainGroup").selectAll(".bar") - .data(correlationResults, function(d) { return +d[2]; }) - //, function(d) { return d.key; }); - - bar - .attr("x", function (d) { return main_xScale(Math.min(0, d[1])); }) - .attr("width", function(d) { return Math.abs(main_xScale(d[1]) - main_xScale(0)); }) - .attr("y", function(d,i) { return main_yScale(d[0]); }) - .attr("height", main_yScale.rangeBand()); - - //ENTER - bar.enter().append("rect") - .attr("class", "bar") - .style("fill", "url(#gradient-main)") - .attr("x", function (d) { return main_xScale(Math.min(0, d[1])); }) - .attr("width", function(d) { return Math.abs(main_xScale(d[1]) - main_xScale(0)); }) - .attr("y", function(d,i) { return main_yScale(d[0]); }) - .attr("height", main_yScale.rangeBand()) - .on("mouseover", () => { - svg.select('.tooltip').style('display', 'none'); - }) - .on("mouseout", function(d){ - points.forEach(function (p) { - p.DimON = null - }) - BetatSNE(points); - svg.select('.tooltip').style('display', 'none'); - }) - .on("mousemove", function(d) { - points.forEach(function (p) { - if (p.selected == true) { - p.DimON = d[0]; - } - }) - BetatSNE(points); - }); - - //EXIT - bar.exit() - .remove(); -}//update - -///////////////////////////////////////////////////////////// -////////////////////// Brush functions ////////////////////// -///////////////////////////////////////////////////////////// - -//First function that runs on a brush move -function brushmove() { - - var extent = brush.extent(); - - //Reset the part that is visible on the big chart - var originalRange = main_yZoom.range(); - main_yZoom.domain( extent ); - - //Update the domain of the x & y scale of the big bar chart - main_yScale.domain(correlationResults.map(function(d) { return d[0]; })); - main_yScale.rangeBands( [ main_yZoom(originalRange[0]), main_yZoom(originalRange[1]) ], 0.4, 0); - - //Update the y axis of the big chart - d3v3.select(".mainGroup") - .select(".y.axis") - .call(main_yAxis); - - //Which bars are still "selected" - var selected = mini_yScale.domain() - .filter(function(d) { return (extent[0] - mini_yScale.rangeBand () + 1e-2 <= mini_yScale(d)) && (mini_yScale(d) <= extent[1] - 1e-2); }); - - //Update the colors of the mini chart - Make everything outside the brush grey - d3.select(".miniGroup").selectAll(".bar") - .style("fill", function(d, i) { return selected.indexOf(d[0]) > -1 ? "url(#gradient-mini)" : "#e0e0e0"; }); - - //Update the label size - d3v3.selectAll(".y.axis text") - .style("font-size", textScale(selected.length)); - - //Update the big bar chart - updateBarChart(); - -}//brushmove - -///////////////////////////////////////////////////////////// -////////////////////// Click functions ////////////////////// -///////////////////////////////////////////////////////////// - - //Based on http://bl.ocks.org/mbostock/6498000 - //What to do when the user clicks on another location along the brushable bar chart - function brushcenter() { - var target = d3v3.event.target, - extent = brush.extent(), - size = extent[1] - extent[0], - range = mini_yScale.range(), - y0 = d3v3.min(range) + size / 2, - y1 = d3.max(range) + mini_yScale.rangeBand() - size / 2, - center = Math.max( y0, Math.min( y1, d3.mouse(target)[1] ) ); - - d3v3.event.stopPropagation(); - - gBrush - .call(brush.extent([center - size / 2, center + size / 2])) - .call(brush.event); - - }//brushcenter - - function scroll() { - - //Mouse scroll on the mini chart - var extent = brush.extent(), - size = extent[1] - extent[0], - range = mini_yScale.range(), - y0 = d3v3.min(range), - y1 = d3v3.max(range) + mini_yScale.rangeBand(), - dy = d3v3.event.deltaY, - topSection; - - if ( extent[0] - dy < y0 ) { topSection = y0; } - else if ( extent[1] - dy > y1 ) { topSection = y1 - size; } - else { topSection = extent[0] - dy; } - - //Make sure the page doesn't scroll as well - d3v3.event.stopPropagation(); - d3v3.event.preventDefault(); - - gBrush - .call(brush.extent([ topSection, topSection + size ])) - .call(brush.event); - - }//scroll - -///////////////////////////////////////////////////////////// -///////////////////// Helper functions ////////////////////// -///////////////////////////////////////////////////////////// - -//Create a gradient -function createGradient(idName, endPerc) { - - var colorsBarChart = ['#7f3b08','#b35806','#e08214','#fdb863','#fee0b6','#d8daeb','#b2abd2','#8073ac','#542788','#2d004b'] - - colorsBarChart.reverse(); - - defs.append("linearGradient") - .attr("id", idName) - .attr("gradientUnits", "userSpaceOnUse") - .attr("x1", "0%").attr("y1", "0%") - .attr("x2", endPerc).attr("y2", "0%") - .selectAll("stop") - .data(colorsBarChart) - .enter().append("stop") - .attr("offset", function(d,i) { return i/(colorsBarChart.length-1); }) - .attr("stop-color", function(d) { return d; }); -}//createGradient - -function mapOrder(array, order, key) { - - array.sort( function (a, b) { - var A = a[key], B = b[key]; - if (order.indexOf(A) > order.indexOf(B)) { - return 1; - } else { - return -1; - } - - }); - - return array; -}; - - /** - * Calculate the person correlation score between two items in a dataset. - * - * @param {object} prefs The dataset containing data about both items that - * are being compared. - * @param {string} p1 Item one for comparison. - * @param {string} p2 Item two for comparison. - * @return {float} The pearson correlation score. - */ - function pearsonCorrelation(prefs, p1, p2) { - var si = []; - - for (var key in prefs[p1]) { - if (prefs[p2][key]) si.push(key); - } - - var n = si.length; - - if (n == 0) return 0; - - var sum1 = 0; - for (var i = 0; i < si.length; i++) sum1 += prefs[p1][si[i]]; - - var sum2 = 0; - for (var i = 0; i < si.length; i++) sum2 += prefs[p2][si[i]]; - - var sum1Sq = 0; - for (var i = 0; i < si.length; i++) { - sum1Sq += Math.pow(prefs[p1][si[i]], 2); - } - - var sum2Sq = 0; - for (var i = 0; i < si.length; i++) { - sum2Sq += Math.pow(prefs[p2][si[i]], 2); - } - - var pSum = 0; - for (var i = 0; i < si.length; i++) { - pSum += prefs[p1][si[i]] * prefs[p2][si[i]]; - } - - var num = pSum - (sum1 * sum2 / n); - var den = Math.sqrt((sum1Sq - Math.pow(sum1, 2) / n) * - (sum2Sq - Math.pow(sum2, 2) / n)); - - if (den == 0) return 0; - - return num / den; - } - - function closestPoint(pathNode, point) { - var pathLength = pathNode.getTotalLength(), - precision = 8, - best, - bestLength, - bestDistance = Infinity; - - // linear scan for coarse approximation - for (var scan, scanLength = 0, scanDistance; scanLength <= pathLength; scanLength += precision) { - if ((scanDistance = distance2(scan = pathNode.getPointAtLength(scanLength))) < bestDistance) { - best = scan, bestLength = scanLength, bestDistance = scanDistance; - } - } - - // binary search for precise estimate - precision /= 2; - while (precision > 0.5) { - var before, - after, - beforeLength, - afterLength, - beforeDistance, - afterDistance; - if ((beforeLength = bestLength - precision) >= 0 && (beforeDistance = distance2(before = pathNode.getPointAtLength(beforeLength))) < bestDistance) { - best = before, bestLength = beforeLength, bestDistance = beforeDistance; - } else if ((afterLength = bestLength + precision) <= pathLength && (afterDistance = distance2(after = pathNode.getPointAtLength(afterLength))) < bestDistance) { - best = after, bestLength = afterLength, bestDistance = afterDistance; - } else { - precision /= 2; - } - } - - best = [best.x, best.y]; - best.distance = Math.sqrt(bestDistance); - best.id = point[2]; - return best; - - function distance2(p) { - var dx = p.x - point[0], - dy = p.y - point[1]; - return dx * dx + dy * dy; - } - - - -// Points are represented as objects with x and y attributes. - - - - /* var svg = d3.select('#modtSNEcanvas_svgClick').append('svg') - .attr('width', width) - .attr('height', height) - .on('mousemove', function() { - x = d3.event.pageX; - y = d3.event.pageY; - console.log( d3.event.pageX, d3.event.pageY ) // log the mouse x,y position - }); - - - var interactionSvgClick = d3.select("#modtSNEcanvas_svgClick").append("circle") - .attr("transform", "translate(" + x + "," + y + ")") - .attr("r", "3") - .attr("class", "dot") - .style('position', 'absolute') - .style("cursor", "pointer");*/ - //.call(drag); -} -/* -// Define drag behavior -var drag = d3.drag() - .on("drag", dragmove); - -function dragmove(d) { - var x = d3.event.x; - var y = d3.event.y; - d3.select(this).attr("transform", "translate(" + x + "," + y + ")"); -} -*/ - -function abbreviateNumber(value) { - var newValue = value; - if (value >= 1000) { - var suffixes = ["", "k", "m", "b","t"]; - var suffixNum = Math.floor( (""+value).length/3 ); - var shortValue = ''; - for (var precision = 2; precision >= 1; precision--) { - shortValue = parseFloat( (suffixNum != 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision)); - var dotLessShortValue = (shortValue + '').replace(/[^a-zA-Z 0-9]+/g,''); - if (dotLessShortValue.length <= 2) { break; } - } - if (shortValue % 1 != 0) shortNum = shortValue.toFixed(1); - newValue = shortValue+suffixes[suffixNum]; - } - return newValue; -} - -function clearThree(obj){ - while(obj.children.length > 0){ - clearThree(obj.children[0]) - obj.remove(obj.children[0]); - } - if(obj.geometry) obj.geometry.dispose() - if(obj.material) obj.material.dispose() - if(obj.texture) obj.texture.dispose() -} - - -var viewport3 = getViewport(); -var vw3 = viewport3[0] * 0.2; -var margin = {top: 50, right: 100, bottom: 80, left: 150}, -width = Math.min(vw3, window.innerWidth - 10) - margin.left - margin.right, -height = Math.min(width, window.innerHeight - margin.top - margin.bottom - 20); - - var wrapData = []; - - ////////////////////////////////////////////////////////////// - //////////////////// Draw the Chart ////////////////////////// - ////////////////////////////////////////////////////////////// - - - var radarChartOptions = { - w: width, - h: height, - margin: margin - }; - var colors; - var IDS = []; - //Call function to draw the Radar chart - RadarChart("#starPlot", wrapData, colors, IDS, radarChartOptions); - -function BetatSNE(points){ - - selectedPoints = []; - var findNearestTable = []; - for (let m=0; m0; k--){ - - findNearest = 0; - var indexOrderSliced = []; - var indexOrderSliced2d = []; - var count1 = new Array(selectedPoints.length).fill(0); - var count2 = new Array(selectedPoints.length).fill(0); - counter1 = 0; - counter2 = 0; - - for (var i=0; i -1) { - indices[i].splice(index, 1); - } - // sorting the mapped array containing the reduced values - indices[i].sort(function(a, b) { - if (a[1] > b[1]) { - return 1; - } - if (a[1] < b[1]) { - return -1; - } - return 0; - }); - - indexOrder[i] = indices[i].map(function(value) { return value[0]; }); - - // temporary array holds objects with position and sort-value - indices2d[i] = dists2d[i].map(function(el, i) { - return [ i, el ]; - }) - var index2d = indices2d[i].indexOf(selectedPoints[i].id); - if (index2d > -1) { - indices2d[i].splice(index2d, 1); - } - - // sorting the mapped array containing the reduced values - indices2d[i].sort(function(a, b) { - if (a[1] > b[1]) { - return 1; - } - if (a[1] < b[1]) { - return -1; - } - return 0; - }); - indexOrder2d[i] = indices2d[i].map(function(value) { return value[0]; }); - } - indexOrderSliced[i] = indexOrder[i].slice(0,k); - indexOrderSliced2d[i] = indexOrder2d[i].slice(0,k); - - for (var m=0; m < indexOrderSliced2d[i].length; m++){ - if (indexOrderSliced[i].includes(indexOrderSliced2d[i][m])){ - count1[i] = count1[i] + 1; - temp[i] = temp[i] + 1; - } - if(indexOrderSliced[i][m] == indexOrderSliced2d[i][m]){ - count2[i] = count2[i] + 1; - temp2[i] = temp2[i] + 1; - - } - } - - if (count1[i] != 0){ - counter1 = (count1[i] / temp[i]) + counter1; - } - if (count2[i] != 0){ - counter2 = (count2[i] / temp2[i]) + counter2; - } - - } - - sumUnion = counter1 / selectedPoints.length; - sumIntersection = counter2 / selectedPoints.length; - if (sumUnion == 0){ - findNearest = 0; - } else{ - findNearest = sumIntersection / sumUnion; - } - - if (isNaN(findNearest)){ - findNearest = 0; - } - findNearestTable.push(findNearest * vh * 2); - } - findNearestTable.reverse(); - - var barPadding = 5; - d3v3.select("#knnBarChart").selectAll("rect").remove(); - - var svg2 = d3v3.select('#knnBarChart') - .attr("class", "bar-chart"); - - - var barWidth = (vw / findNearestTable.length); - - var knnBarChartSVG = svg2.selectAll("rect") - .data(findNearestTable) - .enter() - .append("rect") - .attr("y", function(d) { - return Math.round(vh*2 - d) - }) - .attr("height", function(d) { - return d; - }) - .attr("width", barWidth - barPadding) - .attr("transform", function (d, i) { - var translate = [barWidth * i, 0]; - return "translate("+ translate +")"; - }); - } - - - - - d3.select("#starPlot").selectAll('g').remove(); - - if(selectedPoints.length <= 10){ - - var FeatureWise = []; - - for (var j=0; j { - dimensions = window.innerWidth; - viz_width = dimensions; - dimensions = window.innerHeight; - - renderer.setSize(dimensions, dimensions); - camera.aspect = dimensions / dimensions; - camera.updateProjectionMatrix(); -}) - -let zoom = d3.zoom() - .scaleExtent([getScaleFromZ(far), getScaleFromZ(near)]) - .on('zoom', () => { - let d3_transform = d3.event.transform; - zoomHandler(d3_transform); - }); - -view = d3.select(renderer.domElement); -function setUpZoom() { - view.call(zoom); - let initial_scale = getScaleFromZ(far); - var initial_transform = d3.zoomIdentity.translate(viz_width/2, dimensions/2).scale(initial_scale); - zoom.transform(view, initial_transform); - camera.position.set(0, 0, far); -} -setUpZoom(); - -var circle_sprite= new THREE.TextureLoader().load( - "./textures/circle-sprite.png" -) - -let pointsGeometry = new THREE.Geometry(); - -clearThree(scene); - -// Increase/reduce size factor selected by the user -var limitdist = document.getElementById("param-lim-value").value; -limitdist = parseFloat(limitdist).toFixed(1); - -let pointsMaterial = []; -let factorPlusSize = []; -for (var i=0; i { - let [mouseX, mouseY] = d3.mouse(view.node()); - let mouse_position = [mouseX, mouseY]; -checkIntersects(mouse_position); -}); - -function mouseToThree(mouseX, mouseY) { - return new THREE.Vector3( - mouseX / viz_width * 2 - 1, - -(mouseY / dimensions) * 2 + 1, - 1 - ); -} -function checkIntersects(mouse_position) { - let mouse_vector = mouseToThree(...mouse_position); - raycaster.setFromCamera(mouse_vector, camera); - let intersects = raycaster.intersectObject(particles); - if (intersects[0]) { - let sorted_intersects = sortIntersectsByDistanceToRay(intersects); - let intersect = sorted_intersects[0]; - let index = intersect.index; - let datum = points[index]; - highlightPoint(datum); - showTooltip(mouse_position, datum); - } else { - removeHighlights(); - hideTooltip(); - } -} - -function sortIntersectsByDistanceToRay(intersects) { - return _.sortBy(intersects, "distanceToRay"); -} - -hoverContainer = new THREE.Object3D() -scene.add(hoverContainer); - -function highlightPoint(datum) { - removeHighlights(); - - let geometry = new THREE.Geometry(); - geometry.vertices.push( - new THREE.Vector3( - (((datum.x/dimensions)*2) - 1)*dimensions, - (((datum.y/dimensions)*2) - 1)*dimensions*-1, - 0 - ) - ); - - if (all_labels[0] == undefined){ - var colorScaleCat = d3.scaleOrdinal(d3.schemeCategory10).domain(["No Category"]).range(["#0000ff"]); - } - else{ - var colorScaleCat = d3.scaleOrdinal(d3.schemeCategory10).domain(all_labels); - } - - geometry.colors = [ new THREE.Color(colorScaleCat(datum.name)) ]; - - let material = new THREE.PointsMaterial({ - size: 26, - sizeAttenuation: false, - vertexColors: THREE.VertexColors, - map: circle_sprite, - transparent: true - }); - - let point = new THREE.Points(geometry, material); - hoverContainer.add(point); -} - -function removeHighlights() { - hoverContainer.remove(...hoverContainer.children); -} - -view.on("mouseleave", () => { - removeHighlights() -}); - -// Initial tooltip state -let tooltip_state = { display: "none" } -let tooltip_dimensions; -let tooltip_template = document.createRange().createContextualFragment(``); -document.body.append(tooltip_template); - -let $tooltip = document.querySelector('#tooltip'); -let $point_tip = document.querySelector('#point_tip'); -let $group_tip = document.querySelector('#group_tip'); - -function updateTooltip() { - if (all_labels[0] == undefined){ - var colorScaleCat = d3.scaleOrdinal(d3.schemeCategory10).domain(["No Category"]).range(["#0000ff"]); - } - else{ - var colorScaleCat = d3.scaleOrdinal(d3.schemeCategory10).domain(all_labels); - } - $tooltip.style.display = tooltip_state.display; - $tooltip.style.left = tooltip_state.left + 'px'; - $tooltip.style.top = tooltip_state.top + 'px'; - $point_tip.innerText = tooltip_state.name; - $point_tip.style.background = colorScaleCat(tooltip_state.color); - $group_tip.innerText = `Data set's features: ${tooltip_dimensions}`; -} - -function showTooltip(mouse_position, datum) { - let tooltip_width = 240; - let x_offset = tooltip_width + tooltip_width; - let y_offset = 30; - tooltip_state.display = "block"; - tooltip_state.left = mouse_position[0] + x_offset; - tooltip_state.top = mouse_position[1] + y_offset; - if (all_labels[0] == undefined){ - tooltip_state.name = datum.id; - tooltip_state.color = datum.id; - } else{ - tooltip_state.name = datum.name + " (" + datum.id + ")"; - tooltip_state.color = datum.name; - } - tooltip_dimensions = []; - for (var i=0; i < ArrayContainsDataFeaturesCleared.length; i++){ - if (datum.id == i){ - for (var j=0; j < ArrayContainsDataFeaturesCleared[i].length; j++){ - tooltip_dimensions.push(ArrayContainsDataFeaturesCleared[i][j]); - } - } - } - updateTooltip(); -} - -function hideTooltip() { - tooltip_state.display = "none"; - updateTooltip(); -} - - -} - - function getViewport() { - - var viewPortWidth; - var viewPortHeight; - - // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight - if (typeof window.innerWidth != 'undefined') { - viewPortWidth = window.innerWidth, - viewPortHeight = window.innerHeight - } - - // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document) - else if (typeof document.documentElement != 'undefined' - && typeof document.documentElement.clientWidth != - 'undefined' && document.documentElement.clientWidth != 0) { - viewPortWidth = document.documentElement.clientWidth, - viewPortHeight = document.documentElement.clientHeight - } - - // older versions of IE - else { - viewPortWidth = document.getElementsByTagName('body')[0].clientWidth, - viewPortHeight = document.getElementsByTagName('body')[0].clientHeight - } - return [viewPortWidth, viewPortHeight]; - } - - - - /* - var canvas = document.getElementById('modtSNEcanvas'); - var gl = canvas.getContext('webgl'); - // If we don't have a GL context, give up now - - if (!gl) { - alert('Unable to initialize WebGL. Your browser or machine may not support it.'); - return; - } - - var ColSizeSelector = document.getElementById("param-neighborHood").value; - - if (ColSizeSelector == "color") { - var max = (d3.max(final_dataset,function(d){ return d.beta; })); - var min = (d3.min(final_dataset,function(d){ return d.beta; })); - // colors - var colorbrewer = ["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"]; - var calcStep = (max-min)/7; - var colorScale = d3.scaleLinear() - .domain(d3.range(0, max+calcStep, calcStep)) - .range(colorbrewer); - - var maxSize1 = (d3.max(final_dataset,function(d){ return d.cost; })); - var minSize1 = (d3.min(final_dataset,function(d){ return d.cost; })); - - var rscale1 = d3.scaleLinear() - .domain([minSize1, maxSize1]) - .range([5,10]); - - var colorScale = d3.scaleLinear() - .domain(d3.range(0, max+calcStep, calcStep)) - .range(colorbrewer); - - points = points.sort(function(a, b) { - return a.beta - b.beta; - }) - var labels_beta = []; - var abbr_labels_beta = []; - labels_beta = d3.range(0, max+calcStep, calcStep); - for (var i=0; i<9; i++){ - labels_beta[i] = parseInt(labels_beta[i]); - abbr_labels_beta[i] = abbreviateNumber(labels_beta[i]); - } - var svg = d3.select("#legend1"); - - svg.append("g") - .attr("class", "legendLinear") - .attr("transform", "translate(10,15)"); - - var legend = d3.legendColor() - .labelFormat(d3.format(",.0f")) - .cells(9) - .labels([abbr_labels_beta[0],abbr_labels_beta[1],abbr_labels_beta[2],abbr_labels_beta[3],abbr_labels_beta[4],abbr_labels_beta[5],abbr_labels_beta[6],abbr_labels_beta[7],abbr_labels_beta[8]]) - .title("1 / sigma") - .scale(colorScale); - - svg.select(".legendLinear") - .call(legend); - } else { - var max = (d3.max(final_dataset,function(d){ return d.cost; })); - var min = (d3.min(final_dataset,function(d){ return d.cost; })); - - var maxSize2 = (d3.max(final_dataset,function(d){ return d.beta; })); - var minSize2 = (d3.min(final_dataset,function(d){ return d.beta; })); - - var rscale2 = d3.scaleLinear() - .domain([minSize2, maxSize2]) - .range([5,10]); - - var colorbrewer = ["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"]; - var calcStep = (max-min)/9; - var colorScale = d3.scaleLinear() - .domain(d3.range(min, max, calcStep)) - .range(colorbrewer); - - points = points.sort(function(a, b) { - return a.cost - b.cost; - }) - - var labels_cost = []; - var abbr_labels_cost = []; - labels_cost = d3.range(min, max, calcStep); - for (var i=0; i<9; i++){ - labels_cost[i] = labels_cost[i].toFixed(5); - abbr_labels_cost[i] = abbreviateNumber(labels_cost[i]); - } - - var svg = d3.select("#legend1"); - - svg.append("g") - .attr("class", "legendLinear") - .attr("transform", "translate(10,15)"); - - var legend = d3.legendColor() - .labelFormat(d3.format(",.5f")) - .cells(9) - .labels([abbr_labels_cost[0],abbr_labels_cost[1],abbr_labels_cost[2],abbr_labels_cost[3],abbr_labels_cost[4],abbr_labels_cost[5],abbr_labels_cost[6],abbr_labels_cost[7],abbr_labels_cost[8]]) - .title("KLD(P||Q)") - .scale(colorScale); - - svg.select(".legendLinear") - .call(legend); - } - - let vertices = []; - let colors = []; - let sizes = new Float32Array(points.length); - let tempSort = -1; - - for (var i=0; i1 to 0->2 - let zeroToTwo = zeroToOne * 2.0; - let zeroToTwo2 = zeroToOne2 * 2.0; - - // convert from 0->2 to -1->+1 (clipspace) - let clipSpace = zeroToTwo - 1.0; - let clipSpace2 = zeroToTwo2 - 1.0; - singleObj = clipSpace; - vertices.push(singleObj); - singleObj = clipSpace2 * -1; - vertices.push(singleObj); - singleObj = 0.0; - vertices.push(singleObj); - } - - for (var i=0; i