Добрый день!
Есть два больших numpy array (сотни тысяч сток, сотни тысяч столбцов), нужно посчитать сумму значений в каждом столбце у каждого списка, посчитать формулу, записать результаты.
Пробовал подход в лоб (сразу всё высчитывать) получил Killed: 9 и подумал, что проблема в памяти. Переписал чтобы поочереди высчитал сумму у каждого списка (чтобы потом их удалять и освобождать память) так он даже так выдаёт Killed: 9.
Вопросы:
1. Заметил что при подходе с записью в файлы память всё равно расходуется сильно (~2гб и расход увеличивается). Кто нибудь может объяснить на что?
2. Что за ошибка Killed: 9? Как её исправить?? Нашёл большое количество постов про неё, но только в отношении обновления на Yosemite.
def sum_and_write(token,count,path,tonal):
progress = progressbar.ProgressBar()
f = open(path+tonal+'.csv', 'a')
for i in progress(xrange(count)):
val=sum(token[:,i])
f.write(str(val)+'\n')
f.close()
def deltatfidf(data_text_score, path):
##Создаём корпусы негатива и позитива
print "Создание корпусов"
corpus_neg=[i.decode('utf-8') for i in data_text_score['text'][data_text_score['score']==0]]
corpus_pos=[i.decode('utf-8') for i in data_text_score['text'][data_text_score['score']==1]]
corpus_all=corpus_neg+corpus_pos
#Считаем веса
weight_pos=1
weight_neg=float(len(corpus_pos))/len(corpus_neg)
#Задаём параметры токенизации
vectorizer = CountVectorizer(ngram_range=(1,1), min_df=4)
#Фитим токенизатор на всём корпусе
print "Фитим модель"
model=vectorizer.fit(corpus_all)
#Записываем словарь в файл vocabulary.txt
vocabulary=model.vocabulary_.keys()
vocabulary.sort()
print "Пишем словарь"
f = open(path+'vocabulary.csv', 'a')
for i in progress(vocabulary):
f.write(str(i)+'\n')
f.close()
count=len(vocabulary)
print 'Кол-во ngramm - '+str(count)
#Размечаем позитив и записываем суммы DF терминов pos.txt
print "Токенизируем позитив"
token=model.transform(corpus_pos).toarray()
print "Суммируем и пишем в файл"
sum_and_write(token,count,path,"pos")
del token
#Размечаем негатив и записываем суммы DF терминов pos.txt
print "Токенизируем негатив"
token=model.transform(corpus_pos).toarray()
print "Суммируем и пишем в файл"
sum_and_write(token,count,path,"neg")
del token
#Загружаем все файлы
print "Загружаем результаты"
voc=pd.DataFrame(path+'vocabulary.csv', sep=';', columns=['data'])
pos=pd.DataFrame(path+'роs.csv', sep=';', columns=['data'])
neg=pd.DataFrame(path+'neg.csv', sep=';', columns=['data'])
print "Объединяем"
DATA=pd.DataFrame([voc['data'],pos['data'],neg['data']], column=['ngramm', 'pos', 'neg'])
#Счиатем дельту
print "Считаем дельту"
DATA['delta']=np.log2((float(1+DATA['pos'])*weight_pos)/(float(1+DATA['neg'])*weight_neg))
#Пишем результат
print "Выгружаем"
DATA.to_csv(path+'result.csv', sep=';')
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import numpy as np
import progressbar
progress = progressbar.ProgressBar()
data=pd.read_csv('/Python/reviews/clean_data/oper_data_BIG_ALL_binary.csv', sep=';')
data_txt=data[['contra','pro', 'text','score']]
text=data_txt[pd.isnull(data_txt['text'])==False]
del data, data_txt
deltatfidf(text,'/Python/reviews/clean_data/temp/')