0

我编写了这段代码来计算大样本的众数和标准差:

import numpy as np
import csv
import scipy.stats as sp
import math

r=open('stats.txt', 'w') #file with results
r.write('Data File'+'\t'+ 'Mode'+'\t'+'Std Dev'+'\n')
f=open('data.ls', 'rb') #file with the data files

for line in f:
    dataf=line.strip()
    data=csv.reader(open(dataf, 'rb'))
    data.next()
    data_list=[]
    datacol=[]
    data_list.extend(data)
    for rows in data_list:
            datacol.append(math.log10(float(rows[73])))
    m=sp.mode(datacol)
    s=sp.std(datacol)
    r.write(dataf+'\t'+str(m)+'\t'+str(s)+'\n')
    del(datacol)
    del(data_list)

哪个运作良好-我认为!但是,在我运行代码之后,我的终端上出现了一条错误消息,我想知道是否有人可以告诉我这意味着什么?

 /usr/lib/python2.6/dist-packages/scipy/stats/stats.py:1328: DeprecationWarning:     scipy.stats.std is deprecated; please update your code to use numpy.std.
    Please note that:
    - numpy.std axis argument defaults to None, not 0
    - numpy.std has a ddof argument to replace bias in a more general manner.
      scipy.stats.std(a, bias=True) can be replaced by numpy.std(x,
      axis=0, ddof=0), scipy.stats.std(a, bias=False) by numpy.std(x, axis=0,
      ddof=1).
  ddof=1).""", DeprecationWarning)
/usr/lib/python2.6/dist-packages/scipy/stats/stats.py:1304: DeprecationWarning: scipy.stats.var is deprecated; please update your code to use numpy.var.
Please note that:
    - numpy.var axis argument defaults to None, not 0
    - numpy.var has a ddof argument to replace bias in a more general manner.
      scipy.stats.var(a, bias=True) can be replaced by numpy.var(x,
      axis=0, ddof=0), scipy.stats.var(a, bias=False) by var(x, axis=0,
      ddof=1).
  ddof=1).""", DeprecationWarning)
/usr/lib/python2.6/dist-packages/scipy/stats/stats.py:420: DeprecationWarning: scipy.stats.mean is deprecated; please update your code to use numpy.mean.
Please note that:
    - numpy.mean axis argument defaults to None, not 0
    - numpy.mean has a ddof argument to replace bias in a more general manner.
      scipy.stats.mean(a, bias=True) can be replaced by numpy.mean(x,
axis=0, ddof=1).
  axis=0, ddof=1).""", DeprecationWarning)
4

2 回答 2

5

这些是弃用警告,这通常意味着您的代码可以工作,但可能会在未来的版本中停止工作。

目前你有这条线s=sp.std(datacol)。看起来警告建议使用numpy.std()而不是进行scipy.stats.std()此更改可能会使此警告消失。

如果您不关心弃用警告并想按原样使用您的代码,您可以使用警告模块来抑制它。例如,如果你有一个fxn()生成 DeprecationWarning 的函数,你可以像这样包装它:

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()  #this function generates DeprecationWarnings
于 2012-09-01T02:44:17.937 回答
3

DeprecationWarnings不要阻止您的代码正常运行,它们只是警告您正在使用的代码将很快被弃用,您应该将其更新为正确的语法。

在这种特殊情况下,它源于 NumPy 和 SciPy 在var, std... 函数/方法的默认参数上的不一致。为了清理干净,决定从scipy.statsNumPy 中删除这些函数并使用它们的对应项。

当然,仅仅删除这些功能会让一些用户感到不安,他们的代码会突然无法工作。因此,SciPy 开发人员决定在DeprecationWarning几个版本中包含一个,这应该为每个人留出足够的时间来更新他们的代码。

在您的情况下,您应该使用检查scipy.stats.std系统上的文档字符串来查看他们使用的默认值,并按照有关如何相应修改代码的警告说明进行操作。

于 2012-09-01T14:16:12.487 回答