Как сделать разреженную матрицу в Python из фрейма данных с именами столбцов в виде строки - PullRequest
0 голосов
/ 12 марта 2019

Мне нужно преобразовать фрейм данных в разреженную матрицу. Фрейм данных выглядит примерно так: (Фактические данные слишком велики (около 500 000 строк и 1000 столбцов)).

Dataframe

Мне нужно преобразовать его в матрицу, чтобы строки матрицы были «id», а столбцы - «name» и отображали только конечные значения. Не следует отображать nans (чтобы уменьшить использование памяти). И когда я попытался использовать pd.pivot_table , создание матрицы для моих больших данных заняло много времени.

В R для этой цели существует метод dMcast. Я исследовал, но не смог найти альтернативу этому в Python. Я новичок в питоне.

1 Ответ

0 голосов
/ 12 марта 2019

Сначала я преобразую столбец категориальных имен в индексы.Может быть, у панд уже есть эта функциональность?

names = list('PQRSPSS')
name_ids_map = {n:i for i, n in enumerate(set(names))}
name_ids = [name_ids_map[n] for n in names]

Тогда я бы использовал scipy.sparse.coo, а затем, возможно, преобразовал бы это в другой разреженный формат.

ids = [1, 1, 1, 1, 2, 2, 3]
rating = [2, 4, 1, 4, 2, 2, 1]
sp = scipy.sparse.coo_matrix((rating, (ids, name_ids))
print(sp)
sp.tocsc()

Я не знаю о разреженной матрицебиблиотека, которая может индексировать измерение с категориальными данными, такими как 'R', 'S" etc

...