Фон
Я получил редкий набор данных, например Данные обзора 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 ДНЕЙ !