-
-
Save naholyr/1682312 to your computer and use it in GitHub Desktop.
Read edge list from TAGS Spreadsheet calculate SNA data and POST back
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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