diff --git a/.travis.yml b/.travis.yml index 41fef08..20edbeb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,11 +9,15 @@ env: secure: QvKbq/nKWPcVk5RrOD5rLUUioaM0iZ9PblW/ucd3zjPWdeJTKSG4BqFf+fWkLN+3aE9k+EeFsQ0voyKriKrSOHHOoHGIbROOdjM8+Uc06N8h1noJ/LLW1BBDbICtCMma70//QWYG+eqIGSBozp3tZ5QGbDZB5Nt5fNDSbO6rYJzfBF26jWAWjurB6E/6v+Dp3nbFRZ2Eju2/RG059w9Y5IK87n/GKUmiS3kRgLJaeSwvji8f6/29xVYsKhorw2GlQA0Es/rnXFHBF5tMqX1CrCjWGN2XH/MIRtrI7FxUz691LBXkGivOl8E6zjyKN/aTvjKe+PZHdF+VPCzjWMUklT2L5p4W6qbjxR+Uw/7ecfBeiTMkubzFig4kqpkz9skhfOiYCeEld+4dzl5mGFhpxwSXKLTQtVvwh7PGuuc22LWK4O5LyESv3jHHPyxEhB48GDc5illzalMqYw7+m/H1A8i4RSPx5xloNSMHmS1naNXq851kZmdLspqd67ECBNnLRN/AMfQIqltTlheFTYZk2hbD9g+fntjr1aboYIxyB1f33WSAJuyTBFagM/la/tVDUGM57WiV7dvLRXF1gXr4U7DzD7mUpflXmn75wCiuyNB4rWDv7LxEpgBR0iXJultzP0ewVPgAU31k8/rMapzfWwTX4z+kXgVNYJqe9XhBudY= install: - pip install -q networkx==$NETWORKX_VERSION - - pip install -q -r requirements.txt - pip install sphinx sphinx sphinxcontrib-napoleon sphinx_rtd_theme + - pip install -r requirements.txt + - pip install . script: - - python3 -m pytest -v --ignore=tests/regression_test.py -# temporarily ignore regression tests while we investigate why they are failing + # check cli installation + - scona -h + # run tests + - python3 -m pytest -v + # make docs - cd docs - make html - touch .nojekyll diff --git a/scona/__init__.py b/scona/__init__.py index 86adcc9..4a1cbd2 100644 --- a/scona/__init__.py +++ b/scona/__init__.py @@ -39,6 +39,7 @@ from scona.make_graphs import * from scona.graph_measures import * from scona.classes import * +from scona.analyses import * from scona.wrappers import * diff --git a/scona/analyses.py b/scona/analyses.py new file mode 100644 index 0000000..b1f5179 --- /dev/null +++ b/scona/analyses.py @@ -0,0 +1,349 @@ +from scona.classes import BrainNetwork, GraphBundle +from scona.make_corr_matrices import corrmat_from_regionalmeasures + +def network_analysis_from_matrix( + M, + cost, + n_rand, + name="critical_network", + seed=None, + parcellation=None, + centroids=None): + ''' + Run the standard scona network analysis on an array M, interpreted as + a weighted graph. + + This network analysis thresholds M at the desired cost to create a + binary network and calculates the network measures listed lower down. + + For the purposes of comparison this analysis also generates a number + of random graphs via edge swapping (see :func:`networkx.double_edge_swap`) + and reports global measures and rich club measures + + Parameters + ---------- + M : :class:`numpy.array` or :class:`pandas.DataFrame` + M will be treated as a weighted graph, where the + M[i][j] represents the weight of the edge connecting + node i to node j + cost : float + We construct a binary graph from M by restricting + to the ``cost*n/100`` highest weighted edges, where + ``n`` is the number of edges in M. + n_rand : int + The analysis requires the generation of random graphs + to create a distribution to test M against. Use n_rand + to sepcify how many graphs you wish to create. + name : str, optional + This is an optional label for the graph M, to distinguish + it from the random graphs. + seed : int, optional + parcellation : list, optional + Anatomical names to assign to the nodes of your graph + centroids : list, optional + Anatomical locations to assign to the nodes of your + graph. + + Returns + ------- + :class:`scona.GraphBundle`, :class:`pandas.DataFrame`, :class:`pandas.DataFrame`, :class:`pandas.DataFrame` + * A dictionary of networks created during this analysis, + with M indexed by `name` + * A dataframe reporting the nodal measures for the + nodes of M + * A dataframe reporting the global measures of M and + all random graphs + * A dataframe reporting the rich club at every + degree of M and all random graphs + + Network Measures + ================ + Nodal Measures + -------------- + * "degree" : int + the number of incident edges + * "betweenness" : float + the betweenness centrality of each node, see :func:`networkx.betweenness_centrality` + * "closeness" : float + the closeness centrality of each node, see :func:`networkx.closeness_centrality` + * "clustering" : float + the clustering coefficient of each node, see :func:`networks.clustering` + * "module" : int + each node is assigned an integer-named module by the louvain + method of community detection, see https://python-louvain.readthedocs.io + * "participation_coefficient" : float + the participation coefficient of nodes of G with partition + defined by "module". + * "shortest_path_length" : float + the average shortest path length for each node in G. + "length" in this case means the number of edges, and does + not consider euclidean distance. + * "total_dist" : float + the total length of the incident edges + * "average_dist" : float + the average length of the incident edges + * "hemisphere" : str + L or R, as determined by the sign of the x coordinate + and assuming MNI space. The x coordinates are negative + in the left hemisphere and positive in the right. + * "interhem" : int + the number of adjacent interhemispheric edges + * "interhem_proportion" : float + the proportion of adjacent edges that are interhemispheric + + Global Measures + --------------- + * "average_clustering" : float + see :func:`networkx.average_clustering` + * "average_shortest_path_length" : float + see :func:`networkx.average_shortest_path_length` + * "assortativity" : float + see :func:`networkx.degree_assortativity_coefficient` + * "modularity" : float + modularity of network under partition defined by "module" + * "efficiency" : float + see :func:`networkx.global_efficiency` + * "small..." + small world coefficient of networks relative to the + network derived from M. + See :func:`graph_measures.small_world_coefficient` + + Rich Club + --------- + For some integer k, the rich club coefficient of degree k + measures the completeness of the subgraph on nodes with + degree >= k. + See :func:`networkx.rich_club_coefficient` + ''' + # Initialise graph + weighted_network = BrainNetwork( + network=M, + parcellation=parcellation, + centroids=centroids) + + # Threshold graph + binary_network = weighted_network.threshold(cost) + + # Calculate the modules, distance and hemispheric attributes + # and the nodal measures + binary_network.partition() + binary_network.calculate_spatial_measures() + binary_network.calculate_nodal_measures() + + # Create setup for comparing binary_network against random graphs + # (note that this takes a bit of time because you're generating random + # graphs) + bundle = GraphBundle(graph_dict={name: binary_network}) + bundle.create_random_graphs(name, n_rand, seed=seed) + + # Add the small world coefficient to global measures + small_world = bundle.report_small_world(name) + + for gname, network in bundle.items(): + network.graph['global_measures'].update( + {"sw coeff against " + name: small_world[gname]}) + + return bundle, binary_network.report_nodal_measures(), bundle.report_global_measures(), bundle.report_rich_club() + + +def standard_analysis( + df, + names, + cost, + covars=None, + centroids=None, + method='pearson', + name="critical_network", + seed=None): + ''' + Create a structural covariance analysis network from `df` and run + the standard scona network analysis on it. + + To create the structural covariance network from `df`, scona + calculates the pairwise correlations of the columns in `names` + over the rows of `df`, correcting for covariance with the columns + of `covars`. + scona thresholds the resulting matrix at the desired cost to create + a binary network and calculates and returns a selection of network + measures; see :func:`network_analysis_from_matrix`. + + For the purposes of comparison this analysis also generates a number + of random graphs via edge swapping (see :func:`networkx.double_edge_swap`) + and reports global measures and rich club measures + + Parameters + ---------- + regional_measures : :class:`pandas.DataFrame` + a pandas DataFrame with individual brain scans as rows, and + columns including brain regions and covariates. The columns in + names and covars_list should be numeric. + names : list + a list of the brain regions whose correlation you want to assess + covars: list, optional + covars is a list of covariates (as DataFrame column headings) + to correct for before correlating brain regions. + method : string, optional + the method of correlation passed to :func:`pandas.DataFramecorr` + cost : float + We construct a binary graph from the correlation matrix by + restricting to the ``cost*n/100`` highest weighted edges, where + ``n`` is the number of edges. + n_rand : int + The analysis requires the generation of random graphs + to create a distribution to test the against. Use n_rand + to specify how many graphs you wish to create. + name : str, optional + This is an optional label for the initial structural covariance + network, to distinguish it from the random graphs. + seed : int, optional + centroids : list, optional + Anatomical locations to assign to the nodes of your graph. + + Returns + ------- + :class:`scona.GraphBundle`, :class:`pandas.DataFrame`, :class:`pandas.DataFrame`, :class:`pandas.DataFrame` + * A dictionary of networks created during this analysis, + with the initial structural covariance network indexed by + `name` + * A dataframe reporting the nodal measures for the nodes of + the structural covariance network + * A dataframe reporting the global measures of all networks + * A dataframe reporting the rich club, at every degree, of + each network. + ''' + + M = corrmat_from_regionalmeasures( + df, + names, + covars=covars, + method=method) + + return network_analysis_from_matrix( + M, + cost, + n_rand, + name=name, + seed=seed, + parcellation=names, + centroids=centroids) + +def groupwise_analysis( + df, + names, + group_var, + cost, + covars=None, + method='pearson', + seed=None): + # run first for true group assignments + groupwise_bundle = GraphBundle.from_regional_measures( + df, + names, + groupby=group_var, + covars=covars, + method=method) + groupwise_bundle.threshold(cost) + global_frames = [groupwise_bundle.report_global_measures()] + grouping_type = ["unshuffled"] + + padding = floor(log10(args.n_shuffle)) +1 + # run analysis on random groupings + for i in range(args.n_shuffle): + gb = GraphBundle.from_regional_measures( + df, + names, + groupby=group_var, + covars=covars, + method=method, + shuffle=True, + seed=seed) + gb.threshold(cost) + global_frames.append(gb.report_global_measures()) + grouping_type.append(str(i).zfill(padding)) + + + + gg_bundles = pd.concat(global_frames, keys=grouping_type) + gg_bundles.set_index(["group randomisation", "group"]) + + # split by grouping and write to file + #group_list = gg_bundles['group_var'].unique().tolist() + #for gv in group_list: + # gg_bundles.xs(gv, level="group").to_csv(gv+"") + + for gv, gv_frame in gg_bundles.groupby(level="group"): + gv_frame.to_csv(gv+"") + + +def sliding_window_analysis( + df, + names, + cost, + window_var, + window_size, + window_overlap, + covars=None, + method='pearson', + seed=None): + ''' + Create sliding window ... + see "Adolescent tuning of association cortex in human structural brain networks" by Frantisek Vasa et al. + + Parameters + ---------- + regional_measures : :class:`pandas.DataFrame` + a pandas DataFrame with individual brain scans as rows, and + columns including brain regions and covariates. The columns in + names and covars_list should be numeric. + names : list + a list of the brain regions whose correlation you want to assess + window_var : str + the name of the column in regional_measures by which to rank + participants. + window_size : int or float + the size (number of subjects) of each sliding window. + A decimal value between 0 and 1 will be interpreted as a + proportion of the whole cohort. E.g if window_size is 0.1, and + the cohort is 100 subjects each window will contain 10 subjects. + window_overlap : int or float + the number of subjects in the overlap between two consecutive + windows. If window_overlap is a decimal between 0 and + 1(not inclusive) then the intersection of two consecutive + windows will be window_overlap*(mean window size). + number_of_windows : int, optional + The number of windows you want to use for your analysis + odd_sized_bin : "last" or "first", optional + If it is not possible to construct equally sized windows, + choose either the last or the first window to have a + different size to the others. Default "last". + covars : list, optional + covars is a list of covariates (as DataFrame column headings) + to correct for before correlating brain regions. + method : string, optional + the method of correlation passed to :func:`pandas.DataFramecorr` + cost : float + We construct a binary graph from the correlation matrix by + restricting to the ``cost*n/100`` highest weighted edges, where + ``n`` is the number of edges. + seed : int, optional + centroids : list, optional + Anatomical locations to assign to the nodes of your graph. + + Returns + ------- + + ''' + + moving_window_bundle = GraphBundle.from_regional_measures( + df, names, covars=covars, method=method, + windowby=window_var, window_size=window_size) + moving_window_bundle.threshold(cost) + + + shuffle_list = [] + for i in range(args.n_shuffle): + gb = GraphBundle.from_regional_measures( + df, names, covars=covars, method=method, + windowby=window_var, window_size=window_size, + shuffle=True, seed=seed) + gb.threshold(cost) diff --git a/scona/classes.py b/scona/classes.py index a634bb5..59e25e7 100644 --- a/scona/classes.py +++ b/scona/classes.py @@ -9,6 +9,9 @@ from scona.graph_measures import assign_interhem, \ calculate_nodal_measures, assign_nodal_distance, \ calc_nodal_partition, calculate_global_measures, small_world_coefficient +from scona.make_corr_matrices import corrmat_from_regionalmeasures,\ + corrmat_by_group +from math import log10, floor class BrainNetwork(nx.classes.graph.Graph): @@ -50,22 +53,21 @@ def __init__(self, if isinstance(network, nx.classes.graph.Graph): # Copy graph self.__dict__.update(network.__dict__) - else: # Create weighted graph from a dataframe or # numpy array - if isinstance(network, pd.DataFrame): + if isinstance(network, pd.core.frame.DataFrame): M = network.values elif isinstance(network, np.ndarray): M = network + else: + raise TypeError("'network' argument must be an array or a networkx Graph object") network = weighted_graph_from_matrix(M, create_using=self) # ===== Give anatomical labels to nodes ====== if parcellation is not None: - # assign parcellation names to nodes self.set_parcellation(parcellation) if centroids is not None: - # assign centroids to nodes self.set_centroids(centroids) # Tell BrainNetwork class which attributes to consider "anatomical" # and therefore preserve when copying or creating new graphs @@ -74,6 +76,54 @@ def __init__(self, # intialise global measures as an empty dict self.graph['global_measures'] = {} + @classmethod + def from_regional_measures( + cls, + regional_measures, + names, + covars=None, + centroids=None, + method='pearson'): + ''' + Create a weighted graph by calculating the correlation of + `names` columns over the rows of `regional_measures` after + correcting for covariance with the columns in `covars`. + + Parameters + ---------- + regional_measures : :class:`pandas.DataFrame` + a pandas DataFrame with subjects as rows, and columns including + brain regions and covariates. Should be numeric for the columns in + names and covars_list + names : list + a list of the brain regions you wish to correlate + covars: list, optional + covars is a list of covariates (as DataFrame column headings) + to correct for before correlating the regions. + methods : string, optional + the method of correlation passed to :func:`pandas.DataFrame.corr` + parcellation : list of str, optional + A list of node names, passed to :func:`BrainNetwork.set_parcellation` + centroids : list of tuple, optional + A list of node centroids, passed to :func:`BrainNetwork.set_centroids` + + Returns + ------- + :class:`BrainNetwork` + + See Also + -------- + :func:`corrmat_from_regionalmeasures` + ''' + array = corrmat_from_regionalmeasures( + regional_measures, + names, + covars=covars, + method=method) + return cls(network=array, + centroids=centroids, + parcellation=parcellation) + def threshold(self, cost, mst=True): ''' Create a binary graph by thresholding weighted BrainNetwork G @@ -483,19 +533,16 @@ def set_anatomical_graph_attributes(self, names): class GraphBundle(dict): ''' - The GraphBundle class (after instantiating - object) is the scona way to - handle across-network comparisons. - What is it? - Essentially it's a python dictionary with BrainNetwork objects as values - (:class:`str`: :class:`BrainNetwork` pairs). - - Mainly used to create random graphs for comparison with your original - network data. + In structural covariance analysis, we frequently find ourselves working + with large numbers of networks in parallel. `scona` handles this using + the :class:`GraphBundle` class. This is a wrapper on a dictionary class + with a few useful tools added. Parameters ---------- - graph_list : list of :class:`networkx.Graph` - name_list : list of str + graph_dict : dict with :class:`networkx.Graph` or array items, optional + graph_list : list of :class:`networkx.Graph` or array, optional + name_list : list of str, optional See Also -------- @@ -504,56 +551,238 @@ class GraphBundle(dict): Example ------- ''' - def __init__(self, graph_list, name_list): + def __init__(self, + graph_dict=None, + graph_list=None, + name_list=None): + dict.__init__(self) - self.add_graphs(graph_list, name_list) + if graph_dict is not None: + self.add_graphs(graph_dict) - def add_graphs(self, graph_list, name_list=None): + elif graph_list is not None: + self.add_graphs(graph_list, name_list=name_list) + + def add_graphs(self, graphs, name_list=None): ''' - Update dictionary with `graph_list : names_list` pairs. + Update dictionary with graphs. + If a list is passed, an integer dictionary key will be chosen for + each network. If the items of `graphs` are not :class:`BrainNetwork` + objects, `add_graphs` will attempt to construct :class:`BrainNetwork` + objects from them. Parameters ---------- - graph_list : list of :class:`networkx.Graph` - name_list : list of str, optional + graph: list or dict of :class:`networkx.Graph` See Also -------- :class:`GraphBundle.create_random_graphs` ''' - if name_list is None: - name_list = [len(self) + i for i in range(len(graph_list))] - elif len(name_list) != len(graph_list): - raise IndexError("name_list and graph_list must have equal length") - for graph in graph_list: - if not isinstance(graph, BrainNetwork): - graph = BrainNetwork(graph) - self.update({a: b for a, b in zip(name_list, graph_list)}) + + if isinstance(graphs, list): + if name_list is not None: + self.add_graphs({n: g for n, g in zip(name_list, graphs)}) + else: + self.add_graphs({len(self)+i : g for i, g in enumerate(graphs)}) + + elif isinstance(graphs, dict): + for k, g in graphs.items(): + if not isinstance(g, BrainNetwork): + graphs[k] = BrainNetwork(g) + self.update(graphs) + + else: + raise InputError("`graphs` must be a list or dictionary") + + @classmethod + def from_regional_measures( + cls, + regional_measures, + names, + covars=None, + method='pearson', + groupby=None, + windowby=None, + window_size=10, + seed=None, + shuffle=False ): + ''' + Create a weighted graph by calculating the correlation of + `names` columns over the rows of `regional_measures` after + correcting for covariance with the columns in `covars`. + + Parameters + ---------- + regional_measures : :class:`pandas.DataFrame` + a pandas DataFrame with subjects as rows, and columns including + brain regions and covariates. Should be numeric for the columns in + names and covars_list + names : list + a list of the brain regions you wish to correlate + covars: list, optional + covars is a list of covariates (as DataFrame column headings) + to correct for before correlating the regions. + method : string, optional + the method of correlation passed to :func:`pandas.DataFrame.corr` + groupby : string, optional + pass a string indexing a column (of regional_measures) to group + rows by + windowby : string, optional + pass a string indexing a column (of regional_measures) to bin + rows by + window_size : int, optional + if using windowby argument, specify how many participants per + window. + shuffle : bool, optional + if True, the windowby or groupby column will be randomly permuted + before grouping/binning. + + Returns + ------- + :class:`GraphBundle` + + See Also + -------- + :func:`corrmat_by_group` + :func:`corrmat_by_window` + :func:`corrmat_from_regionalmeasures` + ''' + if groupby is not None: + array_dict = corrmat_by_group( + regional_measures, + names, + groupby, + covars=covars, + method=method, + shuffle=shuffle, + seed=seed) + return cls(graph_dict=array_dict) + + elif windowby is not None: + array_dict = corrmat_by_window( + regional_measures, + names, + windowby, + window_size, + covars=covars, + method=method, + shuffle=shuffle, + seed=seed) + return cls(graph_dict=array_dict) + + else: + array_list = [ + corrmat_from_regionalmeasures( + regional_measures, + names, + covars=covars, + method=method + )] + return cls(graph_list=array_list) def apply(self, graph_function): ''' - Apply a user defined function to each network in a :class:`GraphBundle`. + Apply graph_function to each :class:`BrainNetwork` in + :class:`GraphBundle`, modifying :class:`GraphBundle` in place. + + Parameters + ---------- + graph_function : :class:`types.FunctionType` + Function accepting a :class:`BrainNetwork` object + ''' + for name, graph in self.items(): + self[name] = graph_function(graph) + + def threshold(self, cost, mst=True): + ''' + Create binary graphs by thresholding each weighted BrainNetwork in + self by applying :func:`BrainNetwork.threshold`. + + Parameters + ---------- + cost : float + A number between 0 and 100. The resulting graph will have the + ``cost*n/100`` highest weighted edges from G, where + ``n`` is the number of edges in G. + mst : bool, optional + If ``False``, skip creation of minimum spanning tree. This may + cause output graph to be disconnected + + Raises + ------ + Exception + If it is impossible to create a minimum_spanning_tree at the given + cost + + See Also + -------- + :func:`BrainNetwork.threshold` + ''' + self.apply(lambda x : x.threshold(cost=cost, mst=mst)) + + def evaluate(self, graph_function): + ''' + Evaluate a function over each network in :class:`GraphBundle`. Parameters ---------- graph_function : :class:`types.FunctionType` - Function defined on a :class:`BrainNetwork` object + Function accepting a :class:`BrainNetwork` object + + Returns + ------- + dict + dictionary mapping network name to graph_function(network) + for each network in GraphBundle. Example ------- To calculate and return the degree for each network in a - :class:`GraphBundle` pass this following expression to `apply` + :class:`GraphBundle` pass this following expression to `evaluate` as the `graph_function`. .. code-block:: python get_degree = lambda x: x.calculate_nodal_measures(measure_list=["degree"]) - brain_bundle.apply(graph_function=get_degree) + brain_bundle.evaluate(graph_function=get_degree) ''' global_dict = {} for name, graph in self.items(): global_dict[name] = graph_function(graph) return global_dict + def calculate_nodal_measures(self): + ''' + Calculate nodal measures for each network in GraphBundle + + See Also + -------- + :func:`BrainNetwork.calculate_nodal_measures` + ''' + self.apply(lambda x: x.calculate_nodal_measures()) + + def report_nodal_measures(self, as_dict=False): + ''' + Report nodal measures for each network in GraphBundle + + Parameters + ---------- + as_dict : bool, optional + Pass true to return each nodal measures report + as a dictionary + + Return + ------ + dict + dictionary mapping each network to a :class:`pandas.DataFrame` + (or dict, if as_dict) of nodal measures + + See Also + -------- + :func:`BrainNetwork.report_nodal_measures` + ''' + return self.evaluate(lambda x: x.report_nodal_measures(as_dict=as_dict)) + def report_global_measures(self, as_dict=False, partition=True): ''' Calculate global_measures for each BrainNetwork object and report as a @@ -578,8 +807,8 @@ def report_global_measures(self, as_dict=False, partition=True): -------- :func:`BrainNetwork.calculate_global_measures` ''' - self.apply(lambda x: x.calculate_global_measures()) - global_dict = self.apply(lambda x: x.graph['global_measures']) + self.evaluate(lambda x: x.calculate_global_measures()) + global_dict = self.evaluate(lambda x: x.graph['global_measures']) if as_dict: return global_dict else: @@ -604,14 +833,15 @@ def report_rich_club(self, as_dict=False): -------- :func:`BrainNetwork.rich_club` ''' - rc_dict = self.apply(lambda x: x.rich_club()) + rc_dict = self.evaluate(lambda x: x.rich_club()) if as_dict: return rc_dict else: return pd.DataFrame.from_dict(rc_dict) def create_random_graphs( - self, gname, n, Q=10, name_list=None, rname="_R", seed=None): + self, gname, n, up_to=True, swaps=10, name_list=None, rname="_R", + padding=None, seed=None): ''' Create `n` edge swap randomisations of :class:`BrainNetwork` keyed by `gname`. These random graphs are added to GraphBundle. @@ -622,7 +852,10 @@ def create_random_graphs( indexes a graph in GraphBundle n : int the number of random graphs to create - Q : int, optional + up_to : bool + if True, add enough random graphs to make the total number + of graphs in GraphBundle equal to n + swaps : int, optional constant to specify how many swaps to conduct for each edge in G name_list : list of str, optional a list of names to use for indexing the new random graphs in @@ -631,6 +864,9 @@ def create_random_graphs( if ``name_list=None`` the new random graphs will be indexed according to the scheme ``gname + rname + r`` where `r` is some integer. + padding : int, optional + number of zeroes to pad names with. If None, this will be + assessed logarithmically seed : int, random_state or None (default) Indicator of random state to pass to :func:`networkx.double_edge_swap` @@ -641,26 +877,30 @@ def create_random_graphs( :func:`random_graph` :func:`BrainNetwork.add_graphs` ''' + if padding is None: + padding = floor(log10(n)) +1 + if up_to: + n = n - len(self) if name_list is None: # Choose r to be the smallest integer that is larger than all # integers already naming a random graph in brainnetwork r = len(self) - while (gname + rname + str(r) not in self) and (r >= 0): + while (gname + rname + str(r).zfill(padding) not in self) and (r >= 0): r -= 1 - name_list = [gname + rname + str(i) + name_list = [gname + rname + str(i).zfill(padding) for i in range(r+1, r+1+n)] self.add_graphs( - get_random_graphs(self[gname], n=n, seed=seed), + get_random_graphs(self[gname], n=n, seed=seed, Q=swaps), name_list=name_list) - def report_small_world(self, gname): + def report_small_world(self, name): ''' Calculate the small world coefficient of `gname` relative to each other graph in GraphBundle. Parameters ---------- - gname : str + name : str indexes a graph in GraphBundle Returns @@ -673,8 +913,8 @@ def report_small_world(self, gname): -------- :func:`small_world_coefficient` ''' - small_world_dict = self.apply( - lambda x: small_world_coefficient(self[gname], x)) + small_world_dict = self.evaluate( + lambda x: small_world_coefficient(self[name], x)) return small_world_dict def nodal_matches(self): diff --git a/scona/graph_measures.py b/scona/graph_measures.py index 6d08740..7aa4bb4 100644 --- a/scona/graph_measures.py +++ b/scona/graph_measures.py @@ -288,11 +288,20 @@ def calculate_nodal_measures( By default `calculate_nodal_measures` calculates the following : * "degree" : int - * "closeness" : float + the number of incident edges * "betweenness" : float - * "shortest_path_length" : float + the betweenness centrality of each node, see :func:`networkx.betweenness_centrality` + * "closeness" : float + the closeness centrality of each node, see :func:`networkx.closeness_centrality` * "clustering" : float + the clustering coefficient of each node, see :func:`networks.clustering` * "participation_coefficient" : float + the participation coefficient of nodes of G with + communities defined by `partition` + * "shortest_path_length" : float + the average shortest path length for each node in G. + "length" in this case means the number of edges, and does + not consider euclidean distance. Use `measure_list` to specify which of the default nodal attributes to calculate. @@ -470,9 +479,18 @@ def calculate_global_measures(G, partition=None, existing_global_measures=None): ''' - Calculate global measures `average_clustering`, - `average_shortest_path_length`, `assortativity`, `modularity`, and - `efficiency` of G. + Calculate the following global measures + + * "average_clustering" : float + see :func:`networkx.average_clustering` + * "average_shortest_path_length" : float + see :func:`networkx.average_shortest_path_length` + * "assortativity" : float + see :func:`networkx.degree_assortativity_coefficient` + * "modularity" : float + modularity of network under partition defined by "module" + * "efficiency" : float + see :func:`networkx.global_efficiency` Note: Global measures **will not** be calculated again if they have already been calculated. So it is only needed to calculate them once and then they aren't calculated again. diff --git a/scona/make_corr_matrices.py b/scona/make_corr_matrices.py index 9e2dcd8..0f942cb 100644 --- a/scona/make_corr_matrices.py +++ b/scona/make_corr_matrices.py @@ -28,6 +28,100 @@ def get_non_numeric_cols(df): return non_numeric_cols +def generate_windows(df, window_var, window_size, shuffle=False, seed=None): + ''' + Parameters + ---------- + df : :class:`pandas.DataFrame` + a pandas DataFrame with individual brain scans as rows, and + columns including brain regions and covariates. The columns in + names and covars_list should be numeric. + names : list + a list of the brain regions whose correlation you want to assess + window_var : str + the name of the column in df from which to + construct sliding windows. + window_size : int or float + the size (number of subjects) of each sliding window. + A decimal value between 0 and 1 will be interpreted as a + proportion of the whole cohort. E.g if window_size is 0.1, and + the cohort is 100 subjects each window will contain 10 subjects. + window_overlap : int or float + the number of subjects in the overlap between two consecutive + windows. If window_overlap is a decimal between 0 and + 1(not inclusive) then the intersection of two consecutive + windows will be window_overlap*(size of first window). + odd_sized_bin : "last" or "first", optional + If it is not possible to construct equally sized windows, + choose either the last or the first window to have a + different size to the others. Default "last". + ''' + if window_var not in get_non_numeric_columns(df): + raise TypeError("`window_var` must index a numeric column") + # calculate window sizes and overlaps + if window_size <= 1: + window_size = window_size*len(df) + if window_overlap < 1: + window_overlap = window_overlap*window_size + + if shuffle: + sorted_df = df.sample(frac=1, random_state=seed) + else: + sorted_df = df.sort_values(by=[window_var]) + moving_window_df = {} + for t in range(df.shape[0] - window_size + 1): + moving_window_df[t] = df.truncate(before=t, after=window_size+t-1) + return moving_window_df + + +def split_groups(df, group_var, shuffle=False, seed=None): + ''' + Separate a dataframe into different participant groups. + + Parameters + ---------- + df : :class:`pandas.DataFrame` + group_var : str + A string indexing a column of `df` which contains the group coding + of each participant + shuffle : bool, optional + If True is passed split_groups will randomly assign each participant + to a group from the original group_var column, preserving the size + of the original groups. + This is achieved by drawing values from the group_var column without + replacement. This does not modify the dataframe `df`. + + Returns + ------- + dict + A dictionary mapping values of the group_var column to a + :class:`pandas.DataFrame` of correspondingly coded participants. + ''' + if group_var not in df.columns: + raise ValueError( + "The group_var argument '{}' does not index a column in this dataframe.") + split_dict = {} + + if shuffle is False: + for value in set(df.loc[:, group_var].values): + split_dict[value] = df.loc[df[group_var] == value, :] + + elif shuffle is True: + # if shuffle is true, create a new dataframe, with a new column, + # identical to the group_var column, only randomly permuted. + if seed is not None: + np.random.seed(seed) + df = df.copy() + group_rand = "rand_{}".format(group_var) + df[group_rand] = np.random.permutation(df.loc[:, group_var].values) + for value in set(df.loc[:, group_rand].values): + split_dict[value] = df.loc[df[group_rand] == value, :] + # and clean up by deleting the new column + del df[group_rand] + + return split_dict + + def create_residuals_df(df, names, covars=[]): ''' Calculate residuals of columns specified by names, correcting for the @@ -137,16 +231,16 @@ def corrmat_from_regionalmeasures( Parameters ---------- regional_measures : :class:`pandas.DataFrame` - a pandas data frame with subjects as rows, and columns including - brain regions and covariates. Should be numeric for the columns in - names and covars_list + a pandas DataFrame with individual brain scans as rows, and + columns including brain regions and covariates. The columns in + names and covars_list should be numeric. names : list - a list of the brain regions you wish to correlate - covars: list - covars is a list of covariates (as df column headings) - to correct for before correlating the regions. - methods : string - the method of correlation passed to :func:`pandas.DataFrame.corr` + a list of the brain regions whose correlation you want to measure + covars: list, optional + covars is a list of covariates (as DataFrame column headings) + to correct for before correlating brain regions. + method : string, optional + the method of correlation passed to :func:`pandas.DataFramecorr` Returns ------- @@ -161,6 +255,110 @@ def corrmat_from_regionalmeasures( return M +def corrmat_by_group( + regional_measures, + names, + group_var, + covars=None, + method='pearson', + shuffle=False, + seed=None): + ''' + Separate `regional_measures` rows by their `group_var` value. + Create a dictionary mapping each value of the `group_var` column + to a correlation matrix. + + Parameters + ---------- + regional_measures : :class:`pandas.DataFrame` + a pandas DataFrame with subjects as rows, and columns representing + brain regions, covariates and group codings. Should be numeric for + the columns in names and covars_list. + names : list + a list of the brain regions you wish to correlate + group_var : str + a string indexing a column in regional_measure containing the + group coding data. + covars: list, optional + covars is a list of covariates (as DataFrame column headings) + to correct for before correlating the regions. + methods : string, optional + the method of correlation passed to :func:`pandas.DataFrame.corr` + shuffle : bool, optional + if True, a random permutation of the group_var column will be + used to assign group codings. + + Returns + ------- + :class:`pandas.DataFrame` + A correlation matrix with rows and columns keyed by `names` + ''' + # split dataframe by group coding + df_by_group = split_groups( + regional_measures, group_var, shuffle=shuffle, seed=seed) + + matrix_by_group=dict() + # iterate over groups to create correlation matrices + for group_code, group_df in df_by_group: + M = mcm.corrmat_from_regionalmeasures( + group_df, names, covars=covars_list, method=method) + matrix_by_group[group_code] = M + + return matrix_by_group + +def corrmat_by_window( + regional_measures, + names, + window_var, + window_size, + covars=None, + method='pearson', + shuffle=False, + seed=None): + ''' + Bin `regional_measures` rows by their value in `window_var` column. + Return + Create a correlation matrix of the rows selected by... + + Parameters + ---------- + regional_measures : :class:`pandas.DataFrame` + a pandas DataFrame with subjects as rows, and columns representing + brain regions, covariates and group codings. Should be numeric for + the columns in names and covars_list. + names : list + a list of the brain regions you wish to correlate + window_var : str + a string indexing a column in regional_measures by which to + bin rows + window_size : int + the number of rows to include in each window + covars: list, optional + covars is a list of covariates (as DataFrame column headings) + to correct for before correlating the regions. + methods : string, optional + the method of correlation passed to :func:`pandas.DataFrame.corr` + shuffle : bool, optional + if True, a random permutation of the group_var column will be + used to assign group codings. + + Returns + ------- + :class:`pandas.DataFrame` + A correlation matrix with rows and columns keyed by `names` + ''' + # create moving window of dataframe + df_by_window = generate_windows( + regional_measures, window_var, window_size, shuffle=shuffle, seed=seed) + + # iterate over windows to create correlation matrices + matrix_by_window = {} + for t, window in moving_window_df: + M = mcm.corrmat_from_regionalmeasures( + window, names, covars=covars_list, method=method) + matrix_by_window[t] = M + + return matrix_by_window def save_mat(M, name): ''' @@ -176,7 +374,7 @@ def save_mat(M, name): # exists, and make it if it does not dirname = os.path.dirname(name) - if not os.path.isdir(dirname): + if not os.path.isdir(dirname) and dirname != "": os.makedirs(dirname) # Save the matrix as a text file diff --git a/scona/scripts/useful_functions.py b/scona/scripts/useful_functions.py index 0ad7237..1181ad1 100644 --- a/scona/scripts/useful_functions.py +++ b/scona/scripts/useful_functions.py @@ -4,6 +4,9 @@ import numpy as np import os +def list_from_file(filename): + with open(filename) as f: + return [line.strip() for line in f] def read_in_data( data, @@ -38,14 +41,13 @@ def read_in_data( :class:`pandas.DataFrame`, list, list or None, list or None `data, names, covars, centroids` ''' - # Load names - with open(names_file) as f: - names = [line.strip() for line in f] + + names = list_from_file(names_file) + # Load covariates if covars_file is not None: - with open(covars_file) as f: - covars_list = [line.strip() for line in f] + covars_list = list_from_file(covars_file) else: covars_list = [] diff --git a/scona/wrappers/__init__.py b/scona/wrappers/__init__.py index 9aac457..49e8b50 100644 --- a/scona/wrappers/__init__.py +++ b/scona/wrappers/__init__.py @@ -1,2 +1,2 @@ -from scona.wrappers.corrmat_from_regionalmeasures import * -from scona.wrappers.network_analysis_from_corrmat import * \ No newline at end of file +from scona.wrappers.scona import * +from scona.wrappers.parsers import * diff --git a/scona/wrappers/corrmat_from_regionalmeasures.py b/scona/wrappers/corrmat_from_regionalmeasures.py deleted file mode 100644 index d8ac9de..0000000 --- a/scona/wrappers/corrmat_from_regionalmeasures.py +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/env python - -# ============================================================================ -# Created by Kirstie Whitaker -# at Hot Numbers coffee shop on Trumpington Road in Cambridge, September 2016 -# Contact: kw401@cam.ac.uk -# ============================================================================ - -# ============================================================================ -# IMPORTS -# ============================================================================ -import argparse -import textwrap - -import scona.make_corr_matrices as mcm -from scona.scripts.useful_functions import read_in_data - - -def setup_argparser(): - # Build a basic parser. - help_text = (('Generate a structural correlation \ - matrix from an input csv file,\n') + ('a list of \ - region names and (optional) covariates.')) - - sign_off = 'Author: Kirstie Whitaker ' - - parser = argparse.ArgumentParser( - description=help_text, - epilog=sign_off, - formatter_class=argparse.RawTextHelpFormatter) - - # Now add the arguments - parser.add_argument( - dest='regional_measures_file', - type=str, - metavar='regional_measures_file', - help=textwrap.dedent( - ('CSV file that contains regional values for each participant.\ -\n') + - ('Column labels should be the region names or covariate \ -variable\n') + - ('names. All participants in the file will be included in the\n') + - ('correlation matrix.'))) - - parser.add_argument( - dest='names_file', - type=str, - metavar='names_file', - help=textwrap.dedent(('Text file that contains the names of each \ -region to be included\n') + ('in the correlation matrix. One region name \ -on each line.'))) - - parser.add_argument( - dest='output_name', - type=str, - metavar='output_name', - help=textwrap.dedent( - ('File name of the output correlation matrix.\n') + - ('If the output directory does not yet exist it will be \ -created.'))) - - parser.add_argument( - '--covars_file', - type=str, - metavar='covars_file', - help=textwrap.dedent( - ('Text file that contains the names of variables that \ -should be\n') + - ('covaried for each regional measure before the creation \ -of the\n') + - ('correlation matrix. One variable name on each line.\n') + - (' Default: None')), - default=None) - - parser.add_argument( - '--method', - type=str, - metavar='method', - help=textwrap.dedent( - ('Flag submitted to pandas.DataFrame.corr().\n') + - ('options are "pearson", "spearman", "kendall"')), - default='pearson') - - arguments = parser.parse_args() - - return arguments, parser - - -def corrmat_from_regionalmeasures(regional_measures_file, - names_file, - output_name, - covars_file=None, - method='pearson'): - ''' - Read in regional measures, names and covariates files to compute - correlation matrix and write it to output_name. - - Parameters: - * regional_measures_file : a csv containing data for some regional - measures with brain regions and covariates as columns and subjects - as rows. The first row of regional_measures should be column - headings. - * names_file : a text file containing names of brain regions. One name - per line of text. These names key columns in df to correlate over. - * covars_file : a text file containing a list of covariates to account - for. One covariate per line of text. These names key columns in df. - * output_name : file name to save output matrix to. - ''' - # Read in the data - df, names, covars_list, *a = read_in_data( - regional_measures_file, - names_file, - covars_file=covars_file) - - M = mcm.corrmat_from_regionalmeasures( - df, names, covars=covars_list, method=method) - - # Save the matrix - mcm.save_mat(M, output_name) - - -if __name__ == "__main__": - - # Read in the command line arguments - arg, parser = setup_argparser() - - # Now run the main function :) - corrmat_from_regionalmeasures( - arg.regional_measures_file, - arg.names_file, - arg.output_name, - covars_file=arg.covars_file, - method=arg.method) - -# ============================================================================ -# Wooo! All done :) -# ============================================================================ diff --git a/scona/wrappers/network_analysis_from_corrmat.py b/scona/wrappers/network_analysis_from_corrmat.py deleted file mode 100644 index 8391542..0000000 --- a/scona/wrappers/network_analysis_from_corrmat.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/env python - -# ============================================================================= -# Created by Kirstie Whitaker -# at Neurohackweek 2016 in Seattle, September 2016 -# Contact: kw401@cam.ac.uk -# ============================================================================= - -# ============================================================================= -# IMPORTS -# ============================================================================= -import os -import argparse -import textwrap - -import scona as scn -from scona.scripts.useful_functions import read_in_data, \ - write_out_measures - -# ============================================================================= -# FUNCTIONS -# ============================================================================= - - -def setup_argparser(): - ''' - Code to read in arguments from the command line - Also allows you to change some settings - ''' - # Build a basic parser. - help_text = (('Generate a graph as a fixed cost from a non-thresholded\n') - + ('matrix and return global and nodal measures.')) - - sign_off = 'Author: Kirstie Whitaker ' - - parser = argparse.ArgumentParser( - description=help_text, - epilog=sign_off, - formatter_class=argparse.RawTextHelpFormatter) - - # Now add the arguments - parser.add_argument( - dest='corr_mat_file', - type=str, - metavar='corr_mat_file', - help=textwrap.dedent(('Text file (tab or space delimited) that \ -contains the unthresholded\n') + ('matrix with no column or row labels.'))) - - parser.add_argument( - dest='names_file', - type=str, - metavar='names_file', - help=textwrap.dedent(('Text file that contains the names of each \ -region, in the same\n') + ('order as the correlation matrix. One region \ -name on each line.'))) - - parser.add_argument( - dest='centroids_file', - type=str, - metavar='centroids_file', - help=textwrap.dedent(('Text file that contains the x, y, z \ -coordinates of each region,\n') + ('in the same order as the correlation \ -matrix. One set of three\n') + ('coordinates, tab or space delimited, on each \ -line.'))) - - parser.add_argument( - dest='output_dir', - type=str, - metavar='output_dir', - help=textwrap.dedent(('Location in which to save global and nodal \ -measures.'))) - - parser.add_argument( - '-c', '--cost', - type=float, - metavar='cost', - help=textwrap.dedent(('Cost at which to threshold the matrix.\n') + - (' Default: 10.0')), - default=10.0) - - parser.add_argument( - '-n', '--n_rand', - type=int, - metavar='n_rand', - help=textwrap.dedent(('Number of random graphs to generate to compare \ -with real network.\n') + (' Default: 1000')), - default=1000) - - parser.add_argument( - '-s', '--seed', '--random_seed', - type=int, - metavar='seed', - help=textwrap.dedent(('Set a random seed to pass to the random graph \ -creator.\n') + (' Default: None')), - default=None) - - arguments = parser.parse_args() - - return arguments, parser - - -def network_analysis_from_corrmat(corr_mat_file, - names_file, - centroids_file, - output_dir, - cost=10, - n_rand=1000, - edge_swap_seed=None): - ''' - This is the big function! - It reads in the correlation matrix, thresholds it at the given cost - (incorporating a minimum spanning tree), creates a networkx graph, - calculates global and nodal measures (including random comparisons - for the global measures) and writes them out to csv files. - ''' - # Read in the data - M, names, a, centroids = read_in_data( - corr_mat_file, - names_file, - centroids_file=centroids_file, - data_as_df=False) - - corrmat = os.path.basename(corr_mat_file).strip('.txt') - - # Initialise graph - B = scn.BrainNetwork( - network=M, - parcellation=names, - centroids=centroids) - # Threshold graph - G = B.threshold(cost) - # Calculate the modules - G.partition() - # Calculate distance and hemispheric attributes - G.calculate_spatial_measures() - # Get the nodal measures - # (note that this takes a bit of time because the participation coefficient - # takes a while) - G.calculate_nodal_measures() - nodal_df = G.report_nodal_measures() - nodal_name = 'NodalMeasures_{}_cost{:03.0f}.csv'.format(corrmat, cost) - # FILL possibly wise to remove certain cols here (centroids) - # Save your nodal measures - write_out_measures( - nodal_df, output_dir, nodal_name, first_columns=['name']) - - # Create setup for comparing real_graph against random graphs - # name your graph G after the corrmat it was created from - bundle = scn.GraphBundle([G], [corrmat]) - # Get the global measures - # (note that this takes a bit of time because you're generating random - # graphs) - bundle.create_random_graphs(corrmat, n_rand, seed=edge_swap_seed) - # Add the small world coefficient to global measures - small_world = bundle.report_small_world(corrmat) - for gname, G in bundle.items(): - G.graph['global_measures'].update( - {"sw coeff against " + corrmat: small_world[gname]}) - global_df = bundle.report_global_measures() - global_name = 'GlobalMeasures_{}_cost{:03.0f}.csv'.format(corrmat, cost) - # Write out the global measures - write_out_measures( - global_df, output_dir, global_name, first_columns=[corrmat]) - - # Get the rich club coefficients - rc_df = bundle.report_rich_club() - rc_name = 'rich_club_{}_cost{:03.0f}.csv'.format(corrmat, cost) - # Write out the rich club coefficients - write_out_measures( - rc_df, output_dir, rc_name, first_columns=['degree', corrmat]) - - -if __name__ == "__main__": - - # Read in the command line arguments - arg, parser = setup_argparser() - - # Now run the main function :) - network_analysis_from_corrmat( - arg.corr_mat_file, - arg.names_file, - arg.centroids_file, - arg.output_dir, - cost=arg.cost, - n_rand=arg.n_rand, - edge_swap_seed=arg.seed) - -# ============================================================================= -# Wooo! All done :) -# ============================================================================= diff --git a/scona/wrappers/parsers.py b/scona/wrappers/parsers.py new file mode 100644 index 0000000..1680704 --- /dev/null +++ b/scona/wrappers/parsers.py @@ -0,0 +1,262 @@ +import os +import argparse +import textwrap +from scona.wrappers.scona import standard_analysis, groupwise_analysis, movingwindow_analysis, corrmat_from_regionalmeasures, network_analysis_from_corrmat + + +# Set up parent arg parsers + +corrmat_parser = argparse.ArgumentParser(add_help=False) +network_analysis_parser = argparse.ArgumentParser(add_help=False) +general_parser = argparse.ArgumentParser(add_help=False) + +# Fill parent parsers + +corrmat_parser.add_argument( + dest='regional_measures_file', + type=str, + metavar='regional_measures_file', + help=textwrap.dedent(''' + Path (relative) to .csv file reporting regional measures at each + brain region for each participant. Column labels should include + the region names and covariate variables. All subjects (rows) in + regional_measures_file will be correlated over''')) + + +corrmat_parser.add_argument( + '--output_name', + type=str, + metavar='output_name', + help=textwrap.dedent(''' + Pass a (relative) file name to save the output correlation matrix. + If the output directory does not yet exist it will be created.'''), + default=None) + +corrmat_parser.add_argument( + '--covars_file', + type=str, + metavar='covars_file', + help=textwrap.dedent(''' + Text file containing a list of covariates (as column headings + from regional_measures_file) to be accounted for when calculating + correlation. One variable name on each line. Relative path. + Default: None'''), + default=None) + +corrmat_parser.add_argument( + '--method', + type=str, + metavar='method', + help=textwrap.dedent(''' + Flag submitted to pandas.DataFrame.corr(). + options are "pearson", "spearman", "kendall"'''), + default='pearson') + +network_analysis_parser.add_argument( + dest='centroids_file', + type=str, + metavar='centroids_file', + help=textwrap.dedent(''' + Relative path to text file that contains the x, y, z + coordinates of each region, in the same order as the + names in names_file. One set of three coordinates, + tab or space delimited, on each line.''')) + +network_analysis_parser.add_argument( + '-c', '--cost', + type=float, + metavar='cost', + help=textwrap.dedent('Cost at which to threshold the matrix.\n' + + 'Default: 10.0'), + default=10.0) + +network_analysis_parser.add_argument( + '-n', '--n_rand', + type=int, + metavar='n_rand', + help=textwrap.dedent(''' + Number of random graphs to generate to compare + with real network.\n Default: 1000'''), + default=1000) + +network_analysis_parser.add_argument( + '-s', '--seed', + type=int, + metavar='seed', + help=textwrap.dedent(''' + Set a random seed to pass to the random graph creator. + Default: None'''), + default=None) + +general_parser.add_argument( + dest='names_file', + type=str, + metavar='names_file', + help=textwrap.dedent(''' + Text file listing the names of relevant brain regions. One region + name on each line.''')) + +general_parser.add_argument( + '--output_dir', + type=str, + metavar='output_dir', + help=textwrap.dedent(''' + Relative path to a directory in which to save output + measures.'''), + default=None) + +# Build specific parsers + +scona_parser = argparse.ArgumentParser( + description="generate network analysis from regional measures.", + formatter_class=argparse.RawTextHelpFormatter) + +subparsers = scona_parser.add_subparsers() + +# ============================================================================ +# subparser to generate correlation matrix +# +# calls scona.wrappers.corrmat_from_regionalmeasures.corrmat_from_regionalmeas +# ures +# ============================================================================ +corrmat_only_parser = subparsers.add_parser( + 'corrmat', + help="create a correlation matrix from regional measures", + description=(textwrap.dedent( + ''' + Read in regional measures, names and covariates files to compute + and return a structural covariance matrix, or write it to + output_name. + The structural covariance matrix is the pairwise correlation of + the columns given in names_file over the rows of regional_measures, + after correcting for covariance with the columns in covars_file. + ''')), + parents=[corrmat_parser, general_parser]) + +corrmat_only_parser.set_defaults(func=corrmat_from_regionalmeasures) + +# =================================================================== +# subparser to do network analysis from corrmat +# +# calls scona.wrappers.network_analysis_from_corrmat.network_analysis +# _from_corrmat +# =================================================================== + +nafc_parser = subparsers.add_parser( + 'from_corrmat', + help='perform standard scona analysis on an existing correlation matrix', + description=textwrap.dedent(''' + Run the standard scona network analysis on an existing corrmat_file, + interpreted as a weighted graph. + This analysis thresholds corrmat at the desired cost to create a + binary network and calculates network measures (for more details + on network measures see...). + For the purposes of comparison this analysis also generates a number + of random graphs via edge swapping (see :func:`networkx.double_edge_swap`). + + Writes + ------ + * A dataframe reporting the nodal measures for the + nodes of corrmat + * A dataframe reporting the global measures of corrmat and + all random graphs + * A dataframe reporting the rich club, at every + degree, of corrmat and all random graphs'''), + parents=[network_analysis_parser, general_parser]) + +nafc_parser.add_argument( + dest='corrmat_file', + type=str, + metavar='corrmat_file', + help=textwrap.dedent(''' + Relative path to text file (tab or space delimited) that + contains the unthresholded correlation matrix with no + column or row labels.''')) + +nafc_parser.set_defaults(func=network_analysis_from_corrmat) + +# ======================================================================= +# subparser to do full analysis +# ======================================================================= +simple_parser = subparsers.add_parser( + 'standard_analysis', + help="perform standard scona analysis from regional_measures_file", + description=textwrap.dedent(''' + Create a structural covariance analysis network from + regional_measures_file and run the standard scona network analysis + on it. + + To create the structural covariance network from regional_measures_file, + scona calculates the pairwise correlations of the columns listed in + names_file over the rows of regional_measures_file, correcting for + covariance with the columns listed in covars_file. + + scona thresholds the resulting matrix at the desired cost to create a + binary network and calculates network measures, described... + + For the purposes of comparison this analysis also generates a number + of random graphs via edge swapping (see :func:`networkx.double_edge_swap`) + and reports global measures and rich club measures on these. + + Writes + ------ + * A dataframe reporting the nodal measures for the + nodes of the structural covariance network. + * A dataframe reporting the global measures of the + structural covariance network and random graphs. + * A dataframe reporting the rich club, at every + degree, of each network. + '''), + parents=[corrmat_parser, + network_analysis_parser, + general_parser]) + +simple_parser.set_defaults(func=standard_analysis) +# ======================================================================= +# subparser to do groupwise analysis +# ====================================================================== + +groupwise_parser = subparsers.add_parser( + 'groupwise', + help='Perform a groupwise analysis on regional_measures_file', + parents=[corrmat_parser, network_analysis_parser, general_parser]) + +groupwise_parser.add_argument( + dest='group_var', + type=str, + metavar='group_var', + help=textwrap.dedent( + ("Networks will be constructed per participant group, as\ + indexed by the group_var column in the regional_measures_file"))) + +groupwise_parser.add_argument( + '--n_shuffle', + type=int, + metavar='n_shuffle', + help=textwrap.dedent(''' + number of comparison networks to create + by shuffling group_var column and repeating analysis'''), + default=1000) + +groupwise_parser.set_defaults(func=groupwise_analysis) + +movingwindow_parser = subparsers.add_parser( + 'movingwindow', + help='Perform a moving window analysis on regional_measures_file', + parents=[corrmat_parser, network_analysis_parser, general_parser]) + +movingwindow_parser.add_argument( + dest='window_by', + type=str, + metavar='window_by', + help=textwrap.dedent(''' + a variable by which to window the participants. + Must index a column in regional_measures_file.''')) + +movingwindow_parser.set_defaults(func=movingwindow_analysis) + + +def main(): + args = scona_parser.parse_args() + args.func(args) + diff --git a/scona/wrappers/scona.py b/scona/wrappers/scona.py new file mode 100644 index 0000000..a8306c1 --- /dev/null +++ b/scona/wrappers/scona.py @@ -0,0 +1,287 @@ +import scona +import numpy as np +import os +import scona.make_corr_matrices as mcm +from scona.scripts.useful_functions import read_in_data, \ + write_out_measures, list_from_file + + +def corrmat_from_regionalmeasures(args): + ''' + Read in regional measures, names and covariates files to compute + and return a structural covariance matrix, or write it to + output_name. + The structural covariance matrix is the pairwise correlation of + the columns given by names_file over the rows of regional_measures, + after correcting for covariance with the columns in covars_file. + + Returns + ------- + :class:`pandas.DataFrame + A correlation matrix + ''' + # Read in the data + df, names, covars_list, *a = read_in_data( + args.regional_measures_file, + args.names_file, + covars_file=args.covars_file) + # create correlation matrix + M = mcm.corrmat_from_regionalmeasures( + df, names, covars=covars_list, method=args.method) + if args.output_name is not None: + mfile = os.path.join(args.output_dir, args.output_name) + print("saving correlation matrix to {}".format(mfile)) + # Save the matrix + mcm.save_mat(M, mfile) + return M + + +def network_analysis_from_corrmat(args, corrmat=None): + ''' + Run the standard scona network analysis on corrmat, interpreted as + a weighted graph. + + This analysis thresholds corrmat at the desired cost to create a + binary network and calculates network measures, described further down. + + For the purposes of comparison this analysis also generates a number + of random graphs via edge swapping (see :func:`networkx.double_edge_swap`) + and reports global measures and rich club measures + + Writes + ------ + * A dataframe reporting the nodal measures for the + nodes of corrmat + * A dataframe reporting the global measures of corrmat and + all random graphs + * A dataframe reporting the rich club, at every + degree, of corrmat and all random graphs + + Network Measures + ================ + Nodal Measures + -------------- + * "degree" : int + the number of incident edges + * "betweenness" : float + the betweenness centrality of each node, see :func:`networkx.betweenness_centrality` + * "closeness" : float + the closeness centrality of each node, see :func:`networkx.closeness_centrality` + * "clustering" : float + the clustering coefficient of each node, see :func:`networks.clustering` + * "module" : int + each node is assigned an integer-named module by the louvain + method of community detection, see https://python-louvain.readthedocs.io + * "participation_coefficient" : float + the participation coefficient of nodes of G with partition + defined by "module". + * "shortest_path_length" : float + the average shortest path length for each node in G. + "length" in this case means the number of edges, and does + not consider euclidean distance. + * "total_dist" : float + the total length of the incident edges + * "average_dist" : float + the average length of the incident edges + * "hemisphere" : str + L or R, as determined by the sign of the x coordinate + and assuming MNI space. The x coordinates are negative + in the left hemisphere and positive in the right. + * "interhem" : int + the number of adjacent interhemispheric edges + * "interhem_proportion" : float + the proportion of adjacent edges that are interhemispheric + + Global Measures + --------------- + * "average_clustering" : float + see :func:`networkx.average_clustering` + * "average_shortest_path_length" : float + see :func:`networkx.average_shortest_path_length` + * "assortativity" : float + see :func:`networkx.degree_assortativity_coefficient` + * "modularity" : float + modularity of network under partition defined by "module" + * "efficiency" : float + see :func:`networkx.global_efficiency` + * "small..." + small world coefficient of networks relative to the + network derived from M. + See :func:`graph_measures.small_world_coefficient` + + Rich Club + --------- + For some integer k, the rich club coefficient of degree k + measures the completeness of the subgraph on nodes with + degree >= k. + See :func:`networkx.rich_club_coefficient` + ''' + # Read in the data + if corrmat is None: + M, names, a, centroids = read_in_data( + args.corrmat_file, + args.names_file, + centroids_file=args.centroids_file, + data_as_df=False) + + else: + M = corrmat + names = list_from_file(args.names_file) + if args.centroids_file is not None: + centroids = list(np.loadtxt(args.centroids_file)) + else: + centroids = None + + # if possible, name network after corrmat_file + network_name = "" + if hasattr(args, 'corrmat_file'): + if args.corrmat_file is not None: + network_name = args.corrmat_file + + # run standard analysis + bundle, nodal_df, global_df, rc_df = scona.network_analysis_from_matrix( + M, args.cost, args.n_rand, name=network_name, seed=args.seed, parcellation=names, centroids=centroids) + + # write out each of the outputs + nodal_name = 'NodalMeasures_{}_cost{:03.0f}.csv'.format( + network_name, args.cost) + write_out_measures( + nodal_df, args.output_dir, nodal_name, first_columns=['name']) + + global_name = 'GlobalMeasures_{}_cost{:03.0f}.csv'.format( + network_name, args.cost) + write_out_measures( + global_df, args.output_dir, global_name, first_columns=[network_name]) + + rc_name = 'rich_club_{}_cost{:03.0f}.csv'.format( + network_name, args.cost) + write_out_measures( + rc_df, args.output_dir, rc_name, first_columns=['degree', network_name]) + +def standard_analysis(args): + + ''' + Create a structural covariance analysis network from + regional_measures_file and run the standard scona network analysis + on it. + + To create the structural covariance network from regional_measures_file, + scona calculates the pairwise correlations of the columns listed in + names_file over the rows of regional_measures_file, correcting for + covariance with the columns listed in covars_file. + + scona thresholds the resulting matrix at the desired cost to create a + binary network and calculates network measures, described further down. + + For the purposes of comparison this analysis also generates a number + of random graphs via edge swapping (see :func:`networkx.double_edge_swap`) + and reports global measures and rich club measures on these. + + Writes + ------ + * A dataframe reporting the nodal measures for the + nodes of the structural covariance network. + * A dataframe reporting the global measures of the + structural covariance network and random graphs, + * A dataframe reporting the rich club, at every + degree, of each network. + + Network Measures + ================ + Nodal Measures + -------------- + * "degree" : int + the number of incident edges + * "betweenness" : float + the betweenness centrality of each node, see :func:`networkx.betweenness_centrality` + * "closeness" : float + the closeness centrality of each node, see :func:`networkx.closeness_centrality` + * "clustering" : float + the clustering coefficient of each node, see :func:`networks.clustering` + * "module" : int + each node is assigned an integer-named module by the louvain + method of community detection, see https://python-louvain.readthedocs.io + * "participation_coefficient" : float + the participation coefficient of nodes of G with partition + defined by "module". + * "shortest_path_length" : float + the average shortest path length for each node in G. + "length" in this case means the number of edges, and does + not consider euclidean distance. + * "total_dist" : float + the total length of the incident edges + * "average_dist" : float + the average length of the incident edges + * "hemisphere" : str + L or R, as determined by the sign of the x coordinate + and assuming MNI space. The x coordinates are negative + in the left hemisphere and positive in the right. + * "interhem" : int + the number of adjacent interhemispheric edges + * "interhem_proportion" : float + the proportion of adjacent edges that are interhemispheric + + Global Measures + --------------- + * "average_clustering" : float + see :func:`networkx.average_clustering` + * "average_shortest_path_length" : float + see :func:`networkx.average_shortest_path_length` + * "assortativity" : float + see :func:`networkx.degree_assortativity_coefficient` + * "modularity" : float + modularity of network under partition defined by "module" + * "efficiency" : float + see :func:`networkx.global_efficiency` + * "small..." + small world coefficient of networks relative to the + network derived from M. + See :func:`graph_measures.small_world_coefficient` + + Rich Club + --------- + For some integer k, the rich club coefficient of degree k + measures the completeness of the subgraph on nodes with + degree >= k. + See :func:`networkx.rich_club_coefficient` + ''' + + M = corrmat_from_regionalmeasures(args) + + network_analysis_from_corrmat(args, corrmat=M) + +def groupwise_analysis(args): + df, names, covars_list, *a = read_in_data( + args.regional_measures_file, + args.names_file, + covars_file=args.covars_file) + + scona.analyses.groupwise_analysis( + df, + names, + args.cost, + args.group_var, + covars=covars_list, + method=args.method, + seed=args.seed) + + + +def movingwindow_analysis(args): + df, names, covars_list, *a = read_in_data( + args.regional_measures_file, + args.names_file, + covars_file=args.covars_file) + + scona.analyses.moving_window_analysis( + df, + names, + args.cost, + args.window_var, + args.window_size, + covars=covars_list, + method=args.method, + seed=args.seed) + + + diff --git a/setup.py b/setup.py index eb504f2..f34bc2e 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,4 @@ from setuptools import setup, find_packages -PACKAGES = find_packages() install_requires = [ "pandas", @@ -17,10 +16,13 @@ setup( name='scona', version='0.1dev', - packages=PACKAGES, + packages=find_packages(), package_data={'': ['*.txt', '*.csv']}, license='MIT license', install_requires=install_requires, tests_require=['pytest', 'unittest'], test_suite='py.test', - ) + entry_points={ + 'console_scripts' : [ + 'scona = scona.wrappers.parsers:main']}, + ) diff --git a/tests/.fixture_hashes b/tests/.fixture_hashes new file mode 100644 index 0000000..c4fa8bd --- /dev/null +++ b/tests/.fixture_hashes @@ -0,0 +1 @@ +{"critical_routine37": {"GlobalMeasures__cost010.csv": "01ba75bb5065937ea748c90f73bd2eda954bd91a4085d6be6f02ee9f4e511bb4", "NodalMeasures__cost010.csv": "3ce452749b52e3a60b7779ffe3c43e1de8219cb42715aeabd28b94363b59e9bb", "corrmat.txt": "c55840c3d7826e978258b8c29f1c9c9839082aa22736e7381e4dd0e9074cc2e6", "rich_club__cost010.csv": "cfdbf84229859d04614f692168c5d8252f1d31c5b6421bbae930c7d75a2004e8"}} \ No newline at end of file diff --git a/tests/regression_test.py b/tests/regression_test.py index 536a771..201ec54 100644 --- a/tests/regression_test.py +++ b/tests/regression_test.py @@ -1,53 +1,157 @@ -import unittest -from tests.write_fixtures import generate_fixture_hashes, unpickle_hash +import pytest +import subprocess +import scona as scn +import scona.datasets as datasets +import hashlib +import shutil +import sys +import os +import json -class FixturesTest(unittest.TestCase): +def critical_routine(output_dir): + """ + This is the function we are testing in our regression test. + We will run it first at a stage when we are confident that + the results are accurate. We store the results of that run + to compare later runs to. + """ + # import the Whitaker_vertes dataset + regionalmeasures, names, covars, centroids = ( + datasets.NSPN_WhitakerVertes_PNAS2016._data()) + + subprocess.run([ + "scona", + "standard_analysis", + regionalmeasures, + centroids, + names, + "--output_dir", + output_dir, + "-s 2984", + "-n 10", + "--output_name", + "corrmat.txt" + ]) +# For convenience and to save on space we will store a hash of +# the fixture output, instead of retaining the whole directory + +def hash_file(filename): + """ + Reads in file and hashes contents + """ + m = hashlib.sha256() + with open(filename, 'rb') as f: + while True: + b = f.read(2**10) + if not b: + break + m.update(b) + return m.hexdigest() + +def hash_folder(folder): + """ + Walk through a directory and return a dictionary mapping + file names to file hashes. + + n.b. we could could create just one hash for the whole + folder, but when the regression test fails it will help + to see which files it fails on. + """ + hashes = {} + for path, directories, files in os.walk(folder): + for file in sorted(files): + hashes[os.path.join(*directories, file)] = hash_file( + os.path.join(path, file)) + for dir in sorted(directories): + hashes.update(hash_folder(os.path.join(path, dir))) + break + return hashes + +def generate_regression_hashes(test_routine, folder): + """ + Run test_routine function and return a hash of the resulting + folder. Deletes all files created by test_routine. Note that + folder ought to be empty and/or not present at start. + + Parameters + ---------- + test_routine : func + A function, accepting the name of a directory as input. + test_routine should populate this directory with some + output. + folder : str + A string, designating an empty or non-existent folder in + which to store output of `test_routine` function. + + Returns + ------- + dict, str + A dictionary recording the files generated by `test_routine` + and their hashes. + A string identifying the python version and function name + """ + # First create a hash label. This can be empty or it can be used to + # identify hashes when you will be creating more than one. + # Here we will be recording the name of the function and the python + # version during generation. As an example, if we were running + # critical_routine in python 3.6 we would get "critical_routine3.6" + hash_identifier = test_routine.__name__ + ".".join([str(sys.version_info[0]), str(sys.version_info[1])]) + # Now we run test_routine + print("generating hash {}".format(hash_identifier)) + test_routine(folder) + # create hash dictionary + hash_dict = hash_folder(folder) + # delete the folder created by test_routine + print('\ndeleting temporary files') + shutil.rmtree(os.path.join(os.getcwd(), folder)) + # return hash dictionary + return hash_dict, hash_identifier + +def store_fixture(hash_dict, hash_identifier): + try: + with open( + os.path.join(os.path.dirname(__file__), ".fixture_hashes"), + "r") as f: + fixture_dict = json.load(f) + fixture_dict.update({hash_identifier:hash_dict}) + except: + fixture_dict = {hash_identifier: hash_dict} + with open(os.path.join(os.path.dirname(__file__), ".fixture_hashes"), "w") as f: + json.dump(fixture_dict, f) + + + +def load_fixture(hash_identifier): + """ + Unpickle tests/.fixture_hashing file and look for + hashes with metadata matching hash_identifier + """ + with open(os.path.join(os.path.dirname(__file__), ".fixture_hashes"), "r") as f: + fixture_dict = json.load(f) + try: + return fixture_dict[hash_identifier] + except KeyError: + raise KeyError("no regression fixture found matching {}".format(hash_identifier)) + + +# --------------------------- Tests -------------------------------- +def test_old_hashes_against_new(): # ------------------- setup and teardown --------------------------- - @classmethod - def setUpClass(cls): - cls.hash_dict_original = unpickle_hash() - print('\nin set up - this takes about 80 secs') - cls.hash_dict_new = generate_fixture_hashes() - # define dictionary keys for individual files for checking - folder = 'temporary_test_fixtures' - cls.corrmat = folder + '/corrmat_file.txt' - cls.gm = (folder + - '/network-analysis/GlobalMeasures_corrmat_file_cost010.csv') - cls.lm = (folder + - '/network-analysis/NodalMeasures_corrmat_file_cost010.csv') - cls.rich = (folder + - '/network-analysis/rich_club_corrmat_file_cost010.csv') - - # --------------------------- Tests -------------------------------- - # Each of these tests checks that ourly newly generated version of - # file_x matches the fixture version - - def test_corrmat_matches_fixture(self): - # test new correlation matrix against fixture - print('\ntesting new correlation matrix against fixture') - self.assertEqual(self.hash_dict_new[self.corrmat], - self.hash_dict_original[self.corrmat]) - - def test_lm_against_fixture(self): - # test new local measures against fixture - print('\ntesting new nodal measures against fixture') - self.assertEqual(self.hash_dict_new[self.lm], - self.hash_dict_original[self.lm]) - - def test_gm_against_fixture(self): - # test new global measures against fixture - print('\ntesting new global measures against fixture') - self.assertEqual(self.hash_dict_new[self.gm], - self.hash_dict_original[self.gm]) - - def test_rich_against_fixture(self): - # test rich club against fixture - print('\ntesting rich club against fixture') - self.assertEqual(self.hash_dict_new[self.rich], - self.hash_dict_original[self.rich]) + print("generating temporary test files") + hash_dict_new, hash_label = generate_regression_hashes( + critical_routine, 'temporary_test_fixtures') + + print("loading old test fixtures") + hash_dict_original = load_fixture(hash_label) + + for key in hash_dict_original.keys(): + print("testing regression on {}".format(key)) + assert hash_dict_new[key] == hash_dict_original[key] if __name__ == '__main__': - unittest.main() + if (input("Are you sure you want to update scona's test fixtures? (y/n)") + == 'y'): + store_fixture(*generate_regression_hashes(critical_routine, "new_test_fixtures")) diff --git a/tests/write_fixtures.py b/tests/write_fixtures.py deleted file mode 100644 index 68be1a9..0000000 --- a/tests/write_fixtures.py +++ /dev/null @@ -1,130 +0,0 @@ -# -------------------------- Write fixtures --------------------------- -# To regression test our wrappers we need examples. This script -# generates files. We save these files once, and regression_test.py -# re-generates these files to tests them for identicality with the -# presaved examples (fixtures). If they are found not to be identical -# it throws up an error. -# -# The point of this is to check that throughout the changes we make to -# scona the functionality of this script stays the same -# -# Currently the functionality of write_fixtures is to generate corrmat -# and network_analysis data via the functions -# corrmat_from_regionalmeasures and network_analysis_from_corrmat. -# --------------------------------------------------------------------- -import os -import scona as scn -import scona.datasets as datasets - - -def recreate_correlation_matrix_fixture(folder): - # generate a correlation matrix in the given folder using - # the Whitaker_Vertes dataset - regionalmeasures, names, covars, centroids = ( - datasets.NSPN_WhitakerVertes_PNAS2016._data()) - corrmat_path = os.path.join(folder, 'corrmat_file.txt') - scn.wrappers.corrmat_from_regionalmeasures( - regionalmeasures, - names, - corrmat_path) - - -def recreate_network_analysis_fixture(folder, corrmat_path): - # generate network analysis in the given folder using the ##### - # data in example_data and the correlation matrix given ##### - # by corrmat_path ##### - regionalmeasures, names, covars, centroids = ( - datasets.NSPN_WhitakerVertes_PNAS2016._data()) - # It is necessary to specify a random seed because - # network_analysis_from_corrmat generates random graphs to - # calculate global measures - scn.wrappers.network_analysis_from_corrmat( - corrmat_path, - names, - centroids, - os.path.join(os.getcwd(), folder, 'network-analysis'), - cost=10, - n_rand=10, # this is not a reasonable - # value for n, we generate only 10 random - # graphs to save time - edge_swap_seed=2984 - ) - - -def write_fixtures(folder='temporary_test_fixtures'): - # Run functions corrmat_from_regionalmeasures and ## - # network_analysis_from_corrmat to save corrmat in given folder ## - # --------------------------------------------------------------## - # if the folder does not exist, create it - if not os.path.isdir(os.path.join(os.getcwd(), folder)): - os.makedirs(os.path.join(os.getcwd(), folder)) - # generate and save the correlation matrix - print("generating new correlation matrix") - recreate_correlation_matrix_fixture(folder) - # generate and save the network analysis - print("generating new network analysis") - corrmat_path = os.path.join(folder, 'corrmat_file.txt') - recreate_network_analysis_fixture(folder, corrmat_path) - - -def delete_fixtures(folder): - import shutil - print('\ndeleting temporary files') - shutil.rmtree(os.getcwd()+folder) - - -def hash_folder(folder='temporary_test_fixtures'): - hashes = {} - for path, directories, files in os.walk(folder): - for file in sorted(files): - hashes[os.path.join(path, file)] = hash_file( - os.path.join(path, file)) - for dir in sorted(directories): - hashes.update(hash_folder(os.path.join(path, dir))) - break - return hashes - - -def hash_file(filename): - import hashlib - m = hashlib.sha256() - with open(filename, 'rb') as f: - while True: - b = f.read(2**10) - if not b: - break - m.update(b) - return m.hexdigest() - - -def generate_fixture_hashes(folder='temporary_test_fixtures'): - # generate the fixtures - write_fixtures(folder=folder) - # calculate the hash - hash_dict = hash_folder(folder=folder) - # delete the new files - delete_fixtures("/"+folder) - # return hash - return hash_dict - - -def pickle_hash(hash_dict): - import pickle - with open("tests/.fixture_hash", 'wb') as f: - pickle.dump(hash_dict, f) - - -def unpickle_hash(): - import pickle - # import fixture relevant to the current python, networkx versions - print('loading test fixtures') - with open("tests/.fixture_hash", "rb") as f: - pickle_file = pickle.load(f) - return pickle_file - - -if __name__ == '__main__': - if (input("Are you sure you want to update scona's test fixtures? (y/n)") - == 'y'): - hash_dict = generate_fixture_hashes() - pickle_hash(hash_dict) diff --git a/tutorials/paired_brains.ipynb b/tutorials/paired_brains.ipynb new file mode 100644 index 0000000..44f4b89 --- /dev/null +++ b/tutorials/paired_brains.ipynb @@ -0,0 +1,2040 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Paired brain bundles tutorial\n", + "\n", + "In the [`introductory_tutorial`](introductory_tutorial.ipynb) we ran through building structural covariance network analyses using scona🍪.\n", + "\n", + "In this tutorial we'll cover some how to build _pairs_ of structural covariance matrices to compare the network properties of two groups.\n", + "\n", + "Click on any of the links below to jump to that section\n", + "\n", + "* [Get set up](#Get-set-up) (make sure to run this section before jumping into any of the others!)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get set up\n", + "\n", + "### Import the modules you need" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import scona as scn\n", + "import scona.datasets as datasets\n", + "import numpy as np\n", + "import networkx as nx\n", + "import pandas as pd\n", + "from IPython.display import display\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "%matplotlib inline\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read in the data\n", + "\n", + "We're going to use the same data as in the [`introductory_tutorial`](introductory_tutorial.ipynb).\n", + "\n", + "The groups we're going to compare in this dataset are male and female brains.\n", + "There's a good chance that we won't find any differences because the differences between male and female brains on average are very small, while the individual variability is very large.\n", + "But that's ok, because part of this tutorial is going to be to show you how to statistically assess the differences 😸 \n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Female participants\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0nspn_idocccentrestudy_primaryage_scansexmaleage_binmri_centre...rh_supramarginal_part5rh_supramarginal_part6rh_supramarginal_part7rh_frontalpole_part1rh_temporalpole_part1rh_transversetemporal_part1rh_insula_part1rh_insula_part2rh_insula_part3rh_insula_part4
00103560Cambridge2K_Cohort20.761Female0.04WBIC...2.5922.8412.3182.4863.5262.6383.3082.5833.1883.089
22107360Cambridge2K_Cohort14.897Female0.01WBIC...3.5263.2693.0763.1333.9002.9143.8942.8983.7203.580
33107780Cambridge2K_Cohort20.022Female0.04WBIC...2.8302.9172.6472.7963.4013.0453.1382.7392.8333.349
44107940Cambridge2K_Cohort14.656Female0.01WBIC...2.6893.2942.8202.5392.1512.7342.7912.9353.5383.403
77110490Cambridge2K_Cohort18.335Female0.03WBIC...3.4413.0992.9542.6933.4553.0713.2742.7583.3513.364
\n", + "

