大数据之陌陌聊天数据分析案例

news/2024/11/20 7:24:30/

目录

目标需求

数据内容

基于Hive数仓实现需求开发

1.建库建表、加载数据

2.ETL数据清洗

3需求指标统计


目标需求

基于Hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表

1.统计今日总消息量

2.统计今日每小时消息量,发送和接收用户数

3.统计今日各地区发送消息数据量

4.统计今日发送消息和接收消息的用户数

5.统计发送消息最多的top10用户

6.统计接收消息最多的top10用户

7.统计发送人的手机型号分部情况

8.统计发送人的设备操作系统分布情况

数据内容

数据来源:聊天业务系统中导出的2021年11月01日的一天24小时的用户聊天数据,以TSV文本形式存储在文件中

数据大小:两个文件共14万条

列分隔符:制表符‘\t’

数据字典及样列数据:

基于Hive数仓实现需求开发

1.建库建表、加载数据

--------------1、建库---------------------如果数据库已存在就删除
drop database if exists db_msg cascade;
--创建数据库
create database db_msg;
--切换数据库
use db_msg;
--------------2、建表-------------------
--如果表已存在就删除
drop table if exists db_msg.tb_msg_source;
--建表
create table db_msg.tb_msg_source(msg_time             string  comment "消息发送时间", sender_name        string  comment "发送人昵称", sender_account     string  comment "发送人账号", sender_sex         string  comment "发送人性别", sender_ip          string  comment "发送人ip地址", sender_os          string  comment "发送人操作系统", sender_phonetype   string  comment "发送人手机型号", sender_network     string  comment "发送人网络类型", sender_gps         string  comment "发送人的GPS定位", receiver_name      string  comment "接收人昵称", receiver_ip        string  comment "接收人IP", receiver_account   string  comment "接收人账号", receiver_os        string  comment "接收人操作系统", receiver_phonetype string  comment "接收人手机型号", receiver_network   string  comment "接收人网络类型", receiver_gps       string  comment "接收人的GPS定位", receiver_sex       string  comment "接收人性别", msg_type           string  comment "消息类型", distance           string  comment "双方距离", message            string  comment "消息内容"
)
--指定分隔符为制表符
row format delimited fields terminated by '\t';--------------3、加载数据-------------------
--上传数据文件到node1服务器本地文件系统(HS2服务所在机器)
--shell:  mkdir -p /root/hivedata--加载数据到表中
load data local inpath '/root/hivedata/data1.tsv' into table db_msg.tb_msg_source;
load data local inpath '/root/hivedata/data2.tsv' into table db_msg.tb_msg_source;--查询表 验证数据文件是否映射成功
select * from tb_msg_source limit 10;--统计行数
select count(*) as cnt from tb_msg_source;

2.ETL数据清洗

--------------4、ETL数据清洗-------------------
--问题1:当前数据中,有一些数据的字段为空,不是合法数据
selectmsg_time,sender_name,sender_gps
from db_msg.tb_msg_source
where length(sender_gps) = 0
limit 10;--问题2:需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段,只有整体时间字段,不好处理
selectmsg_time
from db_msg.tb_msg_source
limit 10;--问题3:需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段,不好处理
selectsender_gps
from db_msg.tb_msg_source
limit 10;--ETL实现
--如果表已存在就删除
drop table if exists db_msg.tb_msg_etl;
--将Select语句的结果保存到新表中
create table db_msg.tb_msg_etl as
select*,substr(msg_time,0,10) as dayinfo, --获取天substr(msg_time,12,2) as hourinfo, --获取小时split(sender_gps,",")[0] as sender_lng, --提取经度split(sender_gps,",")[1] as sender_lat --提取纬度
from db_msg.tb_msg_source
--过滤字段为空的数据
where length(sender_gps) > 0 ;--验证ETL结果
selectmsg_time,dayinfo,hourinfo,sender_gps,sender_lng,sender_lat
from db_msg.tb_msg_etl
limit 10;

3需求指标统计

