我正在使用python库pandaSDMX从经合组织数据库中提取整个数据集,并将它们转换为CSV格式(任何可读格式都可以,因为我希望将最后的输出放在一个SQL数据库中)。
要访问经合组织SDMX格式的数据集(也有SDMXML格式),可以在浏览器上粘贴如下链接:
注意:“PART2”是数据集的名称
问题是,有一些经合组织的数据集,SDMX没有的维度名为Time_Period,所有的SDMX-Json解析python库,我发现只解析具有这个维度的SDMX。
我还试图找到一些python库来解析SDMXML (SDMXML)文件(这也是可以的),但是在python中构建这个过程并不适合我.
下面是用于解析SDMX数据集并在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()所以,我的最后一个问题是
有没有人知道一种解析SDMX文件的方法,这些文件没有Time_Period维度?或者用其他方法从OECD自动提取整个数据集并解析它.
例如:
有时间段的
发布于 2021-07-11 17:59:18
包sdmx1 (一个改进的pandaSDMX叉)没有您所描述的限制,可以用来检索和解析这些数据。
版本2.5.0还处理了这个特定经合组织数据的一个特性:消息的结构部分描述了一个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: float64https://stackoverflow.com/questions/60787177
复制相似问题