Esempio n. 1
0
        public static DataFrame<double> read_csv(this Pandas pd, string filepath_or_buffer)
        {
            using (StreamReader reader = new StreamReader(filepath_or_buffer))
            {
                string line = String.Empty;

                while (!String.IsNullOrEmpty(line = reader.ReadLine()))
                {
                    var tokens = line.Split(',');
                    /*x1.AddRange(tokens.Select(x => double.Parse(x)).Take(tokens.Length - 1));

                    var _y = int.Parse(tokens[tokens.Length - 1]);
                    if (!labels.Contains(_y))
                    {
                        labels.Add(_y);
                    }
                    y1.Add(labels.FindIndex(l => l == _y));

                    length1d++;
                    length2d = tokens.Length - 1;*/
                }
            }

            return null;
        }
Esempio n. 2
0
        public void Slice_Row_Test()
        {
            var dict = new Dictionary <string, NDArray>
            {
                { "one", np.arange(100) },
                { "two", np.arange(101, 201) }
            };
            var        pd    = new Pandas();
            IDataFrame df1   = new DataFrame <string>(dict);
            var        dfSl1 = df1[(Slice)"0:12:5"];
            var        one   = dfSl1["one"];

            Assert.Equal("one", (one as SeriesBase).Name);
            Assert.Equal(10, (one as SeriesBase)[2]);
            var dfSl2 = df1[(Slice)"0:10"];
            var two   = dfSl2["two"];

            Assert.Equal("two", (two as SeriesBase).Name);
            Assert.Equal(110, (two as SeriesBase)[9]);
            var dfSl3 = df1[(Slice)"6:10:3"];
            var two2  = dfSl3["two"];

            Assert.Equal("two", (two2 as SeriesBase).Name);
            Assert.Equal(110, (two2 as SeriesBase)[1]);
            var dfSl4 = df1[(Slice)":"];
            var one2  = dfSl4["one"];

            Assert.Equal("one", (one2 as SeriesBase).Name);
            Assert.Equal(0, (one2 as SeriesBase)[0]);
        }
Esempio n. 3
0
        public static DataFrame <TInd> DataFrame <TInd, TValue>(this Pandas pd, NDArray[] data, IList <TInd> index = null, IList <string> columns = null)
        {
            var df = new DataFrame <TInd>();

            if (columns == null)
            {
                columns = Enumerable.Range(0, (data.Length - 1)).Select(x => x.ToString()).ToArray();
            }

            Type indexType = typeof(TInd);

            if (index == null)
            {
                dynamic indexDyn = index;
                switch (indexType.Name)
                {
                case ("Double"): indexDyn = Enumerable.Range(0, data[0].size).Select(x => (double)x).ToList(); break;

                case ("Int32"): indexDyn = Enumerable.Range(0, data[0].size).ToList(); break;
                }
                index = (List <TInd>)indexDyn;
            }
            else
            {
            }

            /*for(int idx = 0; idx < columns.Count;idx++)
             *  df[columns[idx]] = data[idx];*/

            //df.Index = new Index<TInd>();
            df.Index.values = new NDArray(typeof(int));
            df.Index.values.reshape(new Shape(index.Count));

            return(df);
        }
Esempio n. 4
0
        public void SetColumn_Test()
        {
            var dict = new Dictionary <string, NDArray>
            {
                { "one", np.arange(1000) },
                { "two", np.arange(1001, 2001) }
            };
            var pd  = new Pandas();
            var df1 = pd.DataFrame <string>(dict);

            df1["three"] = new Series(np.arange(2001, 3001));
            Assert.Equal(3000, df1.Size);
            df1.SingleColumn("four", 1);
            Assert.Equal(1, df1["four"][500]);
            Assert.Equal(4000, df1.Size);

            df1.SingleColumn(1, 1);
            Assert.Equal(1, df1["two"][500]);
            df1.Column("five", np.arange(3001, 4001));
            Assert.Equal(3001, df1["five"][0]);

            df1.SingleColumn(4, 1);
            Assert.Equal(1, df1["five"][0]);

            Assert.Equal(3000, df1["three"][999]);
            df1["three"] = new Series(np.arange(1000));
            Assert.Equal(999, df1["three"][999]);
        }
