首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Box和Cox过程

Box和Cox过程
EN

Code Review用户
提问于 2020-07-14 18:53:01
回答 1查看 50关注 0票数 3

代码获取Box和Cox转换的数据。原始数据是一个Pandas DataFrame,流程使用这个DataFrame。

我试图加快以下代码的速度。如果你能用更快的方式来阐述这一点,那将是非常有帮助的。

代码语言:javascript
复制
import numpy as np
import pandas as pd
from numpy.random import randn
from scipy import stats

np.random.seed(1)
df = pd.DataFrame(np.random.randint(1, 100,size=(100, 4)))

def st_bc(data):
    data_bc = pd.DataFrame()
    for column in list(data):
            data_bc[column], lam = stats.boxcox(data[column])
    return data_bc

st_bc(data = df)
EN

回答 1

Code Review用户

发布于 2020-07-17 18:10:48

代码和你正在做的事情都很简单,在这里你可能做不到很多。以下是一些想法:

  • 造型:一致的缩进和遵循PEP8,请。
  • 如果原始数据不重要,请考虑在适当的情况下覆盖数据。那么,data[column], _ = stats.boxcox(data[column]).这使得Pandas能够在转换应用到它之后忘记旧数据,从而节省一些内存。不过,这可能没有明显的节省时间。
  • 我从箱箱文档中注意到,如果没有给出lambda,则计算它是为了最大化结果的日志可能性。我对这个转换一无所知,但取决于参数是如何计算的,以及它意味着什么,可能有一种方法可以更有效地对给定数据进行预计算,从而节省计算时间。

不幸的是,当您的代码基本上只有一行长( boxcox调用是这里唯一重要的东西)时,您可以做的事情只有这么多才能使它更快,特别是如果这一行已经在调用高性能的库,比如Scipy。如果速度还不够快,那么您将需要分解底层的算法,并在应用更强的假设时寻找优化的方法,例如假设数据都是非负的,而不是在运行时检查数据,或者能够找到一种更有效的方法来计算最优的lambda

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/245491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档