我正在尝试对来自社交网络的大量数据进行情绪分析。代码的一部分适用于小尺寸的数据。
小于20mb的输入大小没有问题计算。但如果大小超过20mb,我会收到内存错误。
环境:Windows 10,anaconda 3.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)
为避免内存错误,我还需要包含多少内容 我在这里先向您的帮助表示感谢。
答案 0 :(得分:1)
一些可能对您有帮助的一般提示:
pd.read_csv
提供usecols参数以指定要读取的列
df = pd.read_csv(path+F_name+".csv", usecols=['col1', 'col2'])
如果您不再需要变量,请使用del variable_name
配置内存memory_profiler。从文档中引用示例的内存日志,您将获得如下内存配置文件:
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 :(得分:1)
你不需要额外的东西,你需要更少。为什么一次将所有推文加载到内存中?如果您一次只处理一条推文,则可以处理数TB的数据,其内存少于您在底端智能手机中找到的数据。
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)
或类似的东西。我没有费心关闭你的文件句柄,但你应该。您可以进行各种调整和调整,但重点是:当您一次分析一条推文时,没有理由炸毁您的记忆。