【问题标题】:SDMX-Json Parsing - No Time_Period problem - OECD Dataset python extractSDMX-Json 解析 - 没有 Time_Period 问题 - OECD 数据集 python 提取
【发布时间】:2020-03-21 11:21:15
【问题描述】:

我正在使用 python 库 pandaSDMX 从 OECD 数据库中提取整个数据集,并将它们转换为 CSV 格式(任何可读格式都可以,因为我想将最终输出放入 SQL 数据库中)。

要访问 SDMX-Json 格式的 OECD 数据集(也有 SDMXML 格式),您可以在浏览器上粘贴如下链接:

http://stats.oecd.org/sdmx-json/data/PART2/all/all

注意:“PART2”是数据集的名称

问题是,有一些 OECD 数据集的 SDMX-Json没有一个名为 Time_Period 的维度,以及我所有的 sdmx-json 解析 python 库已发现仅解析具有此维度的 SDMX-Json

我还尝试找到一些可以解析 SDMXML (SDMX-ML) 文件的 python 库(这也可以),但是在 python 中构建该过程对我不起作用...

这是我用来解析 SDMX-Json 数据集并将输出 CSV 文件写入 Azure blob 存储的一段代码:

# itera sob cada ficheiro json e converte o conteudo para csv
    for dataset in datasetList:
        cursor = cnxn.cursor()

        Values = [dataset, datasetFiltersList[counter]]
        cursor.execute(SQLLogCommand, Values)
        cnxn.commit()

        #logging.info('Analysing dataset: ' + dataset)
        try:
            data_response = oecd.data(resource_id=dataset, key=datasetFiltersList[counter])
        except UnicodeDecodeError:
            Values = [datetime.today().strftime('%Y-%m-%d-%H:%M:%S'), 'Unicode Decode Error - Error', 0]
            cursor.execute(SQLUpdateCommand, Values)
            cnxn.commit()
        except KeyError:
            Values = [datetime.today().strftime('%Y-%m-%d-%H:%M:%S'), 'Key Error - Error', 0]
            cursor.execute(SQLUpdateCommand, Values)
            cnxn.commit()
        else:
            data = data_response.data
            if data.dim_at_obs == 'TIME_PERIOD':
                df = createDF(data, useIDs=False)
                blobService.create_blob_from_text(CONTAINERNAME, csvBlobPath + dataset + '.csv' , df.to_csv(index=False, sep='|', encoding='utf-8'))

                Values = [datetime.today().strftime('%Y-%m-%d-%H:%M:%S'), 'Success', 1]
                cursor.execute(SQLUpdateCommand, Values)
            cnxn.commit()  
            #logging.info('Dataset ' + dataset + ' analysed!')
        else:
            print('no time period error on dataset: ' + dataset)
            Values = [datetime.today().strftime('%Y-%m-%d-%H:%M:%S'), 'No Time Period - Error', 0]
            cursor.execute(SQLUpdateCommand, Values)
            cnxn.commit()  

cnxn.close()

所以,我的最后一个问题是

有谁知道解析没有 Time_Period 的 SDMX-Json 文件的方法 方面?或其他自动提取整个数据集的方法 OECD 并解析它...

例如:

  1. 有时间段的数据集(这个对我来说很好): http://stats.oecd.org/sdmx-json/data/TALIS_EDUGPS/all/all
  2. 没有时间段的数据集: http://stats.oecd.org/sdmx-json/data/PART2/all/all

【问题讨论】:

    标签: python json parsing blob sdmx


    【解决方案1】:

    sdmx1pandaSDMX的改进分支)没有你描述的限制,可以用来检索和解析这个数据。

    2.5.0 版还处理此特定 OECD 数据的特性:消息的结构部分描述了每个观察的 TIME_FORMAT(n.b.不是 TIME_PERIOD)属性,但观察实际上并不包含此属性。

    >>> import sdmx
    >>> OECD = sdmx.Client("OECD")
    >>> message = OECD.data("PART2")
    No AttributeValues for attribute <DataAttribute TIME_FORMAT>; discard
    
    >>> message
    <sdmx.DataMessage>
      <Header>
        id: '710c36ac-0beb-4781-b6d6-01d86476a10c'
        prepared: '2021-07-11T17:54:09.547694+00:00'
        sender: <Agency OECD: Organisation for Economic Co-operation and Development>
        source: 
        test: False
      response: <Response [200]>
      DataSet (1)
      dataflow: <DataflowDefinition (missing id)>
      observation_dimension: <sdmx.model._AllDimensions object at 0x7f008efd7e80>
    
    >>> sdmx.to_pandas(message.data[0])
    LOCATION  IND    PER  GRD  FLD  MSR
    AUS       10CAU  CHG  EIG  MAT  MN     11.430378
                                    SE      6.079738
                               SCI  MN     -3.697873
                                    SE      4.820530
                          FOG  MAT  MN      6.051900
                                             ...    
    ZAF       8UTSR  END  EIG  SCI  SE      3.203199
                     INI  EIG  MAT  MN     60.268028
                                    SE      3.864160
                               SCI  MN     55.894505
                                    SE      3.500335
    Name: value, Length: 18755, dtype: float64
    

    【讨论】:

      猜你喜欢
      • 2013-05-16
      • 1970-01-01
      • 2015-10-29
      • 2020-01-20
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多