估计阅读时长: 5 分钟

基因组

为了能够实现上面所描述的这种基于EC Number的不同层级的加权嵌入,我们在原来的基因组嵌入工具上添加了一个hierarchical选项,用于支持切换为层级嵌入的操作:

Imports Microsoft.VisualBasic.Data.Framework
Imports Microsoft.VisualBasic.Data.NLP
Imports SMRUCC.genomics.Interops.NCBI.Extensions.Pipeline

Public Class GenomeMetabolicEmbedding

    ReadOnly vec As New TFIDF
    ReadOnly taxonomy As New Dictionary(Of String, String)
    ReadOnly hierarchical As Boolean = False

    Sub New(Optional hierarchical As Boolean = False)
        Me.hierarchical = hierarchical
    End Sub

    Public Sub Add(genome As GenomeVector)
        If hierarchical Then
            Call vec.Add(genome.assembly_id, genome.GetHierarchicalECNumberTerms)
        Else
            Call vec.Add(genome.assembly_id, genome.terms)
        End If

        Call taxonomy.Add(genome.assembly_id, genome.taxonomy)
    End Sub

    Public Function AddGenomes(seqs As IEnumerable(Of GenomeVector)) As GenomeMetabolicEmbedding
        For Each annotation As GenomeVector In seqs
            Call Add(annotation)
        Next

        Return Me
    End Function

    Public Function TfidfVectorizer(Optional normalize As Boolean = False) As DataFrame
        Call $"Make metabolic embedding with: ".info
        Call $"  * {vec.N} genomes".debug
        Call $"  * {vec.Words.Length} total enzyme terms".debug
        Call VBDebugger.EchoLine("")

        Dim df As DataFrame = vec.TfidfVectorizer(normalize)
        Call df.add("taxonomy", From id As String In df.rownames Select taxonomy(id))
        Return df
    End Function

    ''' <summary>
    ''' n-gram One-hot(Bag-of-n-grams)
    ''' </summary>
    ''' <returns></returns>
    Public Function OneHotVectorizer() As DataFrame
        Return vec.OneHotVectorizer
    End Function
End Class

在上面的模块中,会调用下面的函数来生成针对EC Number的层级嵌入结果:

''' <summary>
''' used for processing of the ec number terms, make the count of the
''' hierarchical ec number terms by summing the count of the specific
''' ec number terms
''' </summary>
''' <returns></returns>
Public Function GetHierarchicalECNumberTerms() As Dictionary(Of String, Integer)
    Dim hierarchical As New Dictionary(Of String, Integer)

    For Each ec_number As KeyValuePair(Of String, Integer) In terms.SafeQuery
        Dim ec As ECNumber = ECNumber.ValueParser(ec_number.Key)

        For Each ec_term As String In ec.HierarchicalECTerms
            If Not hierarchical.ContainsKey(ec_term) Then
                hierarchical(ec_term) = ec_number.Value
            Else
                hierarchical(ec_term) += ec_number.Value
            End If
        Next
    Next

    Return hierarchical
End Function

对于基于ec number来生成层级数据,我们直接使用《酶EC编号结构解析》文章末尾所展示的层级数据生成函数来实现。

基于上面的层级数据,我们仍然是将其输入TF-IDF算法模块中进行向量化嵌入

谢桂纲

No responses yet

Leave a Reply

Your email address will not be published. Required fields are marked *

博客文章
March 2026
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031  
  1. […] 我们在基于前面所论述的《通过diamond软件进行blastp搜索》对大规模的基因组数据进行了代谢酶的EC number的注释以及按照文章《基因组功能注释(EC Number)的向量化嵌入》的方法,得到了一个比较大的基因组代谢酶TF-IDF嵌入丰度矩阵后,如果将这里所得到的嵌入结果矩阵中的基因组,基于Family层级的物种分类分组看作为单细胞转录数据中的细胞分群结果,能否基于单细胞数据分析方法来分析和可视化我的基因组功能嵌入的结果矩阵呢? […]

  2. […] 我们在基于前面所论述的《通过diamond软件进行blastp搜索》对大规模的基因组数据进行了代谢酶的EC number的注释以及按照文章《基因组功能注释(EC Number)的向量化嵌入》的方法,得到了一个比较大的基因组代谢酶TF-IDF嵌入丰度矩阵后,如果将这里所得到的嵌入结果矩阵中的基因组,基于Family层级的物种分类分组看作为单细胞转录数据中的细胞分群结果,能否基于单细胞数据分析方法来分析和可视化我的基因组功能嵌入的结果矩阵呢? […]

  3. […] 在前面的一篇《基因组功能注释(EC Number)的向量化嵌入》博客文章中,针对所注释得到的微生物基因组代谢信息,进行基于TF-IDF的向量化嵌入之后。为了可视化向量化嵌入的效果,通过UMAP进行降维,然后基于降维的结果进行散点图可视化。通过散点图可视化可以发现向量化的嵌入结果可以比较好的将不同物种分类来源的微生物基因组区分开来。 […]