04-20 10:35
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[Data Mining with R] R과 MongoLab 연동하기 팁 본문

Data Science/Data Mining with R Programming

[Data Mining with R] R과 MongoLab 연동하기 팁

cinema4dr12 2014. 11. 3. 23:15

예전 글에서 R과 MongoDB 연동에 대해 다룬 적이 있다.

이번 글에서는 로컬호스트의 MongoDB가 아닌 MongoDB의 클라우드 호스팅인 MongoLab과 R을 연동하는 방법에 대하여 알아보도록 하자.


우선 MongoLab에서 만든 Database를 하나 만들고 데이터를 입력한다. 설명을 위해 다음을 가정한다:

- Database Name: myDB

- DB User: gchoi

- Password: 1234


위와 같이 DB를 만들면 MongoLab에서 다음과 유사한 형태의 URI Standard를 제시할 것이다:

mongodb://<dbuser>:<dbpassword>@ds047950.mongolab.com:47950/myDB


이제 Shell에서 다음과 같이 입력하여 MongoLab과 연결한다:

$ mongo ds047950.mongolab.com:47950/myDB -u gchoi -p 1234


위의 명령에 대한 프로토타입을 다음을 가정하였다:

$ mongo ds047950.mongolab.com:47950/myDB -u <dbuser> -p <dbpassword>


이는 MongoLab에서 Shell을 이용하여 연결하는 방법으로 제시되는 것이다.

성공적으로 연결이 되면 "PRIMARY>"와 같은 형식의 프롬프트가 나올 것이다.

테스트용으로 Shell에 다음과 같이 데이터를 입력한다:

PRIMARY> db.users.insert({name: "gchoi", age: 39})
PRIMARY> db.users.insert({name: "jmpark", age: 27})
PRIMARY> db.users.insert({name: "hskim", age: 39})
PRIMARY> db.users.insert({name: "tjkwak", age: 33})


다음과 같이 입력하여 데이터가 제대로 입력되었는지 확인한다:

PRIMARY> db.users.find().pretty()
{
  "_id" : ObjectId("545789dc416daa7f215dfd37"),
  "name" : "gchoi",
  "age" : 39
}
{
  "_id" : ObjectId("545789dd416daa7f215dfd38"),
  "name" : "jmpark",
  "age" : 27
}
{
  "_id" : ObjectId("545789df416daa7f215dfd39"),
  "name" : "hskim",
  "age" : 39
}
{
  "_id" : ObjectId("54578a7d416daa7f215dfd3a"),
  "name" : "tjkwak",
  "age" : 33
}


이제 R의 콘솔에서 MongoLab에 DB에 입력한 데이터를 가져올 것이다. R에 MongoDB 패키지인 rmongodb 패키지가 설치되어 있다고 가정한다. 만약 이 과정이 궁금하면 R과-MongoDB-연동하기를 참고하기 바란다.

R에서 MongoLab의 DB와 연결하려면 R 콘솔에 다음과 같이 입력한다:

> mongo = mongo.create(host = "ds047950.mongolab.com:47950", username = "gchoi", password = "1234", db = "myDB")


만약 DB와 연결이 잘 되었는지 확인하려면 다음과 같이 입력한다:

> mongo.is.connected(mongo)
[1] TRUE

위와 같이 TRUE 값이 반환되면 연결이 성공적으로 된 것이다.


이제 DB의 users 컬렉션의 모든 데이터를 불러오도록 한다:

> ns = "myDB.users"
> temp = mongo.find.all(mongo, ns)
> temp
    _id        name     age
val -603968104 "gchoi"  39 
val 0          "jmpark" 27 
val 1          "hskim"  39 
val 0          "tjkwak" 33 


ns는 namespace로서 DB의 컬렉션을 의미한다.

여기서는 생략하였지만, 위와 같이 입력할 경우 중간에 warning이 등장할 것이다. "NoSQL 데이터 구조에 대해 무언가 실패한다..."는 식으로 나올텐데 크게 신경쓰지 않아도 된다.

참고로 temp 변수에 불러온 데이터는 matrix 포맷이다.

Comments