In [5]:
import re
import sys
import pandas as pd
import brainbox as bb
from matplotlib import pyplot as plt
import scipy.spatial.distance as dist
import scipy.cluster.hierarchy as clh

In [6]:
in_path = '/data1/abide/Out/Remote/some_failed/out'
out_path = '/data1/abide/Analysis/Remote/some_missing'
metric = 'stability_maps'

In [7]:
file_dict = bb.fileOps.grab_files(in_path, '.nii.gz', sub=metric)


I will be pulling files from /data1/abide/Out/Remote/some_failed/out/stability_maps

In [8]:
array_dict = bb.dataOps.read_files(file_dict)


I found 607 files to load.
 100.0 % done 0.00 seconds to go.
We are done

Compute the similarity of network metrics among the subjects for all network

This could be done in parallel if Marc gives me more memory


In [6]:
result_list = []
for n_id in range(10):
    sys.stdout.write('\rRunning network {}.'.format(n_id))
    sys.stdout.flush()
    
    eucl = dist.squareform(dist.pdist(array_dict[metric][..., n_id], 'euclidean'))
    Y = clh.linkage(eucl, method='ward')
    result_list.append((eucl, Y))


Running network 9.

Visualize the things


In [8]:
f = plt.figure(figsize=(18, 50))
order_net = None
for n_id in range(10):
    n_id += 1
    sys.stdout.write('\rRunning network {}.'.format(n_id))
    sys.stdout.flush()
    (eucl, Y) = result_list[n_id-1]
    ax = f.add_subplot(5,2,n_id)
    subdend = bb.visuOps.add_subplot_axes(ax, [0, 0.71, 1, 0.29])
    submat = bb.visuOps.add_subplot_axes(ax, [0, 0, 1, 0.7])
    if order_net:
        Y = result_list[order_net][1]
    
    Z1 = clh.dendrogram(Y, ax=subdend)
    if order_net:
        subdend.matshow(np.ones((100,20)), aspect='auto')

    idx = Z1['leaves']
    tmp = eucl[idx, :]
    D = tmp[:, idx]
    a = submat.matshow(-D, aspect='auto')
    submat.set_xticks([])
    submat.set_yticks([])
    subdend.set_xticks([])
    subdend.set_yticks([])
    ax.set_xticks([])
    ax.set_yticks([])
    ax.set_title('Network {}'.format(n_id))
f.suptitle('Stability Maps')


Running network 10.
Out[8]:
<matplotlib.text.Text at 0x13b7af50>

Grab the phenotype data


In [16]:
pheno_path = '/home/surchs/Project/abide/pheno/pheno_full.csv'
pheno = pd.read_csv(pheno_path)

In [30]:
# Get the real sub ids from the file names
sub_ids = np.array([int64(re.search(r'(?<=\d{2})\d{5}', sub_id).group()) for sub_id in file_dict['sub_name']])

In [31]:
# Get the relevant section of the pheno data
this_pheno = pheno[pheno['SUB_ID'].isin(sub_ids)]

Find a specific number of clusters and investigate them


In [38]:
# Define the network
netw = 2
# Build the distance metric
eucl = dist.squareform(dist.pdist(array_dict[metric][..., netw], 'euclidean'))
Y = clh.linkage(eucl, method='ward')
# Make clusters out of the hierarchy
fl = clh.fcluster(Y,10,criterion='maxclust')

In [56]:
# Define the cluster
clust = 1
# Get the subjects belonging to this cluster
cl_subs = sub_ids[fl == clust]
cl_phen = pheno[pheno['SUB_ID'].isin(cl_subs)]

In [65]:
cl_phen[['AGE_AT_SCAN', 'FIQ']]


