Кумулятивные уникальные слова в огромных данных - PullRequest
0 голосов
/ 08 апреля 2019

Как получить кумулятивные уникальные слова из столбца данных, в котором содержится более 500 слов. Фрейм данных имеет ~ 300 000 строк

Я прочитал файл csv в кадре данных со столбцом A, содержащим текстовые данные. Я попытался создать пару столбцов (B & C), пройдя по столбцу A и взяв уникальные слова из столбца A, как установлено, и добавив столбец B с уникальными словами и столбец C с количеством

Впоследствии я беру уникальные слова, беря столбец A и столбец B (объединение) из предыдущего ряда (набор)

Это работает для небольшого количества строк. Но как только число строк превысит 10000, производительность ухудшится, и ядро ​​в конечном итоге умрет

Есть ли лучший способ сделать это для огромного кадра данных?

Попытка создания отдельного фрейма данных только с уникальными словами и счетчиком, но все еще есть проблема

Пример кода:

for index, row in DF.iterrows():
      if index = 0:
          result = set(row['Column A'].lower().split()
          DF.at[index, 'Column B'] = result
      else:
          result = set(row['Column A'].lower().split()
          DF.at[index, 'Cloumn B'] = result.union(DF.loc[index -1, 
                                                'Column B'])
DF['Column C'] = DF['Column B'].apply(len)

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Использование уникальности словарных ключей для кумуляции слов.

Я создаю дикт cumulative_words, где хочу хранить уникальные слова построчно, обновляя его словарями, имеющими ключи, составленные из уникальных слов из заданного слова.предложение строки.

Код:

cumulative_words = {}

def cumulate(x):
    cumulative_words.update(dict.fromkeys(set(x.lower().split())))
    return list(cumulative_words.keys())

df["Column B"] = df["Column A"].apply(cumulate)
df["Column C"] = df["Column B"].apply(len)

Обновление:

Учитывая, что вы сказали, что этот код все еще имеет проблемы с памятью на ~ 200 тыс. Строк, яПопробую кое-что очень простое, чтобы понять немного больше:

  1. Просто обновите словарь совокупных значений

Создайте словарь с уникальными словами перед датафреймомоперации

cumulative_words = {}

for x in df["Column A"].values:
    cumulative_words.update(dict.fromkeys(set(x.lower().split())))

Если это все еще сломается, я думаю, что мы должны изменить метод

Добавление слов в список

Я думаю, что это критическая точка, потому что она создает список из примерно миллиардов слов

cumulative_words = {}
cumulative_column = []

for x in df["Column A"].values:
    cumulative_words.update(dict.fromkeys(set(x.lower().split())))
    cumulative_column.append(cumulative_words.keys())
Присвойте созданный список столбцу B и подсчитайте
df["Column B"] = cumulative_column
df["Column C"] = df["Column B"].apply(len)

Возможно, слишком много слов для хранения, и не может быть создан фрейм данных, или я нене знаю, как это сделать.Дайте мне знать

0 голосов
/ 08 апреля 2019

Вы можете использовать CountVectorizer и впоследствии сделать кумулятивную сумму.

Подробнее о CountVectorizer: https://scikit -learn.org / stable / modules / generate / sklearn.feature_extraction.text.CountVectorizer.html И совокупная сумма панд: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.cumsum.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...