C#中使用dataframe----Microsoft.Data.Analysis

一、困境

最近要吃飯怜奖,重新端起Unity + c#的飯碗。

但是我還想繼續(xù)玩一玩數(shù)據(jù)分析(量化)翅阵,因為不想在上班和下班中間頻繁切換諸如python歪玲、julia、c#掷匠、rust的等東東滥崩,于是打算用一種語言來開發(fā)。

想要的東西就是:

  • 有用戶界面:曾經在QT和微軟家套件之間徘徊過
  • 編寫的東西能夠:編譯成dll讹语,也能弄成exe钙皮。
    (1)python + pyqt之前弄過,可以build成exe顽决,但是考慮計算速度短条,放棄了,使用python只是用來抓數(shù)據(jù)才菠。
    (2)julia我主要用來數(shù)據(jù)預處理茸时、指標計算、回測赋访、CUDA密集計算屹蚊。一直沒有放棄找尋一套合適的GUI,但是都不成功进每。也看了build成dll和app的包汹粤,但是總覺得不放心。
    (3)rust雖然號稱匹敵C++田晚,但是生態(tài)很弱嘱兼,一年來,我都在關注dataframe的相關包贤徒,前段時間終于可以用了芹壕,但是發(fā)現(xiàn)資料很少,在谷歌上都搜不到啥接奈,考慮到自己單槍匹馬踢涌,就不要去折騰了。另外他也面臨GUI的問題序宦。
    (4).net是我用的最多的了睁壁,畢竟從.net framework1.0開始用,算下來也是許多年了,用起來最順手潘明。

左思右想之后行剂,我還是決定用C#來弄,GUI + 程序主體 + 數(shù)據(jù)庫 + 網(wǎng)絡钳降。

至于密集計算的部分厚宰,到時候看看有沒有順手的cuda包,沒有的話遂填,用julia來算铲觉,或者等rust成熟,用rust也行吓坚,不能直接call的撵幽,就跑兩個進程,中間用進程通信凌唬。

以前用julia寫的代碼并齐,看看能不能build成dll或者exe,不好弄的話客税,重新擼一個况褪。

二、c#使用dataframe:Microsoft.Data.Analysis

配置請看上文更耻,本文直接干活:

1测垛、下載相關的包

#r "nuget:XPlot.Plotly,4.0.6"
#r "nuget:Microsoft.Data.Analysis,0.19.0"
image.png

2、一個案例【直接從vs項目扒過來的】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Data.Analysis;


private void main()
        {
            var data = new PrimitiveDataFrameColumn<int>("Ints");
            data.Append(0);
            data.Append(1);
            data.Append(2);
            var data2 = new PrimitiveDataFrameColumn<int>("Ints2");
            data2.Append(0);
            data2.Append(2);
            data2.Append(3);
            var data31 = new PrimitiveDataFrameColumn<int>("Ints31");
            data31.Append(0);
            data31.Append(2);
            var data32 = new PrimitiveDataFrameColumn<int>("Ints32");
            data32.Append(0);
            data32.Append(1);
            var data33 = new PrimitiveDataFrameColumn<int>("Ints33");
            data33.Append(4);
            data33.Append(6);
            DataFrame frame = new DataFrame(data, data2);
            DataFrame frame2 = new DataFrame(data31, data32, data33);
            Console.WriteLine(frame.Multiply<int>(5));
            getDotProducts(frame, frame2);
        }

        public static void getDotProducts(DataFrame firstFrame, DataFrame secondFrame)
        {
            List<DataFrameColumn> list = new List<DataFrameColumn>();
            foreach (var column in firstFrame.Columns)
            {
                list.Add(column.Multiply(2).CumulativeSum(true));
                foreach (var row in secondFrame.Rows)
                {
                    Console.WriteLine(column.Multiply(2).CumulativeSum(true));
                }
            }
            var newFrame = new DataFrame(list);
            Console.WriteLine(newFrame.ToString());
        }
image.png

3秧均、案例二食侮、生成一個dataframe

var start = new DateTime(2009,1,1);

Random rand = new Random();

var numDataPoint = 200;

 

PrimitiveDataFrameColumn<DateTime> date = new PrimitiveDataFrameColumn<DateTime>("Date", 

    Enumerable.Range(0, numDataPoint)

          .Select(offset => start.AddDays(offset))

          .ToList()); 

PrimitiveDataFrameColumn<int> data = new PrimitiveDataFrameColumn<int>("Data", 

    Enumerable.Range(0, numDataPoint)

                        .Select(r => rand.Next(100))

                        .ToList()); 

var df = new DataFrame(date, data);

df
image.png
  • 加載一個本地的股票行情數(shù)據(jù)
var df1 = DataFrame.LoadCsv("D:\\jupyter_work_space\\GPU并行計算\\計算周線-cpu 和 gpu\\data\\cpu周線\\000001.csv");
df1
image.png
  • 打印df的info信息


    image.png
  • 讀取一個單元格信息


    image.png
image.png
  • 修改一個cell的信息


    image.png
  • 顯示某一行的數(shù)據(jù)


    image.png
  • 顯示某一列的信息


    image.png
  • 增加一列新的


    image.png
  • 空值處理


    image.png
  • orderby處理


    image.png
  • groupby之后count


    image.png

看到最后也不容易,奉上[參考文檔](Getting started with C# DataFrame and XPlot.Ploty | Refinitiv Developers
)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末目胡,一起剝皮案震驚了整個濱河市锯七,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌誉己,老刑警劉巖眉尸,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巨双,居然都是意外死亡噪猾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門筑累,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袱蜡,“玉大人,你說我怎么就攤上這事慢宗∑阂希” “怎么了奔穿?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迅细。 經常有香客問我巫橄,道長淘邻,這世上最難降的妖魔是什么茵典? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮宾舅,結果婚禮上统阿,老公的妹妹穿的比我還像新娘。我一直安慰自己筹我,他們只是感情好扶平,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔬蕊,像睡著了一般结澄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岸夯,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天麻献,我揣著相機與錄音,去河邊找鬼猜扮。 笑死勉吻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的旅赢。 我是一名探鬼主播齿桃,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼煮盼!你這毒婦竟也來了短纵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤僵控,失蹤者是張志新(化名)和其女友劉穎香到,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喉祭,經...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡养渴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了泛烙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片理卑。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔽氨,靈堂內的尸體忽然破棺而出藐唠,到底是詐尸還是另有隱情帆疟,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布宇立,位于F島的核電站踪宠,受9級特大地震影響,放射性物質發(fā)生泄漏妈嘹。R本人自食惡果不足惜柳琢,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望润脸。 院中可真熱鬧柬脸,春花似錦、人聲如沸毙驯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爆价。三九已至垦巴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铭段,已是汗流浹背骤宣。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留稠项,地道東北人涯雅。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像展运,于是被迫代替她去往敵國和親活逆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容