Python,构建统计树。进行过渡和递归的结构

时间:2019-05-10 11:34:58

标签: python tree statistics

我是python的新手,我正在尝试基于某些过渡(数字用于表示过渡)来计算可能的过渡及其百分比(发生的频率)。

我已经在python中找到了许多用于可视化树木的代码和库,但是到目前为止,修剪树木以使其余的叶子还没有得到修复。

所以我已经开始自己编写代码,从小表开始作为数据集,也可以在本文中使用。

理想情况下,我希望输入类型可变。随着输入向量变大,将遍历更多的树。

因此,假设数据集名为smallData,输入向量的长度为2。输入表示所遍历的树的节点。

smallData=pd.DataFrame(np.array([[1,2,3,4,5],[4,5,6,7,8],[1,2,3,3,3],[1,2,2,3,3],[1,2,3,5,3]]),columns=range(0,5))
inputs=[1,2]

对于第一行[1,2,3,4,5]上方的表,意味着过渡1之后发生过渡2,然后发生过渡3,依此类推。此外,每个行行都对应于一个不同的用户,并且允许所有类型的过渡(保持相同的过渡状态或正在更改)

然后,我做了一个简单的函数,它基于输入返回下一次转换的统计信息。

def nextStep(inputs):
    i=len(inputs)
    # The statement below only works with input of length 2. How to make it work for different input lengths?
    subTable = smallData[(smallData[0]==inputs[0]) & (smallData[1]==inputs[1])]
    nextIndexes=subTable.loc[:,i+1].value_counts(normalize=True)
    return nextIndexes

然后将函数调用为:

step=nextStep(inputs)
print(step)

我得到的结果是,统计数据可以发生三个转变

Out[265]: 
3    0.50
5    0.25
4    0.25

现在我陷入了困境,对于这三个输出,我需要保存三个新列表以显示潜在的过渡。我目前是手动进行的:(

inputs1=inputs+[step.index.values[0]]
inputs2=inputs+[step.index.values[1]]
inputs3=inputs+[step.index.values[2]]

,然后针对这三个转换中的每一个,我再次要调用nextStep函数以查找下一个转换的统计信息。

  1. 问题是nextStep函数仅适用于两个 争论,而不是三个。
  2. 然后,我不知道如何动态创建列表和子列表来保持这种树状结构(a。 他们的b。相应的统计信息。)
  3. 我认为问题不能通过for循环解决,因为它使我更回想起递归类型的问题。

您能帮我弄清楚这三个缺失的部分吗?

在此先感谢您的答复。 问候 亚历克斯

P.S我尽力写这篇文章 P.S2我当时在“期待” python已经有了一个用于构建统计树并将其用于推理的库。

0 个答案:

没有答案