Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何使用Python中的C3.ai数据湖正确获取所有基因组冠状病毒序列及其元数据?_Json_Python Requests_C3ai Datalake - Fatal编程技术网

Json 如何使用Python中的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

我的目标是使用Python及其请求库,使用其FetchAPI从C3.ai数据湖中提取序列数据。使用生成的JSON,我计划使用pandas库创建一个dataframe,它存储来自sequence对象的一组序列元数据,以及来自sequence对象的实际序列、序列长度和序列类型字段的列。打印此数据,然后将其移动到R以进一步查看结果。然而,我很难从C3.ai获取我想要的数据,我不知道为什么

在下面的代码中,我指定包括生物资产以及序列子对象、长度和序列类型。这一切都正常工作,因为在使用
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
        }
    }