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

本篇文章将带大家学习简单的数据分析,关于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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值