用户行为分析项目随笔

来源:互联网 发布:im即时通讯源码 编辑:程序博客网 时间:2024/05/21 10:02

背景

有点浮躁,好长时间没有静下心来写技术类日志啦,莫名的恐慌?技术不够用,房价天天在涨。前段时间,上Coursera学了stanford-吴恩达新版机器学习课程的第一章,后来由于两会等原因Coursea网站直接被墙了 - 机器学习计划暂时终止。
好吧,开始写点东西,总结一下过去近两个月的所做所为

前奏

简单来说就是参与了一个用户行为分析类项目。项目大致分为数据采集、数据处理与数据展现三大块,先上一张总体的数据架构图:

这里写图片描述

接下来具体看一下:

数据采集

项目一期主要采集美信入口美的金融app端数据,由于种种原因这部分的工作由移动系统团队负责采集并将采集到的数据写入 kafka . 我们这边以kafka作为source,通过flume 直接将采集到的数据以天为单位 sink 至 hdfs 中 。这里将相关采集的字段整理如下,以供后续参考:
1 ) app 基础信息字段

opt_system_type      操作系统类型,可取值(android、ios、windows)opt_system_version   操作系统版本,如:ios_9.0、android_5.0location_gps_long    地理位置(经度)location_gps_lat     地理位置(纬度)network_type         网络类型,可取值为:(WIFI、3G、4G、2G)network_operator     网络运营商名:可取值:(中国移动、中国联通、中国电信、中国网通、中国铁通、阿里通信、京东通信)action_type          动作类型,可取值:(login(登陆)logout(登出)startup(启动)install(安装)background(切换到后台))action_result       动作结果,可取值:(成功、失败)action_erro         动作错误app_name    app         名称install_way         安装途径,可取值(美的内部、应用宝、 小米应用市场、华为应用商店、appstore)app_version         app版本user_account        用户账号user_dept           用户部门user_post           用户职位user_role           用户角色device_brand        设备品牌device_type         设备机型device_imei         设备IMEIdevice_resolution   设备分辨率action_create_time  动作时间,动作时间格式:毫秒时间戳app_key             应用键值user_dept_number    部门编号extra_data          其他参数,如启动时候上报上次使用时长(毫秒)ip_address:         ip地址user_name:          用户名

2)app 用户行为相关字段

action_name 事件名称,自定义事件必须上报该字段 null 目前自定义事件使用button_link_nameaction_type 动作类型,可取值:login(登录:在点击H5进入应用的时候)logout(退出)install(安装)update(更新) click(点击) pre_logout(退出前h5行为上报)button_link_name    按钮名称(按钮,链接,图片在h5前端显示的具体名称,如授信提交,用款提交…)app_name    app名称app_version app版本user_account    用户账号device_brand    设备品牌device_type 设备机型device_imei 设备IMEIdevice_resolution   设备分辨率action_create_time  动作时间,动作时间格式:毫秒时间戳app_key 应用键值identifier  H5应用标识widget_name H5应用名称widget_version  H5应用版本opt_system_type APP平台(andriod,ios,windows)user_dept   用户部门user_dept_number    部门编号   --nullextra_data  其他参数,如启动时候上报上次使用时长(毫秒)page_name   页面标题  格式(如:home|首页)to_page_name: 访问页面标题 格式(如login|登录)current_page_url: 当前页面URL(没有则为空)to_page_url: 访问页面 URL(没有则为空)

flume的配置如下:

1)base action topic:

