0

我正在尝试从加拿大统计局读取一些加拿大人口普查数据 (“加拿大、省和地区”地理级别的 XML 选项)。我看到 xml 文件是 SDMX 格式,并且提供了一个结构文件,但我不知道如何从 xml 文件中读取数据。

Python中似乎有2个选项,pandasdmx和sdmx1,它们都说它们可以读取本地文件。当我尝试

import sdmx

datafile = '~/Documents/Python/Generic_98-401-X2016059.xml'

canada = sdmx.read_sdmx(datafile)

它似乎读取了前 903 行,然后产生以下内容:

Traceback (most recent call last):
  File "/home/username/.local/lib/python3.10/site-packages/sdmx/reader/xml.py", line 238, in read_message
    raise NotImplementedError(element.tag, event) from None
NotImplementedError: ('{http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message}GenericData', 'start')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/username/.local/lib/python3.10/site-packages/sdmx/reader/__init__.py", line 126, in read_sdmx
    return reader().read_message(obj, **kwargs)
  File "/home/username/.local/lib/python3.10/site-packages/sdmx/reader/xml.py", line 259, in read_message
    raise XMLParseError from exc
sdmx.exceptions.XMLParseError: NotImplementedError: ('{http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message}GenericData', 'start')

发生这种情况是因为我没有加载 sdmx 文件的结构(来自上面 StatsCan 链接的 zip 文件中的 Structure_98-401-X2016059.xml)吗?如果是这样,我该如何去加载它并告诉 sdmx 在阅读时使用它datafile

sdmx 和 pandasdmx 的文档只显示了从在线提供商而不是本地文件加载文件的示例,所以我被卡住了。我对 python 的熟悉程度有限,因此非常感谢任何帮助。

作为参考,我可以使用rsdmx github中的说明读取 R 中的文件 。我希望能够在 Python 中做同样/类似的事情。

提前致谢。

4

2 回答 2

0

根据 sdmx1 开发人员的说法,StatsCan 使用的是旧的、不受支持的 SDMX 版本(v. 2.0)。当前版本是 2.1,而 rsdmx1 仅支持此版本(支持也将面向即将推出的 v.3)。

于 2022-01-27T21:37:03.860 回答
0

从对文档的粗略检查来看,加拿大统计局似乎不是默认包含的来源之一。但是有一个sdmx.add_source功能。我建议您尝试一下(在加载数据之前)。

于 2022-01-23T07:54:40.187 回答