Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@naholyr
Forked from mhawksey/TAGSStats.R
Created January 26, 2012 11:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save naholyr/1682312 to your computer and use it in GitHub Desktop.
Save naholyr/1682312 to your computer and use it in GitHub Desktop.
Read edge list from TAGS Spreadsheet calculate SNA data and POST back
library(igraph)
library(reshape)
library(plyr)
require(RJSONIO)
require(RCurl)
# Google Spreadsheet key (must be published to the web)
key='0AqGkLMU9sHmLdGNYZDVyTWl1ZmtNbmFzWGlpUkt1Tmc'
# Sheet gid name
gid=105
# Publsih as service url
serviceUrl='https://docs.google.com/macros/exec?service=AKfycbwyuUVgwcK1ONFO22IrROC_hG0pGBBCQyN3lLUdxA'
# A secret set in the Script Editor of the spreadsheet to prevent unauthorised data entry
secret='FzWGlpUkt1Tmc'
# Read data from spreadsheet
ss = read.csv(paste('https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=', key ,'&single=true&gid=', gid, '&output=csv', sep=""), header = F)
#pass to igraph
g <- graph.data.frame(ss, directed = T)
# calculate some stats
betweenness_centrality <- betweenness(g,v=V(g),directed = TRUE)
eigenvector_centrality<-evcent(g)
pagerank<-page.rank(g)$vector
degree<-degree(g, v=V(g), mode = "total")
degree_in<-degree(g, v=V(g), mode = "in")
degree_out<-degree(g, v=V(g), mode = "out")
screen_name<-V(g)$name
# might want to get centralization stats http://igraph.wikidot.com/r-recipes (not included for now)
# bind into matrice
datagrid<-data.frame(I(screen_name),degree,degree_in,degree_out,betweenness_centrality,pagerank,eigenvector_centrality[[1]])
#data<-cbind(degree,degree_in,degree_out,betweenness_centrality,pagerank,eigenvector_centrality[[1]])
cc <- c("screen_name", "degree","degree_in","degree_out","betweenness_centrality","pagerank","eigenvector_centrality")
colnames(datagrid) <- cc
rownames(datagrid) <- screen_name
# convert to JSON
test <- data.matrix(datagrid)
dg = toJSON(data.matrix(datagrid))
dglabels = toJSON(rownames(datagrid))
#get top results from data.frame http://stackoverflow.com/a/3320420/1027723
datagrid.m <- melt(datagrid, id = 1)
a.screen_name <- cast(datagrid.m, screen_name ~ . | variable)
a.screen_name.max <- aaply(a.screen_name, 1, function(x) arrange(x, desc(`(all)`))[1:10,])
datagrid.screen_name.max <- adply(a.screen_name.max, 1)
toptens <- cbind(datagrid.screen_name.max[,2],datagrid.screen_name.max[,3],datagrid.screen_name.max[,1])
toptens = toJSON(toptens)
toptenslabels = toJSON(colnames(datagrid))
# write back to spreadsheet http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method/
# SSL fix http://code.google.com/p/r-google-analytics/issues/detail?id=1#c3
options(RCurlOptions = list(capath = system.file("CurlSSL", "cacert.pem", package = "RCurl"), ssl.verifypeer = FALSE))
# post form
postForm(serviceUrl, "datagrid" = dg, "datagridlabels" = dglabels, "toptens" = toptens, "toptenslabels" = toptenslabels, "secret" = secret)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment