某游戏客户流失情况数据分析

本篇文章将带大家学习简单的数据分析,关于pyecharts和pandas部分知识自行学习。

拿到数据,我们先在脑子里想想,我们手中的数据能够分析什么,能够通过可视化能够更直观的反应出什么,我们先来看数据。

a7547cea9ecb45bb949be1f04dac2350.png

1. 分析各个结点的通过人数以及离开人数

        在这里我们可以先用柱状图分析在每个结点的通过人数和离开人数,能够直观的看出哪个结点通过的人少离开的人最多,更直观的看出断层。

最简单的柱状图,添加x轴数据和y轴数据即可。

bar = (
            Bar(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS, width='750px', height='570px')
            )
            .add_xaxis(self.df['node'].tolist())
            .add_yaxis('passnum', self.df['passnum'].tolist())
            .add_yaxis('leavenum', self.df['leavings'].tolist())
        )
        bar.render('GameaNalysis.html')

由此可见一个简单的可视化图形就出来啦33205a58cd084e77a845e61f15c9343c.png

接着我们开始对其添加各种参数进行调整,最终如下。

bar = (
            Bar(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS, width='1400px', height='600px')
            )
            .add_xaxis(self.df['node'].tolist())
            .add_yaxis('passnum', self.df['passnum'].tolist())
            .add_yaxis('leavenum', self.df['leavings'].tolist())
            .set_global_opts(title_opts=opts.TitleOpts(title='基本情况分析'),
                             xaxis_opts=opts.AxisOpts(axispointer_opts=opts.AxisPointerOpts(is_show=True, type_='shadow')   # x轴引导线
                                                      ),
                             yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True),  # 背景分割线
                                                      axistick_opts=opts.AxisTickOpts(is_show=True)   # y轴刻度线
                                                      ),
                             datazoom_opts=opts.DataZoomOpts(is_show=True)
                             )
        )
        bar.render('GameaNalysis.html')

根据可视化的图形我们能够看出,在新手引导1此处,用户流失的的数量相对于其他结点所流失的跟多,游戏厂商更应该考虑新手引导环节的玩家体验或是此处的复杂度和困难度情况。

4f9ff38795ae40ff8b9c26eebc66311b.png

 2. 分析次日的留存人数

        次日留存人数的理解应该是第二日某些玩家还在此结点处停留的数量情况。

这里我们可以使用饼图,漏斗图此类的图形,更能直观的反映出情况(漏斗图真的丑),除了任务三即将通关之外,其余的留存人数我们都取下来。

adae28537a4440feaabd53eb97ad7bda.png

 完成,感觉还能够再优化下所展示的数值,更方便我们看到。

pie = (
            Pie(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS, width='1400px', height='600px')
                )
                .add('数量', [list(mtype) for mtype in zip(self.df['node'].tolist(), self.df['savethenextday'].tolist()[0: -1])],
                     radius=['40%', '70%'],  # 掏空部分
                     center=['50%', '56%'],  # 饼图位置
                     )
            .set_global_opts(title_opts=opts.TitleOpts(title='次日留存人数'),
                             legend_opts=opts.LegendOpts(type_="scroll", pos_right='10%', pos_top='15%', orient="vertical")
                             )
            .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}: {d}% \n数量:{c}')
                             )
        )
        return pie

3.  相对通过率,绝对通过率,留存率分析

        最后到我们的相对通过率,绝对通过率,留存率此类数据的分析,这部分的数据可以用面积折线图以及雷达图等。个人绝对面积折线图更能直观的看出变化。

line = (
            Line(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS, width='1400px', height='630px')
                 )
                .add_xaxis(self.df['node'].tolist())
                .add_yaxis('相对通过率',
                           self.df['relativepassrate'].tolist(),
                           is_smooth=True,
                           is_symbol_show=True,  # 是否显示结点  关闭后LabelOpts无效
                           areastyle_opts=opts.AreaStyleOpts(opacity=0.6),  # 透明度
                           label_opts=opts.LabelOpts(is_show=True)  # 是否显示数字
                           )
                .add_yaxis('绝对通过率',
                           self.df['absolutepassrate'].tolist(),
                           is_smooth=True,
                           is_symbol_show=True,  # 是否显示结点  关闭后LabelOpts无效
                           areastyle_opts=opts.AreaStyleOpts(opacity=0.6),  # 透明度
                           label_opts=opts.LabelOpts(is_show=True)  # 是否显示数字
                           )
                .add_yaxis('留存率',
                           self.df['retentionrate'].tolist(),
                           is_smooth=True,
                           is_symbol_show=True,  # 是否显示结点  关闭后LabelOpts无效
                           areastyle_opts=opts.AreaStyleOpts(opacity=0.6),  # 透明度
                           label_opts=opts.LabelOpts(is_show=True)  # 是否显示数字
                           )
                .set_global_opts(yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=True),
                                                          splitline_opts=opts.SplitLineOpts(is_show=True),
                                                          max_=1.2
                                                          ),
                                 xaxis_opts=opts.AxisOpts(axispointer_opts=opts.AxisPointerOpts(is_show=True),
                                                          axislabel_opts={'rotate': '30'},
                                                          ),
                                 title_opts=opts.TitleOpts(title='各比例情况分析', subtitle='最终数据=数值×100%'),
                                 legend_opts=opts.LegendOpts(pos_left='40%')
                                 )
        )
        return line

效果如下

ec5ed021264048ddbeea138368726723.png

79114a7e96834893a59112ba6f314d4c.png 

 通过可视化分析我们可以清晰的看出在不同结点的玩家人数情况,在新手引导1处次日留存人数以及离开的人数都相对较高,我们通过面积折线图也能够看出新手引导1到新手引导2之间的坡度较陡。游戏厂商更应该考虑此处的设计情况,是否游戏难度相对于其他结点较高?此处是否给玩家的体验感最差?等等等等。

