import os
from Bio import SeqIO
import numpy as np
import matplotlib.pyplot as plt

# 读取fasta文件,计算状态转移矩阵
def calc_transition_matrix(fasta_file):
    sequences = list(SeqIO.parse(fasta_file, 'fasta'))
    alphabet = list(set(''.join([str(seq.seq) for seq in sequences])))  # 使用单引号
    states = len(alphabet)
    matrix = np.zeros((states, states))
    for seq in sequences:
        seq_str = str(seq.seq)
        for i in range(len(seq_str) - 1):
            from_state = alphabet.index(seq_str[i])
            to_state = alphabet.index(seq_str[i+1])
            matrix[from_state, to_state] += 1
    return matrix

# 对矩阵进行z-score标准化
def standardize(matrix):
    standardized_matrix = (matrix - np.mean(matrix, axis=0)) / np.std(matrix, axis=0)
    return standardized_matrix

# 对标准化后的矩阵进行PCA分析
def pca(matrix):
    cov = np.cov(matrix.T)
    eig_vals, eig_vecs = np.linalg.eig(cov)
    idx = np.argsort(eig_vals)[::-1]
    eig_vecs = eig_vecs[:, idx]
    projection = np.dot(matrix, eig_vecs)
    return projection

# 读取文件夹下所有fasta文件,返回矩阵列表
def read_fasta_folder(folder_path):
    matrix_list = []
    for filename in os.listdir(folder_path):
        if filename.endswith('.fasta'):
            file_path = os.path.join(folder_path, filename)
            matrix = calc_transition_matrix(file_path)
            matrix_list.append(matrix)
    return matrix_list

# 测试代码
if __name__ == '__main__':
    # 读取文件夹下所有fasta文件
    folder_path = '/path/to/folder'
    matrix_list = read_fasta_folder(folder_path)
    # 对每个矩阵进行标准化和PCA分析
    for matrix in matrix_list:
        standardized_matrix = standardize(matrix)
        pca_result = pca(standardized_matrix)
        # 绘制PCA散点图等可视化操作

使用方法:

  1. 将 folder_path 变量替换为包含 FASTA 文件的文件夹路径。
  2. 运行脚本。
  3. 脚本将计算每个 FASTA 文件的状态转移矩阵,并对其进行标准化和 PCA 分析。
  4. 你可以使用 matplotlib 库来绘制 PCA 散点图,以可视化结果。

代码解释:

  • calc_transition_matrix() 函数读取 FASTA 文件,计算状态转移矩阵。
  • standardize() 函数对矩阵进行 z-score 标准化。
  • pca() 函数对标准化后的矩阵进行 PCA 分析。
  • read_fasta_folder() 函数读取文件夹下所有 FASTA 文件,并将每个文件的矩阵添加到列表中。
  • 测试代码示例展示如何使用 read_fasta_folder() 函数读取文件夹下的 FASTA 文件,并对每个矩阵进行标准化和 PCA 分析。

注意:

  • 确保已安装 Biopython 和 NumPy 库。
  • 可以根据需要调整代码中的 PCA 分析参数,例如主成分数量。
  • 可以添加其他代码来可视化 PCA 结果。

示例:

假设文件夹 my_fasta_files 包含多个 FASTA 文件,则 folder_path 应设置为:

folder_path = 'my_fasta_files'

然后运行脚本即可。


原文地址: https://www.cveoy.top/t/topic/lMEY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录