R&Stata连接MongoDB数据库

R&Stata连接MongoDB数据库

昨晚探索GitHub时偶然发现了QA框架的作者在这个仓库(yutiansut/QUANTAXIS_OpenCenter)里介绍了如何在其它语言中使用QA建立的数据库。

QA框架在电脑上建立了一个蛮庞大的数据库,是Mongodb数据库。quantaxis的数据库是这样的:

这么大的数据库,如果只能在Python中使用简直是莫大的浪费。所以在其它语言中使用QA建立的数据库是非常有必要的。感谢作者提供的R和Matlab的调用方法。因为自己还没有成功入门Matlab,所以暂时就只学一下R的了,顺便在写个Stata的(思路非常简单,就是在Stata中调用R代码,然后封装成一个命令)。

首先是R,例如我想读取quantaxis数据库中的stock_day表,这个表的观测值数量为8,780,215(没错,878万):

1
2
3
4
5
6
library(rJava)
library(RMongo)
# 首先是创建数据库对象,27017是Mongodb的监听端口
mongo <- mongoDbConnect("quantaxis", "localhost", 27017)
# 然后是读取数据为一个数据框output,5个参数分别是rmongo.object, collection, query, skip=0, limit=1000
output <- dbGetQuery(mongo, "stock_day",'', 0, 8800000)

事实上,一次读如此巨量的数据是会出错的,因为stock_day表的大小是1.4G。所以还是稳着点,例如读10万:

1
output <- dbGetQuery(mongo, "stock_day",'', 0, 100000)

感觉R连接Mongodb数据库比连接MySQL要简单好多。

再研究以下Stata读取Mongodb数据库的数据。思路如下:

  1. Stata操作R连接Mongodb数据库把数据表读出为R的数据框;
  2. 使用rcall命令把R的数据框传递给Stata。
很不幸!!!刚刚尝试了以下,Stata中使用rcall和rsource命令调用rJava包的时候都出现了暂时无法解决的错误。所以放弃了刚刚的思路。

新的思路就是用R直接导出成csv文件再用Stata读取了。
R部分:

1
2
3
4
5
6
library(rJava)
library(RMongo)
mongo <- mongoDbConnect("quantaxis", "localhost", 27017)
output <- dbGetQuery(mongo, "stock_day",'', 0, 10000)
setwd("~/Desktop")
write.csv(output, file = 'mongo.csv', na = '.', row.names = F, fileEncoding = 'UTF-8')

Stata部分:

1
insheet using ~/Desktop/mongo.csv, clear

嗯,暂时就这样吧!

# R, Stata

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×