本代码使用Python中的Biopython库和NumPy库,从fasta文件中读取序列数据,计算状态转移矩阵,并进行Z-score标准化和PCA分析,最终绘制PCA散点图。

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

# 读取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

# 测试代码
if __name__ == "__main__":
    # 获取文件夹中的所有fasta文件
    fasta_folder = "fasta_files"
    fasta_files = [os.path.join(fasta_folder, f) for f in os.listdir(fasta_folder) if f.endswith(".fasta")]

    # 对每个fasta文件进行状态转移矩阵的计算、标准化和PCA分析
    for fasta_file in fasta_files:
        # 读取fasta文件,计算状态转移矩阵
        matrix = calc_transition_matrix(fasta_file)
        print(matrix)

        # 对矩阵进行标准化
        standardized_matrix = standardize(matrix)
        print(standardized_matrix)

        # 对标准化后的矩阵进行PCA分析
        pca_result = pca(standardized_matrix)

        # 绘制PCA散点图
        plt.scatter(pca_result[:, 0], pca_result[:, 1], label=fasta_file)
    
    plt.legend()
    plt.show()

您遇到的错误信息'RuntimeWarning: Glyph 25991 missing from current font.' 和 'RuntimeWarning: Glyph 20214 missing from current font.' 是因为 matplotlib 在绘制图形时需要使用字体文件,而该字体文件中缺少了一些字符。

您可以尝试以下方法解决该问题:

  • 更改字体:matplotlib.pyplot.rc 中设置字体,例如:
import matplotlib.pyplot as plt

plt.rc('font', family='Arial')  # 设置默认字体为 Arial
  • 安装缺失的字体文件: 您可以搜索并下载包含这些字符的字体文件,然后将它安装到您的系统中。

  • 忽略这些警告: 您可以使用 warnings.filterwarnings 函数来忽略这些警告,例如:

import warnings

warnings.filterwarnings('ignore', category=RuntimeWarning, message='Glyph.*missing from current font.')

建议您根据自己的情况选择合适的解决方案。

使用Python进行序列数据分析:基于状态转移矩阵的PCA分析

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

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