Json 如何使用Python中的C3.ai数据湖正确获取所有基因组冠状病毒序列及其元数据?
我的目标是使用Python及其请求库,使用其FetchAPI从C3.ai数据湖中提取序列数据。使用生成的JSON,我计划使用pandas库创建一个dataframe,它存储来自sequence对象的一组序列元数据,以及来自sequence对象的实际序列、序列长度和序列类型字段的列。打印此数据,然后将其移动到R以进一步查看结果。然而,我很难从C3.ai获取我想要的数据,我不知道为什么 在下面的代码中,我指定包括生物资产以及序列子对象、长度和序列类型。这一切都正常工作,因为在使用Json 如何使用Python中的C3.ai数据湖正确获取所有基因组冠状病毒序列及其元数据?,json,python-requests,c3ai-datalake,Json,Python Requests,C3ai Datalake,我的目标是使用Python及其请求库,使用其FetchAPI从C3.ai数据湖中提取序列数据。使用生成的JSON,我计划使用pandas库创建一个dataframe,它存储来自sequence对象的一组序列元数据,以及来自sequence对象的实际序列、序列长度和序列类型字段的列。打印此数据,然后将其移动到R以进一步查看结果。然而,我很难从C3.ai获取我想要的数据,我不知道为什么 在下面的代码中,我指定包括生物资产以及序列子对象、长度和序列类型。这一切都正常工作,因为在使用JSON\u nor
JSON\u normalize()
展平JSON之后,我收到了一个包含所有正确列的数据帧。我使用“过滤器”:“sequence.length>=28900”,
过滤掉任何太短而不能成为完整基因组的序列。问题是,我只得到105个符合此标准的结果,我知道这是错误的,因为NCBI冠状病毒数据中心有近3000个序列,它标记为完整。此外,使用“filter”筛选子对象中具有有效序列的核苷酸序列:“assetType==‘核苷酸序列’&&exists(sequence.sequence)”,
会产生相同的结果。使用“filter”:“exists(sequence.sequence)”,
显示只有1314个任何类型的序列,包括蛋白质序列,它们的子序列对象中实际有数据。使用sequence fetch API运行这些相同的搜索https://api.c3.ai/covid/api/1/sequence/fetch“以及适当的长度和存在性筛选器为我提供了相同的数字
浏览一个表,我使用一个sequence fetch,通过不使用过滤器来检索所有可能的序列,我发现sequence对象本身可能存在于我需要的所有序列中,但实际的sequence字段本身却丢失了。这是我的方法还是数据湖的问题
谢谢你的帮助
链接到NCBI新冠病毒19集线器
生物资产提取代码
import requests
import pandas
def retrieve_data():
has_more = True
data = pandas.DataFrame
url = "https://api.c3.ai/covid/api/1/biologicalasset/fetch"
jsonRequest = {
"spec": {
"include": "this, sequence.sequence, sequence.length, sequence.sequenceType",
"filter": "sequence.length >= 28900",
"limit": -1
}
}
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
response = requests.post(url=url, json=jsonRequest, headers=headers)
result = response.json()
print(result["hasMore"], type(result["hasMore"])) # checks if any left over sequences
flatDict = pandas.json_normalize(result["objs"]) # flattens JSON
return flatDict
print(retrieve_data()) # runs function
print(retrieve_data().columns) # prints column names
序列获取JSON,可能的过滤器被注释掉
jsonRequest = {
"spec": {
#"include": "this, parent",
#"filter": "sequenceType == 'GenBank' && length > 28900",
#"filter": "sequenceType == 'complete'",
#"filter": "exists(sequence)",
#"filter": "length > 28900",
"limit": -1
}
}