Hello everybody,
in my first tutorial I described how you can build your own MongoDB and use a JAVA program to mine Twitter either via the search function and a loop or via the Streaming API. But till now you just have your tweets stores in a Database and we couldn´t get any insight in our tweets now.
So we will take a look in this tutorial on how to connect to the MongoDB with R and analyze our tweets.
Start the MongoDB
To access the MongoDB I use the REST interface. This is the easiest way for accessing the database with R when just have started with it. If you are a more advanced user, you can also use the rmongodb package and the code provided by the user abhishek. You can find the code below.
So we have to start the MongoDB daemon. It is located in the folder “bin” and has the name “mongod”. So navigate to this folder and type in:
./mongod --rest
This way we start the server and enable the access via the REST interface.
R
Let´s take a look at our R code and connect to the Database.
First we need the two packages RCurl and rjson. So type in:
library(RCurl) library(rjson)
Normally the MongoDB server is running on the port 28017. So make sure that there is no firewall or other program blocking it.
So we have to define the path to the data base with:
database = "tweetDB" collection = "Apple" limit = "100" db <- paste("http://localhost:28017/",database,"/",collection,"/?limit=",limit,sep = "")
tweetDB – name of your database
Apple – name of your collection
limit=100 – number of tweets you want to get
Ok now we can get our tweets with
tweets <- fromJSON(getURL(db))
And so you saved the Tweets the received. You can now analyze them like I explained in other tutorials about working with R and Twitter.
You can for example extract the text of your tweets and store it in a dataframe with:
tweet_df = data.frame(text=1:limit) for (i in 1:limit){ tweet_df$text[i] = tweets$rows[[i]]$tweet_text} tweet_df
If you have any questions feel free to ask or follow me on Twitter to get the newest updates about analytics with R and analytics of Social Data.
# install package to connect through monodb install.packages(“rmongodb”) library(rmongodb) # connect to MongoDB mongo = mongo.create(host = “localhost”) mongo.is.connected(mongo) mongo.get.databases(mongo) mongo.get.database.collections(mongo, db = “tweetDB2″) #”tweetDB” is where twitter data is stored library(plyr) ## create the empty data frame df1 = data.frame(stringsAsFactors = FALSE) ## create the namespace DBNS = “tweetDB2.#analytic” ## create the cursor we will iterate over, basically a select * in SQL cursor = mongo.find(mongo, DBNS) ## create the counter i = 1 ## iterate over the cursor while (mongo.cursor.next(cursor)) { # iterate and grab the next record tmp = mongo.bson.to.list(mongo.cursor.value(cursor)) # make it a dataframe tmp.df = as.data.frame(t(unlist(tmp)), stringsAsFactors = F) # bind to the master dataframe df1 = rbind.fill(df1, tmp.df) } dim(df1)
Hi Julianhi,
Even I tried to get the data from MongoDB
Below is the code and its working fine
# install package to connect through monodb
install.packages(“rmongodb”)
library(rmongodb)
# connect to MongoDB
mongo = mongo.create(host = “localhost”)
mongo.is.connected(mongo)
mongo.get.databases(mongo)
mongo.get.database.collections(mongo, db = “tweetDB2″) #”tweetDB” is where twitter data is stored
library(plyr)
## create the empty data frame
df1 = data.frame(stringsAsFactors = FALSE)
## create the namespace
DBNS = “tweetDB2.#analytic”
## create the cursor we will iterate over, basically a select * in SQL
cursor = mongo.find(mongo, DBNS)
## create the counter
i = 1
## iterate over the cursor
while (mongo.cursor.next(cursor)) {
# iterate and grab the next record
tmp = mongo.bson.to.list(mongo.cursor.value(cursor))
# make it a dataframe
tmp.df = as.data.frame(t(unlist(tmp)), stringsAsFactors = F)
# bind to the master dataframe
df1 = rbind.fill(df1, tmp.df)
}
dim(df1)
Regards
Abhishek
This works for me. Many thanks, Abhishek and, of course, JULIANHI!
Thank you Bodong Chen and also thank you Abhishek for sharing your code. I didn´t now that there is a “real” MongoDB package for R.
Regards
Hey Abhishek,
If you don´t object, I would like to put your code into my tutorial. Do you have a Twitter Account or something like that I could link to?
Regards
Hi Julianhi,
Please go ahead and put code in your tutorial.it will help many like me
my twitter id @kapoorabhishek
Regards
Abhishek
Pingback: Build your own Twitter Archive and Analyzing Infrastructure with MongoDB, Java and R [Part 1] [Update] | julianhi's Blog
I have the same infrastructure running for some time now with data from twitter, facebook , clout , blog, forums all integrated into a single mongodb collection .
Here is small example and addition to Abhishek’s code to filter and select specific columns from the collection which select only English only tweets.
#define a query condition
query = mongo.bson.buffer.create()
mongo.bson.buffer.append(query, “interaction.interaction.type” , “twitter”)
mongo.bson.buffer.append(query, “interaction.twitter.lang” , “en”)
# when complete, make object from buffer
query = mongo.bson.from.buffer(query)
# define the fields
fields = mongo.bson.buffer.create()
mongo.bson.buffer.append(fields, “interaction.interaction.content”, 1L)
mongo.bson.buffer.append(fields, “_id”, 0L)
# when complete, make object from buffer
fields = mongo.bson.from.buffer(fields)
# create the cursor
cursor = mongo.find(mongo, ns=DBNS, query=query, fields=fields)
……..
….rest of the code is same
…….
….
….
Hey Santhosh Nair,
thanks for sharing your code. Do you have something like a web page for your project?
I´d like to see how you realized the connection forums and blogs.
Regards
Hi julianhi
I am using a third party aggregation service to integrate the data before writing it to Mongodb . Unfortunately i cannot provide more details
Regards
Santhosh
Hi Julianhi,
I’m a beginner. I want to know if you have a code for collecting data with R & MongoDB without using Javascript. I like your work and it’s very usefull to built this program. I’d want improve my knowledge 🙂 Thanks!!
Hey Gianpiero,
Thank you for your comment!
But I don´t have the code for doing this task with R. You can search for the RMongoDB package and its documentation. With it´s help you could program it on your own.
Regards
Pingback: Build your own Twitter Archive and Analyzing Infrastructure with MongoDB, Java and R [Part 1] [Update] - ThinkToStart