我正在使用scipy stats模块来计算线性回归。即
slope, intercept, r_value, p_value, std_err
= stats.linregress(data['cov_0.0075']['num'],data['cov_0.0075']['com'])
其中data
是一个字典,其中包含多个'cov_x'
个键,这些键对应于列'num'
和'com'
的数据框
我希望能够遍历此字典并对每个'cov_x'
进行线性回归。我不知道该怎么做。我试过了:
for i in data:
slope_+str(i), intercept+str(i), r_value+str(i),p_value+str(i),std_err+str(i)= stats.linregress(data[i]['num'],data[i]['com'])
基本上我想要len(x)slope_x值。
答案 0 :(得分:3)
您可以使用a list comprehension收集所有stats.linregress
返回值:
result = [stats.linregress(df['num'],df['com']) for key, df in data.items()]
result
是一个包含5元组的列表。要将每个5元组中的所有第一,第二,第三等元素收集到单独的列表中,请使用zip(*[...])
:
slopes, intercepts, r_values, p_values, stderrs = zip(*result)
答案 1 :(得分:0)
你应该能够做你想做的事,但有几点你应该注意。
首先,您无法将字符串添加到变量名称并以此方式存储。等号左边没有加号。如初。
但是,您应该能够完成您尝试做的事情。如果您想要字符串索引,请确保使用dict
数据类型。
import scipy.stats as stats
import pandas as pd
import numpy as np
data = {}
l = ['cov_0.0075','cov_0.005']
for i in l:
x = np.random.random(100)
y = np.random.random(100)+15
d = {'num':x,'com':y}
df = pd.DataFrame(data=d)
data[i] = df
slope = {}
intercept = {}
r_value = {}
p_value = {}
std_error = {}
for i in data:
slope[str(i)], \
intercept[str(i)], \
r_value[str(i)],\
p_value[str(i)], std_error[str(i)]= stats.linregress(data[i]['num'],data[i]['com'])
print(slope,intercept,r_value,p_value,std_error)
应该工作得很好。否则,您可以存储单个值并稍后将它们放入列表中。