Какой самый быстрый способ рассчитать коэффициент Пирсона между всеми столбцами в большой и разреженной матрице? - PullRequest
1 голос
/ 02 апреля 2019

Фон

Я получил редкий набор данных, например Данные обзора Amazon .Я хотел бы рассчитать PCC (коэффициент корреляции Пирсона) между всеми столбцами и сохранить его для последующего повторного использования.Однако получение результата занимает много времени.

Например, матрица имеет приблизительные столбцы 800k и строки 300k, но для каждого столбца значения имеют только две или три строки, в то время как другие равны 0 (пропущенное значение)).

Можно ли получить матрицу PCC в течение разумного периода времени?

Что я пробовал

Я использую Python чтобы сделать эту работу.Методы, которые я попробовал, включают:

import pandas as pd

# Gets the sparse DataFrame
dfs = pd.DataFrame(...)

# dfs.shape is (300k, 800k)

pcc = dfs.corr()

# save pcc

2.

# Transfers `dfs` to dense DataFrame dfd
# Format: (column_id, row_id, value)

vals = dfd.values
col_ids = np.unique(vals[:, 0]).tolist()

# Get all of the combinations between column indices.
# However, It takes about 2 BILLION iterations.
for i, j in combinations(col_ids, 2):
    # Get matrix of col_id equals `i` and `j`
    i_val = vals[vals[:, 0] == i]
    j_val = vals[vals[:, 0] == j]

    # Calc PCC of `i_val` and `j_val`
    pcc = pcc(i_val, j_val)
# Save all `pcc` into a matrix

В Python я использовал один процесс и один поток для симуляциивыполнить for loop как:

import progressbar
import time

total = 2000000000
for i in progressbar.progressbar(range(total)):
    time.sleep(0.005) # The actual time is much larger than 0.005s

Это будет стоить около 200 ДНЕЙ ...

Какие-нибудь решения?

Поэтому не могли бы выпомочь мне решить эту проблему или дать мне другой взгляд на это?

Спасибо за 200 ДНЕЙ !

...