python中的数据导入/导出和eviews函数调用

pyeviews的Python项目详细描述


pyeviews包的目的是使EViews和python之间的对话更容易,因此python程序员可以直接从python使用eviews的经济计量引擎。这个包使用com在python和eviews之间传输数据。(有关com和eviews的更多信息,请查看我们的whitepaper on the subject。)

下面是一个从python到eviews的简单示例。我们将使用eviews中流行的chow lin插值例程,使用python中创建的数据。Chow-Lin插值是一种基于回归的技术,用于将低频数据(在我们的示例中为年度)转换为高频数据(在我们的示例中为季度)。它能够使用更高的频率序列作为插值序列的模式。选择季度内插序列以四种方式之一匹配年度基准序列:第一种(内插序列的第一季度值与年度序列匹配)、最后一种(相同,但对于第四季度值)、总和(第一至第四季度的总和与年度序列匹配)。和平均值(第一季度到第四季度的平均值与年度系列相匹配)。

我们将使用pandas包的时间序列功能在python中创建两个序列,将其传输到eviews,对我们的序列执行chow lin插值,并将其带回python中。数据取自[BLO2001]中最初用于denton插值的示例。

$ pip install pyeviews

或者,下载软件包,导航到安装目录,然后使用:

$ python setup.py install

有关安装的更多详细信息,请参见我们的whitepaper

  • 启动python并使用pandas创建两个时间序列。我们将年度系列称为“基准”,季度系列称为“指标”:
>>>importnumpyasnp>>>importpandasaspa>>>dtsa=pa.date_range('1998',periods=3,freq='A')>>>benchmark=pa.Series([4000.,4161.4,np.nan],index=dtsa,name='benchmark')>>>dtsq=pa.date_range('1998q1',periods=12,freq='Q')>>>indicator=pa.Series([98.2,100.8,102.2,100.8,99.,101.6,102.7,101.5,100.5,103.,103.5,101.5],index=dtsq,name='indicator')
  • 加载pyeviews包并创建自定义COM应用程序对象,以便我们可以自定义设置。将showwindow(显示eviews窗口)设置为true。然后调用putpythonaswf函数为基准和指标系列创建页面:
>>>importpyeviewsasevp>>>eviewsapp=evp.GetEViewsApp(instance='new',showwindow=True)>>>evp.PutPythonAsWF(benchmark,app=eviewsapp)>>>evp.PutPythonAsWF(indicator,app=eviewsapp,newwf=False)

在幕后,pyeviews将检测您的pandas对象(如果您有)的datetimeindex是否需要调整以匹配eviews的约会习惯。由于eviews根据频率将日期指定为给定周期的开始,因此在执行计算时,这可能会导致未对齐问题和意外结果。例如,年“A”频率和日期为2000-12-31的DateTimeIndex将被分配一个2000-12-01的内部eviews日期。在这种情况下,pyeviews将在将数据推送到eviews之前将日期调整为2000-01-01。

  • 命名工作文件的页面:
>>>evp.Run('pageselect Untitled',app=eviewsapp)>>>evp.Run('pagerename Untitled annual',app=eviewsapp)>>>evp.Run('pageselect Untitled1',app=eviewsapp)>>>evp.Run('pagerename Untitled1 quarterly',app=eviewsapp)
  • 使用eviewscopy命令将年度页面中的基准系列复制到季度页面,使用季度页面中的指标系列作为高频指标,并将每年(四个季度)的基准系列总和与基准系列的匹配年度值相匹配:
>>>evp.Run('copy(rho=.7, c=chowlins) annual\\benchmark quarterly\\benchmarked @indicator indicator',app=eviewsapp)
  • 将新系列带回python中:
>>>benchmarked=evp.GetWFAsPython(app=eviewsapp,pagename='quarterly',namefilter='benchmarked')>>>print(benchmarked)BENCHMARKED1998-01-01867.4214291998-04-011017.2928571998-07-011097.9928571998-10-011017.2928571999-01-01913.5357141999-04-011063.4071431999-07-011126.8142861999-10-011057.6428572000-01-011000.0000002000-04-011144.1071432000-07-011172.9285712000-10-011057.642857
  • 释放分配给COM进程的内存(这在交互模式下不会自动发生):
>>>eviewsapp.Hide()>>>eviewsapp=None>>>evp.Cleanup()

请注意,如果选择不创建自定义COM应用程序对象(geteviewsapp的geteviewsapp函数),则在最后一步中不需要使用前两行。您只需要调用cleanup()。如果创建自定义对象但选择不显示它,则不需要使用第一行(函数hide())。

  • 如果需要,打印所有内容以查看插值序列如何跟随指示器序列:
>>># load the matplotlib package to plotimportmatplotlib.pyplotasplt>>># reindex the benchmarked series to the end of the quarter so the dates match those of the indicator seriesbenchmarked_reindexed=pa.Series(benchmarked.values.flatten(),index=benchmarked.index+pa.DateOffset(months=3,days=-1))>>># plotfig,ax1=plt.subplots()plt.xticks(rotation=70)ax1.plot(benchmarked_reindexed,'b-',label='benchmarked')# multiply the indicator series by 10 to put it on the same axis as the benchmarked seriesax1.plot(indicator*10,'b--',label='indicator*10')ax1.set_xlabel('dates')ax1.set_ylabel('indicator & interpolated values',color='b')ax1.xaxis.grid(True)fortlinax1.get_yticklabels():tl.set_color('b')plt.legend(loc='lower right')ax2=ax1.twinx()ax2.set_ylim([3975,4180])ax2.plot(benchmark,'ro',label='benchmark')ax2.set_ylabel('benchmark',color='r')fortlinax2.get_yticklabels():tl.set_color('r')plt.legend(loc='upper left')plt.title("Chow-Lin interpolation: \nannual sum of benchmarked = benchmark",fontsize=14)plt.show()
https://github.com/bexer/pyeviews/blob/master/example-python.png

有关pyeviews包的更多信息(包括函数列表),请查看我们关于该主题的whitepaper

参考文献

[BLO2001]Bloem, A.M, Dippelsman, R.J. and Maehle, N.O. 2001 Quarterly National Accounts Manual - Concepts, Data Sources, and Compilation. IMF. http://www.imf.org/external/pubs/ft/qna/2000/Textbook/index.htm

要求

  • eviews,当然
  • Comtypes、Numpy和Pandas

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java SimpleCursorAdapter删除值   java结束while循环条件   java检查设备是否连接到特定网络   java组织。冬眠MappingException找不到逻辑名称为annotation getter的列   为什么java邮件中会抛出此异常?   加载SDK时发生java Eclipse错误   返回奇怪输出的Java数组   JavaXStream和对象类序列化   将枚举列表传递给namedQuery后出现java非法转换异常。Hibernate中的setParameter()   java Android studio不允许我在字符串上使用开关?   有没有办法从Java程序访问存储在Chrome中的cookie   java在枚举中构造实例而不修改枚举类   java Blackberry JDE FieldChangeListener   java修复错误:未报告的异常InterruptedException   java Spring数据JPA:findAll(具有规范和可分页)在计数查询中失败