9号通宵大战,总算大致赶完了一篇报告。这个通宵让我创下了42小时不睡觉的记录,其惨烈程度可想而知。这篇 报告的主题是针对人口抽样调查数据进行分析,得出地区人口素质的一些描述性结论。其实我的相当大一部分时间都花在了处理数据上面,因为数据比较庞大,一共 有260万行、90个变量,数据文件大小在FoxPro存储格式下为424M,首先我要想办法将 FoxPro数据转化为一般常见的数据库格式,因此将之导出为dBase IV(*.dbf),这样SPSS就可以读了(当然也可以用R的RODBC包读), 从dBase IV转为SPSS格式(*.sav)之后文件大小变为约1.5G,但很容易就能找出减小数据文件大小的办法:将以文本形式(String)表示的数字转化 为数值型(Numeric)即可(其实这份数据中的大部分数值都是用文本形式保存的,除非以零开头,都可以直接转换为数值形式)——我并不了解真正的 SPSS存储形式,但我猜测对于字符数据,至少要比数值数据多两个引号吧。初步整理之后,文件大小能缩减到400多M,当然我是不会直接用SPSS来作分 析的,因为速度太慢,一个变量的频数统计就要花半分钟时间,我可没那么多时间和耐心去等。最终我采用的办法是将数据存为纯文本格式,具体来说是逗号分隔符 数据(*.csv),然后开始用R来作分析。到这里,数据的预处理仍然没有结束,我为了让分析做得更快,又采取了一个策略:将每一列变量都单独存为一个数 据文件。要达到这样的目的,当然要首先把每一列变量提取出来,那么怎样依次提取变量呢?方法很简单,用SQL的select语句即可。文本文件当然也可以 当作数据库来处理,因为Windows一般会有文本文件的ODBC Driver,利用R的RODBC包结合SQL的select语句,变量就可以顺利被选择出来了。
八 122007
最近评论