In [8]:
import numpy as np

In [ ]:


In [9]:
# place ipynb in same folder as 
file_name = "AgencyPairs.txt"
pairs = np.genfromtxt(file_name, dtype="S64,S64,S64,S64,S64,S64,S64,i,S64")

In [10]:
# have a peek at the data
pairs[:5]


Out[10]:
array([ ('Agency-Pairs:', '(ISK,', 'MD)', '&', '(ISK,', 'mL)', 'returned', 598, 'events'),
       ('Agency-Pairs:', '(ISK,', 'MD)', '&', '(ISK,', 'md)', 'returned', 17210, 'events'),
       ('Agency-Pairs:', '(ISK,', 'MD)', '&', '(ISK,', 'ML)', 'returned', 598, 'events'),
       ('Agency-Pairs:', '(ISK,', 'MD)', '&', '(ISC,', 'MS)', 'returned', 221, 'events'),
       ('Agency-Pairs:', '(ISK,', 'MD)', '&', '(ISC,', 'mb)', 'returned', 987, 'events')], 
      dtype=[('f0', 'S64'), ('f1', 'S64'), ('f2', 'S64'), ('f3', 'S64'), ('f4', 'S64'), ('f5', 'S64'), ('f6', 'S64'), ('f7', '<i4'), ('f8', 'S64')])

In [11]:
# parse the data and look at sets
agencies1 = [pair[1][1:-1].replace('_','') for pair in pairs]
mags1 = [pair[2][:-1].upper() for pair in pairs]
agencies2 = [pair[4][1:-1].replace('_','') for pair in pairs]
mags2 = [pair[5][:-1].upper() for pair in pairs]
nums_shared = [pair[7] for pair in pairs]

print set(mags1)
print set(mags2)
print list(set(mags1) - set(mags2))
print list(set(mags2) - set(mags1))

print set(agencies1)
print set(agencies2)
print list(set(agencies1) - set(agencies2))
print list(set(agencies2) - set(agencies1))


set(['MD', 'MS1MX', 'UK', 'MB', 'ML', 'MBTMP', 'MS1', 'MW', 'MS', 'MB1MX', 'MB1'])
set(['MBTMP', 'MS1MX', 'UK', 'MB', 'ML', 'MD', 'MS1', 'MW', 'MS', 'MB1MX', 'MB1'])
[]
[]
set(['EIDC', 'CSEM', 'NIC', 'NEIC', 'ATH', 'IDC', 'ISK', 'HLW', 'BJI', 'ISCJB', 'ISC', 'DDA', 'MOS', 'THE'])
set(['USCGS', 'NEIS', 'EIDC', 'CSEM', 'NIC', 'NEIC', 'NAO', 'ATH', 'IDC', 'ISK', 'HLW', 'MEDRCMT', 'BJI', 'ISCJB', 'ISC', 'DDA', 'MOS', 'THE', 'GII'])
[]
['USCGS', 'MEDRCMT', 'NEIS', 'NAO', 'GII']

In [20]:
# prioritize magnitudes and print pairs in order of size of overlap
mag_priority = ['MW','MS','MD']
#conn_format = '%s%s/"%s, %s"[input] -> [edge label={%d}] %s%s/"%s, %s"[input];'
conn_format = '%s%s[input] -> [edge label={%d}] %s%s[input];'

data = zip(agencies1, mags1, agencies2, mags2, nums_shared)
data = list(set(data))
data = sorted(data, key=lambda pair: pair[4], reverse=True)

for agency in set(agencies1 + agencies2):
    string = "{ [same layer] "
    for mag in mag_priority:
        string = string + ("%s%s, " % (agency, mag) )
    string = string[:-2] + " };"
    print string

print

