茄子快传数据分析(一)----数据清理

茄子快传数据分析(一)----数据清理

2018年09月03日 18:41:44 amin_hui 阅读数:117

茄子快传原理

流程图: 

数据

“events”: “1473367236143\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000027\u0001\n1473367261933\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000028\u0001\n1473367280349\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000029\u0001\n1473367331326\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000030\u0001\n1473367353310\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000031\u0001\n1473367387087\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000032\u0001\n1473367402167\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000033\u0001\n1473367451994\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000034\u0001\n1473367474316\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000035\u0001\n1473367564181\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000036\u0001\n1473367589527\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000037\u0001\n1473367610310\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000038\u0001\n1473367624647\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000039\u0001\n1473368004298\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000040\u0001\n1473368017851\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000041\u0001\n1473369599067\u00010\u0001AppLaunch\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000042\u0001\n1473369622274\u00010\u0001connectByQRCode\u0001\u00010\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u00011609072239570000043\u0001\n”,

数据解析

使用json在线解析器解析为: 
“header”: { 
“cid_sn”: “1501004207EE98AA”, sdn码 
“mobile_data_type”: “”, 
“os_ver”: “9”, 操作系统 
“mac”: “88:1f:a1:03:7d:a8”, 物理地址 
“resolution”: “2560x1337”, 分辨率 
“commit_time”: “1473399829041”, 提交时间 
“sdk_ver”: “103”, sdk版本 
“device_id_type”: “mac”, 设备类型 
“city”: “江门市”, 城市 
“android_id”: “”, 安卓设备的安卓id 
“device_model”: “MacBookPro11,1”,设备型号 
“carrier”: “中国xx”, 运营商 
“promotion_channel”: “1”, 推广渠道 
“app_ver_name”: “1.7”, app版本号 
“imei”: “”, 入网表示 
“app_ver_code”: “23”, 公司内部版本码 
“pid”: “pid”, 
“net_type”: “3”, 网络类型 
“device_id”: “m.88:1f:a1:03:7d:a8”, 设备ip 
“app_device_id”: “m.88:1f:a1:03:7d:a8”, 
“release_channel”: “appstore”, 发布渠道 
“country”: “CN”, 
“time_zone”: “28800000”, 时区编码 
“os_name”: “ios”, 操作系统类型 
“manufacture”: “apple”, 生产厂家 
“commit_id”: “fde7ee2e48494b24bf3599771d7c2a78”, 事件标示 
“app_token”: “XIAONIU_I”, app标示 
“account”: “none”, 登陆账号 
“app_id”: “com.appid.xiaoniu”, app组名 
“build_num”: “YVF6R16303000403”, 编译号 
“language”: “zh” 系统所使用语言 

}

数据清理

1、 数据清理需求分析 
release_channel,device_id,city,device_id_type,app_ver_name 这几个字段如果缺失,则过滤 
将数据整成 字段,字段,字段,…… 这种形式 
在每条数据中添加一个字段:user_id(值就是mac) 
2、数据清理代码