5 rows × 324 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 nspn_id occ centre study_primary age_scan sex male \\\n", + "0 0 10356 0 Cambridge 2K_Cohort 20.761 Female 0.0 \n", + "2 2 10736 0 Cambridge 2K_Cohort 14.897 Female 0.0 \n", + "3 3 10778 0 Cambridge 2K_Cohort 20.022 Female 0.0 \n", + "4 4 10794 0 Cambridge 2K_Cohort 14.656 Female 0.0 \n", + "7 7 11049 0 Cambridge 2K_Cohort 18.335 Female 0.0 \n", + "\n", + " age_bin mri_centre ... rh_supramarginal_part5 rh_supramarginal_part6 \\\n", + "0 4 WBIC ... 2.592 2.841 \n", + "2 1 WBIC ... 3.526 3.269 \n", + "3 4 WBIC ... 2.830 2.917 \n", + "4 1 WBIC ... 2.689 3.294 \n", + "7 3 WBIC ... 3.441 3.099 \n", + "\n", + " rh_supramarginal_part7 rh_frontalpole_part1 rh_temporalpole_part1 \\\n", + "0 2.318 2.486 3.526 \n", + "2 3.076 3.133 3.900 \n", + "3 2.647 2.796 3.401 \n", + "4 2.820 2.539 2.151 \n", + "7 2.954 2.693 3.455 \n", + "\n", + " rh_transversetemporal_part1 rh_insula_part1 rh_insula_part2 \\\n", + "0 2.638 3.308 2.583 \n", + "2 2.914 3.894 2.898 \n", + "3 3.045 3.138 2.739 \n", + "4 2.734 2.791 2.935 \n", + "7 3.071 3.274 2.758 \n", + "\n", + " rh_insula_part3 rh_insula_part4 \n", + "0 3.188 3.089 \n", + "2 3.720 3.580 \n", + "3 2.833 3.349 \n", + "4 3.538 3.403 \n", + "7 3.351 3.364 \n", + "\n", + "[5 rows x 324 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Male participants\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0nspn_idocccentrestudy_primaryage_scansexmaleage_binmri_centre...rh_supramarginal_part5rh_supramarginal_part6rh_supramarginal_part7rh_frontalpole_part1rh_temporalpole_part1rh_transversetemporal_part1rh_insula_part1rh_insula_part2rh_insula_part3rh_insula_part4
11107020Cambridge2K_Cohort16.055Male1.02WBIC...3.4483.2832.7403.2254.0443.0403.8672.9433.4783.609
55109000Cambridge2K_Cohort16.205Male1.02WBIC...2.9162.8902.5692.8083.4282.9513.9562.8253.6473.582
66109750Cambridge2K_Cohort18.628Male1.03WBIC...3.0942.9922.7052.8553.9802.6343.5962.7273.2873.531
1010112390Cambridge2K_Cohort17.897Male1.02WBIC...2.5503.1182.7082.3823.5203.0323.5512.8163.6793.816
1111112620Cambridge2K_Cohort17.073Male1.02WBIC...3.1632.8512.5852.9383.9032.8763.4232.7033.0273.703
\n", + "

5 rows × 324 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 nspn_id occ centre study_primary age_scan sex male \\\n", + "1 1 10702 0 Cambridge 2K_Cohort 16.055 Male 1.0 \n", + "5 5 10900 0 Cambridge 2K_Cohort 16.205 Male 1.0 \n", + "6 6 10975 0 Cambridge 2K_Cohort 18.628 Male 1.0 \n", + "10 10 11239 0 Cambridge 2K_Cohort 17.897 Male 1.0 \n", + "11 11 11262 0 Cambridge 2K_Cohort 17.073 Male 1.0 \n", + "\n", + " age_bin mri_centre ... rh_supramarginal_part5 rh_supramarginal_part6 \\\n", + "1 2 WBIC ... 3.448 3.283 \n", + "5 2 WBIC ... 2.916 2.890 \n", + "6 3 WBIC ... 3.094 2.992 \n", + "10 2 WBIC ... 2.550 3.118 \n", + "11 2 WBIC ... 3.163 2.851 \n", + "\n", + " rh_supramarginal_part7 rh_frontalpole_part1 rh_temporalpole_part1 \\\n", + "1 2.740 3.225 4.044 \n", + "5 2.569 2.808 3.428 \n", + "6 2.705 2.855 3.980 \n", + "10 2.708 2.382 3.520 \n", + "11 2.585 2.938 3.903 \n", + "\n", + " rh_transversetemporal_part1 rh_insula_part1 rh_insula_part2 \\\n", + "1 3.040 3.867 2.943 \n", + "5 2.951 3.956 2.825 \n", + "6 2.634 3.596 2.727 \n", + "10 3.032 3.551 2.816 \n", + "11 2.876 3.423 2.703 \n", + "\n", + " rh_insula_part3 rh_insula_part4 \n", + "1 3.478 3.609 \n", + "5 3.647 3.582 \n", + "6 3.287 3.531 \n", + "10 3.679 3.816 \n", + "11 3.027 3.703 \n", + "\n", + "[5 rows x 324 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Read in sample data from the NSPN WhitakerVertes PNAS 2016 paper.\n", + "df, names, covars, centroids = datasets.NSPN_WhitakerVertes_PNAS2016.import_data()\n", + "\n", + "# Split the dataframe into the two groups that we're going to compare\n", + "df_female = df.loc[df['male']==0, :]\n", + "df_male = df.loc[df['male']==1, :]\n", + "\n", + "# And take a quick look at the two data frames\n", + "print('Female participants')\n", + "display(df_female.head())\n", + "print('Male participants')\n", + "display(df_male.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Remove the variance associated with MRI centre\n", + "\n", + "By default this dataset doesn't contain any covariates in the `covars` list, but we want to demonstrate in this tutorial how correcting for a covariate of no interest works when you have two groups." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Add \"wbic\" and \"ucl\" columns to covars list\n", + "covars = ['wbic', 'ucl']\n", + "\n", + "# Calculate residual variance left over for the two dataframes\n", + "# for the brain regions listed in \"names\"\n", + "df_female_res = scn.create_residuals_df(df_female, names, covars)\n", + "df_male_res = scn.create_residuals_df(df_male, names, covars)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create correlation matrices and graphs\n", + "\n", + "Calculate the correlation matrices for the two groups, and turn them into graphs.\n", + "Threshold and binarise both graphs at 10% cost. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# create correlation matrices over the columns of df_res\n", + "M_female = scn.create_corrmat(df_female_res, names=names, method='pearson')\n", + "M_male = scn.create_corrmat(df_male_res, names=names, method='pearson')\n", + "\n", + "# take a look at the matrices\n", + "fig, ax_list = plt.subplots(1, 2)\n", + "ax_list[0].imshow(M_female, vmin=0.0, vmax=0.5)\n", + "ax_list[0].title.set_text('Female participants')\n", + "ax_list[1].imshow(M_male, vmin=0.0, vmax=0.5)\n", + "ax_list[1].title.set_text('Male participants')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialise weighted graphs from the correlation matrices\n", + "G_female = scn.BrainNetwork(network=M_female, parcellation=names, centroids=centroids)\n", + "G_male = scn.BrainNetwork(network=M_male, parcellation=names, centroids=centroids)\n", + "\n", + "# Threshold the graphs at cost 10 to create binary graphs with 10% as many edges as the complete graphs\n", + "G10_female = G_female.threshold(10)\n", + "G10_male = G_male.threshold(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Calculate nodal and global network measures\n", + "\n", + "### Global measures\n", + "\n", + "Calculate assortativity, average clustering, average shortest path length, efficiency and modularity for the male and female graphs separately." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'assortativity': 0.07641717275052176,\n", + " 'average_clustering': 0.3937883550646628,\n", + " 'average_shortest_path_length': 2.334806886924151,\n", + " 'efficiency': 0.48544964032407156,\n", + " 'modularity': 0.28813763130545317}" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "{'assortativity': 0.08335011130326313,\n", + " 'average_clustering': 0.4026428163550175,\n", + " 'average_shortest_path_length': 2.285122044079699,\n", + " 'efficiency': 0.4907198354616811,\n", + " 'modularity': 0.3455246053678843}" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G10_female.calculate_global_measures()\n", + "G10_male.calculate_global_measures()\n", + "\n", + "display(G10_female.graph['global_measures'])\n", + "display(G10_male.graph['global_measures'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Nodal measures\n", + "\n", + "Calculate betweenness, closeness, clustering, degree, participation coefficient, shortest path length for each node and and assign each node to a module, for the male and female graphs separately." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Female participants\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namecentroidsbetweennessclosenessclusteringdegreemoduleparticipation_coefficientshortest_path_lengthxyz
0lh_bankssts_part1[-56.40355, -40.152663, 1.708876]0.002818630.4811910.425323800.9556792.07143-56.4036-40.15271.70888
1lh_bankssts_part2[-53.140506, -49.843038, 8.264557]0.000977030.4534710.4130432400.9565972.19805-53.1405-49.8438.26456
2lh_caudalanteriorcingulate_part1[-5.001684, 20.645903, 25.733446]00.3578091310.5555562.78571-5.0016820.645925.7334
3lh_caudalmiddlefrontal_part1[-33.265925, 20.200202, 45.347826]0.02825230.5653780.2835711020.7678511.76299-33.265920.200245.3478
4lh_caudalmiddlefrontal_part2[-31.958115, 2.146597, 51.26911]0.01729850.529310.348247020.8163271.88312-31.95812.146651.2691
\n", + "
" + ], + "text/plain": [ + " name centroids \\\n", + "0 lh_bankssts_part1 [-56.40355, -40.152663, 1.708876] \n", + "1 lh_bankssts_part2 [-53.140506, -49.843038, 8.264557] \n", + "2 lh_caudalanteriorcingulate_part1 [-5.001684, 20.645903, 25.733446] \n", + "3 lh_caudalmiddlefrontal_part1 [-33.265925, 20.200202, 45.347826] \n", + "4 lh_caudalmiddlefrontal_part2 [-31.958115, 2.146597, 51.26911] \n", + "\n", + " betweenness closeness clustering degree module participation_coefficient \\\n", + "0 0.00281863 0.481191 0.42532 38 0 0.955679 \n", + "1 0.00097703 0.453471 0.413043 24 0 0.956597 \n", + "2 0 0.357809 1 3 1 0.555556 \n", + "3 0.0282523 0.565378 0.28357 110 2 0.767851 \n", + "4 0.0172985 0.52931 0.34824 70 2 0.816327 \n", + "\n", + " shortest_path_length x y z \n", + "0 2.07143 -56.4036 -40.1527 1.70888 \n", + "1 2.19805 -53.1405 -49.843 8.26456 \n", + "2 2.78571 -5.00168 20.6459 25.7334 \n", + "3 1.76299 -33.2659 20.2002 45.3478 \n", + "4 1.88312 -31.9581 2.1466 51.2691 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Male participants\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namecentroidsbetweennessclosenessclusteringdegreemoduleparticipation_coefficientshortest_path_lengthxyz
0lh_bankssts_part1[-56.40355, -40.152663, 1.708876]0.00735520.5159660.3506725900.7584031.93182-56.4036-40.15271.70888
1lh_bankssts_part2[-53.140506, -49.843038, 8.264557]0.01223070.5320620.3158957100.7284271.87338-53.1405-49.8438.26456
2lh_caudalanteriorcingulate_part1[-5.001684, 20.645903, 25.733446]8.68125e-050.3358860.333333310.5555562.96753-5.0016820.645925.7334
3lh_caudalmiddlefrontal_part1[-33.265925, 20.200202, 45.347826]0.001292290.4679880.5304884110.1856042.12987-33.265920.200245.3478
4lh_caudalmiddlefrontal_part2[-31.958115, 2.146597, 51.26911]0.02493360.5633030.28040410010.751.76948-31.95812.146651.2691
\n", + "
" + ], + "text/plain": [ + " name centroids \\\n", + "0 lh_bankssts_part1 [-56.40355, -40.152663, 1.708876] \n", + "1 lh_bankssts_part2 [-53.140506, -49.843038, 8.264557] \n", + "2 lh_caudalanteriorcingulate_part1 [-5.001684, 20.645903, 25.733446] \n", + "3 lh_caudalmiddlefrontal_part1 [-33.265925, 20.200202, 45.347826] \n", + "4 lh_caudalmiddlefrontal_part2 [-31.958115, 2.146597, 51.26911] \n", + "\n", + " betweenness closeness clustering degree module participation_coefficient \\\n", + "0 0.0073552 0.515966 0.350672 59 0 0.758403 \n", + "1 0.0122307 0.532062 0.315895 71 0 0.728427 \n", + "2 8.68125e-05 0.335886 0.333333 3 1 0.555556 \n", + "3 0.00129229 0.467988 0.530488 41 1 0.185604 \n", + "4 0.0249336 0.563303 0.280404 100 1 0.75 \n", + "\n", + " shortest_path_length x y z \n", + "0 1.93182 -56.4036 -40.1527 1.70888 \n", + "1 1.87338 -53.1405 -49.843 8.26456 \n", + "2 2.96753 -5.00168 20.6459 25.7334 \n", + "3 2.12987 -33.2659 20.2002 45.3478 \n", + "4 1.76948 -31.9581 2.1466 51.2691 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "G10_female.calculate_nodal_measures()\n", + "G10_male.calculate_nodal_measures()\n", + "\n", + "print('Female participants')\n", + "display(G10_female.report_nodal_measures().head())\n", + "print('Male participants')\n", + "display(G10_male.report_nodal_measures().head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So, there are some differences between the two groups....but how do we know how meaningful those differences are?\n", + "\n", + "Lets make some shuffled networks to assess the variability!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create shuffled networks\n", + "\n", + "We can't tell how meaningful it is for male participants to have a global modularity of 0.35 when the female participants have a modularity of 0.29. Or whether to interpret the fact that `lh_caudalmiddlefrontal_part2` has 100 edges in the network derived from male participants vs \"only\" 70 in the network derived from female participants.\n", + "\n", + "Fortunately, `scona`🍪 has a function for that: `split_groups` 🎊" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "split_group_df_dict = scn.make_corr_matrices.split_groups(df, 'male')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This dictionary has an entry for every unique value in the 'male' column. The values are dataframes." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['male_0.0', 'male_1.0'])" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0nspn_idocccentrestudy_primaryage_scansexmaleage_binmri_centre...rh_supramarginal_part5rh_supramarginal_part6rh_supramarginal_part7rh_frontalpole_part1rh_temporalpole_part1rh_transversetemporal_part1rh_insula_part1rh_insula_part2rh_insula_part3rh_insula_part4
00103560Cambridge2K_Cohort20.761Female0.04WBIC...2.5922.8412.3182.4863.5262.6383.3082.5833.1883.089
22107360Cambridge2K_Cohort14.897Female0.01WBIC...3.5263.2693.0763.1333.9002.9143.8942.8983.7203.580
33107780Cambridge2K_Cohort20.022Female0.04WBIC...2.8302.9172.6472.7963.4013.0453.1382.7392.8333.349
44107940Cambridge2K_Cohort14.656Female0.01WBIC...2.6893.2942.8202.5392.1512.7342.7912.9353.5383.403
77110490Cambridge2K_Cohort18.335Female0.03WBIC...3.4413.0992.9542.6933.4553.0713.2742.7583.3513.364
\n", + "

5 rows × 324 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 nspn_id occ centre study_primary age_scan sex male \\\n", + "0 0 10356 0 Cambridge 2K_Cohort 20.761 Female 0.0 \n", + "2 2 10736 0 Cambridge 2K_Cohort 14.897 Female 0.0 \n", + "3 3 10778 0 Cambridge 2K_Cohort 20.022 Female 0.0 \n", + "4 4 10794 0 Cambridge 2K_Cohort 14.656 Female 0.0 \n", + "7 7 11049 0 Cambridge 2K_Cohort 18.335 Female 0.0 \n", + "\n", + " age_bin mri_centre ... rh_supramarginal_part5 rh_supramarginal_part6 \\\n", + "0 4 WBIC ... 2.592 2.841 \n", + "2 1 WBIC ... 3.526 3.269 \n", + "3 4 WBIC ... 2.830 2.917 \n", + "4 1 WBIC ... 2.689 3.294 \n", + "7 3 WBIC ... 3.441 3.099 \n", + "\n", + " rh_supramarginal_part7 rh_frontalpole_part1 rh_temporalpole_part1 \\\n", + "0 2.318 2.486 3.526 \n", + "2 3.076 3.133 3.900 \n", + "3 2.647 2.796 3.401 \n", + "4 2.820 2.539 2.151 \n", + "7 2.954 2.693 3.455 \n", + "\n", + " rh_transversetemporal_part1 rh_insula_part1 rh_insula_part2 \\\n", + "0 2.638 3.308 2.583 \n", + "2 2.914 3.894 2.898 \n", + "3 3.045 3.138 2.739 \n", + "4 2.734 2.791 2.935 \n", + "7 3.071 3.274 2.758 \n", + "\n", + " rh_insula_part3 rh_insula_part4 \n", + "0 3.188 3.089 \n", + "2 3.720 3.580 \n", + "3 2.833 3.349 \n", + "4 3.538 3.403 \n", + "7 3.351 3.364 \n", + "\n", + "[5 rows x 324 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0nspn_idocccentrestudy_primaryage_scansexmaleage_binmri_centre...rh_supramarginal_part5rh_supramarginal_part6rh_supramarginal_part7rh_frontalpole_part1rh_temporalpole_part1rh_transversetemporal_part1rh_insula_part1rh_insula_part2rh_insula_part3rh_insula_part4
11107020Cambridge2K_Cohort16.055Male1.02WBIC...3.4483.2832.7403.2254.0443.0403.8672.9433.4783.609
55109000Cambridge2K_Cohort16.205Male1.02WBIC...2.9162.8902.5692.8083.4282.9513.9562.8253.6473.582
66109750Cambridge2K_Cohort18.628Male1.03WBIC...3.0942.9922.7052.8553.9802.6343.5962.7273.2873.531
1010112390Cambridge2K_Cohort17.897Male1.02WBIC...2.5503.1182.7082.3823.5203.0323.5512.8163.6793.816
1111112620Cambridge2K_Cohort17.073Male1.02WBIC...3.1632.8512.5852.9383.9032.8763.4232.7033.0273.703
\n", + "

5 rows × 324 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 nspn_id occ centre study_primary age_scan sex male \\\n", + "1 1 10702 0 Cambridge 2K_Cohort 16.055 Male 1.0 \n", + "5 5 10900 0 Cambridge 2K_Cohort 16.205 Male 1.0 \n", + "6 6 10975 0 Cambridge 2K_Cohort 18.628 Male 1.0 \n", + "10 10 11239 0 Cambridge 2K_Cohort 17.897 Male 1.0 \n", + "11 11 11262 0 Cambridge 2K_Cohort 17.073 Male 1.0 \n", + "\n", + " age_bin mri_centre ... rh_supramarginal_part5 rh_supramarginal_part6 \\\n", + "1 2 WBIC ... 3.448 3.283 \n", + "5 2 WBIC ... 2.916 2.890 \n", + "6 3 WBIC ... 3.094 2.992 \n", + "10 2 WBIC ... 2.550 3.118 \n", + "11 2 WBIC ... 3.163 2.851 \n", + "\n", + " rh_supramarginal_part7 rh_frontalpole_part1 rh_temporalpole_part1 \\\n", + "1 2.740 3.225 4.044 \n", + "5 2.569 2.808 3.428 \n", + "6 2.705 2.855 3.980 \n", + "10 2.708 2.382 3.520 \n", + "11 2.585 2.938 3.903 \n", + "\n", + " rh_transversetemporal_part1 rh_insula_part1 rh_insula_part2 \\\n", + "1 3.040 3.867 2.943 \n", + "5 2.951 3.956 2.825 \n", + "6 2.634 3.596 2.727 \n", + "10 3.032 3.551 2.816 \n", + "11 2.876 3.423 2.703 \n", + "\n", + " rh_insula_part3 rh_insula_part4 \n", + "1 3.478 3.609 \n", + "5 3.647 3.582 \n", + "6 3.287 3.531 \n", + "10 3.679 3.816 \n", + "11 3.027 3.703 \n", + "\n", + "[5 rows x 324 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(split_group_df_dict.keys())\n", + "df_female = split_group_df_dict['male_0.0']\n", + "df_male = split_group_df_dict['male_1.0']\n", + "\n", + "display(df_female.head())\n", + "display(df_male.head())" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "split_group_df_dict = scn.make_corr_matrices.split_groups(df, 'male', shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['male_rand_0.0', 'male_rand_1.0'])" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0nspn_idocccentrestudy_primaryage_scansexmaleage_binmri_centre...rh_supramarginal_part6rh_supramarginal_part7rh_frontalpole_part1rh_temporalpole_part1rh_transversetemporal_part1rh_insula_part1rh_insula_part2rh_insula_part3rh_insula_part4male_rand
00103560Cambridge2K_Cohort20.761Female0.04WBIC...2.8412.3182.4863.5262.6383.3082.5833.1883.0890.0
22107360Cambridge2K_Cohort14.897Female0.01WBIC...3.2693.0763.1333.9002.9143.8942.8983.7203.5800.0
33107780Cambridge2K_Cohort20.022Female0.04WBIC...2.9172.6472.7963.4013.0453.1382.7392.8333.3490.0
66109750Cambridge2K_Cohort18.628Male1.03WBIC...2.9922.7052.8553.9802.6343.5962.7273.2873.5310.0
99111710Cambridge2K_Cohort17.476Female0.02WBIC...2.9422.5263.4503.6742.8654.0432.5573.1623.5480.0
\n", + "

5 rows × 325 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 nspn_id occ centre study_primary age_scan sex male \\\n", + "0 0 10356 0 Cambridge 2K_Cohort 20.761 Female 0.0 \n", + "2 2 10736 0 Cambridge 2K_Cohort 14.897 Female 0.0 \n", + "3 3 10778 0 Cambridge 2K_Cohort 20.022 Female 0.0 \n", + "6 6 10975 0 Cambridge 2K_Cohort 18.628 Male 1.0 \n", + "9 9 11171 0 Cambridge 2K_Cohort 17.476 Female 0.0 \n", + "\n", + " age_bin mri_centre ... rh_supramarginal_part6 rh_supramarginal_part7 \\\n", + "0 4 WBIC ... 2.841 2.318 \n", + "2 1 WBIC ... 3.269 3.076 \n", + "3 4 WBIC ... 2.917 2.647 \n", + "6 3 WBIC ... 2.992 2.705 \n", + "9 2 WBIC ... 2.942 2.526 \n", + "\n", + " rh_frontalpole_part1 rh_temporalpole_part1 rh_transversetemporal_part1 \\\n", + "0 2.486 3.526 2.638 \n", + "2 3.133 3.900 2.914 \n", + "3 2.796 3.401 3.045 \n", + "6 2.855 3.980 2.634 \n", + "9 3.450 3.674 2.865 \n", + "\n", + " rh_insula_part1 rh_insula_part2 rh_insula_part3 rh_insula_part4 \\\n", + "0 3.308 2.583 3.188 3.089 \n", + "2 3.894 2.898 3.720 3.580 \n", + "3 3.138 2.739 2.833 3.349 \n", + "6 3.596 2.727 3.287 3.531 \n", + "9 4.043 2.557 3.162 3.548 \n", + "\n", + " male_rand \n", + "0 0.0 \n", + "2 0.0 \n", + "3 0.0 \n", + "6 0.0 \n", + "9 0.0 \n", + "\n", + "[5 rows x 325 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0nspn_idocccentrestudy_primaryage_scansexmaleage_binmri_centre...rh_supramarginal_part6rh_supramarginal_part7rh_frontalpole_part1rh_temporalpole_part1rh_transversetemporal_part1rh_insula_part1rh_insula_part2rh_insula_part3rh_insula_part4male_rand
11107020Cambridge2K_Cohort16.055Male1.02WBIC...3.2832.7403.2254.0443.0403.8672.9433.4783.6091.0
44107940Cambridge2K_Cohort14.656Female0.01WBIC...3.2942.8202.5392.1512.7342.7912.9353.5383.4031.0
55109000Cambridge2K_Cohort16.205Male1.02WBIC...2.8902.5692.8083.4282.9513.9562.8253.6473.5821.0
77110490Cambridge2K_Cohort18.335Female0.03WBIC...3.0992.9542.6933.4553.0713.2742.7583.3513.3641.0
88110640Cambridge2K_Cohort18.519Female0.03WBIC...3.1473.0142.8393.8462.8044.0342.7673.3193.5241.0
\n", + "

5 rows × 325 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 nspn_id occ centre study_primary age_scan sex male \\\n", + "1 1 10702 0 Cambridge 2K_Cohort 16.055 Male 1.0 \n", + "4 4 10794 0 Cambridge 2K_Cohort 14.656 Female 0.0 \n", + "5 5 10900 0 Cambridge 2K_Cohort 16.205 Male 1.0 \n", + "7 7 11049 0 Cambridge 2K_Cohort 18.335 Female 0.0 \n", + "8 8 11064 0 Cambridge 2K_Cohort 18.519 Female 0.0 \n", + "\n", + " age_bin mri_centre ... rh_supramarginal_part6 rh_supramarginal_part7 \\\n", + "1 2 WBIC ... 3.283 2.740 \n", + "4 1 WBIC ... 3.294 2.820 \n", + "5 2 WBIC ... 2.890 2.569 \n", + "7 3 WBIC ... 3.099 2.954 \n", + "8 3 WBIC ... 3.147 3.014 \n", + "\n", + " rh_frontalpole_part1 rh_temporalpole_part1 rh_transversetemporal_part1 \\\n", + "1 3.225 4.044 3.040 \n", + "4 2.539 2.151 2.734 \n", + "5 2.808 3.428 2.951 \n", + "7 2.693 3.455 3.071 \n", + "8 2.839 3.846 2.804 \n", + "\n", + " rh_insula_part1 rh_insula_part2 rh_insula_part3 rh_insula_part4 \\\n", + "1 3.867 2.943 3.478 3.609 \n", + "4 2.791 2.935 3.538 3.403 \n", + "5 3.956 2.825 3.647 3.582 \n", + "7 3.274 2.758 3.351 3.364 \n", + "8 4.034 2.767 3.319 3.524 \n", + "\n", + " male_rand \n", + "1 1.0 \n", + "4 1.0 \n", + "5 1.0 \n", + "7 1.0 \n", + "8 1.0 \n", + "\n", + "[5 rows x 325 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(split_group_df_dict.keys())\n", + "df_female = split_group_df_dict['male_rand_0.0']\n", + "df_male = split_group_df_dict['male_rand_1.0']\n", + "\n", + "display(df_female.head())\n", + "display(df_male.head())" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Modularity: Female = 0.34, Male = 0.30\n", + "Modularity: Female = 0.34, Male = 0.31\n", + "Modularity: Female = 0.33, Male = 0.30\n", + "Modularity: Female = 0.31, Male = 0.33\n", + "Modularity: Female = 0.34, Male = 0.28\n", + "Modularity: Female = 0.33, Male = 0.32\n", + "Modularity: Female = 0.34, Male = 0.29\n", + "Modularity: Female = 0.32, Male = 0.32\n", + "Modularity: Female = 0.30, Male = 0.32\n", + "Modularity: Female = 0.31, Male = 0.34\n" + ] + } + ], + "source": [ + "for i in range(10):\n", + " split_group_df_dict = scn.make_corr_matrices.split_groups(df, 'male', shuffle=True)\n", + "\n", + " df_female = split_group_df_dict['male_rand_0.0']\n", + " df_male = split_group_df_dict['male_rand_1.0']\n", + "\n", + " df_female_res = scn.create_residuals_df(df_female, names, covars)\n", + " df_male_res = scn.create_residuals_df(df_male, names, covars)\n", + " M_female = scn.create_corrmat(df_female_res, names=names, method='pearson')\n", + " M_male = scn.create_corrmat(df_male_res, names=names, method='pearson')\n", + " # Initialise weighted graphs from the correlation matrices\n", + " G_female = scn.BrainNetwork(network=M_female, parcellation=names, centroids=centroids)\n", + " G_male = scn.BrainNetwork(network=M_male, parcellation=names, centroids=centroids)\n", + "\n", + " # Threshold the graphs at cost 10 to create binary graphs with 10% as many edges as the complete graphs\n", + " G10_female = G_female.threshold(10)\n", + " G10_male = G_male.threshold(10)\n", + " G10_female.calculate_global_measures()\n", + " G10_male.calculate_global_measures()\n", + "\n", + " print('Modularity: Female = {:2.2f}, Male = {:2.2f}'.format(G10_female.graph['global_measures']['modularity'],\n", + " G10_male.graph['global_measures']['modularity']))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a GraphBundle object that contains the G10 graph called \"real_graph\"\n", + "bundleGraphs = scn.GraphBundle([G10], [\"real_graph\"])\n", + "\n", + "# Add ten random graphs to this bundle\n", + "# (In real life you'd want more than 10 random graphs,\n", + "# but this step can take quite a long time to run so \n", + "# for the demo we just create 10)\n", + "bundleGraphs.create_random_graphs(\"real_graph\", 10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:kwpython3]", + "language": "python", + "name": "conda-env-kwpython3-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}