首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SDMX解析-无Time_Period问题-经合组织数据集python提取

SDMX解析-无Time_Period问题-经合组织数据集python提取
EN

Stack Overflow用户
提问于 2020-03-21 11:21:15
回答 1查看 823关注 0票数 1

我正在使用python库pandaSDMX从经合组织数据库中提取整个数据集,并将它们转换为CSV格式(任何可读格式都可以,因为我希望将最后的输出放在一个SQL数据库中)。

要访问经合组织SDMX格式的数据集(也有SDMXML格式),可以在浏览器上粘贴如下链接:

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

问题是,有一些经合组织的数据集,SDMX没有的维度名为Time_Period,所有的SDMX-Json解析python库,我发现只解析具有这个维度的SDMX。

我还试图找到一些python库来解析SDMXML (SDMXML)文件(这也是可以的),但是在python中构建这个过程并不适合我.

下面是用于解析SDMX数据集并在Azure blob存储上编写输出CSV文件的代码:

代码语言:javascript
复制
# 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()

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

有没有人知道一种解析SDMX文件的方法,这些文件没有Time_Period维度?或者用其他方法从OECD自动提取整个数据集并解析它.

例如:

有时间段的

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

回答 1

Stack Overflow用户

发布于 2021-07-11 17:59:18

sdmx1 (一个改进的pandaSDMX叉)没有您所描述的限制,可以用来检索和解析这些数据。

版本2.5.0还处理了这个特定经合组织数据的一个特性:消息的结构部分描述了一个TIME_FORMAT (n.b。不包括TIME_PERIOD)属性,但是实际的观察并不包括这个属性。

代码语言:javascript
复制
>>> 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60787177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档