python - Eurostat 的 pandas 数据挖掘

标签 python pandas pandas-datareader sdmx

我正在开始一项工作,使用 python 和 pandas 分析来自 Eurostat 等统计机构的数据。我发现有两种方法可以从 Eurostat 获取数据。

  • pandas_datareader:貌似很好用,但是我发现获取一些特定的数据有些问题
  • pandasdmx:我发现它有点复杂,但它似乎是一个很有前途的解决方案,但文档很差

我使用免费的 Azure 笔记本,online service ,但我认为这不会使我的情况更加复杂。

让我解释一下 pandas_datareader 的问题。根据 Pandas 文档,in the section API , 有 this short documented package它有效。除了显示的示异常(exception),它工作得很好,但其他表会出现问题。例如,我可以获得关于 European house price 的数据, 哪个 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,然后我可以随意分析。说起来容易,但是我没找到很多教程解释这段话:upload data to pandas structures。比如我找到this tutorial ,但我坚持第一步,即实例化一个客户端:

import pandasdmx
from pandasdmx import client
#estat=client('Eurostat', 'milk.db')

它返回:

--------------------------------------------------------------------------- ImportError Traceback (most recent call last) in () 1 import pandasdmx ----> 2 from pandasdmx import client 3 estat=client('Eurostat', 'milk.db')

ImportError: 无法导入名称'client'

这里有什么问题?我环顾四周,但没有解决这个问题

我也关注了this tutorial :

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')]

我得到了数据,但我的目的是将它们上传到 pandas 结构(Series、DataFrame 等),因此我可以根据我的工作轻松处理。怎么做? 实际上,我使用了这条工作线(在之前的工作线之下):

s=pd.DataFrame(data)

但是如果我尝试获取其他数据表,它就不起作用了。让我用另一个关于 Harmonized Index Current Price 的例子来解释表:

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 (most recent call last) 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 Make Message attributes directly readable from Response instance 623 ''' --> 624 return getattr(self.msg, name) 625 626 def _init_writer(self, writer):

AttributeError: 'DataMessage' object has no attribute 'data'

为什么现在获取不到数据?现在怎么了?

我几乎花了一天时间四处寻找一些明确的例子和解释。你有什么建议吗?是否有完整清晰的文档?我还发现了this page与其他例子一起,解释了分类方案的使用,但它不适用于欧盟统计局(如在某些时候解释的那样)

除了一些已解释的问题外,这两种方法都可以使用,但我还需要一个建议来确定使用的方法,查询 Eurostat 以及许多其他机构,如经合组织、世界银行等... 您能否指导我找到一个明确且可行的解决方案,即使每个机构的解决方案都不一样?

最佳答案

这是我对我的问题的明确回答,适用于从 Eurostat 收集的每种类型的数据。我在这里发帖是因为它对很多人都有用。

让我提出一些例子。他们生成了三个带有数据和正确时间索引的 pandas 系列(EU_unempl、EU_GDP、EU_intRates)

#----Unemployment Rate---------
dataEU_unempl=pd.read_json('http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/en/ei_lmhr_m?geo=EA&indic=LM-UN-T-TOT&s_adj=NSA&unit=PC_ACT',typ='series',orient='table',numpy=True) #,typ='DataFrame',orient='table'
x=[]
for i in range(int(sorted(dataEU_unempl['value'].keys())[0]),1+int(sorted(dataEU_unempl['value'].keys(),reverse=True)[0])):
    x=numpy.append(x,dataEU_unempl['value'][str(i)])
EU_unempl=pd.Series(x,index=pd.date_range((pd.to_datetime((sorted(dataEU_unempl['dimension']['time']['category']['index'].keys())[(sorted(int(v) for v in dataEU_unempl['value'].keys())[0])]),format='%YM%M')), periods=len(x), freq='M')) #'1/1993'


#----GDP---------
dataEU_GDP=pd.read_json('http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/en/namq_10_gdp?geo=EA&na_item=B1GQ&s_adj=NSA&unit=CP_MEUR',typ='series',orient='table',numpy=True) #,typ='DataFrame',orient='table'
x=[]
for i in range((sorted(int(v) for v in dataEU_GDP['value'].keys())[0]),1+(sorted((int(v) for v in dataEU_GDP['value'].keys()),reverse=True))[0]):
    x=numpy.append(x,dataEU_GDP['value'][str(i)])
EU_GDP=pd.Series(x,index=pd.date_range((pd.Timestamp(sorted(dataEU_GDP['dimension']['time']['category']['index'].keys())[(sorted(int(v) for v in dataEU_GDP['value'].keys())[0])])), periods=len(x), freq='Q'))


#----Money market interest rates---------
dataEU_intRates=pd.read_json('http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/en/irt_st_m?geo=EA&intrt=MAT_ON',typ='series',orient='table',numpy=True) #,typ='DataFrame',orient='table'
x=[]
for i in range((sorted(int(v) for v in dataEU_intRates['value'].keys())[0]),1+(sorted((int(v) for v in dataEU_intRates['value'].keys()),reverse=True))[0]):
    x=numpy.append(x,dataEU_intRates['value'][str(i)])
EU_intRates=pd.Series(x,index=pd.date_range((pd.to_datetime((sorted(dataEU_intRates['dimension']['time']['category']['index'].keys())[(sorted(int(v) for v in dataEU_intRates['value'].keys())[0])]),format='%YM%M')), periods=len(x), freq='M'))

关于python - Eurostat 的 pandas 数据挖掘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50390889/

相关文章:

python - 如何使用 Python 下载股票价格数据?

python - 计算 Pandas 数据框中的单个单词

python - 使用需要在多个级别广播的多索引 Pandas 数据帧执行算术

python - Keras 顺序模型与功能 API 的不一致

python - 在 python 中创建一个非常简单的 'evolutionary' 算法

python - Pandas Dataframe - 根据条件获取索引值

python-3.x - 连接到 "Iex"或 "morningstar"并检索数据

python - 如何使用 pandas datareader 获取纳斯达克指数的数据?

Python Asyncio 如何从队列中连续运行任务/协程

python - 使用 Python 查找 {{ }} 中 JavaScript 填充的信息