Я новичок в 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, чтобы найти статистику следующего перехода.
- Проблема в том, что функция nextStep работает только с двумя
аргументов а не три.
- Тогда я не знаю, как я могу динамически создавать списки и подсписки, чтобы сохранить эту древовидную структуру (а. Переходы с листьев с
их б. соответствующая статистика).
- Я думаю, что проблема не может быть решена с помощью циклов for, поскольку она больше напоминает мне рекурсивные проблемы.
Не могли бы вы помочь мне разобраться с этими тремя недостающими частями?
Я хотел бы заранее поблагодарить вас за ваш ответ.
С уважением
Alex
P.S Я постарался написать этот пост как можно лучше
P.S2 Я «ожидал», что у питона уже есть такая библиотека для построения статистических деревьев, а также для ее использования для вывода.