美文网首页
利用百度Echart【scatter】进行数据分析

利用百度Echart【scatter】进行数据分析

作者: purewater2014 | 来源:发表于2018-09-13 18:54 被阅读110次
    最近在做一个投票活动,由于活动参与量较大,部分淘宝商家已经做起了刷票生意【据说生意还很不错~~】。所以防刷是很重要的一部分。

    之前已经在技术层面已经做好了防刷,但人工刷票,确实防不胜防啊!
    今天呢,从数据分析的角度,通过投票记录,来筛选异常投票情况,从而找出刷票教练。

    思路整理:
    1.计算每小时(可细化到每分钟),每个教练的得票数;
    2.利用Echarts【scatter-aqi-color】,进行数据可视化;
    3.找出异常点,找出异常教练;

    具体步骤:

    1. 导出每小时的教练得票数

    select sum(vote) as vote,uid,date_format(from_unixtime(create_time), '%H') as date from t_vote_log where from_unixtime(create_time) between '2018-09-10' and '2018-09-12' group by uid,date;
    

    2. 格式化数据【支持Echarts-scatter-aqi-color】

    php代码:
       $file = './0913votelog.log';  // 导出日志log
        $fileout = './0913votelognew.log';  // 生成新的文件
        if (file_exists($fileout)) {
            unlink($fileout);  // 初始化,如果已经导出过,先删除旧文件
        }
        $f = fopen($file, 'r') or exit('file not exit');
        $f2 = fopen($fileout, 'w') or exit('file open error');
        fwrite($f2, 'var VOTEDATA = [');  
        while (!feof($f)) {
            $line = fgets($f);
            $attr = preg_split('/[\n\t\r\s+]/i', $line);
            $vote = $attr[0];$cid = $attr[1];$time = $attr[2];
            if ($vote && $cid && $time && is_numeric($cid)) {
                $format = "[{$time},{$vote},{$cid}],";
                fwrite($f2, $format . PHP_EOL);
            }
        }
        $end = rtrim($format, ',') . ']';
        fwrite($f2, $end);
        echo 'success';
    

    数据格式如下:


    image.png

    3.使用Echart进行数据可视化【在官网下载-demo代码scatter-aqi-color】

    a.首先导入数据

    <script type="text/javascript" src="file:///Users/eric/Downloads/0913votelognew.log"></script>
    

    b.配置

    注意:数据的第一列是x轴,第二列是y轴数据。

    var dataBJ = VOTEDATA;
    // 根据具体数据格式配置:
    var schema = [
        {name: 'date', index: 0, text: '时间'},
        {name: 'vote', index: 1, text: '票数'},
        {name: 'userId', index: 2, text: '用户id'}
    ];
    
    tooltip: {
            padding: 10,
            backgroundColor: '#222',
            borderColor: '#777',
            borderWidth: 1,
            formatter: function (obj) {
                var value = obj.value;
                return '<div style="border-bottom: 1px solid rgba(255,255,255,.3); font-size: 18px;padding-bottom: 7px;margin-bottom: 7px">'
                    + obj.seriesName + '时间:' + value[0]
                    + '</div>'
                    + schema[1].text + ':' + value[1] + '<br>'
                    + schema[2].text + ':' + value[2] + '<br>';
            }
        },
    
    xAxis: {
            type: 'value',
            name: '日期',
            nameGap: 16,
            nameTextStyle: {
                color: '#fff',
                fontSize: 10
            },
            max: 24,  // 横坐标按照24小时
            splitLine: {
                show: false
            },
            axisLine: {
                lineStyle: {
                    color: '#eee'
                }
            }
        },
        yAxis: {
            type: 'value',
            name: '票数',
            nameLocation: 'end',
            nameGap: 20,
            nameTextStyle: {
                color: '#fff',
                fontSize: 16
            },
            axisLine: {
                lineStyle: {
                    color: '#eee'
                }
            },
            splitLine: {
                show: false
            }
        },
    // 右边筛选配置
    visualMap: [
            {
                left: 'right',
                top: '10%',
                dimension: 2,
                min: 0,
                max: 1000,
                itemWidth: 30,
                itemHeight: 120,
                calculable: true,
                precision: 0.1,
                text: ['圆形大小:票数'],
                textGap: 30,
                textStyle: {
                    color: '#fff'
                },
                inRange: {
                    symbolSize: [1, 7]   // 圆圈大小
                },
                outOfRange: {
                    symbolSize: [1, 7],
                    color: ['rgba(255,255,255,.2)']
                },
                controller: {
                    inRange: {
                        color: ['#c23531']
                    },
                    outOfRange: {
                        color: ['#444']
                    }
                }
            },
            {
                left: 'right',
                bottom: '5%',
                dimension: 6,
                min: 1,
                max: 24,
                itemHeight: 120,
                calculable: true,
                precision: 0.1,
                text: ['明暗:时间'],
                textGap: 30,
                textStyle: {
                    color: '#fff'
                },
                inRange: {
                    colorLightness: [1, 0.5]   
                },
                outOfRange: {
                    color: ['rgba(255,255,255,.2)']
                },
                controller: {
                    inRange: {
                        color: ['#c23531']
                    },
                    outOfRange: {
                        color: ['#444']
                    }
                }
            }
        ],
    

    最后如图:


    image.png

    总结:本来想利用深度学习,利用knn分类,找出异常点。但根据实际业务,无需做如此复杂的计算。通过这次的实践,主要锻炼数据思维以及分析能力,最后的结果也是喜人的。
    根据运营的反馈,找出来的90%的异常点用户均属于刷票用户。

    相关文章

      网友评论

          本文标题:利用百度Echart【scatter】进行数据分析

          本文链接:https://www.haomeiwen.com/subject/kxrggftx.html