Source code for cellmaps_coembedding.muse_sc.df_utils

import numpy as np
import pandas as pd
import sys
import os
from sklearn.metrics.pairwise import manhattan_distances, euclidean_distances, cosine_similarity
from scipy.spatial.distance import canberra

[docs] def upper_tri_values(df): ''' Return array with values of upper triangle of the DataFrame. Args: df: Symmetric DataFrame Return: Numpy array ''' m = df.values return m[np.triu_indices(df.shape[0], k=1)]
[docs] def znorm(df): ''' Z-transform within each column. ''' norm_df = pd.DataFrame(index=df.index, columns=df.columns) for c in df.columns: value = df[c] norm_df[c] = (value - value.mean()) / value.std() return norm_df
[docs] def cosine_similarity_scaled(df): ''' Calculate Cosine similarity between each pair of rows in a DataFrame. Similarity scaled into [0, 1] ''' sim = cosine_similarity(df) shift = sim.min() sim -= shift scale = sim.max() sim /= scale return pd.DataFrame(sim, index=df.index.values, columns=df.index.values)
[docs] def manhattan_similarity(df): ''' Calculate Manhattan similarity between each pair of rows in a DataFrame. Similarity scaled into [0, 1] ''' # Get manhattan distance dist = manhattan_distances(df) # Convert distance to similarity by max-minus sim = dist.max() - dist # Scale into [0,1] sim /= sim.max() return pd.DataFrame(sim, index=df.index.values, columns=df.index.values)
[docs] def euclidean_similarity(df): ''' Calculate Euclidean similarity between each pair of rows in a DataFrame. Similarity scaled into [0, 1] ''' # Get euclidean distance dist = euclidean_distances(df) # Convert distance to similarity by max-minus sim = dist.max() - dist # Scale into [0,1] sim /= sim.max() return pd.DataFrame(sim, index=df.index.values, columns=df.index.values)
[docs] def canberra_similarity(df): ''' Calculate Canberra similarity between each pair of rows in a DataFrame. Similarity scaled into [0, 1] ''' index = df.index.values dist = pd.DataFrame(0, index=index, columns=index, dtype=float) for i in range(len(index)-1): a = df.loc[index[i]].values for j in range(i+1, len(index)): b = df.loc[index[j]].values d = canberra(a, b) dist.at[index[i], index[j]] = d dist.at[index[j], index[i]] = d dist = dist.values # Convert distance to similarity by max-minus sim = dist.max() - dist # Scale into [0,1] sim /= sim.max() return pd.DataFrame(sim, index=index, columns=index)
[docs] def pearson_scaled(df): ''' Calculate Pearson correlation between each pair of rows in a DataFrame. Correlation scaled into [0, 1] ''' corr = df.T.corr(method='pearson') shift = corr.min().min() corr -= shift scale = corr.max().max() corr /= scale return corr
[docs] def spearman_scaled(df): ''' Calculate Spearman correlation between each pair of rows in a DataFrame. Correlation scaled into [0, 1] ''' corr = df.T.corr(method='spearman') shift = corr.min().min() corr -= shift scale = corr.max().max() corr /= scale return corr
[docs] def kendall_scaled(df): ''' Calculate Kendall correlation between each pair of rows in a DataFrame. Correlation scaled into [0, 1] ''' corr = df.T.corr(method='kendall') shift = corr.min().min() corr -= shift scale = corr.max().max() corr /= scale return corr
[docs] def check_symmetric(a, rtol=1e-05, atol=1e-08): ''' Check if the given numpy matrix is symmetric or not. ''' return np.allclose(a, a.T, rtol=rtol, atol=atol)