【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.rhkb.cn/news/319219.html

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

相关文章

Unity UGUI Image 点击事件忽略空白像素区域

我们会遇到图片不是方形的不规则图片。这个时候我们希望只有点击到图像内容本身才算点击&#xff0c;点击空白区域则不算点击。而UGUI对图片的处理是整个图片都会算作点击区域&#xff0c;这样不能满足于我们的使用需求了。 首先我们需要把图片本身的Read/Write 选项打开 然后…

CSS精灵图、字体图标、HTML5新增属性、界面样式和网站 favicon 图标

精灵图 为什么要使用精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度,因此&#xff0c;为了有效地减少服务…

【源码阅读】Golang中的go-sql-driver库源码探究

文章目录 前言一、go-sql-driver/mysql1、驱动注册&#xff1a;sql.Register2、驱动实现&#xff1a;MysqlDriver3、RegisterDialContext 二、总结 前言 在上篇文章中我们知道&#xff0c;database/sql只是提供了驱动相关的接口&#xff0c;并没有相关的具体实现&#xff0c;具…

分层图像金字塔变压器

文章来源&#xff1a;hierarchical-image-pyramid-transformers 2024 年 2 月 5 日 本文介绍了分层图像金字塔变换器 (HIPT)&#xff0c;这是一种新颖的视觉变换器 (ViT) 架构&#xff0c;设计用于分析计算病理学中的十亿像素全幻灯片图像 (WSI)。 HIPT 利用 WSI 固有的层次结…

JDK14特性

JDK14 1 概述2 语法层面的变化1_instanceof的模式匹配(预览)2_switch表达式(标准)3_文本块改进(第二次预览)4_Records 记录类型(预览 JEP359) 3 API层面的变化4 关于GC1_G1的NUMA内存分配优化2_弃用SerialCMS,ParNewSerial Old3_删除CMS4_ZGC on macOS and Windows 4 其他变化1…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-8.2-链接脚本

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

3.9设计模式——Strategy 策略模式(行为型)

意图 定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使他们可以相互替换此模式使得算法可以独立于使用它们的客户而变化 结构 Strategy&#xff08;策略&#xff09;定义所有支持的算法的公共入口。Context使用这个接口来调用某ConcreteStrategy定义的方…

实验14 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。【参考课本 例1 】 三、源代码以及执行结果截图&#xff1a; example7_1.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "ut…

【信息收集-基于字典爆破敏感目录--御剑/dirsearch

两个工具都是内置字典来对于目录进行爆破的&#xff0c;这是信息收集的一部分&#xff0c;若能在列举出的目录中找到有价值的信息能为后续渗透做准备。 御剑比较简便 dirsearch需要集成python3.x环境&#xff0c;但是可选的命令更多。两者爆破的结果不一定相同&#xff0c;可以…

怎样建设网站

建设一个网站需要经过一系列的步骤和技术&#xff0c;以下是一个简单的指导&#xff1a; 1. 确定网站目的&#xff1a;首先要确定网站的目的和目标。是为了促销产品&#xff1f;提供信息&#xff1f;还是为了社交交流&#xff1f;确定网站目的可以帮助你更好地规划网站的结构和…

【深度学习】位置编码

一、引言 Self-Attention并行的计算方式未考虑输入特征间的位置关系&#xff0c;这对NLP来说是不可接受的&#xff0c;毕竟一个句子中每个单词都有着明显的顺序关系。Transformer没有RNN、LSTM那样的顺序结构&#xff0c;所以Transformer在提出Self-Attention的同时提出了Posi…

RKNN Toolkit2 工具的使用

RKNN Toolkit2 是由瑞芯微电子 (Rockchip) 开发的一套用于深度学习模型优化和推理的工具。它主要面向在瑞芯微SoC上进行AI应用开发&#xff0c;但也可以用于PC平台进行模型的转换、量化、推理等操作。它支持将多种深度学习框架的模型&#xff08;如Caffe, TensorFlow, PyTorch等…

Linux下软硬链接和动静态库制作详解

目录 前言 软硬链接 概念 软链接的创建 硬链接的创建 软硬链接的本质区别 理解软链接 理解硬链接 小结 动静态库 概念 动静态库的制作 静态库的制作 动态库的制作 前言 本文涉及到inode和地址空间等相关概念&#xff0c;不知道的小伙伴可以先阅读以下两篇文章…

网络安全是智能汽车下一个要卷的方向?

2024年一季度&#xff0c;中国汽车市场延续了2023年的风格&#xff0c;核心就是「卷」。 2023年&#xff0c;我国汽车市场爆发「最强价格战」&#xff0c;燃油车的市场空间不断被挤压&#xff0c;如今只剩下最后一口气。近日乘联会发布4月1-14日最新数据&#xff0c;新能源&am…

【前端】VUE项目创建

在所需文件夹中打开cmd命令行窗口&#xff0c;输入vue ui 进入web可视化界面选择创建新项目 根据需求依次完成下列选择&#xff0c;下列是参考配置&#xff0c;完成后点击创建项目即可 最终显示完成

CUDA和显卡驱动

1.安装显卡驱动 https://www.nvidia.com/download/index.aspx?langen-us 由于我的显卡是RTX4060&#xff0c;因此先选择RTX40系列&#xff0c;然后选择RTX4060&#xff0c;进行安装 2.查看显卡对应的CUDA CUDA安装地址&#xff1a;https://developer.nvidia.com/cuda-toolk…

应用分层和企业规范

目录 一、应用分层 1、介绍 &#xff08;1&#xff09;为什么需要应用分层&#xff1f; &#xff08;2&#xff09;如何分层&#xff1f;&#xff08;三层架构&#xff09; MVC 和 三层架构的区别和联系 高内聚&#xff1a; 低耦合&#xff1a; 2、代码重构 controlle…

【 书生·浦语大模型实战营】学习笔记(六):Lagent AgentLego 智能体应用搭建

&#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料&#xff0c;配有全面而有深度的专栏内容&#xff0c;包括不限于 前沿论文解读、…

相机知识的补充

一&#xff1a;镜头 1.1MP的概念 相机中MP的意思是指百万像素。MP是mega pixel的缩写。mega意为一百万&#xff0c;mega pixel 指意为100万像素。“像素”是相机感光器件上的感光最小单位。就像是光学相机的感光胶片的银粒一样&#xff0c;记忆在数码相机的“胶片”&#xff…

spring boot运行过程中动态加载Controller

1.被加载的jar代码 package com.dl;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class App {public static void main(String[] args) {SpringApplication.run(A…