Out[65]:
AGE_AT_SCAN FIQ
8 20.9000 101
16 17.5000 125
23 20.0000 111
26 21.1000 103
28 23.6000 128
38 33.0000 103
48 24.0000 118
52 28.0000 129
57 20.0000 124
64 30.0000 126
68 11.0000 101
71 9.7300 122
74 9.3000 120
77 8.0700 115
80 10.8200 117
96 8.4500 88
98 11.3300 95
101 11.0900 125
103 11.8500 117
111 11.7900 98
114 11.1700 114
115 12.4300 98
117 10.2900 109
121 24.0000 106
130 22.0000 128
131 19.0000 109
157 16.2000 NaN
158 12.4000 NaN
164 12.8000 NaN
165 15.2000 NaN
... ... ...
761 17.7900 95
764 13.4600 107
766 14.0300 108
767 11.2500 118
775 15.7400 106
779 13.8200 106
780 9.5000 109
785 13.0800 92
793 13.2800 91
798 11.6600 119
799 12.1500 128
807 13.6300 118
809 12.8200 102
960 14.9432 138
967 24.9884 100
969 27.3238 116
970 12.9391 130
971 10.4668 144
977 18.8008 111
982 18.1547 111
998 21.6482 117
1001 20.1780 91
1003 29.0897 127
1004 17.1663 88
1006 21.4346 96
1013 19.6277 110
1021 21.1307 99
1025 32.9582 90
1027 17.6454 87
1044 18.4175 80

163 rows × 2 columns


In [67]:
cl_phen[['AGE_AT_SCAN', 'SITE_ID']].groupby('SITE_ID').aggregate(np.median).plot()


Out[67]:
<matplotlib.axes.AxesSubplot at 0x6513fd0>

In [53]:
cl_phen