Esempio n. 5
0
 public void DataFrame()
 {
     var np    = new NumPy <int>();
     var pd    = new Pandas();
     var array = np.random.randint(low: 0, high: 10, size: new Shape(5, 5));
     var df    = pd.DataFrame(array, columns: new string[] { "a", "b", "c", "d", "e" });
 }
Esempio n. 6
0
        public static Series Series(this Pandas pd, NDArray nd, Index index = null)
        {
            var res = new Series(nd);

            res.index = index;

            return(res);
        }
Esempio n. 7
0
        public static void ShowPandas()
        {
            var p = new Pandas();

            foreach (var poo in p.PandaZoo)
            {
                Debug.WriteLine($"Name: {poo.Name}, Age: {poo.Age}, Location: {poo.Location}");
            }
        }
Esempio n. 8
0
        public static DataFrame <T> DataFrame <T>(this Pandas pd, NDArray <T> data, IList <int> index = null, IList <string> columns = null)
        {
            var df = new DataFrame <T>();

            df.Columns.Array(columns);
            df.Data  = data.Data;
            df.Shape = data.Shape;

            return(df);
        }
Esempio n. 9
0
        public void Read_iloc_Test()
        {
            var dict = new Dictionary <string, NDArray>
            {
                { "one", np.arange(1000) },
                { "two", np.arange(1001, 2001) }
            };
            var        pd  = new Pandas();
            IDataFrame df1 = new DataFrame <string>(dict);

            Assert.Equal(2, df1.iloc[2].Name);
            Assert.Equal(2, df1.iloc[2]["one"]);
        }
Esempio n. 10
0
        public void read_csv()
        {
            var pd = new Pandas();

            var trainData = System.IO.Path.GetFullPath("../../../../../data/train.csv");

            var a = pd.read_csv(trainData);

            /*var column1 = a["Lag1"];
             * var column2 = a["Lag2"];
             *
             * Assert.IsTrue(column1.Size == 998);
             * Assert.IsTrue(column2.Size == 998);*/
        }
        public void DataFrame()
        {
            var pd = new Pandas();
            // var array = np.random.randint(low: 0, high: 10, shape: new Shape(5, 5));
            // var df = pd.DataFrame<int, >((NDArray<object>)array, columns: new string[] { "a", "b", "c", "d", "e" });

            /*var column1 = df["a"];
             *
             * for (int idx = 0; idx < 5; idx++)
             *  Assert.IsTrue(column1[idx] == array[idx,0]);
             *
             * var column2 = df["b"];
             *
             * for (int idx = 0; idx < 5; idx++)
             *  Assert.IsTrue(column2[idx] == array[idx,1]);*/
        }
Esempio n. 12
0
        private void CreateSliceModel()
        {
            int     row   = 10;
            int     col   = 10;
            var     nd    = np.random.randn(row, col);
            NDArray array = nd;
            //array.reshape(5, 4);
            var           pd      = new Pandas();
            List <string> indexs  = new List <string>();
            List <string> columns = new List <string>();

            CreateRowAndCol(row, col, ref indexs, ref columns);
            IDataFrame df1 = pd.DataFrame(array, indexs, columns, typeof(object));

            _dataFrame = df1;
        }
Esempio n. 13
0
        public static DataFrame <TInd> DataFrame <TInd>(this Pandas pd, NDArray data, IList <TInd> index = null, IList <string> columns = null)
        {
            var vectors = new NDArray[data.shape[1]];

            for (int idx = 0; idx < data.shape[1]; idx++)
            {
                vectors[idx] = new NDArray(typeof(int));
                for (int jdx = 0; jdx < data.shape[0]; jdx++)
                {
                    vectors[idx][jdx] = data[jdx, idx];
                }
            }
            // return pd.DataFrame<TInd>(vectors,index,columns);

            return(null);
        }
