为什么我不能直接导入statsmodels?

时间:2015-08-06 20:01:17

标签: python python-import statsmodels

我肯定错过了一些非常明显的东西,但为什么会这样:

a = [0.2635,0.654654,0.365,0.4545,1.5465,3.545]

import statsmodels.robust as rb
print rb.scale.mad(a)
0.356309343367

但这并不是:

import statsmodels as sm
print sm.robust.scale.mad(a)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-1ce0c872b0be> in <module>()
----> 1 print statsmodels.robust.scale.mad(a)

AttributeError: 'module' object has no attribute 'robust'

2 个答案:

答案 0 :(得分:3)

长答案见http://www.statsmodels.org/stable/importpaths.html

Statsmodels 故意大部分为空__init__.py,但通过api.py进行并行导入收集。

交互式工作import statsmodels.api as sm的推荐导入几乎导入了所有的statsmodel,numpy,pandas和patsy,以及scipy的大部分内容。冷启动时这是懒散的。

如果我们只想导入statsmodel的特定部分,那么我们不需要导入所有这些额外内容。空__init__.py意味着我们只能导入一个模块(当然会导入该模块的依赖项)。

e.g。 from statsmodels.robust.scale import madimport statmodels.robust scale as smscale smscale.mad(...)

(小警告:如果内部结构发生变化,一些非常低级别的导入可能不会始终向后兼容。但是,一般策略是在维护旧访问结构的同时弃用一个或两个版本的函数。)

答案 1 :(得分:2)

您可以,您只需要导入robust

import statsmodels as sm
import statsmodels.robust

然后:

>>> sm.robust.scale.mad(a)
0.35630934336679576

robuststatsmodels的子包,导入包通常不会自动导入子包(除非明确写入包)。