kafka2hdfs_app_base_action.sources = kafkasourcekafka2hdfs_app_base_action.channels = fileChannelkafka2hdfs_app_base_action.sinks = hdfsSink#配置sources,即被监听的源目录  kafka2hdfs_app_base_action.sources.kafkasource.channels = fileChannelkafka2hdfs_app_base_action.sources.kafkasource.type = org.apache.flume.source.kafka.KafkaSourcekafka2hdfs_app_base_action.sources.kafkasource.zookeeperConnect = x:2181,y:2181,z:2181kafka2hdfs_app_base_action.sources.kafkasource.topic = midea_finance_app_base_actionkafka2hdfs_app_base_action.sources.kafkasource.group.id= midea_finance_group_id ##################################配置sinks,即目的目录kafka2hdfs_app_base_action.sinks.hdfsSink.type=hdfskafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.path=/user/hive/qd/mf_app/midea_finance_app_base_action/part_dt=%Y-%m-%dkafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.filePrefix=app_base_actionkafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.fileSuffix=.logkafka2hdfs_app_base_action.sinks.sink1.hdfs.round = truekafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.rollInterval = 3600kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.rollSize = 128000000kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.rollCount = 0kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.batchSize = 1000kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.roundValue = 1kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.roundUnit = minutekafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.useLocalTimeStamp = truekafka2hdfs_app_base_action.sinks.hdfsSink.channel=fileChannelkafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.fileType = DataStream#channels,通道目录配置:把文件事件持久化到本地硬盘上kafka2hdfs_app_base_action.channels.fileChannel.type = filekafka2hdfs_app_base_action.channels.fileChannel.checkpointDir=/tmp/flume/app_base_action/checkpointkafka2hdfs_app_base_action.channels.fileChannel.dataDirs=/tmp/flume/app_base_action/datadir

2) user action topic:

kafka2hdfs_user_action.sources = kafkasourcekafka2hdfs_user_action.channels = fileChannelkafka2hdfs_user_action.sinks = hdfsSink#配置sources,即被监听的源目录  kafka2hdfs_user_action.sources.kafkasource.channels = fileChannelkafka2hdfs_user_action.sources.kafkasource.type = org.apache.flume.source.kafka.KafkaSourcekafka2hdfs_user_action.sources.kafkasource.zookeeperConnect = 10.16.3x.xx:2181,10.16.3x.xx:2181,10.16.3x.xx:2181kafka2hdfs_user_action.sources.kafkasource.topic = midea_finance_user_actionkafka2hdfs_user_action.sources.kafkasource.group.id= midea_finance_group_id #配置sinks,即目的目录kafka2hdfs_user_action.sinks.hdfsSink.type=hdfskafka2hdfs_user_action.sinks.hdfsSink.hdfs.path=/user/hive/qd/mf_app/midea_finance_user_action/part_dt=%Y-%m-%dkafka2hdfs_user_action.sinks.hdfsSink.hdfs.filePrefix=user_actionkafka2hdfs_user_action.sinks.hdfsSink.hdfs.fileSuffix=.logkafka2hdfs_user_action.sinks.sink1.hdfs.round = true# Number of seconds to wait before rolling current file (0 = never roll based on time interval)kafka2hdfs_user_action.sinks.hdfsSink.hdfs.rollInterval = 3600kafka2hdfs_user_action.sinks.hdfsSink.hdfs.rollSize = 128000000kafka2hdfs_user_action.sinks.hdfsSink.hdfs.rollCount = 0kafka2hdfs_user_action.sinks.hdfsSink.hdfs.batchSize = 1000kafka2hdfs_user_action.sinks.hdfsSink.hdfs.roundValue = 1kafka2hdfs_user_action.sinks.hdfsSink.hdfs.roundUnit = minutekafka2hdfs_user_action.sinks.hdfsSink.hdfs.useLocalTimeStamp = truekafka2hdfs_user_action.sinks.hdfsSink.channel=fileChannelkafka2hdfs_user_action.sinks.hdfsSink.hdfs.fileType = DataStream#channels,通道目录配置:把文件事件持久化到本地硬盘上kafka2hdfs_user_action.channels.fileChannel.type = filekafka2hdfs_user_action.channels.fileChannel.checkpointDir=/tmp/flume/user_action/checkpointkafka2hdfs_user_action.channels.fileChannel.dataDirs=/tmp/flume/user_action/datadir

hdfs上相关目录形成一系列以天为分区、小时为单位的的日志文件(一天生成24份日志文件):

这里写图片描述

至此,数据采集的工作告一段落。

数据分析

这里的‘分析’包括数据的清洗、业务数据仓库层面的建模。

1)数仓模型的建立

物理架构

这里写图片描述

具体层级及命名规范:

这里写图片描述

  1. ODS 缓冲层 暂不涉及

  2. ODS 基础层

    这里写图片描述

  3. 基础模型层
    dw_dmp.b_app_user_base_info

  4. 实体汇总层
    dw_dmp.e_user_action

  5. 应用集市层
    每一个业务模块对应应用集市层的一张表
    dw_dmp.a_user_kpi(概况分析);dw_dmp.a_user_visit(用户分析)等

数据展现

1 0
原创粉丝点击