首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >画出一起玩的时间百分比

画出一起玩的时间百分比
EN

Stack Overflow用户
提问于 2017-12-07 03:54:46
回答 1查看 54关注 0票数 1

我希望有人能给我一个想法或解决方案,我有以下问题。我一直在试图找出一个球员在start timeend timeperiod的基础上玩的百分比(或者其他我没提过的统计数据)。我可以将每个玩家的duration相加在一个枢轴表中,以查看玩家的完整冰点时间,但对于我的生命,我似乎无法理解另一个人。无论是在R、Excel还是python脚本中,我都已经用光了我的想法。我知道这不是一个直接的脚本问题,但我想不出一个更好的地方来提出这个问题。我可以清楚地看到,在示例1中,Suter和Dumba在我提供的数据片段中一起玩了两次。但是在一个图表上绘制这个图或者仅仅找到这个百分比是我想要得到的任何想法。下面是我如何访问OnIce数据的两个例子。

示例1.在周期/游戏结束时,我可以获得先前的行移位数据。播放器的LastName将在整个df中多次出现。

代码语言:javascript
复制
    LastName  StartTime  EndTime  Duration ShiftNumber Period
    Foligno      0:00       0:40    0:40           1    1
    Suter        0:00       0:40    0:40           1    1
    Staal        0:00       0:40    0:40           1    1
    Niederreiter 0:00       0:40    0:40           1    1
    Dubnyk       0:00       20:00   20:00          1    1
    Dumba        0:00       0:40    0:40           1    1
    Zucker       0:40       1:26    0:46           1    1
    Koivu        0:40       1:34    0:54           1    1
    Murphy       0:40       1:26    0:46           1    1
    Brodin       0:40       1:26    0:46           1    1
    Granlund     0:40       1:39    0:59           1    1
    Reilly       1:26       2:09    0:43           1    1
    Winnik       1:26       2:18    0:52           1    1
    Coyle        1:34       2:16    0:42           1    1
    Stewart      1:39       2:13    0:34           1    1
    Dumba        2:09       2:39    0:30           2    1
    Suter        2:09       2:39    0:30           2    1

示例2.我可以每隔几秒钟运行一个脚本,同时将哪个玩家的id保存到csv中。

代码语言:javascript
复制
HomePlayerId HomeDuration
8475744        94
8471702        74
8477944        69
8475163        74
8474651        623
8477043        74
HomePlayerId HomeDuration
8475744        111
8471702        91
8477944        86
8475163        91
8474651        640
8477043        91
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-07 08:28:59

下面的简单Python代码计算每对播放器的总重叠时间。其核心思想是,给定一个(start1,end1)间隔用于player1,(start2,end2)用于player2,则这两个间隔的重叠是

代码语言:javascript
复制
overlap = min(end1, end2) - max(start1, start2)

如果overlap <= 0,则这些间隔不存在重叠。我们需要对每一对玩家的每一对间隔进行计算。

代码语言:javascript
复制
from itertools import combinations, product

#LastName   StartTime  EndTime  Duration ShiftNumber Period
data = '''\
Foligno       0:00      0:40    0:40           1    1
Suter         0:00      0:40    0:40           1    1
Staal         0:00      0:40    0:40           1    1
Niederreiter  0:00      0:40    0:40           1    1
Dubnyk        0:00      20:00   20:00          1    1
Dumba         0:00      0:40    0:40           1    1
Zucker        0:40      1:26    0:46           1    1
Koivu         0:40      1:34    0:54           1    1
Murphy        0:40      1:26    0:46           1    1
Brodin        0:40      1:26    0:46           1    1
Granlund      0:40      1:39    0:59           1    1
Reilly        1:26      2:09    0:43           1    1
Winnik        1:26      2:18    0:52           1    1
Coyle         1:34      2:16    0:42           1    1
Stewart       1:39      2:13    0:34           1    1
Dumba         2:09      2:39    0:30           2    1
Suter         2:09      2:39    0:30           2    1
'''.splitlines()

def to_secs(ms):
    ''' Convert a mm:ss string to seconds '''
    m, s = map(int, ms.split(':'))
    return 60 * m + s

# Store a list of (start, end) times for each player
players = {}
for row in data:
    name, start, end = row.split(None, 3)[:3]
    times = to_secs(start), to_secs(end)
    players.setdefault(name, []).append(times)

for t in players.items():
    print(t)
print()

# Determine the amount of overlapping time for each pair of players
for p1, p2 in combinations(sorted(players), 2):
    total = 0
    # Check each pair of times for this pair of players
    for t1, t2 in product(players[p1], players[p2]):
        # Compute the overlap in this pair of times and
        # add it to the total for this pair of players
        start, end = zip(t1, t2)
        total += max(0, min(end) - max(start))
    if total:
        print(p1, p2, total)

输出

代码语言:javascript
复制
('Foligno', [(0, 40)])
('Suter', [(0, 40), (129, 159)])
('Staal', [(0, 40)])
('Niederreiter', [(0, 40)])
('Dubnyk', [(0, 1200)])
('Dumba', [(0, 40), (129, 159)])
('Zucker', [(40, 86)])
('Koivu', [(40, 94)])
('Murphy', [(40, 86)])
('Brodin', [(40, 86)])
('Granlund', [(40, 99)])
('Reilly', [(86, 129)])
('Winnik', [(86, 138)])
('Coyle', [(94, 136)])
('Stewart', [(99, 133)])

Brodin Dubnyk 46
Brodin Granlund 46
Brodin Koivu 46
Brodin Murphy 46
Brodin Zucker 46
Coyle Dubnyk 42
Coyle Dumba 7
Coyle Granlund 5
Coyle Reilly 35
Coyle Stewart 34
Coyle Suter 7
Coyle Winnik 42
Dubnyk Dumba 70
Dubnyk Foligno 40
Dubnyk Granlund 59
Dubnyk Koivu 54
Dubnyk Murphy 46
Dubnyk Niederreiter 40
Dubnyk Reilly 43
Dubnyk Staal 40
Dubnyk Stewart 34
Dubnyk Suter 70
Dubnyk Winnik 52
Dubnyk Zucker 46
Dumba Foligno 40
Dumba Niederreiter 40
Dumba Staal 40
Dumba Stewart 4
Dumba Suter 70
Dumba Winnik 9
Foligno Niederreiter 40
Foligno Staal 40
Foligno Suter 40
Granlund Koivu 54
Granlund Murphy 46
Granlund Reilly 13
Granlund Winnik 13
Granlund Zucker 46
Koivu Murphy 46
Koivu Reilly 8
Koivu Winnik 8
Koivu Zucker 46
Murphy Zucker 46
Niederreiter Staal 40
Niederreiter Suter 40
Reilly Stewart 30
Reilly Winnik 43
Staal Suter 40
Stewart Suter 4
Stewart Winnik 34
Suter Winnik 9
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47687333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档