Esempio n. 14
0
        public void Create_WithNDArray_Test()
        {
            NDArray array = np.arange(10);

            array.reshape(5, 2);
            var        pd  = new Pandas();
            IDataFrame df1 = new DataFrame <string>(array, null, null, typeof(object));
            var        one = df1[0];

            Assert.Equal(0, (one as SeriesBase).Name);
            Assert.Equal(4, (one as SeriesBase)[2]);
            var oneAndTwo = df1[0, 1];
            var s         = oneAndTwo.iloc[4];

            Assert.Equal(8, s[0]);
            Assert.Equal(9, s[1]);
        }
Esempio n. 15
0
        public static DataFrame <int> read_csv(this Pandas pd, string filepath_or_buffer, string sep = ",", string delimiter = ",", int?header = 0,
                                               List <IColumnType> dtype = null)
        {
            var data = new List <double[]>();

            string[] headers = null;

            using (StreamReader reader = new StreamReader(filepath_or_buffer))
            {
                string line = String.Empty;
                int    row  = 0;

                while (!String.IsNullOrEmpty(line = reader.ReadLine()))
                {
                    var tokens = line.Split(',');
                    // for header
                    if (row == header)
                    {
                        headers = tokens;
                        row++;
                        continue;
                    }

                    row++;
                    data.Add(tokens.Select(x => double.Parse(x)).Take(tokens.Length).ToArray());
                }
            }

            if (dtype == null)
            {
                dtype = new List <IColumnType>();
            }
            for (int i = 0; i < headers.Length; i++)
            {
                dtype.Add(ColumnHelper.Infer(headers[i], data[i]));
            }

            var nd = np.array(data.ToArray());

            //var df = pd.DataFrame<int,double>(nd);

            return(null);
        }
Esempio n. 16
0
        public void WriteCsvQuoted_ToFile_Test()
        {
            var filepath    = "write_quoted_test.csv";
            var array       = np.arange(100).reshape(20, 5);
            var columnNames = new string[] { "first", "second", "third",
                                             "fourth", "fifth" };
            var        pd  = new Pandas();
            IDataFrame df1 = pd.DataFrame(array, null, columnNames, typeof(object));

            df1.to_csv(filepath, quoting: 1);
            using (var fr = File.OpenText(filepath))
            {
                Assert.Equal(string.Join(',', columnNames), fr.ReadLine());
                for (var i = 0; i < array.shape[0]; i++)
                {
                    Assert.Equal('"' + string.Join("\",\"", array[i].Data <int>()) + '"', fr.ReadLine());
                }
            }
        }
Esempio n. 17
0
        public static Series Series(this Pandas pd, object obj)
        {
            Series res  = null;
            Type   type = obj.GetType();

            if (type.Name.Contains("AnonymousType"))
            {
                var properties = type.GetProperties();

                var inferredDtype = properties[0].GetValue(obj).GetType();

                var nd = new NDArray(inferredDtype, properties.Length);

                res = new Series(nd);
                res.values.Storage.SetData(properties.Select(x => x.GetValue(obj)).ToArray());
                res.index = new Index(properties.Select(x => x.Name).ToArray());
            }

            return(res);
        }
Esempio n. 18
0
        public void Create_Group_Test()
        {
            var dict = new Dictionary <string, NDArray>
            {
                { "col1", np.arange(5) },
                { "col2", np.arange(5) },
                { "col3", np.arange(5) },
                { "col4", np.arange(5) },
                { "col5", np.arange(5) },
            };

            var pd  = new Pandas();
            var df1 = pd.DataFrame <string>(dict, new string[] {
                "row1", "row2", "row3", "row4", "row5"
            });
            var gro   = df1.groupby("col2");
            var group = gro.Groups;
            var a     = gro.Groups[1];

            Assert.Equal("row2", a.Values[0]);
        }
