使用Santiment sanpy库进行加密货币数据分析时出错



我正在使用sanpy收集加密货币市场数据,使用统计模型计算alpha、beta和rsquared,然后使用while循环创建crypto=input("加密货币:"(函数,该函数允许我向用户询问特定的加密货币并输出其各自的统计数据,然后再次显示输入。

使用以下代码,我收到错误:ValueError:如果使用所有标量值,则必须传递索引

import san
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import datetime
import statsmodels.api as sm
from statsmodels import regression
cryptos = ["bitcoin", "ethereum", "ripple", "bitcoin-cash", "tether",
"bitcoin-sv", "litecoin", "binance-coin", "eos", "chainlink",
"monero", "bitcoin-gold"]
def get_and_process_data(c):
raw_data = san.get("daily_closing_price_usd/" + c, from_date="2014-12-31", to_date="2019-12-31", interval="1d") # "query/slug"
return raw_data.pct_change()[1:]

df = pd.DataFrame({c: get_and_process_data(c) for c in cryptos})
df['MKT Return'] = df.mean(axis=1) # avg market return
#print(df) # show dataframe with all data
def model(x, y):
# Calculate r-squared
X = sm.add_constant(x) # artificially add intercept to x, as advised in the docs
model = sm.OLS(y,X).fit()
rsquared = model.rsquared

# Fit linear regression and calculate alpha and beta
X = sm.add_constant(x)
model = regression.linear_model.OLS(y,X).fit()
alpha = model.params[0]
beta = model.params[1]
return rsquared, alpha, beta
results = pd.DataFrame({c: model(df[df[c].notnull()]['MKT Return'], df[df[c].notnull()][c]) for c in cryptos}).transpose()
results.columns = ['rsquared', 'alpha', 'beta']
print(results)

错误在以下行:

df = pd.DataFrame({c: get_and_process_data(c) for c in cryptos})

我试着把它改成:来解决这个问题

df = {c: get_and_process_data(c) for c in cryptos}
df['MKT Return'] = df.mean(axis=1) # avg market return
print(df) # show dataframe with all data

但是,它给了我一个不同的错误:AttributeError:"dict"对象没有属性"mean"。

目标是创建一个带有datatime列的DataFrame,为crypts及其pct.change数据创建列,为MKT Return创建一个额外列,从所有crypts的pct.change中获得每日平均值。然后,使用所有这些数据计算每个crypto的统计数据,并最终创建开头提到的输入函数。

我希望我把自己说清楚了,希望有人能在这件事上帮助我。

这是一个很好的开始,但我认为您对san的返回感到困惑。如果你看看

import san
import pandas as pd
# List of data we are interested in    
cryptos = ["bitcoin", "ethereum", "ripple", "bitcoin-cash", "tether",
"bitcoin-sv", "litecoin", "binance-coin", "eos", "chainlink",
"monero", "bitcoin-gold"]
# function to get the data from san into a dataframe and turn in into
# a daily percentage change
def get_and_process_data(c):
raw_data = san.get("daily_closing_price_usd/" + c, from_date="2014-12-31", to_date="2019-12-31", interval="1d") # "query/slug"
return raw_data.pct_change()[1:]
# now set up an empty dataframe to get all the data put into
df = pd.DataFrame()
# cycle through your list
for c in cryptos:
# get the data as percentage changes
dftemp = get_and_process_data(c)
# then add it to the output dataframe df
df[c] = dftemp['value']
# have a look at what you have
print(df)

从那时起,你就知道你有一些好的数据,你可以在前进的过程中利用这些数据。

如果我可以建议你只使用一种货币,并使用该货币进行回归,然后继续循环使用所有货币。

如果要传递标量值,需要传递列表,请尝试以下操作:

data = {c: [get_and_process_data(c)] for c in cryptos}
df = pd.DataFrame(data)

也许试试第一个

相关内容

  • 没有找到相关文章

最新更新