D**u 发帖数: 288 | 1 我是统计出身,语言的知识很有限,仅仅从我的个人感受,分享一些心得,并希望得到
一些指点。
先说一句,我觉得C#对于初学者还是挺freindly的。
我是做统计模型的,平常都是用SAS,偶尔用用R和python。但是最近一个客户需要我们
parsing data with C#。
当时一听我的第一反应就是这TM也太难了。
我对C++和java的认识只停留于做一个students record table,算一个Fabinocci数。
从来没用过C#,更不知道怎么用C++,java或者C#去subset一个100GB的 CSV或是txt
table,勿论再去做对Col和Row做运算。
然后这两天我就开始在youtube上学一些C#的语句,第一感觉对于简单的I/O,包括read
/write files,C#比C++,和java的语句要简单直观很多,这对于一个经常用sas的人来
说是一件很幸福的事情。还有就是,我很喜欢C# 的static void Main,我记得印象中C
++ 老是int main 总让我觉得怪怪的,呵呵,我知道这个比较很弱智,可是实在认识有
限。
可是现在问题来了,
SAS,R或者python都是先create一个data table,然后读入memory中运算,然后output
到一个文件或者data table。
而在C#是怎样在一个csv table中 select 几个column或者row 然后做运算在output到
一个table中呢?
我看到了一个foreach function,但是这个跟sas和R中的data matrix computation的思
维方式差别挺大的。
唉,发现还是离solution很遥远
胡乱码了一通,全当一个菜鸟的呓语,不过还要强调一下,C# 的 files I/O真的不错。 |
b*****y 发帖数: 130 | |
c*********e 发帖数: 16335 | 3 果然是新手。c#和java是一个级别的,说它简单。。。
read
【在 D**u 的大作中提到】 : 我是统计出身,语言的知识很有限,仅仅从我的个人感受,分享一些心得,并希望得到 : 一些指点。 : 先说一句,我觉得C#对于初学者还是挺freindly的。 : 我是做统计模型的,平常都是用SAS,偶尔用用R和python。但是最近一个客户需要我们 : parsing data with C#。 : 当时一听我的第一反应就是这TM也太难了。 : 我对C++和java的认识只停留于做一个students record table,算一个Fabinocci数。 : 从来没用过C#,更不知道怎么用C++,java或者C#去subset一个100GB的 CSV或是txt : table,勿论再去做对Col和Row做运算。 : 然后这两天我就开始在youtube上学一些C#的语句,第一感觉对于简单的I/O,包括read
|
a9 发帖数: 21638 | 4 dataset
read
中C
output
错。
【在 D**u 的大作中提到】 : 我是统计出身,语言的知识很有限,仅仅从我的个人感受,分享一些心得,并希望得到 : 一些指点。 : 先说一句,我觉得C#对于初学者还是挺freindly的。 : 我是做统计模型的,平常都是用SAS,偶尔用用R和python。但是最近一个客户需要我们 : parsing data with C#。 : 当时一听我的第一反应就是这TM也太难了。 : 我对C++和java的认识只停留于做一个students record table,算一个Fabinocci数。 : 从来没用过C#,更不知道怎么用C++,java或者C#去subset一个100GB的 CSV或是txt : table,勿论再去做对Col和Row做运算。 : 然后这两天我就开始在youtube上学一些C#的语句,第一感觉对于简单的I/O,包括read
|
D**u 发帖数: 288 | 5 dataset is great, 这个是把data read in memory么,如果超过内存大小的csv table
怎么办,谢谢?
【在 a9 的大作中提到】 : dataset : : read : 中C : output : 错。
|
D**u 发帖数: 288 | 6 IDataReader!
read and process data line by line 这个可以算是 Row computaion而且不受memory
size限制了。
hoho,以后small table 用dataset, large table用IDataReader。 |
s*****n 发帖数: 5488 | 7 linq is your friend. google linq csv.
read
【在 D**u 的大作中提到】 : 我是统计出身,语言的知识很有限,仅仅从我的个人感受,分享一些心得,并希望得到 : 一些指点。 : 先说一句,我觉得C#对于初学者还是挺freindly的。 : 我是做统计模型的,平常都是用SAS,偶尔用用R和python。但是最近一个客户需要我们 : parsing data with C#。 : 当时一听我的第一反应就是这TM也太难了。 : 我对C++和java的认识只停留于做一个students record table,算一个Fabinocci数。 : 从来没用过C#,更不知道怎么用C++,java或者C#去subset一个100GB的 CSV或是txt : table,勿论再去做对Col和Row做运算。 : 然后这两天我就开始在youtube上学一些C#的语句,第一感觉对于简单的I/O,包括read
|
D**u 发帖数: 288 | 8 This is getting more and more interesting!
With Linq, now I can do column computation in CSV tables.
【在 s*****n 的大作中提到】 : linq is your friend. google linq csv. : : read
|
s*****n 发帖数: 5488 | 9 see this link:
http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library
【在 D**u 的大作中提到】 : This is getting more and more interesting! : With Linq, now I can do column computation in CSV tables.
|
D**u 发帖数: 288 | 10 Thanks a lot, will spend some time dig into it.
【在 s*****n 的大作中提到】 : see this link: : http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library
|
|
|
z****e 发帖数: 54598 | 11 只要你花钱了
没有什么软件是不friendly的 |
z****e 发帖数: 54598 | 12 另外,sas的程序可以直接转成pure java代码
有专门的公司在做这事,花点钱就是了
如果你们的系统很稳定的话,直接转成java代码后就可以省下大笔的license fee
当然如果你们的系统不稳定的话,需要维护改造倒腾的话
那还是交钱吧 |
e*******i 发帖数: 80 | 13 search "parsing csv file in C#". There are lots of sample codes, even some
small useful library for this purpose. C# is truly a good, high-level,
application development language, not just for beginners. |
k***g 发帖数: 7244 | 14 use linq . if u have terabytes data, then k is much much faster. only take
milliseconds to do row or column computation.
read
【在 D**u 的大作中提到】 : 我是统计出身,语言的知识很有限,仅仅从我的个人感受,分享一些心得,并希望得到 : 一些指点。 : 先说一句,我觉得C#对于初学者还是挺freindly的。 : 我是做统计模型的,平常都是用SAS,偶尔用用R和python。但是最近一个客户需要我们 : parsing data with C#。 : 当时一听我的第一反应就是这TM也太难了。 : 我对C++和java的认识只停留于做一个students record table,算一个Fabinocci数。 : 从来没用过C#,更不知道怎么用C++,java或者C#去subset一个100GB的 CSV或是txt : table,勿论再去做对Col和Row做运算。 : 然后这两天我就开始在youtube上学一些C#的语句,第一感觉对于简单的I/O,包括read
|
T*U 发帖数: 22634 | 15 linq require 3.5 +, 4.0 u can do parallel linq.
take
【在 k***g 的大作中提到】 : use linq . if u have terabytes data, then k is much much faster. only take : milliseconds to do row or column computation. : : read
|
D**u 发帖数: 288 | 16 what is k?
take
【在 k***g 的大作中提到】 : use linq . if u have terabytes data, then k is much much faster. only take : milliseconds to do row or column computation. : : read
|
d**********1 发帖数: 569 | 17 linq, lambda还有新的4.5的async语法糖才是统计和数据筛选的神器! |
x*****b 发帖数: 271 | 18 Python可以很简单地完成你说的这些task。为什么一定要C#? |
H*******g 发帖数: 6997 | 19 能不用DATATABLE就别用,那个效率太低。
试试看linq asparallel
read
【在 D**u 的大作中提到】 : 我是统计出身,语言的知识很有限,仅仅从我的个人感受,分享一些心得,并希望得到 : 一些指点。 : 先说一句,我觉得C#对于初学者还是挺freindly的。 : 我是做统计模型的,平常都是用SAS,偶尔用用R和python。但是最近一个客户需要我们 : parsing data with C#。 : 当时一听我的第一反应就是这TM也太难了。 : 我对C++和java的认识只停留于做一个students record table,算一个Fabinocci数。 : 从来没用过C#,更不知道怎么用C++,java或者C#去subset一个100GB的 CSV或是txt : table,勿论再去做对Col和Row做运算。 : 然后这两天我就开始在youtube上学一些C#的语句,第一感觉对于简单的I/O,包括read
|
H*******g 发帖数: 6997 | 20 python能比C#需要的代码还少么,呵呵。
【在 x*****b 的大作中提到】 : Python可以很简单地完成你说的这些task。为什么一定要C#?
|
|
|
r*******n 发帖数: 3020 | 21 python 处理这种事情很擅长,代码会少,关键是易学易用
【在 H*******g 的大作中提到】 : python能比C#需要的代码还少么,呵呵。
|
r****l 发帖数: 50 | |
D**u 发帖数: 288 | 23 虽然client要C#, 但确实可以先用python处理data再input到C#中去。
我想我们决定用C#,一是client的要求,二是C#可能比python更容易hide scource
code( obfuscator),让reengineer source code 更难一点(我相信所有的code 都
是可以reengineer的) |
d**********1 发帖数: 569 | 24 BasisComponentDict =
(from a in BasisComponentValues
where CheckMonth(a.StartMonth, a.Month, a.EndMonth)
group a by a.Key into g
select new { Key = g.Key, Sum = g.Sum(o => o.Value) })
.ToDictionary(gdc => gdc.Key.ToUpper(), gdc => gdc.Sum);
这个是工作里面做字典的一个例子,挺好用的。 |
D**u 发帖数: 288 | 25 这个例子看起来很fancy啊,查了一下,Enumerable.ToDictionary
发现Enumerable Class有很多可以利用的
【在 d**********1 的大作中提到】 : BasisComponentDict = : (from a in BasisComponentValues : where CheckMonth(a.StartMonth, a.Month, a.EndMonth) : group a by a.Key into g : select new { Key = g.Key, Sum = g.Sum(o => o.Value) }) : .ToDictionary(gdc => gdc.Key.ToUpper(), gdc => gdc.Sum); : 这个是工作里面做字典的一个例子,挺好用的。
|
c**********3 发帖数: 647 | |
d**********x 发帖数: 4083 | 27 夏普
【在 c**********3 的大作中提到】 : # 怎么读,谢谢..
|
c**********3 发帖数: 647 | 28 多谢,赠包子一枚
【在 d**********x 的大作中提到】 : 夏普
|
k***g 发帖数: 7244 | 29 处理百亿千亿行数据使用的语言和数据库,主要用在高频交易上,k 语言很简洁,譬如
列出从1 到 N 之间所有的 prime number 只需要: (!N)@&{&/x!/:2_!x}'!N 就可以了
【在 D**u 的大作中提到】 : what is k? : : take
|
G***l 发帖数: 355 | 30 这一堆@@##$$!!的是啥,比perl还夸张啊。
了
【在 k***g 的大作中提到】 : 处理百亿千亿行数据使用的语言和数据库,主要用在高频交易上,k 语言很简洁,譬如 : 列出从1 到 N 之间所有的 prime number 只需要: (!N)@&{&/x!/:2_!x}'!N 就可以了
|
|
|
z****e 发帖数: 54598 | 31 没说的,学术版讨论
了
【在 k***g 的大作中提到】 : 处理百亿千亿行数据使用的语言和数据库,主要用在高频交易上,k 语言很简洁,譬如 : 列出从1 到 N 之间所有的 prime number 只需要: (!N)@&{&/x!/:2_!x}'!N 就可以了
|
n******t 发帖数: 4406 | 32 其实K很好读。比大部分程序都好读。
这东西有点像现代汉语,语法其实简单。但是刚开始学比较难。背的多一点。
所有的K都是自右向左读
!N就是生成0.....N-1的向量。
然后{&/x!/:2_!x} 是一个函数,'是adverb,就是把函数apply到向量的每一个element
上面。
2_!x 就是0..N-1去掉前面两个元素,就是2....N-1
/: 又是adverb叫做each right,然后!作为binary operator就是取余。这样
x!/:2_!x 就是用x 对于每一个2...N-1的数做取余。
然后 &作为binary operator是min(x,y)的意思,/是另外一一个adverb就是迭代
所以&/apply到一个vector上就是取最小值。所以如果x是质数这个最小值是1,
否则是0.
&的意思是take,就是返回为1的的index.a@i是取向量a里下标为i那些元素构成的
向量。
譬如
【在 G***l 的大作中提到】 : 这一堆@@##$$!!的是啥,比perl还夸张啊。 : : 了
|
k***g 发帖数: 7244 | 33 k 应该算是文言文,q 才算白话,上面的那段程序用 q 按字面重写一遍:
(til N)[ where 1 = {and over x mod 2_til x} each til N]
符号的 verb 和 adverb 都改成单词了,意思清点儿了,如果把 and 换成 min,用 su
bset 取代 drop(_)就更通俗了;
不过一般写 code 大多数都是 k 和 q 混搭,算是半文半白吧,譬如同样的程序:
where 1 = {&/[x mod 2_til x]} each til 100
用!来表示 mod,只能用在 k2/k3,现在 k4/q 不让这么用了,用!表示 less than,必须
在纯 k code 下才能用, q console 里不让直接用(必须进入 k 模式才行)
element
【在 n******t 的大作中提到】 : 其实K很好读。比大部分程序都好读。 : 这东西有点像现代汉语,语法其实简单。但是刚开始学比较难。背的多一点。 : 所有的K都是自右向左读 : !N就是生成0.....N-1的向量。 : 然后{&/x!/:2_!x} 是一个函数,'是adverb,就是把函数apply到向量的每一个element : 上面。 : 2_!x 就是0..N-1去掉前面两个元素,就是2....N-1 : /: 又是adverb叫做each right,然后!作为binary operator就是取余。这样 : x!/:2_!x 就是用x 对于每一个2...N-1的数做取余。 : 然后 &作为binary operator是min(x,y)的意思,/是另外一一个adverb就是迭代
|
r*g 发帖数: 3159 | 34 有没有k/q 相对其他语言的benchmark?
su
必须
【在 k***g 的大作中提到】 : k 应该算是文言文,q 才算白话,上面的那段程序用 q 按字面重写一遍: : (til N)[ where 1 = {and over x mod 2_til x} each til N] : 符号的 verb 和 adverb 都改成单词了,意思清点儿了,如果把 and 换成 min,用 su : bset 取代 drop(_)就更通俗了; : 不过一般写 code 大多数都是 k 和 q 混搭,算是半文半白吧,譬如同样的程序: : where 1 = {&/[x mod 2_til x]} each til 100 : 用!来表示 mod,只能用在 k2/k3,现在 k4/q 不让这么用了,用!表示 less than,必须 : 在纯 k code 下才能用, q console 里不让直接用(必须进入 k 模式才行) : : element
|
n******t 发帖数: 4406 | 35 但是其实没有太大的差别。overload这个东西对K来说是家常便饭的事情。
但是我个人感觉熟悉之后,K比q看起来快。
su
必须
【在 k***g 的大作中提到】 : k 应该算是文言文,q 才算白话,上面的那段程序用 q 按字面重写一遍: : (til N)[ where 1 = {and over x mod 2_til x} each til N] : 符号的 verb 和 adverb 都改成单词了,意思清点儿了,如果把 and 换成 min,用 su : bset 取代 drop(_)就更通俗了; : 不过一般写 code 大多数都是 k 和 q 混搭,算是半文半白吧,譬如同样的程序: : where 1 = {&/[x mod 2_til x]} each til 100 : 用!来表示 mod,只能用在 k2/k3,现在 k4/q 不让这么用了,用!表示 less than,必须 : 在纯 k code 下才能用, q console 里不让直接用(必须进入 k 模式才行) : : element
|