Random walks and plotting trajectories

Explore network dynamics with random walks over the state-transition graph and visualize the resulting trajectories.

Starter notebook. The cells below are a scaffold: real function calls with placeholder paths/arguments and TODO markers. Fill in your own data and run top-to-bottom. Anything marked TODO is a choice you need to make for your dataset.

Setup and imports

[ ]:
import os
import os.path as op
import time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import bobaT as bb

sns.set_style('whitegrid')
plt.rcParams['figure.dpi'] = 100
import warnings
warnings.filterwarnings('ignore')

Configure paths

[ ]:
# Input data
DATA_DIR = './test_data'

# Output directories
OUTPUT_DIR = './output'
VAL_DIR = './output/validation'
ATTRACTOR_DIR = './output/attractors'
PERTURB_DIR = './output/perturbations'
os.makedirs(OUTPUT_DIR, exist_ok=True)
WALK_DIR = './output/walks'
os.makedirs(WALK_DIR, exist_ok=True)

Load network, rules, and attractors

[ ]:
# Load the base network as a graph-tool graph
network_path = 'tf-lit-network.csv'  # TODO: your base network CSV
graph, vertex_dict = bb.load.load_network(
    f'{DATA_DIR}/{network_path}',
    remove_sinks=False, remove_selfloops=True, remove_sources=False,
)
v_names, nodes = bb.utils.get_nodes(vertex_dict, graph)

rules, regulators_dict = bb.load.load_rules(fname=f'{OUTPUT_DIR}/rules.txt')
attractor_dict = bb.utils.get_attractor_dict(ATTRACTOR_DIR, filtered=True)

Run random walks

Use random_walks for standard walks, or long_random_walks for longer trajectories starting from chosen attractors.

[ ]:
bb.rw.random_walks(
    attractor_dict, rules, regulators_dict, nodes,
    save_dir=WALK_DIR,
    radius=2, perturbations=False, iters=1000, max_steps=500,
    stability=True, reach_or_leave='leave',
)

Plot trajectories

TODO: point starting_attractors at the attractor label(s) you want to plot from.

[ ]:
starting_attractors = 'Generalist'  # TODO: your attractor label
bb.plot.plot_all_random_walks(
    WALK_DIR, starting_attractors, ATTRACTOR_DIR, nodes,
    num_walks=20, fit_to_data=True, show=False, reduction='pca',
)

Attractor stability

[ ]:
bb.plot.plot_stability(attractor_dict, WALK_DIR, rescaled=True, show=False, save=True)