public GroupingClusteringReport Search(string SearchTerm) { GroupingClusteringReport Output = new GroupingClusteringReport(search(SearchTerm).ConvertAll(c => (GroupingClusteringResult)c), flipOrdering(order), lastPropertyQueried); if (Output.QRList.Count > 0) { Output.sortByPropertyValue(lastPropertyQueried); } return(Output); }
private void clusteringFindTextBox_TextChanged(object sender, EventArgs e) { if (clusteringFindTextBox.Text == null || clusteringFindTextBox.Text == "") { //allUsersDisplayed = true; if (thisFormResultType == typeof(UserQueryResult)) { UserClusteringReport ReportReference = (UserClusteringReport)thisQR; thisBindingSource.DataSource = ReportReference.QRList; clustersDataGridView.DataSource = thisBindingSource; } else if (thisFormResultType == typeof(GroupingQueryResult)) { GroupingClusteringReport ReportReference = (GroupingClusteringReport)thisQR; thisBindingSource.DataSource = ReportReference.QRList; clustersDataGridView.DataSource = thisBindingSource; } } else { //allUsersDisplayed = false; if (thisFormResultType == typeof(UserQueryResult)) { UserClusteringReport ReportReference = (UserClusteringReport)thisQR; subsetThisQR = ReportReference.Search(clusteringFindTextBox.Text); ReportReference = (UserClusteringReport)subsetThisQR; thisBindingSource.DataSource = ReportReference.QRList; clustersDataGridView.DataSource = thisBindingSource; } else if (thisFormResultType == typeof(GroupingQueryResult)) { GroupingClusteringReport ReportReference = (GroupingClusteringReport)thisQR; subsetThisQR = ReportReference.Search(clusteringFindTextBox.Text); ReportReference = (GroupingClusteringReport)subsetThisQR; thisBindingSource.DataSource = ReportReference.QRList; clustersDataGridView.DataSource = thisBindingSource; } } }
private void clustersDataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { string Prop = clustersDataGridView.Columns[e.ColumnIndex].HeaderText; if (thisFormResultType == typeof(UserQueryResult)) { UserClusteringReport ReportRef = (UserClusteringReport)thisQR; ReportRef.SortByProperty(Prop); thisBindingSource.DataSource = ReportRef.QRList; clustersDataGridView.DataSource = thisBindingSource; } else if (thisFormResultType == typeof(GroupingQueryResult)) { GroupingClusteringReport ReportRef = (GroupingClusteringReport)thisQR; ReportRef.SortByProperty(Prop); thisBindingSource.DataSource = ReportRef.QRList; clustersDataGridView.DataSource = thisBindingSource; } else { } }
private void mapButton_Click(object sender, EventArgs e) { if (thisFormResultType == typeof(UserQueryResult)) { UserClusteringReport ReportRef = (UserClusteringReport)thisQR; KohonenForm KF = new KohonenForm(parentReference, textBoxValidate(textBox1, 3), ReportRef.QRList.ConvertAll(c => (QueryResult)c), parentReference.MapEpochs, thisAlgo.Clusters); KF.Show(); } else if (thisFormResultType == typeof(GroupingQueryResult)) { GroupingClusteringReport ReportRef = (GroupingClusteringReport)thisQR; KohonenForm KF = new KohonenForm(parentReference, textBoxValidate(textBox1, 3), ReportRef.QRList.ConvertAll(c => (QueryResult)c), parentReference.MapEpochs, thisAlgo.Clusters); KF.Show(); } }
public ClusteringOutput(List <QueryResult> QRList, RBAC RBACRef) { thisFormResultType = QRList[0].GetType(); parentReference = RBACRef; ConcurrentBag <Tuple <string, DenseVector> > InputList = new ConcurrentBag <Tuple <string, DenseVector> >(); if (QRList[0].GetType() == typeof(UserQueryResult)) { Parallel.ForEach <QueryResult>(QRList, QR => { UserQueryResult UQR = (UserQueryResult)QR; Tuple <string, DenseVector> TupleIn = new Tuple <string, DenseVector>(UQR.AccountName, (DenseVector)UQR.ReturnAccessVector()); InputList.Add(TupleIn); }); } else if (QRList[0].GetType() == typeof(GroupingQueryResult)) { Parallel.ForEach <QueryResult>(QRList, QR => { GroupingQueryResult GQR = (GroupingQueryResult)QR; DenseVector VectorA; if (parentReference.ClusterByRelativeCount) { VectorA = (DenseVector)GQR.ReturnAccessVector(); } else { VectorA = (DenseVector)GQR.ReturnTF_IDFVector(); } Tuple <string, DenseVector> TupleIn = new Tuple <string, DenseVector>(GQR.GroupingName, VectorA); InputList.Add(TupleIn); }); } else { } //add options on algo configtab on main form later if (parentReference.ClusteringAlgoType == typeof(HACAlgo)) { thisAlgo = new HACAlgo(InputList.OrderBy(o => o.Item1).ToList(), parentReference.PreferredDistanceStyle, parentReference.HACStoppingMetric, parentReference.PreferredStoppingStyle); } else { thisAlgo = new KMeansPlusPlus(InputList.OrderBy(o => o.Item1).ToList(), parentReference.KMeansValue, parentReference.PreferredKMeansStoppingStyle, parentReference.KMeansMaxIter); } parentReference.statusLabelChanger($"Initialising {thisAlgo.GetType().ToString().Split('.')[1]}, please be patient"); thisAlgo.InitialiseClusters(); while (!thisAlgo.Stopped) { thisAlgo.IterateOnce(); if (!thisAlgo.Stopped) { parentReference.statusLabelChanger($"Running {thisAlgo.GetType().ToString().Split('.')[1]}, iteration {thisAlgo.Iterator}"); } } //set all centroids as means in case mapping of clusters is required further //down the line: if (QRList[0].ReturnAccessVector().Count > 500) { thisAlgo.SetCentroidsAsMeansHighDimensionality(); } else { thisAlgo.SetCentroidsAsMeans(); } parentReference.statusLabelChanger("Creating Data View"); ConcurrentBag <QueryResult> ResultsBag = new ConcurrentBag <QueryResult>(); if (thisFormResultType == typeof(UserQueryResult)) { foreach (Cluster Clust in thisAlgo.Clusters) { Parallel.ForEach <Tuple <string, DenseVector> >(Clust.MemberList, Member => { UserQueryResult Target = (UserQueryResult)(from UQR in QRList.Cast <UserQueryResult>() where UQR.AccountName == Member.Item1 select UQR).ToList()[0]; ResultsBag.Add(new UserClusteringResult(Target, Clust.ClusterID, Clust.ListPosition)); }); } clusteringResultList = ResultsBag.Cast <UserClusteringResult>().OrderBy(o => o.ClusterIndex).ToList <QueryResult>(); } else if (thisFormResultType == typeof(GroupingQueryResult)) { foreach (Cluster Clust in thisAlgo.Clusters) { Parallel.ForEach <Tuple <string, DenseVector> >(Clust.MemberList, Member => { GroupingQueryResult Target = (GroupingQueryResult)(from GQR in QRList.Cast <GroupingQueryResult>().ToList() where GQR.GroupingName == Member.Item1 select GQR).ToList <GroupingQueryResult>()[0]; ResultsBag.Add(new GroupingClusteringResult(Target, Clust.ClusterID, Clust.ListPosition)); }); } clusteringResultList = ResultsBag.Cast <GroupingClusteringResult>().OrderBy(o => o.ClusterIndex).ToList <QueryResult>(); } else { } parentReference.statusLabelChanger("Idle"); InitializeComponent(); this.Text = $"Clustering Results from {thisAlgo.Iterator} Iterations, using {thisAlgo.GetType().ToString().Split('.')[1]}, {thisAlgo.Clusters.Count} Clusters"; thisBindingSource = new BindingSource(); if (thisFormResultType == typeof(UserQueryResult)) { //needs a bit of casting to allow datagridview to access type-specific public properties thisQR = new UserClusteringReport(clusteringResultList.Cast <UserClusteringResult>().ToList(), Ordering.Ascending); UserClusteringReport ReportReference = (UserClusteringReport)thisQR; thisBindingSource.DataSource = ReportReference.QRList; clustersDataGridView.DataSource = thisBindingSource; } else { thisQR = new GroupingClusteringReport(clusteringResultList.Cast <GroupingClusteringResult>().ToList(), Ordering.Ascending); GroupingClusteringReport ReportReference = (GroupingClusteringReport)thisQR; thisBindingSource.DataSource = ReportReference.QRList; clustersDataGridView.DataSource = thisBindingSource; } }