我有一个包含马拉松比赛结果的数据帧,其中每一行代表一个跑步者,列包括诸如“开始时间”(timedelta)、“净时间”(timedelta)和地点(int)的数据。开始时间与净时间的散点图便于直观地识别比赛中不同的起跑栏(热):
我想分别分析每种热量,但我想不出如何把它们分开。大约有两万名赛跑者参加比赛。开始时间间隔不一致,给定畜栏中的跑步者数量也不一致
我用来组织数据的代码要点: https://gist.github.com/kellbot/1bab3ae83d7b80ee382a
CSV,大约有500个结果: https://github.com/kellbot/raceresults/blob/master/Full/B.csv
如果我理解正确的话,你在问一种方法,把Start Num值聚合成不同的heat。这是一个一维分类/聚类问题。在
一个快速的解决方案是使用许多Jenks自然中断脚本中的一个。我以前用过德雷达的版本:
https://gist.github.com/drewda/1299198
通过对地块的考察,我们知道这里有16座。所以你可以预先选择类的数量为16。在
从您的示例数据中,我们可以看到它做得很好,但是观察结果的稀疏性是否无法确定最小的起始Num bins之间的中断:
有很多方法可以做到这一点(包括用夏比的k-均值法),但简单的检查就可以清楚地看到,两次加热之间至少有60秒的间隔。所以我们需要做的就是对开始时间进行排序,找到60年代的间隙,每次我们找到一个间隙,就分配一个新的炉号。在
使用
diff
-compare-cumsum
模式可以轻松完成:它正确地选取了16个(明显的)组,这里用炉号着色:
相关问题 更多 >
编程相关推荐