用户行为分析项目随笔
来源:互联网 发布: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)数仓模型的建立
物理架构
具体层级及命名规范:
ODS 缓冲层 暂不涉及
ODS 基础层
基础模型层
dw_dmp.b_app_user_base_info实体汇总层
dw_dmp.e_user_action应用集市层
每一个业务模块对应应用集市层的一张表
dw_dmp.a_user_kpi(概况分析);dw_dmp.a_user_visit(用户分析)等
数据展现
- 用户行为分析项目随笔
- Hadoop用户行为分析项目
- Hadoop项目实战-用户行为分析之编码实践
- Spark项目:知名手机厂商用户行为实时分析系统
- SNS用户行为分析
- 用户行为分析
- 用户行为分析算法
- 用户行为分析
- 用户行为分析心得
- 用户行为分析心得
- 淘宝用户行为分析
- 用户行为分析
- 用户行为分析心得
- 用户行为分析心得
- 用户行为分析
- 用户行为分析思考
- 【行为分析】GA用户行为分析
- 【转载】SNS用户行为分析
- ORACLE数据库测试数据插入速度
- SQL学习1
- app提交App Store 报错
- HDU2167 Pebbles 题解
- c++primer plus复合类型之枚举
- 用户行为分析项目随笔
- org.apache.catalina.startup.bootstrap at localhost:50643 contains obsolete method
- 数据结构之并查集(hdu1988 hdu2492)
- 查找本地所有视频,选择视频上传到服务器
- App 查询版本信息
- HDU1693 Eat the Trees 题解
- 第七届 山东省ACM Feed the monkey(记忆化搜索 OR DP )
- 巧妙的字符串排序
- 队列