python: Bray-Curtis PCoA

Github:
https://github.com/khigashi1987/Python_PCoA 3年前 python3
https://github.com/mwguthrie/python_PCoA 8年前 python

安装依赖

# 检测依赖
import numpy as np #ok
import itertools #ok
import math #ok
import argparse #ok
import pandas as pd #ok
import distance #
import matplotlib.pyplot as plt #
import scipy.stats #
from scipy.spatial.distance import squareform #
from sklearn import manifold #
# 缺少依赖
No module named 'sklearn'
No module named 'scipy'
No module named 'distance'
No module named 'matplotlib'
# 安装依赖
conda install scikit-learn # 同时安装了,scipy
conda install distance
conda install matplotlib

# JSD distance
conda install informationTheory

获取脚本

wget https://github.com/khigashi1987/Python_PCoA/archive/refs/heads/master.zip
tar -zxvf Python_PCoA-master.zip
cd Python_PCoA-master
python3 pcoa.py --help
########################################################
usage: pcoa.py [-h] [-f DATA_FILE] [-d {Jaccard,BrayCurtis,JSD}] [-b]
               [-n N_ARROWS] [-g GROUP_FILE]

optional arguments:
  -h, --help            show this help message and exit
  -f DATA_FILE, --file DATA_FILE
                        tab-separated text file. rows are variables, columns
                        are samples.
  -d {Jaccard,BrayCurtis,JSD}, --distance_metric {Jaccard,BrayCurtis,JSD}
                        choose distance metric used for PCoA.
  -b, --biplot          output biplot (with calculating factor loadings).
  -n N_ARROWS, --number_of_arrows N_ARROWS
                        how many top-contributing arrows should be drawed.
  -g GROUP_FILE, --grouping_file GROUP_FILE
                        plot samples by same colors and markers when they
                        belong to the same group. Please indicate Tab-
                        separated 'Samples vs. Group file' ( first columns are
                        sample names, second columns are group names ).

计算bray-pcoa

source /public/home/zzumgg03/huty/softwares/miniconda3/etc/profile.d/conda.sh
conda activate py37
# success
python3 ./Python_PCoA-master/pcoa.py -f tpm.txt \
--distance_metric BrayCurtis

参数:
-f 输入,行-变量,列-样本
-d 距离算法{Jaccard,BrayCurtis,JSD}

结果,只有一张图,

结果只给了一张图,但我需要距离矩阵和坐标信息。

改写脚本,只计算bray-curtis距离

#!/usr/bin/env python3
# vim: set fileencoding=utf-8 :
import numpy as np
from scipy.spatial.distance import squareform
import itertools
import argparse
import pandas as pd
import distance
from sklearn import manifold
import scipy.stats
import matplotlib.pyplot as plt

# 函数
datafile = "./tpm.test" # 行-基因,列-样本,800,000,000 genes x 150 samples
data = pd.read_table(datafile, index_col=0)
matrix = data.values

from scipy.spatial.distance import braycurtis
X = matrix.T # 旋转90度
X = np.array(X) # 转矩阵
n_samples = X.shape[0] # shape 几行 [0] 几列 [1]
n_distance = int(n_samples * (n_samples - 1) / 2) # 比较的次数
d_array = np.zeros((n_distance))
for i, (idx1, idx2) in enumerate(itertools.combinations(range(n_samples),2)):
    d_array[i] = braycurtis(X[idx1], X[idx2])

tmp = squareform(d_array)
df = pd.DataFrame(data = tmp[0:,0:], 
                  columns = data.columns,
                  index = data.columns)

df.to_csv('./out_distance.txt', sep='\t')

得到距离矩阵

R中进行PCOA

# 读取距离矩阵
dist = read.table("out_distance.txt", header=T, sep="\t", row.names=1)
# 分组
meta = read.table("../metadata/merge_information_abundance.txt", sep="\t", header=T, row.names=1)
meta = meta[rownames(dist),]
group = data.frame(Layer = meta$Layer)
rownames(group) = rownames(meta)

# pcoa 总体
library(vegan)
library(ggplot2)
library(ape)
library("ggrepel")
options(scipen = 3)

pcoa = pcoa(dist)

pcoa_point = data.frame(pcoa$vectors[, c(1, 2)], 
                            Layer = group$Layer)
## 关于分组需要自己定义
    
xylab = paste(c("PCoA1: ", "PCoA2: "), round(pcoa$values$Relative_eig[1:2]*100, 2), "%", sep = "")

p = 
ggplot(pcoa_point, aes(x=Axis.1, y=Axis.2, color=Layer)) +
            geom_point(size=3) + 
            geom_text_repel(aes(label = rownames(pcoa_point)), 
                            size = 5, color = "black") +
            stat_ellipse(level = 0.95, show.legend = F, size = 1) +
            theme_classic() +
            labs(x=xylab[1], y=xylab[2], title="Bray-Curtis PCoA") +
            theme(legend.text=element_text(size=15)) +
            theme(legend.title=element_text(face='bold', size=20)) +
            theme(axis.title = element_text(size = 20)) +
            theme(axis.text = element_text(size = 20),
                  axis.line = element_line(size = 1),
                  axis.ticks = element_line(size = 1))

ggsave(p, file="geneset_bray_pcoa.pdf", width=9)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容