网站用户行为分析
网站用户行为分析
1、步骤
数据准备
① 移动文件到dataset文件夹下
② 去除首行的属性
③ 为每个数据配置一个地区
1.1 本地数据集上传到数据仓库Hive
- 数据集下载与查看
- 数据集预处理
- 把数据集导入HDFS中
- 在Hive上创建数据库
1.2 HIVE数据分析
- 用户行为分析需求:2014-12-11~12号有多少条购买商品的记录
- 用户行为分析需求:分析每月1-31号购买情况
- 按某一特殊日期(如双12)进行用户行为分析
① 各省份购买商品数量
② 商品购买与浏览比例
③ 用户活跃度分析
④ 购买5件以上商品的用户
- 用户购买与浏览比例
① 计算用户购买数与浏览数的比值。
② 创建表格保存结果。
- 按地理位置进行用户行为分析
① 广东地区每月1号的的购买数量
② 2014年12月12号发出到江西的货物数量
- 自定义需求3-5个:
① 2014-12-12号当天广东购买商品数
② 按照省份统计购买数量
③ 2014-12-12号当天的商品购买与浏览比例
④ 用户10001082在2014-12-12号当天活跃度;该用户点击行为占该当天所有点击行为的比例
⑤ 2014-12-12号当天购买4件商品以上的用户
1.3 Hive、MySQL、HBase数据互导
- Hive数据分析结果(如用户购买与浏览比例),从Hive传输到MySQL中。
- Hive数据分析结果(如用户购买与浏览比例),从MySQL传输到Hbase中。
- 参照博客步骤,依次将user_action传入Hive、MySQL、HBase中
1、 操作过程
数据准备
1、移动文件到dataset文件夹下
语句:hdfs dfs -mkdir -p /bigdatacase/dataset
截图:
2、去除首行的属性
语句:sed -i '1d' raw_user
截图:
3、为每个数据配置一个地区
语句:
截图:
1、本地数据集上传到数据仓库Hive
A.1sudo mkdir usr/local/bigdatacase
A.2sudo chown -R hadoop:hadoop ./bigdatacase
A.3mkdir usr/local/bigdatacase/dataset
A.4
A.5
B.1sed -i '1d' raw_user
B.2
B.3vim pre_deal.sh
B.4
C.1start-all.sh
C.2hdfs dfs -mkdir -p /bigdatacase/dataset
C.3
C.4hdfs dfs -put /usr/local/bigdatacase/dataset/user_table.txt /bigdatacase/dataset
C.5hdfs dfs -cat /bigdatacase/dataset/user_table.txt | head -10
D.1 hive> create database dblab;
D.2 hive> use dblab;
D.3hive> CREATE EXTERNAL TABLE dblab.bigdata_user(id INT,uid STRING,item_id STRING,behavior_type INT,item_category STRING,visit_date DATE,province STRING) COMMENT 'Welcome to xmu dblab!' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/bigdatacase/dataset';
D4.1 select * from bigdata_user limit 10;
D4.2 select behavior_type from bigdata_user limit 10;
2、 HIVE数据分析
A、操作Hive
hive> show tables;
hive> show create table bigdata_user;
hive> desc bigdata_user;
B、操作过程
- 创建一个test.txt的词频文件
- 通过输入流的方式读取文件中的数据
- 获取数据之后,通过空格分隔,分别放入map集合中
- 输出统计过后的词频
- 小结
使用java语言实现词频统计,对于文件的读取使用的是一个输入流文件的接口函数实现的,如果我们要是用的文件数据过于大的话,对于读取的效率来说,非常的慢,因此java手动实现的词频统计仅仅适用于数据少的。
1、用户行为分析需求:2014-12-11~12号有多少条购买商品的记录
语句:select count(*) from bigdata_user where visit_date >'2014-12-10' and visit_date <'2014-12-13' and behavior_type='4' limit 10;
截图:
2、用户行为分析需求:分析每月1-31号购买情况
语句:select count(distinct uid),month(visit_date) from bigdata_user where buhavior_type = '4' group by month(visit_date);
截图:
3、双12各省份购买商品数量
语句:select count(*),province from bigdata_user group by province;
截图:
4、双12商品购买与浏览比例
语句:
购买数:select count(*) from (select behavior_type from bigdata_user where visit_date=’2014-12-12’) a where a.behavior_type=4;
浏览数:select count(*) from (select behavior_type from bigdata_user where visit_date=’2014-12-12’) a where a.behavior_type=1;
截图:
购买数:
浏览数:
5、双12用户活跃度分析
语句:select count(*) from (select behavior_type from bigdata_user where visit_date=’2014-12-12’) a group by a.behavior_type;
截图:
6、双12当天购买5件以上商品的用户
语句:select uid from (select uid,behavior_type from bigdata_user where visit_date=’2014-12-12’) as a group by a.uid having count(behavior_type=4) >5;
截图:
8、创建表格保存结果。
语句:create table scan(province STRING,scan INT) COMMENT 'This is the search of bigdataday' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
insert overwrite table scan select province,count(behavior_type) from bigdata_user where behavior_type='1' group by province;
截图:
按地理位置进行用户行为分析
9、广东地区每月1号的的购买数量
语句:select count(*) from (select visit_date,province,behavior_type from bigdata_user)as bt where bt.province=”广东” and day(bt.visit_type)=1 and bt.behavior_type = 4;
截图:
10、以月的第n天为统计单位,依次显示第n天网站卖出去的商品的个数:
语句:select count(*),day(bt.visit_date) from (select visit_date,province,behavior_type) as bt where bt.behavior_type = 4 broup by day(bt.behavior_type);;
截图:
11、2014-12-12号当天广东购买商品数
语句:select * from bigdata_user where behavior_type = '4' and visit_date = '2014-12-12' and province=’广东’;
截图:
12、按照省份统计购买数量
语句:select count(*) from bigdata_user where buhavior_type='4' group by province;
截图:
13、2014-12-12号当天的商品购买与浏览比例
语句:select count(*) from bigdata_user where visit_date='2014-12-12'and behavior_type='4';
select count(*) from bigdata_user where visit_date ='2014-12-12';
截图:
14、用户10001082在2014-12-12号当天活跃度;该用户点击行为占该当天所有点击行为的比例
语句:select count(*) from bigdata_user where uid=10001082 and visit_date='2014-12-12';
截图:
15、2014-12-12号当天购买4件商品以上的用户
语句:select uid from bigdata_user where behavior_type='4' and visit_date='2014-12-12' group by uid having count(behavior_type='4')>4;
截图:
3、Hive、MySQL、HBase数据互导
A、Hive预操作
hive> create table dblab.user_action(id STRING,uid STRING, item_id STRING, behavior_type STRING, item_category STRING, visit_date DATE, province STRING) COMMENT 'Welcome to XMU dblab! ' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
截图:
语句:hdfs dfs -ls /user/hive/warehouse/dblab.db/user_action
截图:
语句:hive> INSERT OVERWRITE TABLE dblab.user_action select * from dblab.bigdata_user;
截图:
语句:hive>select * from user_action limit 10;
A、使用Sqoop将数据从Hive导入MySQL
1、#显示所有数据库
语句:mysql> show databases;
2、 #创建dblab数据库
语句:mysql> create database
3、 #使用数据库
语句:dblab;mysql> use dblab
语句:mysql>show variables like "char%";
创建结果表
语句:mysql> CREATE TABLE `dblab`.`user_action` (`id` varchar(50),`uid` varchar(50),`item_id` varchar(50),`behavior_type` varchar(10),`item_category` varchar(50), `visit_date` DATE,`province` varchar(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
截图:
数据导入
语句:sqoop export --connect jdbc:mysql://localhost:3306/dblab --username root --password 123456 --table user_action --export-dir '/user/hive/warehouse/dblab.db/user_action' --fields-terminated-by '\t';
截图:
- mysql> use dblab;
- mysql> select * from user_action limit 10;
B、使用Sqoop将数据从MySQL导入HBase
1、创建表user_action
语句:hbase> create 'user_action', { NAME => 'f1', VERSIONS => 5}
截图:
2、导入数据
语句:sqoop import --connect jdbc:mysql://localhost:3306/dblab --username root --password 123456--table user_action --hbase-table user_action --column-family f1 --hbase-row-key id --hbase-create-table -m 1
截图:
3、查看HBase中user_action表数据
语句:habse> scan 'user_action',{LIMIT=>10}
截图:
C、参照博客步骤,依次将user_action传入Hive、MySQL、HBase中
1、Hive的user_action
语句:select * from user_action limit10;
截图:
2、MySQL的user_action
语句:select * from user_action limit 10
截图:
3、HBase的user_action
语句:habse> scan 'user_action',{LIMIT=>10}
截图: