记忆错误,执行情绪分析大尺寸d

2024-04-18 08:25:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对社交网络的大量数据进行情绪分析。代码的一部分在处理小数据时效果很好。在

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

环境:Windows10,Anaconda3.x更新版本包。在

代码:

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)

为了避免内存错误,我需要包括哪些额外的内容 提前谢谢你的帮助。在


Tags: csv数据代码namedfindexsssentence
2条回答

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

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

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

df = pd.read_csv(path+F_name+".csv", usecols=['col1', 'col2'])

2。删除未使用的变量

如果不再需要变量,请使用del variable_name删除它

3。使用内存分析器

配置内存memory_profiler。引用文档中的示例内存日志,可以得到如下所示的内存配置文件:

^{pr2}$

你不需要额外的东西,你需要的更少。为什么你一次把所有的tweet都载入内存?如果你一次只处理一条tweet,你可以用比低端智能手机更少的内存处理数兆字节的数据。在

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)

或者类似的事情。我不想关上你的文件句柄,但你应该。你可以做各种各样的调整和调整,但关键是:当你一次分析一条tweet时,没有理由破坏你的记忆。在

相关问题 更多 >