用户行为分析项目随笔

背景

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

前奏

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

用户行为分析项目随笔_第1张图片

接下来具体看一下:

数据采集

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

opt_system_type      操作系统类型,可取值(android、ios、windows)
opt_system_version   操作系统版本,如:ios_9.0、android_5.0
location_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         设备IMEI
device_resolution   设备分辨率
action_create_time  动作时间,动作时间格式:毫秒时间戳
app_key             应用键值
user_dept_number    部门编号
extra_data          其他参数,如启动时候上报上次使用时长(毫秒)
ip_address:         ip地址
user_name:          用户名

2)app 用户行为相关字段

action_name 事件名称,自定义事件必须上报该字段 null 目前自定义事件使用button_link_name
action_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 设备IMEI
device_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    部门编号   --null
extra_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 = kafkasource
kafka2hdfs_app_base_action.channels = fileChannel
kafka2hdfs_app_base_action.sinks = hdfsSink

#配置sources,即被监听的源目录  

kafka2hdfs_app_base_action.sources.kafkasource.channels = fileChannel

kafka2hdfs_app_base_action.sources.kafkasource.type = 
org.apache.flume.source.kafka.KafkaSource
kafka2hdfs_app_base_action.sources.kafkasource.zookeeperConnect =
 x:2181,y:2181,z:2181
kafka2hdfs_app_base_action.sources.kafkasource.topic = 
midea_finance_app_base_action
kafka2hdfs_app_base_action.sources.kafkasource.group.id= 
midea_finance_group_id 

#################################


#配置sinks,即目的目录
kafka2hdfs_app_base_action.sinks.hdfsSink.type=hdfs
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.path=/user/hive/qd/mf
_app/midea_finance_app_base_action/part_dt=%Y-%m-%d
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.filePrefix=app_base_a
ction
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.fileSuffix=.log

kafka2hdfs_app_base_action.sinks.sink1.hdfs.round = true
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.rollInterval = 3600
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.rollSize = 128000000
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.rollCount = 0
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.batchSize = 1000
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.roundValue = 1
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.roundUnit = minute
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.useLocalTimeStamp = true
kafka2hdfs_app_base_action.sinks.hdfsSink.channel=fileChannel
kafka2hdfs_app_base_action.sinks.hdfsSink.hdfs.fileType = DataStream

#channels,通道目录配置:把文件事件持久化到本地硬盘上
kafka2hdfs_app_base_action.channels.fileChannel.type = file
kafka2hdfs_app_base_action.channels.fileChannel.checkpointDir=/tmp/f
lume/app_base_action/checkpoint
kafka2hdfs_app_base_action.channels.fileChannel.dataDirs=/tmp/flume/
app_base_action/datadir

2) user action topic:

kafka2hdfs_user_action.sources = kafkasource
kafka2hdfs_user_action.channels = fileChannel
kafka2hdfs_user_action.sinks = hdfsSink

#配置sources,即被监听的源目录  

kafka2hdfs_user_action.sources.kafkasource.channels = fileChannel

kafka2hdfs_user_action.sources.kafkasource.type = org.apache.flume.source.kafka.KafkaSource
kafka2hdfs_user_action.sources.kafkasource.zookeeperConnect =
 10.16.3x.xx:2181,10.16.3x.xx:2181,10.16.3x.xx:2181
kafka2hdfs_user_action.sources.kafkasource.topic = midea_finance_user_action
kafka2hdfs_user_action.sources.kafkasource.group.id= midea_finance_group_id 

#配置sinks,即目的目录
kafka2hdfs_user_action.sinks.hdfsSink.type=hdfs
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.path=/user/hive/qd/mf_app
/midea_finance_user_action/part_dt=%Y-%m-%d
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.filePrefix=user_action
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.fileSuffix=.log

kafka2hdfs_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 = 3600
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.rollSize = 128000000
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.rollCount = 0
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.batchSize = 1000
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.roundValue = 1
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.roundUnit = minute
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.useLocalTimeStamp = true
kafka2hdfs_user_action.sinks.hdfsSink.channel=fileChannel
kafka2hdfs_user_action.sinks.hdfsSink.hdfs.fileType = DataStream

#channels,通道目录配置:把文件事件持久化到本地硬盘上
kafka2hdfs_user_action.channels.fileChannel.type = file
kafka2hdfs_user_action.channels.fileChannel.checkpointDir=/tmp/flume
/user_action/checkpoint
kafka2hdfs_user_action.channels.fileChannel.dataDirs=/tmp/flume/user_action/datadir

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

用户行为分析项目随笔_第2张图片

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

数据分析

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

1)数仓模型的建立

物理架构

用户行为分析项目随笔_第3张图片

具体层级及命名规范:

用户行为分析项目随笔_第4张图片

  1. ODS 缓冲层 暂不涉及

  2. ODS 基础层

    用户行为分析项目随笔_第5张图片

  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(用户分析)等

数据展现

你可能感兴趣的:(其他)