--------------5、需求指标统计分析-------------------
--需求:统计今日总消息量
create table if not exists tb_rs_total_msg_cnt
comment "今日消息总量"
as
selectdayinfo,count(*) as total_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo;select * from tb_rs_total_msg_cnt;--结果验证--需求:统计今日每小时消息量、发送和接收用户数
create table if not exists tb_rs_hour_msg_cnt
comment "每小时消息量趋势"
as
selectdayinfo,hourinfo,count(*) as total_msg_cnt,count(distinct sender_account) as sender_usr_cnt,count(distinct receiver_account) as receiver_usr_cnt
from db_msg.tb_msg_etl
group by dayinfo,hourinfo;select * from tb_rs_hour_msg_cnt;--结果验证--需求:统计今日各地区发送消息数据量
create table if not exists tb_rs_loc_cnt
comment "今日各地区发送消息总量"
as
selectdayinfo,sender_gps,cast(sender_lng as double) as longitude,cast(sender_lat as double) as latitude,count(*) as total_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,sender_gps,sender_lng,sender_lat;select * from tb_rs_loc_cnt; --结果验证--需求:统计今日发送消息和接收消息的用户数
create table if not exists tb_rs_usr_cnt
comment "今日发送消息人数、接受消息人数"
as
selectdayinfo,count(distinct sender_account) as sender_usr_cnt,count(distinct receiver_account) as receiver_usr_cnt
from db_msg.tb_msg_etl
group by dayinfo;select * from tb_rs_usr_cnt; --结果验证--需求:统计今日发送消息最多的Top10用户
create table if not exists tb_rs_susr_top10
comment "发送消息条数最多的Top10用户"
as
selectdayinfo,sender_name as username,count(*) as sender_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,sender_name
order by sender_msg_cnt desc
limit 10;select * from tb_rs_susr_top10; --结果验证--需求:统计今日接收消息最多的Top10用户
create table if not exists tb_rs_rusr_top10
comment "接受消息条数最多的Top10用户"
as
selectdayinfo,receiver_name as username,count(*) as receiver_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,receiver_name
order by receiver_msg_cnt desc
limit 10;select * from tb_rs_rusr_top10;  --结果验证--需求:统计发送人的手机型号分布情况
create table if not exists tb_rs_sender_phone
comment "发送人的手机型号分布"
as
selectdayinfo,sender_phonetype,count(distinct sender_account) as cnt
from tb_msg_etl
group by dayinfo,sender_phonetype;select * from tb_rs_sender_phone; --结果验证--需求:统计发送人的设备操作系统分布情况
create table if not exists tb_rs_sender_os
comment "发送人的OS分布"
as
selectdayinfo,sender_os,count(distinct sender_account) as cnt
from tb_msg_etl
group by dayinfo,sender_os;select * from tb_rs_sender_os;  --结果验证

FIneBI可视化报表

构建可视化报表


http://www.ppmy.cn/news/1198050.html

相关文章

2024最新mac电脑清理垃圾的软件有哪些?

mac电脑是许多人喜爱的电子产品,它拥有优美的设计、流畅的操作系统和强大的性能。但是,随着使用时间的增长,mac电脑也会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此&…

本地部署Jellyfin影音服务器并实现远程访问影音库

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…

【C++那些事儿】类与对象(1)

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,我之前看过一套书叫做《明朝那些事儿》,把本来枯燥的历史讲的生动有趣。而C作为一门接近底层的语言,无疑是抽象且难度颇…

亚马逊 JDK下载地址

下载地址 https://docs.aws.amazon.com/corretto/选择版本 选择操作系统 比如 windows64 位 可以选择安装包或者解压版本 msi 的为安装版 zip 的为解压版

vue优化之Object.freeze

vue项目中有些数据只是用来做展示的,比如评论列表啥的,是不会修改的。就会用Object.freeze处理一下,这个操作vue在做响应式处理时,看到这个数据变成响应式对象,也算是优化手段之一。尤其文章列表数据比较多时&#xff…

全局变量和局部变量在for循环的使用

imageloc字典作为全局变量,然后添加到全局的列表中,每次for循环都会将最新的元素改变之前for循环添加的元素。而imageloc字典作为局部变量,则不会影响。 import numpy as np originaljson [{"joints_vis": [1,1,1,1,1,1,1,1,1,1,…

NewStarCTF 2023 公开赛道 Web

NewStarCTF 2023 公开赛道 Web WEEK1|WEB 泄漏的秘密 泄露的秘密,直接看常见的目录robots.txt,www.zip直接那道两段flag 也可以用dirsearch工具扫描,但是BUUOJ平台的网站只能开底线程,不然全是429 PART ONE: flag{r0bots_1s_s0_us3ful $…

k8s中实现mysql主备

文章目录 一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.1 安装nfs1.2.2 部署nfs-provisioner 1.3 安装mysql1.4 备库上查看是否同步 一、k8s中实现mysql主备 1.1 环境信息 机器操作系统ipmysql版本k8s版本storageClassmaster1CentOS7.8192.168.0.20mysql5.…