我正在开始一项使用 python 和 pandas 分析来自 Eurostat 等统计机构的数据的工作。我发现有两种方法可以从 Eurostat 获取数据。
- pandas_datareader:看起来很容易使用,但我发现一些问题是获取一些特定的数据
- pandasdmx:我发现它有点复杂,但它似乎是一个很有前途的解决方案,但文档很差
我使用免费的 Azure 笔记本,在线服务,但我认为它不会使我的情况更加复杂。
让我解释一下pandas_datareader的问题。根据 pandas 文档,在 API 部分中,有这个简短的文档包,它可以工作。除了显示的示例之外,它很好地工作,其他表出现问题。例如,我可以使用以下简单代码获取有关欧洲房价的数据,其中 ID 表为prc_hpi_a :
import pandas_datareader.data as web
import datetime
df = web.DataReader('prc_hpi_a', 'eurostat')
但该表包含三种类型的住宅数据:TOTAL、EXISTING 和 NEW。我只有现有的住宅,我不知道如何获得其他的。对于这些类型的过滤,您有解决方案吗?
其次是使用pandasdmx的路径。这里比较复杂。我的想法是将所有数据上传到pandas DataFrame,然后我可以根据需要进行分析。说起来容易,但我没有找到很多解释这段话的教程:上传数据到熊猫结构。例如,我找到了本教程,但我坚持第一步,即实例化客户端:
import pandasdmx
from pandasdmx import client
#estat=client('Eurostat', 'milk.db')
它返回:
-------------------------------------------------- ------------------------- ImportError Traceback (last last call last) in () 1 import pandasdmx ----> 2 from pandasdmx import client 3 estat=client('Eurostat', 'milk.db')
ImportError:无法导入名称“客户”
这里有什么问题?我环顾四周,但没有解决这个问题
我也跟着这个教程:
from pandasdmx import Request
estat = Request('ESTAT')
metadata = estat.datastructure('DSD_une_rt_a').write()
metadata.codelist.iloc[8:18]
resp = estat.data('une_rt_a', key={'GEO': 'EL+ES+IE'}, params={'startPeriod': '2007'})
data = resp.write(s for s in resp.data.series if s.key.AGE == 'TOTAL')
data.columns.names
data.columns.levels
data.loc[:, ('PC_ACT', 'TOTAL', 'T')]
我得到了数据,但我的目的是将它们上传到熊猫结构(Series,DataFrame等),这样我就可以根据我的工作轻松处理。怎么做?实际上我用这条工作线做了(在以前的下面):
s=pd.DataFrame(data)
但是如果我尝试获取其他数据表,它就不起作用。让我用另一个关于协调指数当前价格表的例子来解释:
estat = Request('ESTAT')
metadata = estat.datastructure('DSD_prc_hicp_midx').write()
resp = estat.data('prc_hicp_midx')
data = resp.write(s for s in resp.data.series if s.key.COICOP == 'CP00')
它在这里返回一个错误,即:
-------------------------------------------------- ------------------------- AttributeError Traceback (最近一次调用最后一次) in () 2 metadata = estat.datastructure('DSD_prc_hicp_midx').write( ) 3 resp = estat.data('prc_hicp_midx') ----> 4 data = resp.write(s for s in resp.data.series if s.key.COICOP == 'CP00') 5 #metadata.codelist 6 #data.loc[:, ('TOTAL', 'INX_Q','EA', 'Q')]
~/anaconda3_501/lib/python3.6/site-packages/pandasdmx/api.py in getattr (self, name) 622 使消息属性直接从响应实例 623 ''' 中读取 -> 624 return getattr(self.msg,名称)625 626 def _init_writer(自我,作家):
AttributeError:“DataMessage”对象没有属性“数据”
为什么它现在不获取数据?现在怎么了?
我花了将近一天的时间四处寻找一些明确的例子和解释。你有什么要提议的吗?是否有完整而清晰的文档?我还发现这个页面还有其他示例,解释了分类方案的使用,但它不适用于欧盟统计局(正如在某些时候解释的那样)
这两种方法都可以工作,除了一些解释的问题,但我还需要一个建议,有一个明确的方法可以使用,查询欧盟统计局以及许多其他机构,如经合组织、世界银行等……你能指导我找到一个明确的方法吗?和可行的解决方案,即使每个机构都不同?