注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

周庭锐教授的私人空间

你的心,创造你周围真实的世界。

 
 
 

日志

 
 
关于我

周庭锐,汉族,台湾籍。中国人民大学商学院营销系教授、博导。英国Warwick大学商学博士。详细履历请移步:http://www.yes-china.org/chou/。email:tingjui.chou@gmail.com

网易考拉推荐

[笔记] 在MacOSX上处理大量统计数据  

2011-03-21 17:24:23|  分类: 营销精义 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
文/周庭锐

[笔记] 在MacOSX上处理大量统计数据 - 周庭锐 - 周庭锐教授的私人空间
 

最近败了一台MacBook Air,极棒的小机器,重量很轻,而电池续航力将近10个小时,对于我这种经常出没于机场的人来说,实在是个恩物。事实上这是我的第一台Mac,总算偿了少年时期非常想要拥有一台AppleII的梦想。花了一点时间去认识这个新东西,尤其是工作上极端需要的巨量数据与统计处理能力。

事实上,发现MacOSX和Linux本质上就是孪生兄弟,以下的描述基本可以通用。因为今年会开始处理许多样本数超过千万笔甚至几亿笔的数据,所以在这里做个笔记。基本想法是使用R进行统计分析,但是巨大的数据必须使用数据库来储存与处理,然后在R里面建立与数据库的联系。我的选择是MySQL。

1. 首先安装R,在Linux里安装Apache、MySQL、PHP等(如果在Linux安装时选择服务器安装,那么系统中缺省就已经安装好一切了)。MacOSX里已经自带Apache与PHP,但是系统缺省是这些服务处在未被激活的状态,所以尽管不用安装,却需要被激活。

2. 运行Apache:
在MacOSX里,打开“系统设置偏好”-->“共享”-->“Web共享”
sudo apachectl start
检查Apache是否运行成功:sudo apachectl -v
打开safari,在浏览器中输入“http://localhost”,可以看到内容为“It works!”的页面。
本地Apache服务器的根目录在:/Library/WebServer/Documents/

3. 运行PHP:
sudo vi /etc/apache2/httpd.conf
找到“#LoadModule php5_module libexec/apache2/libphp5.so”,把前面的#号去掉,保存并退出vi。
sudo cp /etc/php.ini.default /etc/php.ini
修改php.ini来配置PHP的参数,尤其是关于导入数据的最大值
sudo apachectl restart

4. 安装MySQL:
下载MySQL的dmp,并加以安装。
点击安装第2个文件MySQLStartupItem.pkg,让MySQL在开机时自动启动。
安装完毕后MySQL的root密码缺省为空,需要设置密码:
mysqladmin -u root password "密码"
设定data目录的权限:sudo chown -R mysql /usr/local/mysql/data
sudo su -
echo alias mysql='/usr/local/mysql/bin/mysql' >> /etc/bashrc
echo alias mysqladmin='/usr/local/mysql/bin/mysqladmin' >> /etc/bashrc

5. 读入巨大数据:
手上有一份某零售商半年某大区的POS资料,大约两百多万笔交易,摆在我这台MacOSX的桌面。
直接:mysql -uroot -p,进入mysql>

USE test;

CREATE TABLE data
(
DateKey varchar(8),
StoreCode varchar(8),
productcode  varchar(13),
ProductLineCode  varchar(2),
discountRate decimal(5,3),
UnitRetailPrice decimal(10,4),
VIPCode varchar(20),
UnitOriginalPrice decimal(10,4)
);

LOAD DATA LOCAL INFILE '/Users/jingluoguike/Desktop/data/data.txt'
INTO TABLE data
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(DateKey,StoreCode,productcode,ProductLineCode,discountRate,UnitRetailPrice,VIPCode,UnitOriginalPrice);

速度很快,200多万笔资料在45秒左右读完:
Query OK, 2006609 rows affected, 65535 warnings (45.39 sec)
Records: 2006609  Deleted: 0  Skipped: 0  Warnings: 6019829

6. 为了在R里面能够存取数据服务器的超巨大数据,必须让R与MySQL建立联系。
进入R,先安装程序包。
install.packages("DBI")
install.packages("RMySQL")
安装完毕,建立R与MySQL的联系。

7. 在R里面处理数据。
library(RMySQL)
drv<-dbDriver("MySQL")
con<-dbConnect(drv, dbname='test', user='root', password='密码', host='localhost')

检查,确认已经读进来:
> dbListTables(con)
[1] "data"
> dbListFields(con, "data")
[1] "DateKey"           "StoreCode"         "productcode"      
[4] "ProductLineCode"   "discountRate"      "UnitRetailPrice"  
[7] "VIPCode"           "UnitOriginalPrice"

将数据读进R的变量里:
mydata<-dbGetQuery(con, 'select * from data')
检查一下:
> mydata[1,]
  DateKey StoreCode productcode ProductLineCode discountRate  UnitRetailPrice VIPCode UnitOriginalPrice
1 DateKey  StoreCod productcode              Pr            0 0 VIPCode                 0

发现原始数据的第一个记录包含了栏位名称,解决之:
> mydata<-mydata[-1,]
> mydata[1:3,]
  DateKey StoreCode productcode ProductLineCode discountRate  UnitRetailPrice VIPCode UnitOriginalPrice
2 20040101 21200007 DS34CH51DB036 07 0   0 332624197505070000     0
3 20040101 21200007 DS34CH51DB036 07 5 219 332624197505070000   438
4 20040101 21200007 DS34AF11LB021 07 0   0 332624197505070000     0
  评论这张
 
阅读(808)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017