| name | bio-single-cell-metabolite-communication |
| description | Analyze metabolite-mediated cell-cell communication using MeboCost for metabolic signaling inference between cell types. Predict metabolite secretion and sensing patterns from scRNA-seq data. Use when studying metabolic crosstalk between cell populations or metabolite-receptor interactions. |
| tool_type | python |
| primary_tool | MeboCost |
Version Compatibility
Reference examples tested with: matplotlib 3.8+, scanpy 1.10+
Before using code patterns, verify installed versions match. If versions differ:
- Python:
pip show <package> then help(module.function) to check signatures
If code throws ImportError, AttributeError, or TypeError, introspect the installed
package and adapt the example to match the actual API rather than retrying.
Metabolite-Mediated Cell Communication
"Analyze metabolic crosstalk between cell types" → Predict metabolite secretion-sensing interactions between cell populations based on enzyme and transporter expression patterns.
- Python:
mebocost.MeboCost(adata, groupby='cell_type') → run_mebocost()
MeboCost Overview
MeboCost infers metabolite-mediated communication by:
- Predicting metabolite secretion from enzyme expression
- Identifying metabolite-sensing receptors
- Computing communication scores between cell types
Basic Workflow
Goal: Infer metabolite-mediated cell-cell communication from scRNA-seq data by predicting which cell types secrete and sense specific metabolites.
Approach: Initialize a MeboCost object from an AnnData with cell type annotations, run permutation-based communication inference to score metabolite secretion-sensing interactions, then filter for statistically significant pairs.
import mebocost as mbc
import scanpy as sc
adata = sc.read_h5ad('adata.h5ad')
mebo = mbc.create_obj(
adata=adata,
group_col='cell_type',
species='human'
)
mebo.infer_commu(
n_permutations=1000,
seed=42
)
sig_interactions = mebo.commu_res[mebo.commu_res['pval'] < 0.05]
Prepare Data
import scanpy as sc
def prepare_for_mebocost(adata, cell_type_col='cell_type', min_cells=50):
'''Prepare AnnData for MeboCost analysis
Requirements:
- Log-normalized expression (sc.pp.normalize_total, sc.pp.log1p)
- Cell type annotations
- Gene symbols (not Ensembl IDs)
'''
if adata.X.max() > 50:
print('Warning: Data may not be log-normalized')
cell_counts = adata.obs[cell_type_col].value_counts()
valid_types = cell_counts[cell_counts >= min_cells].index
adata = adata[adata.obs[cell_type_col].isin(valid_types)].copy()
print(f'Cell types: {len(valid_types)}')
print(f'Cells: {adata.n_obs}')
return adata
Run Communication Analysis
def run_mebocost(adata, cell_type_col='cell_type', species='human'):
'''Run MeboCost metabolite communication analysis
Args:
adata: AnnData with log-normalized expression
cell_type_col: Column with cell type annotations
species: 'human' or 'mouse'
Returns:
MeboCost object with communication results
'''
import mebocost as mbc
mebo = mbc.create_obj(
adata=adata,
group_col=cell_type_col,
species=species
)
mebo.infer_commu(n_permutations=1000, seed=42)
return mebo
Analyze Results
def analyze_metabolite_communication(mebo, pval_threshold=0.05):
'''Extract and summarize significant communications
Communication flow:
Sender cell -> Enzyme -> Metabolite -> Receptor -> Receiver cell
'''
results = mebo.commu_res.copy()
sig = results[results['pval'] < pval_threshold]
summary = {
'total_interactions': len(results),
'significant_interactions': len(sig),
'unique_metabolites': sig['metabolite'].nunique(),
'unique_sender_types': sig['sender'].nunique(),
'unique_receiver_types': sig['receiver'].nunique()
}
top_metabolites = sig['metabolite'].value_counts().head(10)
sig['pair'] = sig['sender'] + ' -> ' + sig['receiver']
top_pairs = sig['pair'].value_counts().head(10)
return {
'summary': summary,
'top_metabolites': top_metabolites,
'top_pairs': top_pairs,
'significant_interactions': sig
}
Visualization
def plot_communication_network(mebo, pval_threshold=0.05):
'''Plot metabolite communication network'''
import matplotlib.pyplot as plt
sig = mebo.commu_res[mebo.commu_res['pval'] < pval_threshold]
pair_counts = sig.groupby(['sender', 'receiver']).size().reset_index(name='count')
pivot = pair_counts.pivot(index='sender', columns='receiver', values='count')
pivot = pivot.fillna(0)
plt.figure(figsize=(10, 8))
plt.imshow(pivot.values, cmap='Reds')
plt.xticks(range(len(pivot.columns)), pivot.columns, rotation=45, ha='right')
plt.yticks(range(len(pivot.index)), pivot.index)
plt.colorbar(label='Number of interactions')
plt.xlabel('Receiver')
plt.ylabel('Sender')
plt.title('Metabolite Communication Network')
plt.tight_layout()
return plt.gcf()
def plot_metabolite_flow(mebo, metabolite, pval_threshold=0.05):
'''Visualize communication flow for specific metabolite'''
sig = mebo.commu_res[
(mebo.commu_res['metabolite'] == metabolite) &
(mebo.commu_res['pval'] < pval_threshold)
]
print(f'\n communication:')
_, row sig.iterrows():
(
)
()
Compare Conditions
def compare_conditions(adata, condition_col, cell_type_col, species='human'):
'''Compare metabolite communication between conditions
Useful for:
- Tumor vs normal
- Treatment vs control
- Disease vs healthy
'''
import mebocost as mbc
conditions = adata.obs[condition_col].unique()
results = {}
for condition in conditions:
adata_subset = adata[adata.obs[condition_col] == condition].copy()
mebo = mbc.create_obj(
adata=adata_subset,
group_col=cell_type_col,
species=species
)
mebo.infer_commu(n_permutations=1000, seed=42)
results[condition] = mebo.commu_res
return results
Metabolite Categories
METABOLITE_CATEGORIES = {
'amino_acids': ['Glutamine', 'Glutamate', 'Tryptophan', 'Arginine'],
'lipids': ['Prostaglandin E2', 'Leukotriene B4', 'Sphingosine-1-phosphate'],
'nucleotides': ['ATP', 'Adenosine', 'UDP'],
'vitamins': ['Retinoic acid', 'Vitamin D'],
'other': ['Lactate', 'Succinate', 'Itaconate']
}
def filter_by_category(results, category):
'''Filter results to specific metabolite category'''
metabolites = METABOLITE_CATEGORIES.get(category, [])
return results[results['metabolite'].isin(metabolites)]
Related Skills
- single-cell/cell-communication - Ligand-receptor communication analysis
- metabolomics/pathway-mapping - Metabolic pathway context
- systems-biology/flux-balance-analysis - Metabolic flux predictions