我有一个稀疏的数据集,例如Amazon Review Data。我想计算所有列之间的PCC(皮尔逊相关系数),并将其保存以备后用。但是,获取结果很耗时。
例如,矩阵有大约80万列和30万行,但是对于每一列,只有两行或三行具有值,而其他行则为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天!