Esempio n. 19
0
        public void Create_WithDict_Test()
        {
            var dict = new Dictionary <string, NDArray>
            {
                { "one", np.arange(10000) },
                { "two", np.arange(10001, 20001) }
            };
            var        pd  = new Pandas();
            IDataFrame df1 = new DataFrame <string>(dict);
            var        one = df1["one"];

            Assert.Equal("one", (one as SeriesBase).Name);
            Assert.Equal(2, (one as SeriesBase)[2]);
            var oneAndTwo = df1["one", "two"];

            var s = oneAndTwo.iloc[9999];

            Assert.Equal(9999, s[0]);
            Assert.Equal(9999, s["one"]);
            Assert.Equal(20000, s[1]);
            Assert.Equal(20000, s["two"]);
        }
Esempio n. 20
0
        public void WriteCsvFormated_ToFile_Test()
        {
            var filepath    = "write_quoted_test.csv";
            var array       = np.arange(0, 50, 0.5).reshape(20, 5);
            var columnNames = new string[] { "first", "second", "third",
                                             "fourth", "fifth" };
            var        floatFormat = "E03";
            var        pd          = new Pandas();
            IDataFrame df1         = pd.DataFrame(array, null, columnNames, typeof(object));

            df1.to_csv(filepath, float_format: floatFormat);
            using (var fr = File.OpenText(filepath))
            {
                Assert.Equal(string.Join(',', columnNames), fr.ReadLine());
                for (var i = 0; i < array.shape[0]; i++)
                {
                    var formattedData = array[i].Data <double>().Select(
                        x => x.ToString(floatFormat));
                    Assert.Equal(string.Join(",", formattedData), fr.ReadLine());
                }
            }
        }
Esempio n. 21
0
        private static IDataFrame CreateDataFrame(IDataFrame df, List <int> indexs)
        {
            var value    = df.Values.Array;
            int colSize  = df.Columns.Size;
            int rowSize  = df.Index.Size;
            var cols     = df.Columns.Values.Array;
            var rows     = df.Index.Values.Array;
            var rowArray = Array.CreateInstance(df.Index.DType, rows.Length);
            int index    = 0;

            foreach (var ind in indexs)
            {
                rowArray.SetValue(rows.GetValue(ind), index);
                index++;
            }
            object[] objs = new object[df.Size];
            int      ins  = 0;

            for (int c = 0; c < colSize; c++)
            {
                for (int r = 0; r < rowSize; r++)
                {
                    objs[ins] = value.GetValue(indexs[r] + c * rowSize);
                    ins++;
                }
            }
            NDArray nDArray = new NDArray(df.DType, new Shape(rowSize, colSize));

            nDArray.SetData(objs);
            var        pd        = new Pandas();
            IDataFrame dataFrame = pd.DataFrame(nDArray, null, null, df.DType);

            dataFrame.Index.Values.SetData(rowArray);
            dataFrame.Columns.Values.SetData(cols);
            return(dataFrame);
        }
Esempio n. 22
0
 public void TestPandas()
 {
     var pd = new Pandas();
 }
Esempio n. 23
0
 public TestBase()
 {
     np = new NumPy();
     pd = new Pandas();
 }
Esempio n. 24
0
 public TestBase()
 {
     pd = new Pandas();
 }
Esempio n. 25
0
 public SeriesTest()
 {
     pd = new Pandas();
 }
Esempio n. 26
0
 public static Index Index(this Pandas pd, params string[] items)
 {
     return(new Index(items));
 }
