【Hadoop】--基于hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表[17]

目录

一、需求分析

1、背景介绍

2、目标

3、需求

4、数据内容

5、建库建表

二、ETL数据清洗

1、数据问题

2、需求

3、实现

4、扩展概念:ETL

三、指标计算

1、指标1:统计今日消息总量

2、指标2:统计每小时消息量、发送量和接收用户数

3、指标3:统计今日各地区发送消息总量

4、指标4:统计今日发送和接收用户人数

5、指标5:统计发送消息条数最多的top10用户

6、指标6:统计接收消息条数最多的top10用户

7、指标7:统计发送人的手机型号分布情况

8、指标8:统计发送人的设备操作系统分布情况

四、可视化展示

1、BI概述

2、可视化展示

2.1、step1:创建报表

2.2、step2:选择仪表板样式

2.3、step3:添加标题

2.4、step4:编辑标题文本框(注意字体大小、居中、文本框位置可调整)

2.5、step5:添加文本内容

2.6、step6:添加地图

2.7、step7:添加雷达图

2.8、step8:添加柱状图

2.9、step9:添加环饼状图

2.10、step10:添加词汇云图

2.11、step11:添加趋势曲线图

2.12、step12:报表预览


一、需求分析

1、背景介绍

         聊天平台每天都会有大量的用户在线,会出现大量的聊天数据,通过对聊天数据的统计分析,可以更好的对用户构建精准的用户画像,为用户提供更好的服务以及实现高ROI的平台运营推广,给公司的发展决策提供精确的数据支撑。 我们将基于一个社交平台App的用户数据,完成相关指标的统计分析并结合BI工具对指标进行可视化展现。

2、目标

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

3、需求

  • 统计今日总消息量
  • 统计今日每小时消息量、发送和接收用户数
  • 统计今日各地区发送消息数据量
  • 统计今日发送消息和接收消息的用户数
  • 统计今日发送消息最多的Top10用户
  • 统计今日接收消息最多的Top10用户
  • 统计发送人的手机型号分布情况
  • 统计发送人的设备操作系统分布情况

4、数据内容

  • 数据大小:30万条数据
  • 列分隔符:Hive默认分隔符’\001’
  • 数据字典及样例数据

5、建库建表

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 "消息内容"
);

将数据文件上传到/home/hadoop目录下,随后上传到HDFS中,加载数据到表中。

二、ETL数据清洗

1、数据问题

问题一:当前数据中,有一些数据的字段为空,不是合法数据。

问题二:需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段、只有整体时间字段、不好处理。分离出年月日、小时字段

问题三:需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段,不好处理。需要把经纬度分离出来。

2、需求

  • 需求1:对字段为空的不合法数据进行过滤
    • where过滤        where length(sender_gps) > 0
  • 需求2:通过时间字段构建天和小时字段
    • date hour函数        date(msg_time)    hour(msg_time)
  • 需求3:从gps的经纬度中提取经度和纬度
    • split函数        split(sender_gps, ',')[0]         split(sender_gps, ',')[1] 
  • 需求4:将ETL以后的结果保存到一张新的Hive表中

3、实现

将数据添加到新的列。

SELECT *,date(msg_time) as msg_day, HOUR (msg_time) as msg_hour,split(sender_gps,',')[0] as sender_lng,split(sender_gps,',')[1] as sender_lat
from tb_msg_soure 
where LENGTH (sender_gps) > 0;

先创建一个新的表用于存储清洗过的数据

create table db_msg.tb_msg_et1(
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 "消息内容",
msg_day string comment "消息日",
msg_hour string comment "消息小时",
sender_lng double comment "经度",
sender_lat double comment "纬度"
);

将清洗的数据导入新建的表

INSERT overwrite table tb_msg_et1 
SELECT *,date(msg_time) as msg_day, HOUR (msg_time) as msg_hour,split(sender_gps,',')[0] as sender_lng,split(sender_gps,',')[1] as sender_lat
from tb_msg_soure 
where LENGTH (sender_gps) > 0;

在导入数据时,多次报错我的yarn资源不足,导致每次都导入不成功,这里我修改了/export/server/hadoop/etc/hadoop目录下的yarn配置文件yarn-site.xml,添加以下代码:

