D*********2 发帖数: 535 | 1 最近接一新project,40+ million line,大概70个左右variable,数据给的是.csv格
式。问题是cookbook做的很差,很多unexpected value,比如一variable cookbook上
写是0-9 coding,结果什么负数啊,感叹号啊,有时missing value还用date表示。非
常不能理喻。
所以第一个task就是逐一审阅unexpected values,补全cookbook
这个大小的数据用R没戏,用SAS在不知道这列到底改是啥数据类型的时候要反复调很多
次,而且读进去有时候也匪夷所思的,出现些更离奇的符号,*啊,~啊。现在解决的办
法就是分段读进R(大概10 million一段),然后做summary,然后人工总结,说实话满
累的。
而且这也不是个办法,之后merge阿什么的应该还是要SAS SQL,感觉还是要一次性全搞
进SAS才是正道。我SAS很差,Python之类之略知皮毛,求这种情况SAS应该怎么倒,或
better solution。
谢谢谢谢。 |
a****g 发帖数: 8131 | 2 那就先建一个小dataset, 比如100k
这样测试的时候比较节约时间
做完之后再跑全部
先看看analysis plan吧, 说不定有的column根本不需要
【在 D*********2 的大作中提到】 : 最近接一新project,40+ million line,大概70个左右variable,数据给的是.csv格 : 式。问题是cookbook做的很差,很多unexpected value,比如一variable cookbook上 : 写是0-9 coding,结果什么负数啊,感叹号啊,有时missing value还用date表示。非 : 常不能理喻。 : 所以第一个task就是逐一审阅unexpected values,补全cookbook : 这个大小的数据用R没戏,用SAS在不知道这列到底改是啥数据类型的时候要反复调很多 : 次,而且读进去有时候也匪夷所思的,出现些更离奇的符号,*啊,~啊。现在解决的办 : 法就是分段读进R(大概10 million一段),然后做summary,然后人工总结,说实话满 : 累的。 : 而且这也不是个办法,之后merge阿什么的应该还是要SAS SQL,感觉还是要一次性全搞
|
A*******s 发帖数: 3942 | 3 read it as text strings. then use some regular expression to do pattern
matching.
【在 D*********2 的大作中提到】 : 最近接一新project,40+ million line,大概70个左右variable,数据给的是.csv格 : 式。问题是cookbook做的很差,很多unexpected value,比如一variable cookbook上 : 写是0-9 coding,结果什么负数啊,感叹号啊,有时missing value还用date表示。非 : 常不能理喻。 : 所以第一个task就是逐一审阅unexpected values,补全cookbook : 这个大小的数据用R没戏,用SAS在不知道这列到底改是啥数据类型的时候要反复调很多 : 次,而且读进去有时候也匪夷所思的,出现些更离奇的符号,*啊,~啊。现在解决的办 : 法就是分段读进R(大概10 million一段),然后做summary,然后人工总结,说实话满 : 累的。 : 而且这也不是个办法,之后merge阿什么的应该还是要SAS SQL,感觉还是要一次性全搞
|
P****D 发帖数: 11146 | 4 这种乱七八糟的数据谁也没办法,只能像adgang说的,先取出数据的一小部分,你基于
这个小样本把data cleaning程序写了,同时向大圣祷告,希望这个小样本里面已经包
含了所有需要处理的情况,最后你的程序apply到全部数据上就可以顺利运行。
祷告的时候,要手搭凉棚,另一手舞棍,口颂大圣之名。 |
P****D 发帖数: 11146 | 5 要是有pattern给你match,就不是问题了啊!
【在 A*******s 的大作中提到】 : read it as text strings. then use some regular expression to do pattern : matching.
|
l*******s 发帖数: 1258 | |
q***m 发帖数: 9 | 7 用awk之类的处理工具,把数据分成很多小段,然后每个小段调用R或者SAS来过滤掉坏
数据,然后用1 2行shell代码把数据集合到一起,就好了。 |
D*********2 发帖数: 535 | 8 还是你最懂我。
【在 P****D 的大作中提到】 : 这种乱七八糟的数据谁也没办法,只能像adgang说的,先取出数据的一小部分,你基于 : 这个小样本把data cleaning程序写了,同时向大圣祷告,希望这个小样本里面已经包 : 含了所有需要处理的情况,最后你的程序apply到全部数据上就可以顺利运行。 : 祷告的时候,要手搭凉棚,另一手舞棍,口颂大圣之名。
|
D*********2 发帖数: 535 | 9 zkss?
【在 l*******s 的大作中提到】 : 一行行读进内存清理数据 : 多大数据都不怕
|
l*******s 发帖数: 1258 | 10 ?
【在 D*********2 的大作中提到】 : zkss?
|
|
|
D*********2 发帖数: 535 | 11 恩,现在就用的这种分段法。
【在 q***m 的大作中提到】 : 用awk之类的处理工具,把数据分成很多小段,然后每个小段调用R或者SAS来过滤掉坏 : 数据,然后用1 2行shell代码把数据集合到一起,就好了。
|
D*********2 发帖数: 535 | 12 展开说说~ 谢谢
【在 l*******s 的大作中提到】 : ?
|
a****g 发帖数: 8131 | 13 我的方案得到pharmd的首肯,实在太荣幸了
今晚估计得高兴得睡不着了
【在 P****D 的大作中提到】 : 这种乱七八糟的数据谁也没办法,只能像adgang说的,先取出数据的一小部分,你基于 : 这个小样本把data cleaning程序写了,同时向大圣祷告,希望这个小样本里面已经包 : 含了所有需要处理的情况,最后你的程序apply到全部数据上就可以顺利运行。 : 祷告的时候,要手搭凉棚,另一手舞棍,口颂大圣之名。
|
A*******s 发帖数: 3942 | 14 Text cleansing本来就是得自己动手的脏活。
【在 P****D 的大作中提到】 : 要是有pattern给你match,就不是问题了啊!
|
c**d 发帖数: 104 | 15 其实楼主的问题是3个问题。我比较赞同Actuaries (striving)说的。
第一个是读数据的问题,比如某个变量是text包括一些特殊的符号会导致位置读不对。
我一般都是读成一个text string。在这一步,因为变量是用‘,’分开的。你很容易
发现patterns,把它们分配到正确的变量。可能一些变量要分段读,比如我们经常遇到
长字符特殊的符号的medical or medication history。你可以考虑subset to find
patterns。
下一步是去解决到底改是啥数据类型,for each string, you create an indicator
to determine 3 cases: whole letter, whole digital, or mixed. then proc freq.
then data quality. |
q***m 发帖数: 9 | 16 我的感觉是, 如果你是做实际的工程项目,最好不要用采样的方法来测试,而是把数
据化作很多小块,一个一个测试,发现哪个数据块有错就可以直接报错,然后做对应的
处理。 采样的话,是没办法保证能够找到所有的outliers的, 所以说并不是一种完全
稳健的方案 |
D*********2 发帖数: 535 | 17 不好意思啊,不是特别明白,你是说先全部Char读入?然后对每一列的每个数做标记,
proc freq每列?那得多久啊。。。
freq.
【在 c**d 的大作中提到】 : 其实楼主的问题是3个问题。我比较赞同Actuaries (striving)说的。 : 第一个是读数据的问题,比如某个变量是text包括一些特殊的符号会导致位置读不对。 : 我一般都是读成一个text string。在这一步,因为变量是用‘,’分开的。你很容易 : 发现patterns,把它们分配到正确的变量。可能一些变量要分段读,比如我们经常遇到 : 长字符特殊的符号的medical or medication history。你可以考虑subset to find : patterns。 : 下一步是去解决到底改是啥数据类型,for each string, you create an indicator : to determine 3 cases: whole letter, whole digital, or mixed. then proc freq. : then data quality.
|
v*******e 发帖数: 11604 | 18 我有处理大数据的经验,你这个,最好的解决办法是python和R结合起来用。
先用python,把这个数组分成70个数组,(或者35个,反正是分成R能够比较快读进来
的大小)。分不是按行分,而是按列分。R读进来后,用table(data$某列)命令,找出
各种非正规的coding,一个个处理好,写进你的cook book。 |
l******h 发帖数: 855 | 19 你有70个columns, 其实真的还好了,要是知道每个column应该是什么内容的话,可以
在sas中define一下,首先过滤掉一批坏数据呀。 |
l*******s 发帖数: 1258 | 20 这玩意没有简易方法,其实该任务主要是两部分:如何处理大数据;如何clean data
处理大数据,考虑到内存限制,不能全部读入,只能一行行读入
clean data,也只能人工观察找pattern,然后用regex处理。或者上classifier,不过
就麻烦些。
随便用什么java python都行
【在 D*********2 的大作中提到】 : 展开说说~ 谢谢
|
|
|
D*********2 发帖数: 535 | 21 python要用啥package不
【在 v*******e 的大作中提到】 : 我有处理大数据的经验,你这个,最好的解决办法是python和R结合起来用。 : 先用python,把这个数组分成70个数组,(或者35个,反正是分成R能够比较快读进来 : 的大小)。分不是按行分,而是按列分。R读进来后,用table(data$某列)命令,找出 : 各种非正规的coding,一个个处理好,写进你的cook book。
|
H*H 发帖数: 472 | 22 要是我就多上几条内存,直接把数据读进去。你的数据我估计就10来G大小吧?我经常
都要读几十G数据到R里处理,内存足够的话毫无压力。分段处理然后又合并,太耗时间
了。。。。 |
D******n 发帖数: 2836 | 23 cookbook(what on earth is this? data dictionary?) gives u the pattern for
each field
u only need to find the mismatches.
Use perl with regex, piece of cake.
【在 P****D 的大作中提到】 : 要是有pattern给你match,就不是问题了啊!
|
w********m 发帖数: 1137 | 24 可以试试熊猫pandas
【在 D*********2 的大作中提到】 : python要用啥package不
|
v*******e 发帖数: 11604 | 25
这个是逐行处理的,什么package都不需要。你甚至不需要用python,你可以用linux的
cut命令。就是把这个大数组安列分解成R可以处理的小数组。教你用regex(regular
expression)的都不是好人,你不知道一个列里面都有哪些奇怪coding的话,是没办法
写出regular expression来的。必须先看这些coding的样子,这个R的table()命令最合
适了。
【在 D*********2 的大作中提到】 : python要用啥package不
|
q**q 发帖数: 266 | 26 项目是做什么的呢?做预测模型?
【在 D*********2 的大作中提到】 : 最近接一新project,40+ million line,大概70个左右variable,数据给的是.csv格 : 式。问题是cookbook做的很差,很多unexpected value,比如一variable cookbook上 : 写是0-9 coding,结果什么负数啊,感叹号啊,有时missing value还用date表示。非 : 常不能理喻。 : 所以第一个task就是逐一审阅unexpected values,补全cookbook : 这个大小的数据用R没戏,用SAS在不知道这列到底改是啥数据类型的时候要反复调很多 : 次,而且读进去有时候也匪夷所思的,出现些更离奇的符号,*啊,~啊。现在解决的办 : 法就是分段读进R(大概10 million一段),然后做summary,然后人工总结,说实话满 : 累的。 : 而且这也不是个办法,之后merge阿什么的应该还是要SAS SQL,感觉还是要一次性全搞
|
m****n 发帖数: 3016 | 27 随便说下。能用 regular expression 写个可能的数据形式,然后再CLEAN么? |
B***i 发帖数: 724 | |
D*********2 发帖数: 535 | 29 非常传统的epidemiology project,找association,做hypothesis testing的。
【在 q**q 的大作中提到】 : 项目是做什么的呢?做预测模型?
|
D*********2 发帖数: 535 | 30 恩,10+G。 穷衙门,哪来什么内存条,这已经是在我们服务器上跑了。
【在 H*H 的大作中提到】 : 要是我就多上几条内存,直接把数据读进去。你的数据我估计就10来G大小吧?我经常 : 都要读几十G数据到R里处理,内存足够的话毫无压力。分段处理然后又合并,太耗时间 : 了。。。。
|
|
|
D*********2 发帖数: 535 | 31 我研究研究,关键区别就是按列读是吧。这个是比按行读、先拆再并更符合我需要。谢
谢。
【在 v*******e 的大作中提到】 : : 这个是逐行处理的,什么package都不需要。你甚至不需要用python,你可以用linux的 : cut命令。就是把这个大数组安列分解成R可以处理的小数组。教你用regex(regular : expression)的都不是好人,你不知道一个列里面都有哪些奇怪coding的话,是没办法 : 写出regular expression来的。必须先看这些coding的样子,这个R的table()命令最合 : 适了。
|
D*********2 发帖数: 535 | 32 管理员不给装!!!
【在 w********m 的大作中提到】 : 可以试试熊猫pandas
|