Out[53]:
SITE_ID SUB_ID DX_GROUP DSM_IV_TR AGE_AT_SCAN SEX HANDEDNESS_CATEGORY HANDEDNESS_SCORES FIQ VIQ ... WISC_IV_BLK_DSN_SCALED WISC_IV_PIC_CON_SCALED WISC_IV_MATRIX_SCALED WISC_IV_DIGIT_SPAN_SCALED WISC_IV_LET_NUM_SCALED WISC_IV_CODING_SCALED WISC_IV_SYM_SCALED EYE_STATUS_AT_SCAN AGE_AT_MPRAGE BMI
7 CALTECH 51463 1 1 20.2000 2 R NaN 102 101 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
10 CALTECH 51466 1 1 27.6000 1 Ambi NaN 106 111 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
18 CALTECH 51474 1 1 20.9000 1 R NaN 100 90 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
25 CALTECH 51481 2 0 27.9000 1 R NaN 117 133 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
29 CALTECH 51485 2 0 23.9000 1 R NaN 123 113 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
34 CALTECH 51490 2 0 44.1000 1 R NaN 108 107 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
43 CMU 50647 1 1 27.0000 1 R NaN 104 97 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
45 CMU 50649 1 1 22.0000 1 R NaN 127 121 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
47 CMU 50651 1 1 39.0000 1 Ambi NaN 116 108 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
49 CMU 50653 1 1 30.0000 1 R NaN 134 131 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
50 CMU 50654 1 1 24.0000 1 L NaN 95 99 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
55 CMU 50659 2 0 27.0000 1 R NaN 109 111 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
56 CMU 50660 2 0 25.0000 1 Ambi NaN 115 116 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
58 CMU 50663 2 0 21.0000 1 R NaN 101 94 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
65 KKI 50772 2 0 12.7700 1 R 100.00 98 NaN ... 13 8 10 7 11 7 8 1 NaN NaN
75 KKI 50782 2 0 10.1800 1 R 83.00 108 NaN ... 10 5 11 10 13 9 12 1 NaN NaN
79 KKI 50786 2 0 8.7500 1 R 100.00 112 NaN ... 8 12 12 8 12 13 12 1 NaN NaN
88 KKI 50795 1 2 8.0900 2 R 100.00 92 NaN ... 11 7 11 9 4 9 6 1 NaN NaN
97 KKI 50804 1 1 8.3300 1 R 100.00 78 NaN ... 11 5 7 9 6 4 10 1 NaN NaN
120 LEUVEN_1 50682 2 0 23.0000 1 R NaN 128 118 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
122 LEUVEN_1 50685 2 0 23.0000 1 R NaN 112 114 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
133 LEUVEN_1 50696 1 1 20.0000 1 R NaN 121 118 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
134 LEUVEN_1 50697 1 1 19.0000 1 R NaN 101 99 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
138 LEUVEN_1 50701 2 0 18.0000 1 R NaN 109 131 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
139 LEUVEN_1 50702 1 1 18.0000 1 R NaN 100 110 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
153 LEUVEN_2 50726 2 0 16.6000 1 R NaN NaN 130 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
155 LEUVEN_2 50728 2 0 15.6000 1 R NaN NaN 116 ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
199 MAX_MUN 51331 1 2 35.0000 1 R NaN -9999 NaN ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
204 MAX_MUN 51336 2 0 26.0000 1 R NaN 114 NaN ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
207 MAX_MUN 51340 2 0 29.0000 1 R NaN 110 NaN ... NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
760 UCLA_1 51260 2 0 13.6600 1 R NaN 95 117 ... NaN NaN NaN NaN NaN NaN NaN 1 13.66 NaN
792 UCLA_2 51300 1 1 14.0800 1 L NaN 92 104 ... NaN NaN NaN NaN NaN NaN NaN 1 14.08 NaN
801 UCLA_2 51309 2 0 11.9000 1 R NaN 107 116 ... NaN NaN NaN NaN NaN NaN NaN 1 11.93 NaN
808 UCLA_2 51316 2 0 12.6600 1 L NaN 94 87 ... NaN NaN NaN NaN NaN NaN NaN 1 12.66 NaN
959 USM 50436 2 0 13.8097 1 NaN 86.67 126 120 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
961 USM 50438 2 0 15.0253 1 NaN 80.00 97 87 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
972 USM 50449 2 0 18.2177 1 NaN 73.33 108 104 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
975 USM 50452 2 0 29.9685 1 NaN 93.33 112 108 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
978 USM 50455 2 0 31.2827 1 NaN 100.00 112 111 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
979 USM 50456 2 0 16.0986 1 NaN -80.00 109 104 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
981 USM 50458 2 0 26.1465 1 NaN 100.00 148 137 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
985 USM 50462 2 0 24.6543 1 NaN 100.00 120 121 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
997 USM 50474 2 0 22.0479 1 NaN 80.00 110 112 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
999 USM 50476 1 1 20.1697 1 NaN 80.00 108 109 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1002 USM 50479 1 1 22.8802 1 NaN 100.00 113 108 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1007 USM 50484 1 1 19.7043 1 NaN 73.33 102 95 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1018 USM 50495 1 1 22.5599 1 NaN -86.67 88 86 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1022 USM 50499 1 1 25.4346 1 NaN 93.33 113 121 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1023 USM 50500 1 1 17.2375 1 NaN 100.00 118 113 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1024 USM 50501 1 1 17.7057 1 NaN 93.33 78 79 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1026 USM 50503 1 1 28.6708 1 NaN 53.33 80 91 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1028 USM 50505 1 1 33.1828 1 NaN 60.00 95 86 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1030 USM 50507 1 1 28.1095 1 NaN 40.00 97 108 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1035 USM 50512 1 1 15.4908 1 NaN 73.33 121 108 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1037 USM 50514 1 1 21.4018 1 NaN 100.00 109 99 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1038 USM 50515 1 1 15.8522 1 NaN 73.33 94 71 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1039 USM 50516 1 1 17.1143 1 NaN 80.00 107 108 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1042 USM 50519 1 1 16.3778 1 NaN 80.00 83 78 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1043 USM 50520 1 1 17.6728 1 NaN 86.67 76 55 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN
1050 USM 50527 1 3 18.4148 1 NaN 100.00 93 84 ... NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN

122 rows × 74 columns


In [ ]: