我正在使用一种加密货币数据样本,每个单元格都包含一个字典。该词典包含开盘价,收盘价,最高价,最低价,数量和市值。列是对应的日期,索引是每种加密货币的名称。
我不知道如何准备数据,以便让我找到不同货币之间以及最高价格和数量之间的关联。如何在python(pandas)中完成此操作...在这种情况下如何定义日期范围?
这里是数据样本,我的编码和数据打印输出的链接(访问对公众开放):https://drive.google.com/open?id=1mjgq0lEf46OmF4zK8sboXylleNs0zx7I
答案 0 :(得分:0)
首先,我建议您重新排列数据,以使每种货币的OHLCV值都是它们自己的列(例如“ btc_open | btc_high”等)。这使得生成相关矩阵要容易得多。我还建议您在分析中仅从一个指标(例如收盘价)开始,也许要从周期变动(例如收盘开盘)开始。要回答您的问题:
熊猫可以使用以下命令返回所有列的相关矩阵:
df.corr()
如果只想使用特定的列,请从DataFrame中选择那些列:
df[["col1", "col2"]].corr()
您可以使用以下格式返回两列之间的单个相关值:
df["col1"].corr(df["col2"])
如果您要指定特定的日期范围,请参考此question。我相信这将要求您的日期列或索引的类型为datetime。如果您不知道如何使用或转换为这种类型,建议您查阅熊猫文档(也许以pandas.to_datetime开头)。
将来,我建议在您的帖子中包含一个数据片段。我认为Google云端硬盘不是共享数据的合适形式,并且绝对不适合将数据设置为“请求访问权限”。
编辑:我检查了您的数据并创建了一个较小的子集来测试此方法。如果数据不完善,您可能会发现问题,但是当我在您的前100天和10个硬币的样本中进行测试时,我没有遇到任何问题(转置后,df.iloc [:100,:10]。
首先,转置DataFrame,以便按硬币组织列,而按日期组织行。
df = df.T
在此之后,我们将连接到一个新的DataFrame(结果)。或者,连接到原始列,然后将其放在后面。不幸的是,我无法想到一种非迭代方法。此方法逐列进行,为每个硬币创建一个DataFrame,将硬币名称前缀添加到列名称,然后将每个DataFrame连接到末尾。
result = pd.DataFrame()
coins = df.columns.tolist()
for coin in coins:
coin_data = df[coin]
split_coin = coin_data.apply(pd.Series).add_prefix(coin+"_")
result = pd.concat([result, split_coin], axis=1)