public class AppLogClean {
    public static class MapTask extends Mapper<LongWritable, Text, Text, NullWritable> {
        StringBuilder sb = new StringBuilder();
        Text k = new Text();
        @Override
        protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, NullWritable>.Context context)
                throws IOException, InterruptedException {
            // 得到每行数据
            String line = value.toString();
            JSONObject ob1 = JSON.parseObject(line);
            JSONObject ob2 = ob1.getJSONObject("header");

            // 关键数据是否有丢失
            // release_channel,device_id,city,device_id_type,app_ver_name
            // 这几个字段如果缺失,则过滤
            if (StringUtils.isBlank(ob2.getString("release_channel"))
                    || StringUtils.isBlank(ob2.getString("device_id"))
                    || StringUtils.isBlank(ob2.getString("city"))
                    || StringUtils.isBlank(ob2.getString("device_id_type"))
                    || StringUtils.isBlank(ob2.getString("app_ver_name"))
                    || StringUtils.isBlank(ob2.getString("os_name"))
                    || StringUtils.isBlank(ob2.getString("mac"))) {
                return;
            }

            if (ob2.getString("app_ver_name").equals("android")) {
                if (StringUtils.isBlank(ob2.getString("android_id"))) {
                    return;
                }
            }
            sb.append(ob2.getString("cid_sn")).append(",");
            sb.append(ob2.getString("mobile_data_type")).append(",");
            sb.append(ob2.getString("os_ver")).append(",");
            sb.append(ob2.getString("mac")).append(",");
            sb.append(ob2.getString("resolution")).append(",");
            sb.append(ob2.getString("commit_time")).append(",");
            sb.append(ob2.getString("sdk_ver")).append(",");
            sb.append(ob2.getString("device_id_type")).append(",");
            sb.append(ob2.getString("city")).append(",");
            sb.append(ob2.getString("android_id")).append(",");
            sb.append(ob2.getString("device_model")).append(",");
            sb.append(ob2.getString("carrier")).append(",");
            sb.append(ob2.getString("promotion_channel")).append(",");
            sb.append(ob2.getString("app_ver_name")).append(",");
            sb.append(ob2.getString("imei")).append(",");
            sb.append(ob2.getString("app_ver_code")).append(",");
            sb.append(ob2.getString("pid")).append(",");
            sb.append(ob2.getString("net_type")).append(",");
            sb.append(ob2.getString("device_id")).append(",");
            sb.append(ob2.getString("app_device_id")).append(",");
            sb.append(ob2.getString("release_channel")).append(",");
            sb.append(ob2.getString("country")).append(",");
            sb.append(ob2.getString("time_zone")).append(",");
            sb.append(ob2.getString("os_name")).append(",");
            sb.append(ob2.getString("manufacture")).append(",");
            sb.append(ob2.getString("commit_id")).append(",");
            sb.append(ob2.getString("app_token")).append(",");
            sb.append(ob2.getString("account")).append(",");
            sb.append(ob2.getString("app_id")).append(",");
            sb.append(ob2.getString("build_num")).append(",");
            sb.append(ob2.getString("language")).append(",");

            String uid = ob2.getString("mac");//???
            sb.append(uid);
            k.set(sb.toString());
            context.write(k, NullWritable.get());
            //清除sb的数据
            sb.delete(0, sb.length());
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        //设置map,设置driver,设置输出类型。。。
        job.setJarByClass(AppLogClean.class);
        job.setMapperClass(MapTask.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(NullWritable.class);

        FileInputFormat.addInputPath(job, new Path("D:\\a\\appuserdata\\input\\20170101"));
        FileOutputFormat.setOutputPath(job, new Path("D:\\a\\appuserdata\\out"));
        //不需要reduce 可以设置为0
        job.setNumReduceTasks(0);

        boolean ret = job.waitForCompletion(true);
        //System.exit(ret?0:1);
        System.out.println(ret?"你很优秀":"滚去调bug!");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

3、数据清理完的文件 
 
4、清理完成的数据格式 
1501004207EE98AA,,22,1c:77:f6:78:f5:75,1080x1920,1473396818952,103,mac,江门市,867830021735040, 
字段与字段间以逗号隔开

原文地址:https://www.cnblogs.com/timxgb/p/10659955.html

时间: 2024-10-13 02:54:43

茄子快传数据分析(一)----数据清理的相关文章

茄子快传数据分析之原理分析及数据清洗

茄子快传数据分析之原理分析及数据清洗 版权声明:闻道有先后,术业有专攻. https://blog.csdn.net/wlk_328909605/article/details/82227410 需求:联想集团有一款app产品叫茄子快传(有上亿的活跃用户,集中在第三世界国家) 现在需要开发一个数据分析系统,来对app的用户行为数据做各类分析: 原理: 流程如下图: 流程简单介绍: 用户通过茄子的客户端产生数据, 将使用时间,手机号,ip地址,手机的序列号,app的版本,app的下载渠道等重要信息

从”茄子快传”看应用程序怎样获取手机已安装程序的apk文件

"茄子快传"是联想开发的一款近距离文件共享软件.它通过wifi-direct(速度飞快,不须要联网)或者普通的网络(速度慢)在不同手机间传递文件. 不知为何.它就火了起来,火的也飞快.当中.共享传输已安装程序文件apk这一功能引起了我强烈的兴趣. 我们知道android对每一个应用的权限做了非常苛刻的控制,每一个应用程序有自己的用户id,每一个应用程序仅仅能訪问自己的数据,比方程序com.android.calculator计算器程序仅仅被同意訪问/data/data/com.andr

从”茄子快传”看应用程序如何获取手机已安装程序的apk文件

"茄子快传"是联想开发的一款近距离文件共享软件,它通过wifi-direct(速度飞快,不需要联网)或者普通的网络(速度慢)在不同手机间传递文件.不知为何,它就火了起来,火的也飞快.其中,共享传输已安装程序文件apk这一功能引起了我强烈的兴趣. 我们知道android对每个应用的权限做了很苛刻的控制,每个应用程序有自己的用户id,每个应用程序只能访问自己的数据,比如程序com.android.calculator计算器程序只被允许访问/data/data/com.android.cal

Android如何实现茄子快传

Android如何实现茄子快传茄子快传是一款文件传输应用,相信大家都很熟悉这款应用,应该很多人用过用来文件的传输.它有两个核心的功能: 端到端的文件传输Web端的文件传输这两个核心的功能我们具体来分析一下! 端到端的文件传输所谓的端到端的文件传输是指应用端发送到应用端(这里的应用端指Android应用端),这种文件传输方式是文件发送端和文件接收端必须安装应用. 效果图文件发送方 文件接收方 简单的文件传输的话,我们可以用蓝牙,wifi直连,ftp这几种方式来进行文件的传输.但是: 蓝牙传输的话,

用Excel做数据分析常用函数(数据清理、关联匹配……)

本文总结在使用Excel进行数据分析时,最常用的功能和函数. Excel的功能和函数非常多,用进废退,除了学习基本的函数和功能,最重要的是遇到问题可以快速的搜索并解决. 首先Excel可以处理的数据量有大多? 使用Ctrl +  → , Ctrl + ↓可以看到下界为104,8576,右界为24(X)*6(F)*4(D)=576    (Excel 2010版本) 一.数据清理 1)Trim()--空格清理 清除掉字符串两边的空格 2)CONCATENATE()--连接 CONCATENATE函

R语言数据清理:视频游戏数据案例研究

Wesnoth之战是一款开源的回合制策略游戏.游戏世界很丰富,有几个派系,地图和数百个可用单位.在本教程中,您将学习如何将中等大小的数据集(如游戏元数据)转换为有用的格式,以便使用R进行进一步分析. 您将了解整洁数据集遵循的关键原则,为什么跟踪它们有用,以及如何清理您给出的数据.整理也是了解新数据集的好方法. 最后,在本教程中,您将学习如何编写一个函数,使您的分析看起来更清晰,并允许您以非常可重复的方式在分析中执行重复元素.该功能允许您将最新版本的数据动态加载到灵活的数据方案中,这意味着在添加新

利用excel VBA进行自动化数据分析,数据汇总,网页表单自动提交等功能

在制造业公司的生产管理,经营管理,采购管理,财务管理等工作中,都有大量的数据处理的任务,通过繁复的excel手工运算获取结果.通过员工培训和自我提升,掌握和使用excel数组公式和VBA自动化,能为员工节省巨大的时间和精力,提高工作附加值.同时作为公司效率化和系统化改善的一部分,为公司效益带来显著提升.以下通过一些案例,展示利用excel公式和VBA进行自动化数据分析,数据汇总,网页表单自动提交在实际场景中的典型应用.相关的文件和代码可以在github下载. 自动化数据分析 以下是通过VBA自动

用SecureCRT来上传和下载数据

借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. 其中,对于sz和rz的理解与记忆我用了如下的方法(很多时候容易搞混): sz中的s意为send(发送),告诉客户端,我(服务器)要发送文件 send to cilent,就等同于客户端在下载. rz中的r意为received(接收),告诉客户端,我(服务器)要接收文件 received by cilent,就等同于客户端在上传. 记住一点,不论是send还是receiv

Spark 定制版:016~Spark Streaming源码解读之数据清理内幕彻底解密

本讲内容: a. Spark Streaming数据清理原因和现象 b. Spark Streaming数据清理代码解析 注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解. 上节回顾 上一讲中,我们之所以用一节课来讲No Receivers,是因为企业级Spark Streaming应用程序开发中在越来越多的采用No Receivers的方式.No Receiver方式有自己的优势,比如更大的控制的自由度.语义一致性等等.所以对No Receivers方