Print

Print


*****  To join INSNA, visit http://www.insna.org  *****

Hey all,

Following this thread, its actually quite easy to use Rpy to get Python to
do all the messy file and text processing and then just call R for the
interesting computations.
(Coincidentally, I've been doing this all weekend).

Attached is a basic commented sample script:
It assumes that you have a file that's tab delimited with the .txt
extension, there is no additional information in the file, the file is
rectangular.

I've done slightly more interesting things with r and rpy, feel free to ask
me about the details. Let me know if its of use.

Take Care,
BERNiE
    
You'll need to install:
R: http://cran.r-project.org/
rpy: http://rpy.sourceforge.net/
python: http://www.python.org
Numeric: http://sourceforge.net/projects/numpy
A python module (you can use scipy, too but just installing this one is MUCH
easier). 

It works on a Mac and hence should work on flavors of linux and unix. It
should certainly work on Windows, too. I ran the code on 88 matrices wih ~
20 vertices in each case: 4 seconds.

--- here's the code ---

# Basic rpy matrix analyzer
# Written by Bernie Hogan, March 5, 2006
# Do what you like with this code.
# Based on Connected Lives Interview Analysis Code:
# CL_NetAnalyzer_2.py

import string, os
from rpy import *
r.library('sna')

DIRECTORY = "#paste your directory here (no / at the end)"

def getNetStats(rawNetworkFileAddress):
    outList = [rawNetworkFileAddress]
    filein = open(DIRECTORY + os.sep + rawNetworkFileAddress)

    lis = []
    for i in filein:
        #This takes a line of a file,
        #cuts off the carriage return at the end,
        #and breaks it up at every tab.
        #i.e. if you have a csv, you can just replacce \t with ,
        row = i.strip().split('\t')

        #this line takes every entry in the
        #list and turns it into an integer.
        #if your matrix file has missing values - it will break this code
        row = map(lambda x:int(x), row)

        #adds the row to the matrix
        lis.append(row)
        
    #turns the matrix in to an array (which is what rpy asks for)
    arr = array(lis)
    
    #here's the R code, you just call r.
    #and then whatever the function is in r
    st =  "%r" % r.components(arr)
    outList.append(st)
    st =  "%.3f" % r.gden(arr, mode="graph")
    outList.append(st)
    return string.join(outList, "\t")

def getFiles():
    dirList = os.listdir(DIRECTORY)
    output = ''    
    for i in dirList:
        #Its important that the files you want are
        #the only ones with the appropriate file extension
        if i[-3:] ==  "txt":
            output += getNetStats(i) + "\n"
            print i
    #You can change the directory and this
    #file can directly be imported to excel or SPSS etc...
    fileout = open(DIRECTORY + os.sep + "netstats.txt", 'w')
    fileout.write(output)
    fileout.close()

getFiles()

-- end code --

_____________________________________________________________________
SOCNET is a service of INSNA, the professional association for social
network researchers (http://www.insna.org). To unsubscribe, send
an email message to [log in to unmask] containing the line
UNSUBSCRIBE SOCNET in the body of the message.