我有一个相当大的数据集,我正在尝试计算每个文档的情绪。我正在使用Vader使用以下代码来计算情感,但是此过程需要6个小时以上的时间才能运行。我正在寻找加快此过程的任何方法。
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
%time full_trans['bsent'] = full_trans['body_text'].apply(lambda row: analyzer.polarity_scores(row))
任何想法都会很棒,因为像这样循环遍历行效率极低。
例如,我已经在100个观测值的迷你样本上运行了我的代码。替代代码形式的结果如下。我的原始代码是第一,对列表理解的建议更改是第二。两种方法之间的性能没有增加似乎很奇怪。
transtest = full_transx.copy(deep=True)
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
%time transtest['bsent'] = [analyzer.polarity_scores(row) for row in transtest['body_text']]
%time full_transx['bsent'] = full_transx['body_text'].apply(lambda row: analyzer.polarity_scores(row))
挂墙时间:4min 11s
挂墙时间:3分钟59秒
最佳答案
我认为full_transx['body_text']
是一系列字符串。在这种情况下,遍历底层的numpy数组以建立列表理解通常会更有效:
full_trans['bsent'] = [analyzer.polarity_scores(row) for row in full_trans['body_text'].values]
关于python - 如何在DataFrame中加快Python应用功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56888602/