这段代码主要用于计算游戏中 PVP 和 PVE 两种模式下用户的平均日胜率,并将结果可视化展示出来。

首先定义了一个函数 help_cal(a, b),用来计算两个数相除的结果。如果除数 b > 0,则返回 a / b,否则返回 0。

def help_cal(a, b):
    if b > 0:
        return a / b
    else:
        return 0

然后使用 apply() 函数对数据框 df'pvp_win_count''pvp_battle_count' 两列进行逐行计算,得出每个用户在 PVP 模式下的胜率;对 'pve_win_count''pve_battle_count' 两列进行逐行计算,得出每个用户在 PVE 模式下的胜率。将结果保存到 df 的新列 'pvp_win_ratio''pve_win_ratio' 中。

# 图5 用户胜率
df['pvp_win_ratio'] = df.apply(lambda x: help_cal(x['pvp_win_count'], x['pvp_battle_count']), axis=1)
df['pve_win_ratio'] = df.apply(lambda x: help_cal(x['pve_win_count'], x['pve_battle_count']), axis=1)
print(df)

接下来,使用 resample() 函数对 df 进行按日重采样,计算出每天所有用户的 PVP 和 PVE 胜率之和,并保存到 d5_1d5_2 中。

d5_1 = df.resample('D').sum()['pvp_win_ratio']
d5_2 = df.resample('D').sum()['pve_win_ratio']
# PVP用户平均日胜率
print(d5_1)
# PVE用户平均日胜率
print(d5_1)

然后将每天的日期保存到列表 l1 中,将 PVP 和 PVE 的胜率数据保存到列表 l2_1l2_2 中。使用 Bar() 函数创建柱状图 bar,分别将日期和 PVP、PVE 胜率数据添加到图表中,并进行一些美化设置,最后将图表保存到本地文件 '图5 用户平均日胜率2.html' 中。

l1 = []
for d in d5_1.index:
    l1.append(d)

l2_1 = d5_1.to_list()
l2_2 = d5_2.to_list()
bar = (
    Bar()
    .add_xaxis(l1)
    .add_yaxis('PVP胜率', [round(x / df.shape[0], 3) for x in l2_1])
    .add_yaxis('PVE胜率', [round(x / df.shape[0], 3) for x in l2_2])
    .set_global_opts(title_opts=opts.TitleOpts(title='用户平均日胜率'),
                     toolbox_opts=opts.BrushOpts(), )
    .render('图5 用户平均日胜率2.html')
)

最后,使用 print() 函数分别输出 PVP 和 PVE 的平均日胜率。

Python 代码解析:计算游戏用户平均日胜率并可视化展示

原文地址: https://www.cveoy.top/t/topic/oHbB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录