我正在使用 python 库pandaSDMX
从 OECD 数据库中提取整个数据集,并将它们转换为 CSV 格式(任何可读格式都可以,因为我想将最终输出放入 SQL 数据库中)。
要访问 SDMX-Json 格式的 OECD 数据集(还有一种 SDMXML 格式),您可以在浏览器上粘贴如下链接:
http://stats.oecd.org/sdmx-json/data/PART2/all/all
注意:“PART2”是数据集的名称
问题是,有些经合组织数据集的 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 文件的方法?或以其他方式从经合组织自动提取整个数据集并对其进行解析......
例如:
- 有时间段的数据集(这个对我来说很好): http: //stats.oecd.org/sdmx-json/data/TALIS_EDUGPS/all/all
- 没有时间段的数据集:http: //stats.oecd.org/sdmx-json/data/PART2/all/all