Я пытаюсь использовать python и Neo4jrestclient для анализа геномных данных в Neo4j. Я пытаюсь сопоставить конкретный узел по метке (Allele), а затем два атрибута (pos
и bp
). У меня есть следующий код для заключительной части моего скрипта:
if h1 and h2 == 0:
q1 = """MATCH (n:Allele) WHERE n.pos:`{pos}` AND n.bp:`{bp}` RETURN n"""
params = {
"pos": int(pos[j]), "bp": str(ref[j]),
}
result = db.query(q1, params=params)
q1.relationships.create("Homozygous", s1, HTA=h1, HTB=h2, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
elif h1 == 0 and h2 > 0:
q1 = """MATCH (n:Allele) WHERE n.pos:`{pos}` AND n.bp:`{bp}` RETURN n"""
params = {
"pos": int(pos[j]), "bp": str(ref[j]),
}
result = db.query(q1, params=params)
q2 = """MATCH (n:Allele) WHERE n.pos:`{pos}` AND n.bp:`{bp}` RETURN n"""
params = {
"pos": int(pos[j]), "bp": str(alt[j][h2]),
}
result = db.query(q2, params=params)
q1.relationships.create("Heterozygous, Haplotype A", s1, HTA=h1, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
q2.relationships.create("Heterozygous, Haplotype B", s1, HTB=h2, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
elif h1 > 0 and h2 == 0:
q1 = """MATCH (n:Allele) WHERE n.pos:`{pos}` AND n.bp:`{bp}` RETURN n"""
params = {
"pos": int(pos[j]), "bp": str(alt[j][h1]),
}
result = db.query(q1, params=params)
q2 = """MATCH (n:Allele) WHERE n.pos:`{pos}` AND n.bp:`{bp}` RETURN n"""
params = {
"pos": int(pos[j]), "bp": str(ref[j]),
}
result = db.query(q2, params=params)
q1.relationships.create("Heterozygous, Haplotype A", s1, HTA=h1, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
q2.relationships.create("Heterozygous, Haplotype B", s1, HTB=h2, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
elif h1 == h2 and h1 > 0:
q1 = """MATCH (n:Allele) WHERE n.pos:`{pos}` AND n.bp:`{bp}` RETURN n"""
params = {
"pos": int(pos[j]), "bp": str(alt[j][h1]),
}
result = db.query(q1, params=params)
q1.relationships.create("Homozygous", s1, HTA=h1, HTB=h2, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
else:
q1 = """MATCH (n:Allele) WHERE n.pos:`{pos}` AND n.bp:`{bp}` RETURN n"""
params = {
"pos": int(pos[j]), "bp": str(alt[j][h1]),
}
result = db.query(q1, params=params)
q2 = """MATCH (n:Allele) WHERE n.pos:`{pos}` AND n.bp:`{bp}` RETURN n"""
params = {
"pos": int(pos[j]), "bp": str(alt[j][h2]),
}
result = db.query(q2, params=params)
q1.relationships.create("Heterozygous, Haplotype A", s1, HTA=h1, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
q2.relationships.create("Heterozygous, Haplotype B", s1, HTB=h2, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
Мне кажется, что я почти готов разобраться с проблемой (я новичок в Neo4jrestclient), но я получаю следующую ошибку и, похоже, нигде не могу найти ссылку на сообщение об ошибке в Интернете:
TransactionException Traceback (most recent call last)
<ipython-input-34-64544466d5e0> in <module>()
192 "pos": int(pos[j]), "bp": str(alt[j][h1]),
193 }
--> 194 result = db.query(q1, params=params)
195 q1.relationships.create("Homozygous", s1, HTA=h1, HTB=h2, GT=str(h1) + '|' + str(h2), seq_tech=seq_tech, dp=read_depth, phase_set=ps1, PL0=PL0, PL1=PL1, PL2=PL2, GP0=GP0, GP1=GP1, GP2=GP2)
196
~/anaconda3/lib/python3.6/site-packages/neo4jrestclient/client.py in query(self, q, params, returns, data_contents, tx)
210 self._cypher, self._auth, q=q, params=params,
211 types=types, returns=returns, data_contents=data_contents,
--> 212 tx=tx
213 )
214 if tx is not None and tx.id in self._transactions:
~/anaconda3/lib/python3.6/site-packages/neo4jrestclient/query.py in __init__(self, cypher, auth, q, params, types, returns, lazy, data_contents, tx)
322 tx.append(q=self.q, params=self.params, returns=self._returns,
323 data_contents=data_contents, obj=self)
--> 324 tx.execute()
325 elif not lazy:
326 self._get_elements()
~/anaconda3/lib/python3.6/site-packages/neo4jrestclient/query.py in execute(self)
934 if self.auto_execute:
935 self.url_commit = None
--> 936 return self.commit()
937 if not self.url_tx:
938 self._begin()
~/anaconda3/lib/python3.6/site-packages/neo4jrestclient/query.py in commit(self)
946 else:
947 url = u"{}/commit".format(self.url_begin)
--> 948 results = self._execute(url, results=True)
949 self.finished = True
950 return results
~/anaconda3/lib/python3.6/site-packages/neo4jrestclient/query.py in _execute(self, url, results)
865 response = self._request(url, statements=self.statements)
866 content = response.json()
--> 867 self._manage_errors(content["errors"])
868 _results = self._update(content["results"])
869 self.executed = self.references
~/anaconda3/lib/python3.6/site-packages/neo4jrestclient/query.py in _manage_errors(self, errors)
839 message, error["code"], error["message"]
840 )
--> 841 raise TransactionException(200, message)
842
843 def _begin(self):
TransactionException: Code [200]: OK. Request fulfilled, document follows.
Neo.ClientError.Statement.TypeError:
Expected String("T") to be a org.neo4j.values.virtual.VirtualNodeValue, but it was a org.neo4j.values.storable.StringWrappingStringValue
Я предполагаю, что есть проблема со значением "bp", которое я передаю в качестве параметра, но я использовал str () в каждом из этих параметров, а также ранее в скрипте, просто чтобы убедиться, , Cypher работает в браузере Neo4j, поэтому я предполагаю, что это связано с информацией, которую я передаю через API.