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

最近在做一个投票活动,由于活动参与量较大,部分淘宝商家已经做起了刷票生意【据说生意还很不错~~】。所以防刷是很重要的一部分。

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

思路整理:
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%的异常点用户均属于刷票用户。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容