首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存错误,执行情感分析大数据量

内存错误,执行情感分析大数据量
EN

Stack Overflow用户
提问于 2017-09-29 22:02:19
回答 2查看 238关注 0票数 0

我正在尝试对社交网络中的大量数据进行情感分析。代码的一部分在数据量很小的情况下工作得很好。

输入大小小于20mb的计算没有问题。但如果大小超过20mb,我会得到内存错误。

环境: Windows 10,anaconda 3.x,更新版本包。

代码:

代码语言:javascript
复制
def captionsenti(F_name): 
    print ("reading from csv file")
    F1_name="caption_senti.csv"
    df=pd.read_csv(path+F_name+".csv")
    filename=path+F_name+"_"+F1_name
    df1=df['tweetText']   # reading caption from data5 file
    df1=df1.fillna("h") # filling NaN values
    df2=pd.DataFrame()
    sid = SentimentIntensityAnalyzer()
    print ("calculating sentiment")
    for sentence in df1:
        #print(sentence)
        ss = sid.polarity_scores(sentence)  # calculating sentiments
        #print ss
        df2=df2.append(pd.DataFrame({'tweetText':sentence ,'positive':ss['pos'],'negative':ss['neg'],'neutral':ss['neu'],
                                 'compound':ss['compound']},index=[0]))


    df2=df2.join(df.set_index('tweetText'), on='tweetText') # joining two data frames
    df2=df2.drop_duplicates(subset=None, keep='first', inplace=False)
    df2=df2.dropna(how='any') 
    df2=df2[['userID','tweetSource','tweetText','positive','neutral','negative','compound','latitude','longitude']]
    #print df2
    print ("Storing in csv file")
    df2.to_csv(filename,encoding='utf-8',header=True,index=True,chunksize=100)

为了避免内存错误,我需要包含哪些额外的内容?谢谢您的帮助。

EN

回答 2

Stack Overflow用户

发布于 2017-09-29 22:07:24

一些可能对您有帮助的一般提示:

1.只加载需要内存的列:

pd.read_csv提供usecols参数以指定要读取的列

代码语言:javascript
复制
df = pd.read_csv(path+F_name+".csv", usecols=['col1', 'col2'])

2.删除未使用的变量

如果不再需要某个变量,请使用del variable_name将其删除

3.使用内存分析器

描述内存memory_profiler。引用文档中的示例内存日志,您将获得如下内存配置文件:

代码语言:javascript
复制
Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a
票数 1
EN

Stack Overflow用户

发布于 2017-09-30 01:41:52

你不需要额外的东西,你需要更少的东西。为什么要一次加载内存中的所有tweet?如果你一次只处理一条推文,你可以用比低端智能手机更少的内存来处理at级的数据。

代码语言:javascript
复制
reader = csv.DictReader(open(F1_name))
fieldnames = ["TweetText", "positive", "negative", ...]
writer = csv.DictWriter(open(output_filename, "w"), fieldnames=fieldnames)
writer.writeheader()

for row in reader:
    sentence = row["TweetText"]
    ss = sid.polarity_scores(sentence)
    row['positive'] = ss['pos']
    row['negative'] = ss['neg']
    <etc.>
    writer.writerow(row)

或者类似的东西。我没有费心关闭你的文件句柄,但你应该的。你可以做各种各样的调整和调整,但重点是:当你一次分析一条推文时,没有理由炸毁你的记忆。

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

https://stackoverflow.com/questions/46490474

复制
相关文章

相似问题

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