private static DataFrame CreateDataFrame() { var names = new StringDataFrameColumn("name", 3); names[0] = "apple"; names[1] = "pineapple"; names[2] = "durian"; var prices = new PrimitiveDataFrameColumn <decimal>("price", 3); prices[0] = 12.2m; prices[1] = 22.12m; prices[2] = 3_000_000m; var availabilities = new BooleanDataFrameColumn("is_available", 3); availabilities[0] = false; availabilities[1] = false; availabilities[2] = true; return(new DataFrame( names, prices, availabilities)); }
private DataFrame MakeTestDataFrameWithParityAndTensColumns(int length) { DataFrame df = DataFrameTests.MakeDataFrameWithNumericColumns(length, false); DataFrameColumn parityColumn = new StringDataFrameColumn("Parity", Enumerable.Range(0, length).Select(x => x % 2 == 0 ? "even" : "odd")); DataFrameColumn tensColumn = new Int32DataFrameColumn("Tens", Enumerable.Range(0, length).Select(x => x / 10)); df.Columns.Insert(df.Columns.Count, parityColumn); df.Columns.Insert(df.Columns.Count, tensColumn); return(df); }
public void DataFrame_InputDataFrame_ReturnsHtml() { //Arrange PrimitiveDataFrameColumn <int> ints = new PrimitiveDataFrameColumn <int>("Ints", 3); // Makes a column of length 3. Filled with nulls initially StringDataFrameColumn strings = new StringDataFrameColumn("Strings", 3); // Makes a column of length 3. Filled with nulls initially DataFrame df = new DataFrame(ints, strings); // This will throw if the columns are of different lengths //Act Formatters.Register <DataFrame>(); //Assert df.ToDisplayString("text/html").Should().Contain("table_"); }
public void TestMixedDataTypesInCsv() { string data = @"vendor_id,empty null, 1, true, Null, , CMT,"; Stream GetStream(string streamData) { return(new MemoryStream(Encoding.Default.GetBytes(streamData))); } DataFrame df = DataFrame.LoadCsv(GetStream(data)); Assert.Equal(6, df.Rows.Count); Assert.Equal(2, df.Columns.Count); Assert.True(typeof(string) == df.Columns[0].DataType); Assert.True(typeof(string) == df.Columns[1].DataType); Assert.Equal("vendor_id", df.Columns[0].Name); Assert.Equal("empty", df.Columns[1].Name); VerifyColumnTypes(df); Assert.Equal(2, df.Columns[0].NullCount); Assert.Equal(0, df.Columns[1].NullCount); var nullRow = df.Rows[3]; Assert.Null(nullRow[0]); nullRow = df.Rows[4]; Assert.Equal("", nullRow[0]); Assert.Null(df[0, 0]); Assert.Null(df[3, 0]); StringDataFrameColumn emptyColumn = (StringDataFrameColumn)df.Columns[1]; for (long i = 0; i < emptyColumn.Length; i++) { Assert.Equal("", emptyColumn[i]); } }
public void TestNullCounts() { PrimitiveDataFrameColumn <int> dataFrameColumn1 = new PrimitiveDataFrameColumn <int>("Int1", Enumerable.Range(0, 10).Select(x => x)); dataFrameColumn1.Append(null); Assert.Equal(1, dataFrameColumn1.NullCount); PrimitiveDataFrameColumn <int> column2 = new PrimitiveDataFrameColumn <int>("Int2"); Assert.Equal(0, column2.NullCount); PrimitiveDataFrameColumn <int> column3 = new PrimitiveDataFrameColumn <int>("Int3", 10); Assert.Equal(10, column3.NullCount); // Test null counts with assignments on Primitive Columns column2.Append(null); column2.Append(1); Assert.Equal(1, column2.NullCount); column2[1] = 10; Assert.Equal(1, column2.NullCount); column2[1] = null; Assert.Equal(2, column2.NullCount); column2[1] = 5; Assert.Equal(1, column2.NullCount); column2[0] = null; Assert.Equal(1, column2.NullCount); // Test null counts with assignments on String Columns StringDataFrameColumn strCol = new StringDataFrameColumn("String", 0); Assert.Equal(0, strCol.NullCount); StringDataFrameColumn strCol1 = new StringDataFrameColumn("String1", 5); Assert.Equal(0, strCol1.NullCount); StringDataFrameColumn strCol2 = new StringDataFrameColumn("String", Enumerable.Range(0, 10).Select(x => x.ToString())); Assert.Equal(0, strCol2.NullCount); StringDataFrameColumn strCol3 = new StringDataFrameColumn("String", Enumerable.Range(0, 10).Select(x => (string)null)); Assert.Equal(10, strCol3.NullCount); strCol.Append(null); Assert.Equal(1, strCol.NullCount); strCol.Append("foo"); Assert.Equal(1, strCol.NullCount); strCol[1] = "bar"; Assert.Equal(1, strCol.NullCount); strCol[1] = null; Assert.Equal(2, strCol.NullCount); strCol[1] = "foo"; Assert.Equal(1, strCol.NullCount); strCol[0] = null; Assert.Equal(1, strCol.NullCount); PrimitiveDataFrameColumn <int> intColumn = new PrimitiveDataFrameColumn <int>("Int"); intColumn.Append(0); intColumn.Append(1); intColumn.Append(null); intColumn.Append(2); intColumn.Append(null); intColumn.Append(3); Assert.Equal(0, intColumn[0]); Assert.Equal(1, intColumn[1]); Assert.Null(intColumn[2]); Assert.Equal(2, intColumn[3]); Assert.Null(intColumn[4]); Assert.Equal(3, intColumn[5]); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); PrimitiveDataFrameColumn <DateTime> createdDate = new PrimitiveDataFrameColumn <DateTime>("CreatedDate"); PrimitiveDataFrameColumn <float> temp = new PrimitiveDataFrameColumn <float>("Temp"); PrimitiveDataFrameColumn <bool> status = new PrimitiveDataFrameColumn <bool>("Status", 10); StringDataFrameColumn deviceName = new StringDataFrameColumn("DeviceName", 10); StringDataFrameColumn actions = new StringDataFrameColumn("Actions", 10); StringDataFrameColumn factory = new StringDataFrameColumn("Factory", 10); Random rnd = new Random(Environment.TickCount); Enumerable.Range(1, 10).ToList().ForEach(x => { createdDate.Append(DateTime.Now.AddDays(x)); temp.Append(rnd.Next(25, 50)); deviceName[x - 1] = $"device-{x}"; factory[x - 1] = $"factory-{rnd.Next(1, 3)}"; }); var df = new DataFrame(createdDate, deviceName, factory, temp, status, actions); df.Info(); for (int row = 0; row < temp.Length; row++) { status[row] = temp[row] <= 30; } for (int row = 0; row < status.Length; row++) { if (!status[row].Value) { df[row, 5] = "device perlu di reset"; } } df["Actions"].FillNulls("-", inPlace: true); DataTable dt = new DataTable("data sensor"); foreach (var dc in df.Columns) { dt.Columns.Add(dc.Name.Replace(" ", "").Trim()); } dt.AcceptChanges(); for (long i = 0; i < df.Rows.Count; i++) { DataFrameRow row = df.Rows[i]; var newRow = dt.NewRow(); var cols = 0; foreach (var cell in row) { newRow[cols] = cell.ToString(); cols++; } dt.Rows.Add(newRow); } dt.AcceptChanges(); /* * Formatter<DataTable>.Register((df, writer) => * { * var headers = new List<IHtmlContent>(); * headers.Add(th(i("index"))); * foreach (DataColumn dc in df.Columns) * { * headers.Add((IHtmlContent)th(dc.ColumnName)); * } * * var rows = new List<List<IHtmlContent>>(); * var take = 20; * for (var i = 0; i < Math.Min(take, df.Rows.Count); i++) * { * var cells = new List<IHtmlContent>(); * cells.Add(td(i)); * DataRow obj = df.Rows[i]; * * for (int x = 0; x < df.Columns.Count;x++) * { * cells.Add(td(obj[x].ToString())); * } * * * rows.Add(cells); * } * * var t = table( * thead( * headers), * tbody( * rows.Select( * r => tr(r)))); * * writer.Write(t); * }, "text/html"); */ PrimitiveDataFrameColumn <bool> boolFilter = df["Actions"].ElementwiseNotEquals("-"); DataFrame filtered = df.Filter(boolFilter); GroupBy groupBy = df.GroupBy("Factory"); DataFrame groupCounts = groupBy.Count(); DataFrame tempGroupAvg = groupBy.Mean("Temp"); var lineChart = Chart.Line(df.Rows.Select(g => new Tuple <DateTime, float>(Convert.ToDateTime(g[0]), Convert.ToSingle(g[3])))); lineChart.WithTitle("Temperature per Date"); //display(lineChart); }