【小工具】python 携手R 计算两组数据相关性

python基础

浏览数:146

2019-8-27

AD:资源代下载服务

要求:

假如你有两个表格:每个表格中有至少两列或者好多列,如下图例子中用到的表格只有3列,第一列是名称,第二列是观察值,第三列也是观测值。


image.png

你想根据两个文件中共有的某一列的值算相关性:

首先根据两个文件中共同列求交集,然后输出交集部分的指定列的信息。
比如,两个文件中都有第一列的信息,然后输出第一个文件中第三列,和第二个文件中第三列的信息。

脚本功能:

1)支持文件有或没有header,表头。
2)支持按照指定的列去计算:比如第一个文件中第二列,第二个文件中第三列之类。
3)支持文件分割类型为space或者tab。默认用space,如果不知道自己的数据是用什么分割的。可以用cat -A your_file.txt |head 去看,如果看到是^I隔开的,就表示该文件用tab作为分隔符,如果看到是空格,那么就是空格。
4)生成的内容需要重定向到指定文件中,否则将会屏幕输出。
5)生成相关性图,并包含sperm系数和pearson系数的计算结果。

输出文件为一个新生成的表格。
该表格具有三列:
第一列为两个文件中共有列的共有数据;
第二列和第三列分别是来自第一个文件中指定列和第二个文件中的指定列。

然后用第二个脚本(R脚本)画相关性图:
画相关性的脚本也支持将数据取对数log或者非log形式:

脚本参数详解

参数介绍

基本参数 -a -b,两个输入文件,必须加
选择性参数:这些参数都有默认值,看清楚即可。
-ka,-kb 表示a文件的key列,b文件的key列,就是共有列。
-va,-vb 表示a文件的value列,b文件的value列,就是你要比较的数据的值所在的列。
-sa,-sb 表示a文件的分割符,b文件的分隔符。
-headera,-headerb 加了则表示 a文件有header,b文件有header。不加表示没有header,

案例

第一步,将原始文件整理为相关性数据文件的格式。
python  correlation.py -a 01.xls -b 03.xls >01vs03.xls 
# 推荐输出格式用"."分隔,比如这里的01vs03.xls 中分隔符“.”号之前的“01vs03”将用在后面生成图的前缀。
第二步,用r脚本画图。
Rscript  correlation.point.log.R  01vs03.xls
结果生成为:
01vs03.0.corelation.jpg

01vs03.0.corelation.jpg

待更新:

1)美化图片,配色,线条需要美化一下下。
2)偏离点如何查看,什么意义?

一些说明

这两个脚本在个人的项目中非常实用。经常用来做相关性图,因此写成通用工具更加方便。
当然如果你已经有了第一步结果的表格,直接用第二个R脚本画图即可。
python脚本使用的全部为python内置的包,无需安装其他包,测试使用的是python 2.7版本,没有在python3中测试。
R脚本需要安装ggplot2. 测试使用的R版本为 3.5.1
需要脚本的点赞并私信我哦。

作者:巴拉巴拉11