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);
        }
Example #3
0
        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_");
        }
Example #4
0
        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]);
            }
        }
Example #5
0
        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]);
        }
Example #6
0
        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);
        }