<property><name>yarn.scheduler.minimum-allocation-mb</name><value>2048</value><description>default value is 1024</description>
</property>

数据导入成功

4、扩展概念:ETL

其实我们刚刚完成了从表tb_msg_source查询数据进行数据过滤和转换,并将结果写入到:tb_msg_etl表中的操作,本质上是一种简单的ETL行为。

ETL:

  • E,Extract,抽取
  • T,Transfrom,转换
  • L,Load,加载

从A抽取数据(E),进行数据转换过滤(T),将结果加载(L)到B,就是ETL啦。

三、指标计算

回顾一下我们的需求

  • 统计今日总消息量
  • 统计今日每小时消息量、发送和接收用户数
  • 统计今日各地区发送消息数据量
  • 统计今日发送消息和接收消息的用户数
  • 统计今日发送消息最多的Top10用户
  • 统计今日接收消息最多的Top10用户
  • 统计发送人的手机型号分布情况
  • 统计发送人的设备操作系统分布情况

1、指标1:统计今日消息总量

--需求1:统计今日消息总量
CREATE table db_msg.tb_rs_total_msg_cnt
comment '每日消息总量' as
SELECT msg_day,COUNT(*) as total_msg_cnt
from db_msg.tb_msg_et1 group by msg_day ;

2、指标2:统计每小时消息量、发送量和接收用户数

---需求2:统计每小时消息量、发送量和接收用户数
CREATE table db_msg.tb_rs_hour_msg_cnt comment '每日消息总量' as
SELECT msg_hour ,COUNT(*) as total_msg_cnt,count(distinct sender_account) as sender_user_cnt,count(distinct receiver_account) as receiver_user_cnt
from db_msg.tb_msg_et1 group by msg_hour ;

3、指标3:统计今日各地区发送消息总量

--需求3:统计今日各地区发送消息总量
create table db_msg.tb_rs_loc_cnt comment '每日各地区发消息总量' as
SELECT msg_day ,sender_lng ,sender_lat ,COUNT(*) as total_msg_cnt 
from db_msg.tb_msg_et1 
group by msg_day ,sender_lng, sender_lat

4、指标4:统计今日发送和接收用户人数

--指标4:统计今日发送和接收用户人数
create table db_msg.tb_rs_user_cnt comment '今日发送和接收消息的人数' as
SELECT msg_day ,count(DISTINCT  sender_account) as sender_user_cnt,COUNT(distinct receiver_account) as receiver_user_cnt 
from db_msg.tb_msg_et1 
group by msg_day;

5、指标5:统计发送消息条数最多的top10用户

--指标5:统计发送消息条数最多的top10用户
create table db_msg.tb_rs_user_top10 comment '发送消息最多的10个用户' as
SELECT sender_name ,COUNT(*) as sender_msg_cnt 
FROM db_msg.tb_msg_et1 
group by sender_name 
order by sender_msg_cnt DESC 
limit 10;

6、指标6:统计接收消息条数最多的top10用户

--指标6:统计接收消息条数最多的top10用户
create table db_msg.tb_rs_r_user_top10 comment '接收消息最多的10个用户' as
SELECT receiver_name  ,COUNT(*) as receiver_msg_cnt 
FROM db_msg.tb_msg_et1 
group by receiver_name 
order by receiver_msg_cnt DESC 
limit 10;

7、指标7:统计发送人的手机型号分布情况

--指标7:统计发送人的手机型号分布情况
CREATE table db_msg.tb_rs_sender_phone comment '发送人的手机型号' as
SELECT sender_phonetype ,count(*) as cnt
from db_msg.tb_msg_et1 
group by sender_phonetype

8、指标8:统计发送人的设备操作系统分布情况

CREATE table db_msg.tb_rs_sender_os comment '发送人的os分布' as
SELECT  sender_os ,count(*) as cnt
from db_msg.tb_msg_et1 
group by sender_os 

四、可视化展示

1、BI概述

BI:Business Intelligence,商业智能。

指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行分析以实现商业价值。

简单来说,就是借助BI工具,可以完成复杂的数据分析、数据统计等需求,为公司决策带来巨大的价值。

