Comparison of Data Distribution Before and After Adding Noise
Loading Packages
[1]:
import warnings
## filter out all warnings
warnings.filterwarnings('ignore')
import scanpy as sc
import numpy as np
import matplotlib.pyplot as plt
Loading Data
[ ]:
Combination1_id = 4 ## 1, 2, 3, 4
adata_RNA = sc.read_h5ad(f'../../../Data/Noise_Combination_{Combination1_id}/Combination{Combination1_id}_RNA.h5ad')
adata_ADT = sc.read_h5ad(f'../../../Data/Noise_Combination_{Combination1_id}/Combination{Combination1_id}_Protein.h5ad')
Ploting
[68]:
RNA_DATA = [adata_RNA.X, adata_RNA.obsm['level_1'], adata_RNA.obsm['level_2'], adata_RNA.obsm['level_3']]
ADT_DATA = [adata_ADT.X, adata_ADT.obsm['level_1'], adata_ADT.obsm['level_2'], adata_ADT.obsm['level_3']]
fontsize = 30
for level_id in range(4):
RNA = RNA_DATA[level_id]
protein = ADT_DATA[level_id]
RNA = np.average(RNA, axis=1)
protein = np.average(protein, axis=1)
plt.figure(figsize=(7, 14))
# RNA
ax1 = plt.subplot(2, 1, 1)
hist = plt.hist(RNA, bins=20, color='#fc9e4f', alpha=1)
plt.title('')
plt.xlabel('Average RNA expression', fontsize=fontsize, fontname='Arial')
plt.ylabel('Frequency', fontsize=fontsize, fontname='Arial')
plt.tick_params(axis='both', labelsize=fontsize)
ticks = np.arange(-0.5, 1.31, 0.6)
plt.xticks(ticks)
ax1.grid(True)
ax1.spines['top'].set_linewidth(1.5)
ax1.spines['right'].set_linewidth(1.5)
ax1.spines['bottom'].set_linewidth(1.5)
ax1.spines['left'].set_linewidth(1.5)
# Protein
ax2 = plt.subplot(2, 1, 2)
plt.hist(protein, bins=40, color='#07beb8', alpha=1)
plt.title('')
plt.xlabel('Average protein expression', fontsize=fontsize, fontname='Arial')
plt.ylabel('Frequency', fontsize=fontsize, fontname='Arial')
ticks = np.arange(-1, 7.1, 2)
plt.xticks(ticks)
plt.tick_params(axis='both', labelsize=fontsize)
ax2.grid(True)
ax2.spines['top'].set_linewidth(1.5)
ax2.spines['right'].set_linewidth(1.5)
ax2.spines['bottom'].set_linewidth(1.5)
ax2.spines['left'].set_linewidth(1.5)
plt.tight_layout()
plt.subplots_adjust(hspace=0.3)
plt.savefig(f'Combination{Combination1_id}/Noise_Level_{level_id}.png', dpi=500)
plt.savefig(f'Combination{Combination1_id}/Noise_Level_{level_id}.eps')
plt.show()
Saving the Results
[3]:
import pandas as pd
import numpy as np
import scanpy as sc
with pd.ExcelWriter('Histogram_Frequency_Data.xlsx', engine='openpyxl') as writer:
for combo_id in range(1, 5): # Combination 1-4
# Loading data
adata_RNA = sc.read_h5ad(f'../../../Data/Noise_Combination_{combo_id}/Combination{combo_id}_RNA.h5ad')
adata_ADT = sc.read_h5ad(f'../../../Data/Noise_Combination_{combo_id}/Combination{combo_id}_Protein.h5ad')
RNA_DATA = [adata_RNA.X, adata_RNA.obsm['level_1'], adata_RNA.obsm['level_2'], adata_RNA.obsm['level_3']]
ADT_DATA = [adata_ADT.X, adata_ADT.obsm['level_1'], adata_ADT.obsm['level_2'], adata_ADT.obsm['level_3']]
combo_data = []
for level_id in range(4):
RNA = np.average(RNA_DATA[level_id], axis=1)
protein = np.average(ADT_DATA[level_id], axis=1)
rna_counts, rna_bins = np.histogram(RNA, bins=20)
protein_counts, protein_bins = np.histogram(protein, bins=40)
for i in range(len(rna_counts)):
combo_data.append({
'Noise_Level': level_id,
'DataType': 'RNA',
'Bin_Index': i + 1,
'Bin_Start': rna_bins[i],
'Bin_End': rna_bins[i+1],
'Bin_Center': (rna_bins[i] + rna_bins[i+1]) / 2,
'Frequency': rna_counts[i],
'Bin_Width': rna_bins[i+1] - rna_bins[i]
})
for i in range(len(protein_counts)):
combo_data.append({
'Noise_Level': level_id,
'DataType': 'Protein',
'Bin_Index': i + 1,
'Bin_Start': protein_bins[i],
'Bin_End': protein_bins[i+1],
'Bin_Center': (protein_bins[i] + protein_bins[i+1]) / 2,
'Frequency': protein_counts[i],
'Bin_Width': protein_bins[i+1] - protein_bins[i]
})
# Save
df = pd.DataFrame(combo_data)
df.to_excel(writer, sheet_name=f'Combination_{combo_id}', index=False)