//groups the top limitOfGroups groups, and compares them with the rest of the dataset. public List <List <DataSeries> > ConvertToOneVsAllDataSeries(string groupBy, string dim0, string dim1, int limitOfGroups) { //need to make sure these guys are linked var res = new List <List <DataSeries> >(); var schema = new DataFileSchema(this); schema.ColumnNames.ForEach(col => schema.ColumnNumericMap[col] = false); schema.ColumnNumericMap[dim0] = true; schema.ColumnNumericMap[dim1] = true; schema.GroupBy = groupBy; var groups = ConvertToDataSeries(schema, limitOfGroups); var ordered = groups.OrderByDescending(g => g.Rows.Count).ToList(); for (int i = 0; i < Math.Min(10, groups.Count); i++) { var temp = new List <DataSeries>(); temp.Add(ordered[i]); DataSeries Others = new DataSeries(this, schema, ".Others"); for (int j = 0; j < ordered.Count; j++) { if (i != j) { ordered[j].Rows.ForEach(r => Others.AddRow(r)); } } Others.EndInit(); temp.Add(Others); res.Add(temp); } return(res); }
private void buttonSplatter_Click(object sender, EventArgs e) { var dialog = new AddTo1vsAllDialog(); dialog.Text = "Show single splatterplot"; if (listViewDataFiles.SelectedItems.Count > 0) { var item = listViewDataFiles.SelectedItems[0]; var dataFile = m_Files[item]; dialog.SetDataFile(dataFile, true); var res = dialog.ShowDialog(this); if (res == System.Windows.Forms.DialogResult.OK) { var schema = new DataFileSchema(dataFile); schema.GroupBy = dialog.GroupBy; var list = dataFile.ConvertToDataSeries(schema, -1); SplatterModel model = new SplatterModel(list, dialog.HorizontalDim, dialog.VerticalDim, true); var splatterDialog = new SingleSplatterDialog(); splatterDialog.Text = string.Format("Splatterplot ({0}): {1}", SplatterCount++, dataFile.Name); splatterDialog.SetModel(model); splatterDialog.Show(); splatterDialog.BringToFront(); } } }
public DataSeries(DataFile dataFile, DataFileSchema schema, string name) { m_DataFile = dataFile; m_Schema = schema; ColumnData = new Dictionary <string, ColumnData>(); ColumnNames = new List <string>(); Name = name; }
public DataSeriesRow(DataFileSchema schema, DataRow row) { m_Row = row; foreach (var col in schema.ColumnNames.Where(c => schema.ColumnNumericMap[c])) { //m_Values[col] = (float)Math.Log(Convert.ToSingle(row.Field<string>(col)) + 1, 2); m_Values[col] = Convert.ToSingle(row.Field <string>(col)); } Selected = false; }
public List <DataSeries> ConvertToDataSeries(DataFileSchema schema, int limitOfGroups) { List <DataSeries> res = new List <DataSeries>(); if (schema.GroupBy.Equals("None")) { DataSeries data = new DataSeries(this, schema, Name); foreach (var row in m_table.AsEnumerable()) { data.AddRow(new DataSeriesRow(schema, row)); } data.EndInit(); res.Add(data); } else { var query = from row in m_table.AsEnumerable() group row by row[schema.GroupBy] into set orderby set.Count() descending select set; int max = limitOfGroups > 0 ? limitOfGroups : int.MaxValue; int index = 0; DataSeries rest = new DataSeries(this, schema, ".Rest"); foreach (var group in query) { if (index < max) { DataSeries data = new DataSeries(this, schema, group.Key.ToString()); foreach (var row in group) { data.AddRow(new DataSeriesRow(schema, row)); } data.EndInit(); res.Add(data); } else { foreach (var row in group) { rest.AddRow(new DataSeriesRow(schema, row)); } } index++; } if (rest.Rows.Count > 0) { rest.EndInit(); res.Add(rest); } } return(res); }
public void SetDataFile(DataFile dataFile) { m_Schema = new DataFileSchema(dataFile); comboBox1.SelectedIndex = 0; foreach (var name in m_Schema.ColumnNames) { AddDialogRow row = new AddDialogRow(); m_Rows.Add(row); row.SetColumnData(name, m_Schema.ColumnNumericMap[name]); flowLayoutPanel1.Controls.Add(row); comboBox1.Items.Add(name); } if (m_Rows.Count > 15) { m_Rows.ForEach(r => r.SetToIgnore()); } }
public void AddRowRange(IEnumerable <DataRow> rows, DataFileSchema schema) { var list = rows.Select(r => new DataSeriesRow(schema, r)); m_Rows.AddRange(list); }