所以,一般提到BI,我们指代的就是工具软件。常见的BI软件很多,比如:

  • FineBI
  • SuperSet
  • PowerBI
  • TableAu

详细的finebi的介绍与安装可跳转到【Hadoop】-FineBI的介绍及安装[16]  阅读。

2、可视化展示

2.1、step1:创建报表

2.2、step2:选择仪表板样式

2.3、step3:添加标题

2.4、step4:编辑标题文本框(注意字体大小、居中、文本框位置可调整)

2.5、step5:添加文本内容

同理添加总发送消息人数和总接收消息人数

2.6、step6:添加地图

2.7、step7:添加雷达图

2.8、step8:添加柱状图

2.9、step9:添加环饼状图

2.10、step10:添加词汇云图

2.11、step11:添加趋势曲线图

2.12、step12:报表预览

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哥白尼高程Copernicus DEM下载(CSDN_20240505)

哥白尼数字高程模型(Copernicus DEM, COP-DEM)由欧洲航天局(European Space Agency, 简称ESA或欧空局)发布&#xff0c;全球范围免费提供30米和90米分辨率DEM。COP-DEM是数字表面模型(DSM)&#xff0c;它表示地球表面(包括建筑物、基础设施和植被)的高程。COP-DEM是经过编辑的D…

循环神经网络模块介绍(Pytorch 12)

到目前为止&#xff0c;我们遇到过两种类型的数据&#xff1a;表格数据和图像数据。对于图像数据&#xff0c;我们设计了专门的卷积神经网络架构(cnn)来为这类特殊的数据结构建模。换句话说&#xff0c;如果我们拥有一张图像&#xff0c;我们 需要有效地利用其像素位置&#xf…

算法课程笔记——蓝桥云课第六次直播

&#xff08;只有一个数&#xff0c;或者因子只有一个&#xff09;先自己打表&#xff0c;找找规律函数就是2的n次方 异或前缀和 相等就抵消 先前缀和再二分

【Python】机器学习之Sklearn基础教程大纲

机器学习之Sklearn基础教程大纲 1. 引言 机器学习简介Scikit-learn&#xff08;Sklearn&#xff09;库介绍安装和配置Sklearn 2. 数据预处理 2.1 数据加载与查看 - 加载CSV、Excel等格式的数据- 查看数据的基本信息&#xff08;如形状、数据类型等&#xff09;2.2 数据清洗…

本地部署大模型ollama+docker+open WebUI/Lobe Chat

文章目录 大模型工具Ollama下载安装运行Spring Ai 代码测试加依赖配置写代码 ollama的web&Desktop搭建部署Open WebUI有两种方式Docker DesktopDocker部署Open WebUIDocker部署Lobe Chat可以配置OpenAI的key也可以配置ollama 大模型的选择 本篇基于windows环境下配置 大模型…

翔云优配恒生指数涨1.85%、恒生科技指数涨3.74% 小鹏汽车涨超8%

5月3日港股开盘&#xff0c;恒生指数涨1.85%&#xff0c;报18543.3点&#xff0c;恒生科技指数涨3.74%&#xff0c;报4009.96点&#xff0c;国企指数涨2.23%&#xff0c;报6580.81点&#xff0c; 翔云优配是一家领先的在线投资平台,提供全球范围内的股票、期货、基金等交易服务…

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行&#xff08;winr&#xff0c;输入cmd&#xff09;输入 node -v若显示版本信息&#xff0c;即为安装成功 2. 在 小程序根目录 命令行/终端…

C++类的小结

1、类定义 使用class关键字定义类。 类名通常以大写字母开头&#xff0c;以符合命名规范。 类包含成员变量&#xff08;也称为属性或数据成员&#xff09;和成员函数&#xff08;也称为方法或行为&#xff09;。 class MyClass { public: int x; // 数据成员 void setX…

【Gateway远程开发】0.5GB of free space is necessary to run the IDE.

【Gateway远程开发】0.5GB of free space is necessary to run the IDE. 报错 0.5GB of free space is necessary to run the IDE. Make sure that there’s enough space in following paths: /root/.cache/JetBrains /root/.config/JetBrains 原因 下面两个路径的空间不…

