我有一个由零和一组成的 pandas 数据框。前 20 个试验称为块 1,接下来的 20 个试验称为块 2。每行表示一个试验,因此总共有 40 个试验。我想知道 5 个步骤的成对概率或转移概率。例如,前 5 个步骤中从 0 到 0、0 到 1、1 到 0 和 1 到 1 转变的概率是多少,以及它对所有块的变化如何?我想了解趋势如何从区块 1 变化到区块 2,但要进行试验。
我尝试过这个,但是我应该如何尝试一下:
df['response'] = [0,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,1.....]
sc = df['response'].tolist()
sc = [x for x in sc if not np.isnan(x)]
def transition_matrix(transitions):
n = 1 + int(max(transitions)) # Number of states
M = [[0] * n for _ in range(n)]
for (i, j) in zip(transitions, transitions[1:]):
M[int(i)][int(j)] += 1
for row in M:
s = sum(row)
if s > 0:
row[:] = [f / s for f in row]
return M
trial_ranges = [(0, 21), (21, 41), (41, 61), (61, 81)]
fig, axes = plt.subplots(1, len(trial_ranges), figsize=(16, 6))
for i, trial_range in enumerate(trial_ranges):
start, end = trial_range
sub_sc = sc[start:end]
transition_matrix_sub = transition_matrix(sub_sc)
sns.heatmap(transition_matrix_sub, annot=True, fmt=".2f", cmap="YlGnBu", ax=axes[i])
axes[i].set_xlabel('To State')
axes[i].set_ylabel('From State')
axes[i].set_title(f'Transition Probabilities (Trials {start}-{end})')
plt.tight_layout()
plt.show()
所以我现在更像是一名Java开发人员,我正在学习Python,但是当我进入大学攻读AA时,他们只开始了两个编程课程,即C和Java,但是,从我读到的内容来看,我会说你的方法很好,但是您可以进行一些修改和改进,例如数据一致性。看起来您的数据中有一个 NaN 值,然后您正在删除它们。您需要确保没有其他意外值或丢失数据。您还想定义转移概率的函数,因此您可以定义一个单独的函数来计算给定步骤数的转移概率,而不是直接创建转移矩阵,这将使代码更加模块化且更易于理解。您还可以创建单独的函数来绘制转换矩阵,以避免 重复代码。 您可以将您在循环中创建的函数用于不同的试验范围,并且您的试验范围也可能重叠。您需要确保每个范围都对应于一组独特的试验。再说一次,这只是我认为我可能是错的,但是,如果我可以帮助你,请告诉我!