Python 数据帧中分类变量的变化分析

Python 数据帧中分类变量的变化分析,python,pandas,algorithm,machine-learning,data-science,Python,Pandas,Algorithm,Machine Learning,Data Science,我有一个pivot数据框架,其中包含了许多旅行者在世界各地旅行的地区信息。 我的pivot df如下所示: Name Anna Robert James Date 2018-10-01 Bulgaria Spain Croatia 2018-10-02 Portugal NaN Portugal 2018-10-03

我有一个pivot数据框架,其中包含了许多旅行者在世界各地旅行的地区信息。 我的pivot df如下所示:

     Name           Anna         Robert        James
Date               
2018-10-01        Bulgaria       Spain         Croatia
2018-10-02        Portugal       NaN           Portugal  
2018-10-03        Spain          USA           Spain
2018-10-04        USA            USA           Spain
2018-10-05        USA            Canada        USA
共有100列(100名旅行者)和300天

基于这些数据,我如何探索哪些路线最受欢迎? 乍一看,他们都是从西班牙来到美国的。罗伯特也从西班牙飞往美国,但他的飞行持续了两天。三位游客中有两位是从葡萄牙来到西班牙的,所以这也是一条受欢迎的路线

是否有任何方法可以使用ML算法显示流行路线?我将非常感谢任何提示

编辑:
我们可以假设路由有2个节点,因此基于此df,西班牙USA是一种流行的路由

您可以做的最简单的事情是通过压缩每个用户列及其移位的自身来创建源-目标元组,然后将元组传递给计数器对象

import pandas as pd
from collections import Counter

df.fillna(method='ffill', inplace=True)

# Create a counter object and pass it the origin-destination tuples
counter = Counter()
for col in df.columns:
    routes = list(zip(df[col].shift(1, fill_value=df[col][0]), df[col]))
    routes = [(k, v) for k, v in routes if k != v]
    counter.update(routes)
counter.most_common(3)
输出:

counter.most_common(3)
Out[76]: 
[(('Spain', 'USA'), 3),
 (('Portugal', 'Spain'), 2),
 (('Bulgaria', 'Portugal'), 1)]

这回答了你的问题吗?我认为这个问题属于数据科学或统计堆栈交换,尽管它非常有趣。V.好奇地想看看你可以应用什么解决方案。如果你用符号替换每个国家的名称,你的问题实际上会变成寻找最常见的子字符串(你没有指定公共路由的长度限制或它们的连续性)。例如,您的数据变成:
S1:BPSUU
S2:SUUC
S3:CPSSU
。更多信息,请参考链接问题。考虑到编辑,此问题实际上不需要任何复杂的ML或非ML算法。正如问题的答案所表明的那样,只需沿路线进行蛮力搜索并存储结果加上最终计数即可得出答案。由于OP没有真正指定路线的含义,并且如果路线上存在任何长度或其他限制,我认为我们不能假设一条路线只包含两个节点。如果最受欢迎的路线是葡萄牙、西班牙、美国怎么办?这是一个公平的评论,事实上OP可能会修改他们的问题。然而,目前的问题讨论西班牙,美国,葡萄牙和西班牙作为热门路线。因此,我目前的回答是基于假设每条路线的长度是2。谢谢你的回答。我刚刚更新了OP,我们可以假设路由有2个节点。KRKirov,在将您的代码应用于原始df作为最受欢迎的路线后,我得到了相同国家的成对线路,例如美国-美国、葡萄牙-葡萄牙。你知道怎么摆脱它吗?总的来说,您的解决方案非常好!谢谢我编辑了答案,并在代码中添加了一个列表理解,只剩下具有不同来源和目的地的元组。