Run liana for ligand-receptor interaction prediction in Python
For the prediction of ligand-receptor interactions, we use the python version of the package liana. This package provides different methods and databases for the analysis of intercellular interactions based on scRNA-seq data in the AnnData format. In this Tutorial, we describe our recommendation for using the liana package in python.
Import necessary libraries
First of all, the libraries necessary for using liana must be loaded:
import scanpy as sc
import liana as li
import pandas as pd
import os
We assume here that the necessary libraries are already installed.
Load scRNA-seq data
The last step before perfoming the analysis is to load the AnnData object with the scRNA-seq data
= sc.read_h5ad("/path/to/AnnData/file.h5ad")
data = data data.raw
Execution of ligand-receptor interaction analysis
As mentioned at the beginning, there are different methods and databases implemented in the liana package. We recommend using the CellphoneDB analysis in combination with the consensus database with intercellular interactions. Note that metadata fields for the available sample/conditions (field_with_condition) and for the cell annotations (field_with_cell_annotation) are still specified by the user.
for i in set(data.obs['field_with_condition']):
print(i)
=li.method.cellphonedb(data[data.obs['field_with_condition']==i],
lr='field_with_cell_annotation',
groupby=0.1,
expr_prop=True,
verbose='consensus',
resource_name=False)
inplacef"{i}_lr_liana_consensus_unfiltered.csv") lr.to_csv(
Filtering and formatting of the results
Finally, the result tables are filtered by the CellphoneDB p-value (here in the example p-val < 0.05) and converted into the CrossTalkeR input format. By default, the interaction table used for CrossTalkeR should contain the columns “source”, “target”, “type_gene_A”, “gene_A”, “type_gene_B”, “gene_B” and “MeanLR”.
= {}
data for i in os.listdir():
if i.endswith('lr_liana_consensus_unfiltered.csv'):
= pd.read_csv(i)
evfull = evfull.loc[:,['ligand','receptor','source','target','lr_means','cellphone_pvals']]
evfull 'type_gene_A'] = 'Ligand'
evfull['type_gene_B'] = 'Receptor'
evfull['gene_A'] = evfull['ligand']
evfull['gene_B'] = evfull['receptor']
evfull['MeanLR'] = evfull['lr_means']
evfull[list(evfull.cellphone_pvals.to_numpy()<=0.05),:].to_csv(f'{k}_lr_ready.csv')
evfull.loc[= evfull.loc[:, ['source', 'target', 'type_gene_A', 'type_gene_B', 'gene_A', 'gene_B', 'MeanLR']]
evfull =i[0:i.find('_lr_')]
k=os.path.abspath(f'{k}_lr_ready.csv') data[k]