我有一个长度为1442的列表。列表的每个元素都是一个列表,每个列表包含10个数据点。我必须计算每种可能的2个长组合的相关性,然后找到最相关的组。
import pandas as pd
import numpy as np
import datetime
import math
import itertools
import matplotlib.pyplot as plt
pd.set_option('display.max_rows', 50)
pd.set_option('display.max_columns', 50)
df_15m = pd.read_csv(r'.../USDT_BTC 15-Minute.csv')
df_15m.head()
df_15m['date'] = df_15m['date'].apply(lambda x:
datetime.datetime.fromtimestamp(x).strftime('%Y-%m-%d %H:%M:%S'))
df_15m['day'] = df_15m['date'].apply(lambda x:
datetime.datetime.strptime(x,'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d'))
df_15m.set_index('date',inplace=True)
df_15m.index = pd.to_datetime(df_15m.index)
del df_15m.index.name
t = [0]
for i in range(len(df_15m)-1):
p1 = df_15m.iloc[i+1]['weightedAverage']
p0 = df_15m.iloc[i]['weightedAverage']
t.append(math.log(p1/p0))
df_15m['BVOL15M_INDEX'] = t
by_day_vol =
pd.DataFrame(df_15m['BVOL15M_INDEX'].resample('H').std()*math.sqrt(24))
by_day_price = pd.DataFrame(df_15m['weightedAverage'].resample('H').mean())
res = pd.merge(by_day_price, by_day_vol, left_index=True, right_index=True)
#creating subsets with 10 data points
df_ = res[:-6]
n = 10
list_df = [df_['BVOL15M_INDEX'][i:i+n] for i in range(0, df_.shape[0], n)]
l = []
for subset in itertools.combinations(list_df, 2):
corrcoef = np.corrcoef(subset[0], subset[1])[1,0]
l.append(corrcoef)
l包含所有可能组合的相关性。我想创建一个矩阵,ixj位置包含list_df中对应组的相关性。对于最终结果,我应该能够对相关的期间进行分组。
有人可以帮助我,还是为我提供更简单的解决方案?
谢谢!
答案 0 :(得分:0)
这样的事情怎么办?
#lets have 3 lists:
list=[None]*3
list[0]=[1, 2, 3]
list[1]=[3, 4, 5]
list[2]=[5, 6, 7]
yourmat=np.matrix([list[x] for x in range(3)])
plt.imshow(yourmat, cmap='hot', interpolation='nearest')
plt.show()
这将产生输出:
当然,请用您的列表替换我的列表。上面的代码可以扩展到1442个列表(将3
中的range(3)
更改为您使用的列表)。
答案 1 :(得分:0)
好吧,我使用了另一种方法。解决方案是:
df = pd.DataFrame()
n = 1
for i in range(len(list_df)):
l = []
for j in range(n, len(list_df)):
corrcoef = np.corrcoef(list_df[i], list_df[j])[1][0]
if corrcoef > 0.7: #adjustable threshold
l.append(j)
df_ = pd.DataFrame(data=l, columns=[str(i)])
df = pd.concat([df,df_], axis=1)
n+=1
通过这种方式,我获得了包含相关子集索引的每一列的DataFrame。