要求:
假如你有两个表格:每个表格中有至少两列或者好多列,如下图例子中用到的表格只有3列,以空格分隔,第一列是名称,第二列是观察值,第三列也是观测值。
你想根据两个文件中共有的某一列的值算相关性:
首先根据两个文件中共同列求交集,然后输出交集部分的指定列的信息。
比如,两个文件中都有第一列的信息,然后输出第一个文件中第三列,和第二个文件中第三列的信息。
脚本功能:
- 支持求数据的频率。
- 支持求并集或交集的相关性。
- 支持文件有或没有header,表头。
- 支持按照指定的列去计算:比如第一个文件中第二列,第二个文件中第三列之类。
- 支持文件分割类型为space或者tab或者comma。默认用space,如果不知道自己的数据是用什么分割的。可以用cat -A your_file.txt |head 去看,如果看到是^I隔开的,就表示该文件用tab作为分隔符,如果看到是空格,那么就是空格。comma即以逗号分割的csv格式文件。
- 生成的内容需要重定向到指定文件中,否则将会屏幕输出。
- 生成相关性图,并包含sperm系数和pearson系数的计算结果(可选参数,默认不输出)。
输出文件为一个新生成的表格。
该表格具有三列:
第一列为两个文件中共有列的共有数据;
第二列和第三列分别是来自第一个文件中指定列和第二个文件中的指定列。
然后用第二个脚本(R脚本)画相关性图:
画相关性的脚本也支持将数据取对数log或者非log形式:
脚本参数详解
基本参数 -a -b,两个输入文件,必须加
选择性参数:这些参数都有默认值,看清楚即可。
-ka,-kb 表示a文件的key列,b文件的key列,就是共有列,要以这两列为key去提取。
-va,-vb 表示a文件的value列,b文件的value列,就是你要比较的数据的值所在的列,可以使数字类型,也可以是字符串类型的值。
-sa,-sb 表示a文件的分割符,b文件的分隔符。
-headera,-headerb 加了哪个表示那个文件有header,不加表示没有header。
-f [布尔类型] 表示是否计算数值占总体的比例,默认False不计算。
-u [布尔类型] 表示输出key列的并集(合集),默认不加-u参数。
案例
第一步,将原始文件整理为相关性数据文件的格式。
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
待更新:
1)美化图片,配色,线条需要美化一下下。
2)偏离点如何查看,什么意义?
更新说明:
*20200501:支持以“comma”,“,”分割的文件,只需在参数-sa或-sb中设置comma即可
- 20190919: 新增计算比例的参数:-f。
- 20190919:新增输出union 的参数:-u。
一些说明
该脚本已经发展成为了根据两个文件中共有的某一列来提取相关信息的脚本。
这两个脚本在个人的项目中非常实用。经常用来做相关性图,因此写成通用工具更加方便。
当然如果你已经有了第一步结果的表格,直接用第二个R脚本画图即可。
python脚本使用的全部为python内置的包,无需安装其他包,测试使用的是python 2.7及python3中都适用。
R脚本需要安装ggplot2. 测试使用的R版本为 3.5.1
需要脚本的点赞并私信我哦。