最后是整体的代码

import pandas as pd
from pyecharts.charts import Bar, Pie, Radar, Line
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Grid, Page


class analyze:
    def __init__(self):
        self.df = pd.read_excel('./gameimg.xlsx')

    def Bar(self):
        bar = (
            Bar(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS, width='1400px', height='650px')
            )
            .add_xaxis(self.df['node'].tolist())
            .add_yaxis('passnum', self.df['passnum'].tolist())
            .add_yaxis('leavenum', self.df['leavings'].tolist())
            .set_global_opts(title_opts=opts.TitleOpts(title='基本情况分析'),
                             xaxis_opts=opts.AxisOpts(axispointer_opts=opts.AxisPointerOpts(is_show=True, type_='shadow')   # x轴引导线
                                                      ),
                             yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True),  # 背景分割线
                                                      axistick_opts=opts.AxisTickOpts(is_show=True)   # y轴刻度线
                                                      ),
                             datazoom_opts=opts.DataZoomOpts(is_show=True)
                             )
        )
        return bar

    def Pie(self):
        pie = (
            Pie(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS, width='1400px', height='600px')
                )
                .add('数量', [list(mtype) for mtype in zip(self.df['node'].tolist(), self.df['savethenextday'].tolist()[0: -1])],
                     radius=['40%', '70%'],  # 掏空部分
                     center=['50%', '56%'],  # 饼图位置
                     )
            .set_global_opts(title_opts=opts.TitleOpts(title='次日留存人数'),
                             legend_opts=opts.LegendOpts(type_="scroll", pos_right='10%', pos_top='15%', orient="vertical")
                             )
            .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}: {d}% \n数量:{c}')
                             )
        )
        return pie

    def Line(self):
        line = (
            Line(init_opts=opts.InitOpts(theme=ThemeType.WESTEROS, width='1400px', height='630px')
                 )
                .add_xaxis(self.df['node'].tolist())
                .add_yaxis('相对通过率',
                           self.df['relativepassrate'].tolist(),
                           is_smooth=True,
                           is_symbol_show=True,  # 是否显示结点  关闭后LabelOpts无效
                           areastyle_opts=opts.AreaStyleOpts(opacity=0.6),  # 透明度
                           label_opts=opts.LabelOpts(is_show=True)  # 是否显示数字
                           )
                .add_yaxis('绝对通过率',
                           self.df['absolutepassrate'].tolist(),
                           is_smooth=True,
                           is_symbol_show=True,  # 是否显示结点  关闭后LabelOpts无效
                           areastyle_opts=opts.AreaStyleOpts(opacity=0.6),  # 透明度
                           label_opts=opts.LabelOpts(is_show=True)  # 是否显示数字
                           )
                .add_yaxis('留存率',
                           self.df['retentionrate'].tolist(),
                           is_smooth=True,
                           is_symbol_show=True,  # 是否显示结点  关闭后LabelOpts无效
                           areastyle_opts=opts.AreaStyleOpts(opacity=0.6),  # 透明度
                           label_opts=opts.LabelOpts(is_show=True)  # 是否显示数字
                           )
                .set_global_opts(yaxis_opts=opts.AxisOpts(axistick_opts=opts.AxisTickOpts(is_show=True),
                                                          splitline_opts=opts.SplitLineOpts(is_show=True),
                                                          max_=1.2
                                                          ),
                                 xaxis_opts=opts.AxisOpts(axispointer_opts=opts.AxisPointerOpts(is_show=True),
                                                          axislabel_opts={'rotate': '30'},
                                                          ),
                                 title_opts=opts.TitleOpts(title='各比例情况分析', subtitle='最终数据=数值×100%'),
                                 legend_opts=opts.LegendOpts(pos_left='40%')
                                 )
        )
        return line

    def main(self):
        Bar = analyze().Bar()
        Pie = analyze().Pie()
        Line = analyze().Line()
        page = Page(layout=Page.SimplePageLayout)
        page.add(Bar)
        page.add(Pie)
        page.add(Line)
        page.render('GameaNalysis.html')
        print('Successfully generated visualization chart!')

if __name__ == '__main__':
    analyze().main()

歇逼了

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 游戏用户流失预测可以通过数据分析和机器学习模型来实现。以下是一个大致的描述: 首先,我们需要收集游戏用户的相关数据,包括但不限于用户的游戏时间、游戏等级、支付情况、社交活动等。这些数据可以从游戏服务器或者其他数据源中获取。 然后,我们可以使用Python中的数据分析库(如pandas)来对数据进行处理和清洗。这包括删除重复数据、处理缺失值、处理异常值等。清洗完的数据可以更好地用于后续的分析和建模。 接下来,我们可以使用Python中的数据可视化库(如matplotlib、seaborn)来对数据进行可视化。通过绘制用户属性(如等级、游戏时间)与用户流失之间的关系图,我们可以对数据有一个更直观的了解。 在数据分析的基础上,我们可以使用Python中的机器学习库(如scikit-learn)来训练流失预测模型。可以使用常见的机器学习算法,如逻辑回归、随机森林等。在训练模型之前,我们需要将数据集划分为训练集和测试集,以便对模型的性能进行评估。 最后,使用训练好的模型对新的用户数据进行预测。根据用户的属性信息,模型可以预测该用户是否有可能流失。根据预测结果,游戏开发者可以制定相应的用户留存策略,以降低用户流失率。 总之,Python在数据处理、数据分析和机器学习等方面有着强大的库支持,可以帮助我们实现游戏用户流失的预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值