Я настраиваю инструмент, который сравнивает образцы.Каждый образец имеет 55 000 «генов» (биология не важна).Я выполняю первоначальный запрос для образцов, которые соответствуют «типу ткани», затем я хочу знать, какие гены в этом наборе имеют логическое значение True> 95%.Я делаю это с помощью приложения Flask и таблиц базы данных SQLAlchemy.Вот мои модели и текущий алгоритм.Когда число выборок равно n = 2, функция работает нормально, но когда выборки n> 10., процесс завершается сбоем.
В таблице образцов хранится имя образца, некоторая неважная информация и связь свсе «гены» для этого образца.Таблица генов просто хранит название гена и логическое значение.Все образцы имеют одинаковые 55 000 генов, а таблица GeneQual содержит все 55 000 генов с информацией о них.
Models.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-выборок больше.