【OpenNJet下一代云原生之旅】

OpenNJet下一代云原生之旅 1、OpenNJet的定义OpenNJet架构图 2、OpenNJet的特点性能无损动态配置灵活的CoPilot框架支持HTTP/3支持国密企业级应用高效安全 3、OpenNJet的功能特性4、OpenNJet的安装使用编译安装配置yum源创建符号连接修改配置编译 5、通过 OpenNJet 部署 WEB SE…

基于OpenCv的图像特征点检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

【设计模式】函数式编程范式工厂模式(Factory Method Pattern)

目录标题 定义函数式接口函数式接口实现类工厂类封装实际应用总结 定义函数式接口 ISellIPad.java /*** 定义一个函数式接口* param <T>*/ FunctionalInterface public interface ISellIPad<T> {T getSellIPadInfo();}函数式接口实现类 HuaWeiSellIPad.java pu…

rust数据类型转换,as和TryInto使用

Rust 是类型安全的语言&#xff0c;因此在 Rust 中做类型转换不是一件简单的事&#xff0c;这一章节我们将对 Rust 中的类型转换进行详尽讲解。 as转换 先来看一段代码&#xff1a; fn main() {let a: i32 10;let b: u16 100;if a < b {println!("Ten is less tha…

无U盘基于本地硬盘无损制作虚拟U盘(Windows、Linux系统安装启动盘)

知识点 实验环境 名称版本使用平台Win11本地硬盘格式GPT待安装镜像deepin-desktop-community-20.9-amd64.iso 文中工具下载链接&#xff1a; https://download.csdn.net/download/xzzteach/89263714 deepin-desktop-community-20.9-amd64.iso 文件结构如下&#xff1a; 在Li…

多功能在线二维码生成源码

上传即可使用&#xff0c;可以把电子名片、文本、wifi网络、电子邮件、短信、电话号码、网址等信息生成对应的二维码图片。 多功能在线二维码生成源码

10G MAC层设计系列-(4)MAC TX模块

一、前言 MAC TX模块就是要将IP层传输过来的数据封装前导码、MAC地址、帧类型以及进行CRC校验&#xff0c;并与CRC值一块组成以太网帧。 二、模块设计 首先对输入的数据进行缓存&#xff0c;原因是在之后要进行封装MAC帧头&#xff0c;所以需要控制数据流的流动 FIFO_DATA_6…

Linux内核深入学习 - 中断与异常(上)

中断与异常 中断通常被定义为一个事件&#xff1a;让事件改变处理器执行的指令顺序这样的事件&#xff0c;与CPU芯片内外部硬件电路产生的电信号相对应&#xff01; 中断通常分为同步中断与异步中断&#xff1a; 同步中断指的是当指令执行时&#xff0c;由CPU控制单元产生的…

力扣hot100:543. 二叉树的直径/108. 将有序数组转换为二叉搜索树

一、543. 二叉树的直径 LeetCode&#xff1a;543. 二叉树的直径 二叉树的直径 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。 遇到二叉树的问题很容易去直接用求解的目标去定义递归函数。但是仔细考虑&#xff0c;返回树的直径并不能向上传播。因此我们可以拆…

2024抖音直播带货-直播间拆解:抖店运营从入门到精通(56节课)

起号原理方式以及节点处理 类目的选择选品思路 付费流量投放原理 直播间进阶玩法 课程内容 直播间搭建标准自然起号(0-1)原理 方式 以及节点处理 老号重启(0-1)原理 方式 以及节点处理 账号在线人数稳定 原理 方式 以及节点处理 账号销售额放大 原理 方式 以及节点处理…

IoTDB 入门教程 基础篇⑨——TsFile导入导出工具

文章目录 一、前文二、准备2.1 准备导出服务器2.2 准备导入服务器 三、导出3.1 导出命令3.2 执行命令3.3 tsfile文件 四、导入4.1 上传tsfile文件4.2 导入命令4.3 执行命令 五、查询六、参考 一、前文 IoTDB入门教程——导读 数据库备份与迁移是数据库运维中的核心任务&#xf…