为什么我不能直接导入statsmodels?
Why can't I import statsmodels directly?
我当然遗漏了一些非常明显的东西,但为什么这样做:
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'
你可以,你只需要导入 robust
:
import statsmodels as sm
import statsmodels.robust
然后:
>>> sm.robust.scale.mad(a)
0.35630934336679576
robust
是 statsmodels
的子包,导入一个包一般不会自动导入子包(除非包明确写成这样做)。
详见http://www.statsmodels.org/stable/importpaths.html
Statsmodels 有意 大部分是空的 __init__.py
但通过 api.py
.
有平行导入集合
交互式工作的推荐导入 import statsmodels.api as sm
导入几乎所有的 statsmodels、numpy、pandas 和 patsy,以及 scipy 的大部分。这在冷启动时很慢。
如果我们只想导入 statsmodels 的特定部分,那么我们不需要导入所有这些额外的部分。 __init__.py
为空意味着我们可以只导入一个模块(当然会导入该模块的依赖项)。
例如from statsmodels.robust.scale import mad
或
import statmodels.robust scale as smscale
smscale.mad(...)
(小警告:如果内部结构发生变化,一些非常低级别的导入可能不会始终保持向后兼容。但是,一般策略是在保持旧访问结构的同时在一两个版本中弃用函数。)
我当然遗漏了一些非常明显的东西,但为什么这样做:
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'
你可以,你只需要导入 robust
:
import statsmodels as sm
import statsmodels.robust
然后:
>>> sm.robust.scale.mad(a)
0.35630934336679576
robust
是 statsmodels
的子包,导入一个包一般不会自动导入子包(除非包明确写成这样做)。
详见http://www.statsmodels.org/stable/importpaths.html
Statsmodels 有意 大部分是空的 __init__.py
但通过 api.py
.
交互式工作的推荐导入 import statsmodels.api as sm
导入几乎所有的 statsmodels、numpy、pandas 和 patsy,以及 scipy 的大部分。这在冷启动时很慢。
如果我们只想导入 statsmodels 的特定部分,那么我们不需要导入所有这些额外的部分。 __init__.py
为空意味着我们可以只导入一个模块(当然会导入该模块的依赖项)。
例如from statsmodels.robust.scale import mad
或
import statmodels.robust scale as smscale
smscale.mad(...)
(小警告:如果内部结构发生变化,一些非常低级别的导入可能不会始终保持向后兼容。但是,一般策略是在保持旧访问结构的同时在一两个版本中弃用函数。)