【deeptools相关】读取Excel文件,画样本相关性散点图

Tips:

https://deeptools.readthedocs.io/en/develop/content/tools/plotCorrelation.html
我们比较样本的重复性,一般都是用deeptoolsplotCorrelation 画散点图。比如下面类似的命令.

### Step1 multiBamSummary
$ multiBamSummary bins 
--bamfiles *.uniq.bam 
--minMappingQuality 30 
-out scores_per_transcript.npz 
--outRawCount scores_per_transcript.tab

### Step2 plotCorrelation
$ deepTools2.0/bin/plotCorrelation \
-in scores_per_transcript.npz \
--corMethod pearson --skipZeros \
--plotTitle "Pearson Correlation of Average Scores Per Transcript" \
--whatToPlot scatterplot \
-o scatterplot_PearsonCorr_bigwigScores.png   \
--outFileCorMatrix PearsonCorr_bigwigScores.tab

得到图:


image.png

假设只有tab 文件,但plotCorrelation 只能识别npz 格式(numpy存储的格式。类似R里面.RData 一样,存储特定数据结构),要怎么才可以画图?
也就是说tab 格式如何转化成npz 格式呢?

查看npz 里面是什么东西 读取npz 的方法:菜鸟教程

image.png

类似字典,有labels 和matrix 两个键。我们将tab整理成这个格式就可以了。

实践:

1. 下载文章数据 41556_2019_383_MOESM9_ESM.xlsx ,发现数据都是excel 格式保存的。如下图:
image.png

需要读取excel 的sheet 里面的数据,保存为fig1b_scatterplot.csv。
R代码:

########################
rm(list=ls())
options(warn = -1)
options(stringsAsFactors = F)
setwd("C:/Users/16926/Desktop/2020-1/单细胞/sc-ChIP")

##############
## 1.加载包,读取xlsx(最新格式)
## 参考:
## 1.不同R包比较 https://www.jianshu.com/p/5ed6e4b5d181
## 2.openxlsx::read.xlsx 参数介绍 :https://blog.csdn.net/zyunnketsu/article/details/78053179
##############
library(openxlsx)
a<-read.xlsx("41556_2019_383_MOESM9_ESM.xlsx",
             sheet=1,startRow = 14)#文件名+sheet的序号,简单粗暴
head(a)
s1 <- object.size(a)
print(sl, units = "auto", standard = "SI") 

write.csv(a,file = "./fig1/fig1b_scatterplot.csv",row.names = F)

提取到fig1b_scatterplot.csv 内容如下:


image.png
2.将fig1b_scatterplot.csv 转换成npz 格式
####################
## time:2020/3/23 10:27
## author: caokai
## email:[email protected]
## aim : convert csv format to npz format to use deeptools software
####################

####################
## 1.加载模块
import os
import numpy as np
import pandas as pd
os.chdir("C:/Users/16926/Desktop/2020-1/单细胞/sc-ChIP/fig1")
os.listdir(".")


####################
## 2.读取及其保存格式
## 参考:np:https://www.runoob.com/numpy/numpy-io.html
## pd: https://blog.csdn.net/xidianbaby/article/details/88831145
## mian:https://blog.csdn.net/yuzhihuan1224/article/details/99634355?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

dat = pd.read_csv("fig1b_scatterplot.csv")



labels = np.array(dat.columns[3:], dtype="|S22")  # 去除前三列,labels转换成np np.array([bytes(c, encoding='utf8') for c in dat.columns])
matrix = dat.iloc[:,3:].values   # 去除前三列,value转换成np np.array(dat[dat.columns[3:]])
## 计算log10(FPM)
matrix = np.log10(matrix+1)


## 保存为npz 格式
np.savez(r"fig1.scatterplot.npz",

         labels = labels,
         matrix = matrix)

data_z = np.load("fig1.scatterplot.npz")
print(data_z.files) # 查看各个数组名称
print(data_z["labels"]) # 数组 labels
print(data_z["matrix"]) # 数组 matrix

所以我们得到了fig1.scatterplot.npz 数据,可以直接画图了。

3.deeptools 画图
plotCorrelation   -in fig1.scatterplot.npz 
--corMethod pearson 
--skipZeros --plotTitle 'Pearson Correlation' 
--whatToPlot scatterplot 
--removeOutliers 
-o fig1_scatterplot_PearsonCorr.png 
--outFileCorMatrix fig1_scatterplot_PearsonCorr.tab

散点图如下图:


2020年3月23日15:20:23

总结思考:

  • 读取Excel 的包推荐openxlsx
  • 了解npynpz 差别,及其numpy修改数据格式的方式。
    np.array(dat.columns[3:], dtype="|S22"),将字符串转换成bite 类型。
  • deeptoools 无法对数据进行log10 scale(只提供--log1p:自然对数e
    颜色deeptools --colorMap参数,画散点图没有用.

欢迎大家讨论~

你可能感兴趣的:(【deeptools相关】读取Excel文件,画样本相关性散点图)