SDMXJson解析无时间段问题OECD数据集python提取

2024-06-16 08:37:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

Note: 'PART2' is the name of the dataset

问题是,有些经合组织数据集的SDMX Json没有一个名为Time\u Period的维度,而我发现的所有SDMX Json解析python库都只解析具有该维度的SDMX Json

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

下面是我用来解析SDMX Json数据集并在Azure blob存储上写入输出CSV文件的代码片段:

# 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()

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

Does anyone know a way to parse SDMX-Json files that not have a Time_Period dimension? Or other way to extract automatically a entire dataset from OECD and parse it...

例如:

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

Tags: 数据jsonexecutedata格式errorallcursor
1条回答
网友
1楼 · 发布于 2024-06-16 08:37:43

^{}(改进的pandaSDMX分支)没有您描述的限制,可以用于检索和解析此数据

版本2.5.0还处理了这一特定OECD数据的一个特性:消息的结构部分描述了每次观察的时间格式(注意,不是时间周期)属性,但观察实际上并不包括此属性

>>> 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

相关问题 更多 >