Python中的一对多时间序列关联,具有非常高的维度

Python中的一对多时间序列关联,具有非常高的维度,python,pandas,correlation,cross-correlation,pearson-correlation,Python,Pandas,Correlation,Cross Correlation,Pearson Correlation,我的数据库包含一百万个输入到我网站搜索框中的独特术语 它目前包含两列:“搜索项”(用户请求)和“量”(给定月份对搜索项的请求数)。在过去的10年里,数据库被划分成每月一次的表。平均每月18辆。如果没有任何用户请求,某些搜索会丢失某些月份分区 我希望能够使用python分析任何单个术语,以快速识别其前n个最有意义的相关术语 由于它的大小,生成整个相关矩阵在内存和CPU方面是浪费的 在python中,哪种数据帧结构和函数最适合这种一对多比较?该功能是否需要执行任何去趋势化操作?您可以每月构建完整的相

我的数据库包含一百万个输入到我网站搜索框中的独特术语

它目前包含两列:“搜索项”(用户请求)和“量”(给定月份对搜索项的请求数)。在过去的10年里,数据库被划分成每月一次的表。平均每月18辆。如果没有任何用户请求,某些搜索会丢失某些月份分区

我希望能够使用python分析任何单个术语,以快速识别其前n个最有意义的相关术语

由于它的大小,生成整个相关矩阵在内存和CPU方面是浪费的


在python中,哪种数据帧结构和函数最适合这种一对多比较?该功能是否需要执行任何去趋势化操作?

您可以每月构建完整的相关性矩阵,也可以不构建完整的相关性矩阵,但只采用少数对所有方法获取有趣的术语列表。这样,您就可以将统计数据保存到文件中

如果您选择按需获取一对所有的相关性,那么您至少可以构建一个数据帧,通过在每次计算一个项的相关性时存储结果来作为缓存

为了计算一项与所有其他项的相关性,可以使用:

假设您拥有以下df:

import string

terms_list = [''.join((a, b, c))
            for a in string.ascii_lowercase[:25]
            for b in string.ascii_lowercase[:20]
            for c in string.ascii_lowercase[:20]]
np.random.seed(1)
df = pd.Series(
    np.random.choice(list(np.arange(10, 26)) + [np.nan], int(120e4)),
    index = pd.MultiIndex.from_product([terms_list, range(120)],
        names=['term', 'month'])
    )
df = df.dropna().unstack()
pivot_term = terms_list[0]
打印(df)

代码

t1 = time()
max_periods = 120
df = df.iloc[:, -max_periods:]
### get correlations
corr = df.drop(pivot_term, axis=0).corrwith(df.loc[pivot_term], axis=1)
t1 = time() - t1
print(corr)
print(t1)
输出

term
aab    0.045972
aac    0.064941
aad   -0.057009
aae   -0.187645
aaf   -0.075473
         ...
ytp    0.103756
ytq   -0.054769
ytr   -0.115004
yts    0.123223
ytt    0.230628
Length: 9999, dtype: float64
9.76
从这里,您可以使用
corr.nlargest
corr.nsmalest
筛选感兴趣的术语

PS


您可能还想研究一种较小的数据类型,它仍然适合每月的最大容量。

您好,我的答案有帮助吗?非常感谢您提供了这个非常周到的答案。
term
aab    0.045972
aac    0.064941
aad   -0.057009
aae   -0.187645
aaf   -0.075473
         ...
ytp    0.103756
ytq   -0.054769
ytr   -0.115004
yts    0.123223
ytt    0.230628
Length: 9999, dtype: float64
9.76