Esempio n. 27
0
        public MongoReturnDataList <StockMongoData> Stock_FQ(string code, MongoReturnDataList <StockMongoData> org_bfq_data = null, MongoReturnDataList <XDXRData> org_xdxr_data = null, PriceAdj fqType = PriceAdj.Fore)
        {
            /*
             * 1、一般的股票交易软件中,都有计算复权的功能。股票行情有除权与复权,在计算股票涨跌幅时采用复权价格,这是经常要用到的。系统计算分为以下步骤:
             * ①每次除权行为日,在登记日计算除权价;
             * 除权价=(除权前一日收盘价+配股价X配股比率-每股派息)/(1+配股比率+送股比率)
             * ②用登记日的收盘价除以除权价得到单次除权因子;
             * 除权因子=收盘价/除权价
             * ③将公司上市以来的除权因子连乘积,得到对应每一交易日的除权因子;
             * ④向后复权价=股票收盘价(实际交易价)*每一交易日的除权因子;
             * ⑤复权涨幅(不特别说明,涨幅均指复权涨幅)=复权价/前一日复权价-1。
             * 2、所谓复权就是对股价和成交量进行权息修复,按照股票的实际涨跌绘制股价走势图,并把成交量调整为相同的股本口径。
             */
            if (org_bfq_data == null)
            {
                org_bfq_data = new SecurityReader(base.DbTypeName, base.TableName, new string[] { code }).GetAllCodeDateSerialDataList <StockMongoData>()?[code];
            }
            if (org_xdxr_data == null)
            {
                org_xdxr_data = new XDXRReader().getXDXRList(DbTypeName, code);
            }
            MongoReturnDataList <XDXRData>       xdxr_data = org_xdxr_data.Copy(false);
            MongoReturnDataList <StockMongoData> bfq_data  = org_bfq_data.Copy(false);
            MongoReturnDataList <StockMongoData> ret       = bfq_data;

            if (bfq_data.Count == 0)
            {
                return(ret);
            }
            if (xdxr_data.Count == 0)
            {
                return(ret);
            }
            MongoReturnDataList <XDXRData>       info    = xdxr_data.Query <int>("category", 1);
            MongoReturnDataList <StockMongoData> retList = null;
            List <StockMongoData> list = null;

            #region category = 1
            if (info.Count > 0)
            {
                list = Pandas.Concat <StockMongoData, XDXRData, string>(
                    ret,
                    info,
                    a => a.date,
                    a => a.date,
                    (s, a, b) => {
                    XDXRData ExObj = s.ExtentData as XDXRData;
                    if (ExObj == null)
                    {
                        ExObj = new XDXRData();
                    }
                    if (b)
                    {
                        ExObj.date     = s.date;
                        ExObj.category = a.category;
                    }
                    s.ExtentData = ExObj;
                });
                var testlist = list;
                //retList = new MongoReturnDataList<StockMongoData>(list);

                list = Pandas.FillNa <StockMongoData, string, XDXRData>(list,
                                                                        a => a.ExtentData as XDXRData,
                                                                        a => (a.ExtentData as XDXRData).date,
                                                                        (a, b, c) =>
                {
                    XDXRData data = a.ExtentData as XDXRData;
                    if (data == null)
                    {
                        data = new XDXRData();
                    }
                    //data.date = a.date;
                    data.category = b.category ?? 0;
                    a.ExtentData  = data;
                }
                                                                        , FillType.FFill);
                //retList = new MongoReturnDataList<StockMongoData>(list);
                //(a, b) =>
                //{
                //    return (a.ExtentData as XDXRData).category;
                //}, (a, b) => { a.ExtentData = b; }, FillType.FFill);
                list = Pandas.Concat <StockMongoData, XDXRData, string>(new MongoReturnDataList <StockMongoData>(list), info,
                                                                        a => a.date,
                                                                        a => a.date,
                                                                        (s, a, b) => {
                    XDXRData ExObj = s.ExtentData as XDXRData;
                    if (ExObj == null)
                    {
                        ExObj = new XDXRData();
                    }
                    //ExObj.date = s.date;
                    if (b)
                    {
                        ExObj.date        = a.date;
                        ExObj.fenhong     = a.fenhong;
                        ExObj.peigu       = a.peigu;
                        ExObj.peigujia    = a.peigujia;
                        ExObj.songzhuangu = a.songzhuangu;
                    }
                    s.ExtentData = ExObj;
                });
                //ret.FillNa({ return a => a.ExtentData; }, "category", FillType.FFill);
                //retList = new MongoReturnDataList<StockMongoData>(list);
            }
            #endregion
            #region 其他分红
            else
            {
                list = Pandas.Concat <StockMongoData, XDXRData, string>(ret, info,
                                                                        a => a.date,
                                                                        a => a.date,
                                                                        (s, a, b) => {
                    XDXRData ExObj = s.ExtentData as XDXRData;
                    if (ExObj == null)
                    {
                        ExObj = new XDXRData();
                    }
                    //ExObj.date = s.date;
                    if (b)
                    {
                        ExObj.date        = s.date;
                        ExObj.category    = a.category;
                        ExObj.fenhong     = a.fenhong;
                        ExObj.peigu       = a.peigu;
                        ExObj.peigujia    = a.peigujia;
                        ExObj.songzhuangu = a.songzhuangu;
                    }
                    s.ExtentData = ExObj;
                });
            }
            #endregion
            list = Pandas.FillNa <StockMongoData, string, XDXRData>(list,
                                                                    a => a.ExtentData as XDXRData,
                                                                    a => (a.ExtentData as XDXRData).date,
                                                                    (a, b, c) =>
            {
                XDXRData ExObj = a.ExtentData as XDXRData;
                if (ExObj == null)
                {
                    ExObj = new XDXRData();
                }
                ExObj.date        = a.date;
                ExObj.fenhong     = 0;
                ExObj.peigu       = 0;
                ExObj.peigujia    = 0;
                ExObj.songzhuangu = 0;
            }, FillType.None);
            ret = new MongoReturnDataList <StockMongoData>(list);
            int            xscnt      = GlobalClass.TypeDataPoints[base.DbTypeName].RuntimeInfo.SecurityInfoList[code].decimal_point;
            long           Lbase      = (long)Math.Pow(10, xscnt);
            List <long?>   CloseList  = ret.ToList(a => (long?)(a.close * Lbase));
            List <long?>   closes     = Pandas.ShiftX <long?>(CloseList, 1);
            List <double?> xdxrcloses = new List <double?>();
            for (int i = 0; i < ret.Count; i++)
            {
                XDXRData xdata = ret[i].ExtentData as XDXRData;

                double midval = ((closes[i] ?? 0) * 10 - xdata.fenhong.Value * Lbase + xdata.peigu.Value * xdata.peigujia.Value * Lbase) / (10 + xdata.peigu.Value + xdata.songzhuangu.Value);
                //long xdprice = Math.Round(midval);
                xdxrcloses.Add(midval);
            }
            //precloses = Pandas.ShiftX<double>(precloses, -1);
            List <double?> ProAdjList = new List <double?>();

            List <double?> ppclose = Pandas.ShiftX <double?>(xdxrcloses, -1);//
            for (int i = 0; i < ppclose.Count; i++)
            {
                if (ppclose[i] == null)
                {
                    ProAdjList.Add(1);
                    continue;
                }
                //double? midval = (double?)(1*((double)ppclose[i].Value)/ ((double)CloseList[i]) / 1);
                double?midval = (double?)(1 * ((double)ppclose[i].Value) / ((double)CloseList[i]) / 1);
                ProAdjList.Add((double?)midval);
            }
            List <double?> adj = new List <double?>();
            if (fqType == PriceAdj.Fore)
            {
                adj = ProAdjList;
                adj = Pandas.Recovert <double?>(adj);
                adj = Pandas.Cumprod(adj);
                adj = Pandas.Recovert <double?>(adj);
                double?curr = adj[adj.Count - 1];
                if (curr.Value != 1)
                {
                    //adj.ForEach(a => a = a / curr);
                    for (int i = 0; i < adj.Count; i++)
                    {
                        adj[i] /= curr;
                    }
                }
                //adj = Pandas.Recovert<double?>(adj);
            }
            else
            {
                adj = Pandas.Cumprod(ProAdjList);
                Pandas.ShiftX <double?>(adj, -1);
            }
            for (int i = 0; i < ret.Count; i++)
            {
                ret[i].close *= adj[i].Value;
                ret[i].open  *= adj[i].Value;
                ret[i].high  *= adj[i].Value;
                ret[i].low   *= adj[i].Value;
                ret[i].vol   /= adj[i].Value;
            }
            return(ret);
        }