Ejemplo n.º 1
0
        public void WriteDataWithAnnotationColumnsTest()
        {
            // main data
            IDataWithAnnotationColumns mdata = PerseusFactory.CreateDataWithAnnotationColumns();

            // annotation columns
            mdata.AddStringColumn("strcol1", "this is stringcol1", new[] { "1", "2" });
            mdata.AddStringColumn("strcol2", "", new[] { "", "hallo" });
            mdata.AddNumericColumn("numcol", "", new[] { 1.0, 2.0 });
            mdata.AddMultiNumericColumn("multnumcol", "this is multnumcol", new[] { new[] { -2.0, 2.0 }, new double[] {} });
            mdata.AddCategoryColumn("catcol", "", new[] { new[] { "cat1", "cat1.1" }, new[] { "cat2", "cat1" } });
            string mdataStr;

            using (MemoryStream memstream = new MemoryStream())
                using (StreamWriter writer = new StreamWriter(memstream)) {
                    PerseusUtils.WriteDataWithAnnotationColumns(mdata, writer);
                    writer.Flush();
                    mdataStr = Encoding.UTF8.GetString(memstream.ToArray());
                }
            IMatrixData mdata3 = PerseusFactory.CreateMatrixData();

            PerseusUtils.ReadMatrix(mdata3, new ProcessInfo(new Settings(), status => { }, progress => { }, 1, i => { }),
                                    () => {
                StreamReader tmpStream = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(mdataStr)));
                return(tmpStream);
            }, "matrix1", '\t');
            IDataWithAnnotationColumns mdata2 = mdata3;

            Assert.AreEqual(2, mdata2.RowCount);
            Assert.AreEqual(2, mdata2.StringColumnCount);
            Assert.AreEqual(1, mdata2.NumericColumnCount);
            Assert.AreEqual(1, mdata2.CategoryColumnCount);
            Assert.AreEqual(1, mdata2.MultiNumericColumnCount);
            Assert.AreEqual("hallo", mdata2.StringColumns[mdata2.StringColumnNames.FindIndex(col => col.Equals("strcol2"))][1]);
        }
Ejemplo n.º 2
0
        public static void ProcessData(IDataWithAnnotationColumns mdata, IAnnotationProvider annotationProvider, Parameters para, ProcessInfo processInfo)
        {
            string[] baseIds = GetBaseIds(mdata, annotationProvider, para);
            bool     success = ProcessDataAddAnnotation(mdata.RowCount, annotationProvider, para, baseIds, processInfo, out string[] name,
                                                        out int[] catColInds,
                                                        out int[] textColInds, out int[] numColInds, out string[][][] catCols, out string[][] textCols,
                                                        out double[][] numCols);

            if (!success)
            {
                return;
            }
            for (int i = 0; i < catCols.Length; i++)
            {
                mdata.AddCategoryColumn(name[catColInds[i]], "", catCols[i]);
            }
            for (int i = 0; i < textCols.Length; i++)
            {
                mdata.AddStringColumn(name[textColInds[i]], "", textCols[i]);
            }
            for (int i = 0; i < numCols.Length; i++)
            {
                mdata.AddNumericColumn(name[numColInds[i]], "", numCols[i]);
            }
        }
Ejemplo n.º 3
0
 private static void AddCategoricalColumns(IDataWithAnnotationColumns mdata1, IDataWithAnnotationColumns mdata2,
                                           Parameters parameters, IList <int[]> indexMap, IDataWithAnnotationColumns result)
 {
     int[]        catCols        = parameters.GetParam <int[]>("Categorical columns").Value;
     string[][][] newCatColumns  = new string[catCols.Length][][];
     string[]     newCatColNames = new string[catCols.Length];
     for (int i = 0; i < catCols.Length; i++)
     {
         string[][] oldCol = mdata2.GetCategoryColumnAt(catCols[i]);
         newCatColNames[i] = mdata2.CategoryColumnNames[catCols[i]];
         newCatColumns[i]  = new string[mdata1.RowCount][];
         for (int j = 0; j < mdata1.RowCount; j++)
         {
             int[]           inds   = indexMap[j];
             List <string[]> values = new List <string[]>();
             foreach (int ind in inds)
             {
                 string[] v = oldCol[ind];
                 if (v.Length > 0)
                 {
                     values.Add(v);
                 }
             }
             newCatColumns[i][j] = values.Count == 0
                                         ? new string[0]
                                         : ArrayUtils.UniqueValues(ArrayUtils.Concat(values.ToArray()));
         }
     }
     for (int i = 0; i < catCols.Length; i++)
     {
         result.AddCategoryColumn(newCatColNames[i], "", newCatColumns[i]);
     }
 }
Ejemplo n.º 4
0
 private static void AddIndicator(IDataWithAnnotationColumns result, IData mdata2, int[][] indexMap)
 {
     string[][] indicatorCol = new string[indexMap.Length][];
     for (int i = 0; i < indexMap.Length; i++)
     {
         indicatorCol[i] = indexMap[i].Length > 0 ? new[] { "+" } : new string[0];
     }
     result.AddCategoryColumn(mdata2.Name, "", indicatorCol);
 }