for i, m1 in enumerate(mag_priority):
    for m2 in mag_priority[i:]:
        for agency1, mag1, agency2, mag2, n_shared in data:
            if (mag1 == m1 and mag2 == m2) or (mag1 == m2 and mag2 == m1):
                if mag_priority.index(m1) >= mag_priority.index(m2):
                    print conn_format % (agency1, mag1, n_shared, agency2, mag2)
                else:
                    print conn_format % (agency2, mag2, n_shared, agency1, mag1)


{ [same layer] USCGSMW, USCGSMS, USCGSMD };
{ [same layer] NEISMW, NEISMS, NEISMD };
{ [same layer] EIDCMW, EIDCMS, EIDCMD };
{ [same layer] CSEMMW, CSEMMS, CSEMMD };
{ [same layer] NICMW, NICMS, NICMD };
{ [same layer] NEICMW, NEICMS, NEICMD };
{ [same layer] NAOMW, NAOMS, NAOMD };
{ [same layer] ATHMW, ATHMS, ATHMD };
{ [same layer] IDCMW, IDCMS, IDCMD };
{ [same layer] ISKMW, ISKMS, ISKMD };
{ [same layer] HLWMW, HLWMS, HLWMD };
{ [same layer] MEDRCMTMW, MEDRCMTMS, MEDRCMTMD };
{ [same layer] BJIMW, BJIMS, BJIMD };
{ [same layer] ISCJBMW, ISCJBMS, ISCJBMD };
{ [same layer] ISCMW, ISCMS, ISCMD };
{ [same layer] DDAMW, DDAMS, DDAMD };
{ [same layer] MOSMW, MOSMS, MOSMD };
{ [same layer] THEMW, THEMS, THEMD };
{ [same layer] GIIMW, GIIMS, GIIMD };

CSEMMW[input] -> [edge label={238}] NICMW[input];
NICMW[input] -> [edge label={205}] IDCMS[input];
NICMW[input] -> [edge label={317}] ISKMD[input];
NICMW[input] -> [edge label={269}] ATHMD[input];
ISCMS[input] -> [edge label={446}] IDCMS[input];
ISCJBMS[input] -> [edge label={397}] IDCMS[input];
ISCMS[input] -> [edge label={242}] ISCJBMS[input];
IDCMS[input] -> [edge label={443}] ATHMD[input];
ATHMD[input] -> [edge label={376}] ISCMS[input];
IDCMS[input] -> [edge label={283}] ISKMD[input];
IDCMS[input] -> [edge label={256}] DDAMD[input];
ISCMS[input] -> [edge label={221}] ISKMD[input];
HLWMD[input] -> [edge label={208}] IDCMS[input];
ISKMD[input] -> [edge label={17210}] ISKMD[input];
ATHMD[input] -> [edge label={14988}] ATHMD[input];
ISKMD[input] -> [edge label={7633}] CSEMMD[input];
ISKMD[input] -> [edge label={7069}] ATHMD[input];
DDAMD[input] -> [edge label={6172}] DDAMD[input];
ATHMD[input] -> [edge label={5723}] CSEMMD[input];
CSEMMD[input] -> [edge label={5165}] DDAMD[input];
ISKMD[input] -> [edge label={4526}] DDAMD[input];
ATHMD[input] -> [edge label={1967}] DDAMD[input];
DDAMD[input] -> [edge label={202}] HLWMD[input];

In [1]:
G = {'s':{'u':10, 'x':5},
     'u':{'v':1, 'x':2},
     'v':{'y':4},
     'x':{'u':3, 'v':9, 'y':2},
     'y':{'s':7, 'v':6}}

f = open('dotgraph.txt','w')
f.writelines('digraph G {\nnode [width=.3,height=.3,shape=octagon,style=filled,color=skyblue];\noverlap="false";\nrankdir="LR";\n')
f.writelines
for i in G:

    for j in G[i]:
        s= '      '+ i
        s +=  ' -> ' +  j + ' [label="' + str(G[i][j]) + '"]'
        s+=';\n'
        f.writelines(s)

f.writelines('}')
f.close()
print "done!"


done!

In [ ]: