设计一个有效的查询和比较工具

2024-04-24 07:51:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在设置一个比较样本的工具。每个样本有55000个“基因”(生物学并不重要)。我对匹配“组织类型”的样本执行初始查询,然后我想知道这组中哪些基因的布尔值为真>;95%。我用一个Flask应用程序和SQLAlchemy数据库表来实现这一点。这是我的模型和当前的算法。当样本数为n=2时,函数正常工作,但当样本数大于10时,进程崩溃。你知道吗

样本表存储样本的名称、一些不重要的信息以及与该样本的所有“基因”的关系。gene表只存储基因的名称和一个布尔值。所有样本都有相同的55000个基因,GeneQual表中有所有55000个基因及其相关信息。你知道吗

你知道吗型号.py地址:

class Sample(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    SRR_id = db.Column(db.String(10), index=True, unique=True)
    GSM_acc = db.Column(db.String(10))
    experiment_id = db.Column(db.String(10))
    tissue = db.Column(db.String(64))
    cell_type = db.Column(db.String(64))
    genes = db.relationship('Gene', backref='name', lazy='dynamic')
    def __repr__(self):
        return '<SRR_id {}>'.format(self.SRR_id)

class Gene(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    gene_id = db.Column(db.String(20), index=True)
    barcode = db.Column(db.Boolean)
    sample_id = db.Column(db.Integer, db.ForeignKey('sample.id'))
    def __repr__(self):
        return '<Gene_id {}>'.format(self.gene_id)

class GeneQual(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    gene_id = db.Column(db.String(20), index=True)
    symbol = db.Column(db.String(32))
    name = db.Column(db.String(32))
    location = db.Column(db.String(64))

功能:

samples = Sample.query.filter_by(tissues=tissue_type).all()
for i in range(len(samples)):
    samples[i] = samples[i].genes

results = []
for item in zip(*samples):
    sums = 0
    for i in range(len(item)):
        if item[i].barcode:
            sums += 1
    if sums >= (len(item)*0.95):
        results.append(item[0].gene_id)

我愿意接受任何和所有的批评,无论是在数据库的设置以及功能。当n个样本较大时,可以进行一些优化。你知道吗


Tags: selfidtruedbstringmodel基因column