黑马大数据学习笔记5-案例

目录

  • 需求分析
    • 背景介绍
    • 目标
    • 需求
    • 数据内容
    • DBeaver连接到Hive
    • 建库建表
    • 加载数据
  • ETL数据清洗
    • 数据问题
    • 需求
    • 实现
    • 查看结果
    • 扩展
  • 指标计算
    • 需求
    • 需求指标统计
  • 可视化展示
    • BI
      • FineBI的介绍及安装
      • FineBI配置数据源及数据准备
    • 可视化展示

P73~77
https://www.bilibili.com/video/BV1WY4y197g7?p=73

需求分析

背景介绍

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

目标

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

需求

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

在这里插入图片描述

数据内容

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

在这里插入图片描述

DBeaver连接到Hive

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

建库建表

--如果数据库已存在就删除
drop database if exists db_msg cascade ;
--创建数据库
create database db_msg ;
--切换数据库
use db_msg ;--列举数据库
show databases ;
--如果表已存在就删除
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 "消息内容"
);

在这里插入图片描述

加载数据

  • 上传文件到Linux系统
    直接拖拽上传
    在这里插入图片描述

创建文件夹

hadoop fs -mkdir -p /chatdemo/data

放到指定目录

hadoop fs -put chat_data-30W.csv /chatdemo/data/

在这里插入图片描述

  • load数据到表
load data inpath '/chatdemo/data/chat_data-30W.csv' into table tb_msg_source;
  • 验证结果
select msg_time, sender_name, sender_ip, sender_phonetype, receiver_name, receiver_network 
from tb_msg_source limit 10;

在这里插入图片描述

ETL数据清洗

数据问题

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

select msg_time, sender_name, sender_gps from db_msg.tb_msg_source where length(sender_gps) = 0 limit 10;

在这里插入图片描述

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

select msg_time from db_msg.tb_msg_source limit 10;

在这里插入图片描述

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

select sender_gps from db_msg.tb_msg_source limit 10;

在这里插入图片描述

需求

需求1:对字段为空的不合法数据进行过滤
where过滤
需求2:通过时间字段构建天和小时字段
date hour函数
需求3:从GPS的经纬度中提取经度和维度
split函数
需求4:将ETL以后的结果保存到一张新的Hive表中

create table db_msg.tb_msg_etl(
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 db_msg.tb_msg_etl
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_source WHERE LENGTH(sender_gps) > 0;

在这里插入图片描述

查看结果

select msg_time, msg_day, msg_hour, sender_gps, sender_lng, sender_lat from db_msg.tb_msg_etl limit 10;

在这里插入图片描述

扩展

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

ETL:

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

从A抽取数据(E),进行数据转换过滤(T),将结果加载到B(L),就是ETL。
ETL在大数据系统中是非常常见的,后续还会继续接触到它。
目前简单了解一下即可。

指标计算

需求

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

需求指标统计

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

--保存结果表
CREATE TABLE IF NOT EXISTS tb_rs_total_msg_cnt 
COMMENT "每日消息总量" AS 
SELECT msg_day, COUNT(*) AS total_msg_cnt 
FROM db_msg.tb_msg_etl 
GROUP BY msg_day;

在这里插入图片描述

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

--保存结果表
CREATE TABLE IF NOT EXISTS tb_rs_hour_msg_cnt 
COMMENT "每小时消息量趋势" AS  
SELECT  msg_hour, 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 msg_hour;

在这里插入图片描述

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

CREATE TABLE IF NOT EXISTS tb_rs_loc_cnt
COMMENT '今日各地区发送消息总量' AS 
SELECT msg_day,  sender_lng, sender_lat, COUNT(*) AS total_msg_cnt 
FROM db_msg.tb_msg_etl
GROUP BY msg_day, sender_lng, sender_lat

在这里插入图片描述

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

--保存结果表
CREATE TABLE IF NOT EXISTS tb_rs_usr_cnt
COMMENT "今日发送消息人数、接受消息人数" AS
SELECT 
msg_day, 
COUNT(DISTINCT sender_account) AS sender_usr_cnt, 
COUNT(DISTINCT receiver_account) AS receiver_usr_cnt
FROM db_msg.tb_msg_etl
GROUP BY msg_day;

在这里插入图片描述

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

--保存结果表
CREATE TABLE IF NOT EXISTS db_msg.tb_rs_s_user_top10
COMMENT "发送消息条数最多的Top10用户" AS
SELECT sender_name AS username, COUNT(*) AS sender_msg_cnt 
FROM db_msg.tb_msg_etl 
GROUP BY sender_name 
ORDER BY sender_msg_cnt DESC 
LIMIT 10;

在这里插入图片描述

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

CREATE TABLE IF NOT EXISTS db_msg.tb_rs_r_user_top10
COMMENT "接收消息条数最多的Top10用户" AS
SELECT 
receiver_name AS username, 
COUNT(*) AS receiver_msg_cnt 
FROM db_msg.tb_msg_etl 
GROUP BY receiver_name 
ORDER BY receiver_msg_cnt DESC 
LIMIT 10;

在这里插入图片描述

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

CREATE TABLE IF NOT EXISTS db_msg.tb_rs_sender_phone
COMMENT "发送人的手机型号分布" AS
SELECT sender_phonetype, COUNT(sender_account) AS cnt 
FROM db_msg.tb_msg_etl 
GROUP BY sender_phonetype

在这里插入图片描述

指标8:统计发送人的手机操作系统分布

--保存结果表
CREATE TABLE IF NOT EXISTS db_msg.tb_rs_sender_os
COMMENT "发送人的OS分布" AS
SELECTsender_os, COUNT(sender_account) AS cnt 
FROM db_msg.tb_msg_etl 
GROUP BY sender_os

在这里插入图片描述

可视化展示

BI

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

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

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

FineBI的介绍及安装

FineBI的介绍:https://www.finebi.com/

FineBI 是帆软软件有限公司推出的一款商业智能(Business Intelligence)产品。FineBI 是定位于自助大数据分析的 BI 工具,能够帮助企业的业务人员和数据分析师,开展以问题导向的探索式分析。

  • FineBI的特点:
    通过多人协作来实现最终的可视化构建
    不需要通过复杂代码来实现开发,通过可视化操作实现开发
    适合于各种数据可视化的应用场景
    支持各种常见的分析图表和各种数据源
    支持处理大数据

FineBI的界面
启动登陆,选内置数据看。
在这里插入图片描述
在这里插入图片描述

目录:首页大屏及帮助文档

仪表盘:用于构建所有可视化报表

数据准备:用于配置各种报表的数据来源

管理系统:用于管理整个FineBI的使用:用户管理、数据源管理、插件管理、权限管理等
在这里插入图片描述

FineBI配置数据源及数据准备

FineBI与Hive集成的官方文档:https://help.fanruan.com/finebi/doc-view-301.html

  • 驱动配置

问题:如果使用FineBI连接Hive,读取Hive的数据表,需要在FineBI中添加Hive的驱动jar包
解决:将Hive的驱动jar包放入FineBI的lib目录下

step1:找到提供的【Hive连接驱动】

step2:将这些文件放入FineBI的安装目录下的:webapps\webroot\WEB-INF\lib目录中
在这里插入图片描述

  • 插件安装

问题:我们自己放的Hive驱动包会与FineBI自带的驱动包产生冲突,导致FineBI无法识别我们自己的驱动包
解决:安装FineBI官方提供的驱动包隔离插件

step1:找到隔离插件

step2:安装插件

step3:重启FineBI
在这里插入图片描述

新建连接
在这里插入图片描述
在这里插入图片描述

测试连接,保存连接
在这里插入图片描述

数据准备
在这里插入图片描述

在这里插入图片描述
选中8个分析的结果表,确定,然后更新数据。
在这里插入图片描述
新建文件夹之后,选中,新建分析主题。
在这里插入图片描述

可视化展示

基于FineBI完成指标的可视化展现

选中数据
在这里插入图片描述
添加组件

在这里插入图片描述

修改黑色字
在这里插入图片描述
重命名
在这里插入图片描述
选择仪表板,拖进去,取消显示标题,调整大小,位置,颜色。
在这里插入图片描述
在这里插入图片描述
类似操作,添加数据,然后完成标题展示。
在这里插入图片描述
添加雷达图
在这里插入图片描述
取消图例
在这里插入图片描述
拖拽到仪表板,调整大小
在这里插入图片描述
添加环饼状图
在这里插入图片描述

添加地图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加柱状图
在这里插入图片描述

添加词汇云图
在这里插入图片描述

添加趋势曲线图
在这里插入图片描述
在这里插入图片描述

报表预览

在这里插入图片描述

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

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

相关文章

宋浩概率论笔记(三)随机向量/二维随机变量

第三更:本章的内容最重要的在于概念的理解与抽象,二重积分通常情况下不会考得很难。此外,本次暂且忽略【二维连续型随机变量函数的分布】这一章节,非常抽象且难度较高,之后有时间再更新。

回归决策树模拟sin函数

# -*-coding:utf-8-*- import numpy as np from sklearn import tree import matplotlib.pyplot as pltplt.switch_backend("TkAgg") # 创建了一个随机数生成器对象 rng rngnp.random.RandomState(1) print("rng",rng) #5*rng.rand(80,1)生成一个80行、1列…

恒盛策略:上交所过户费收费标准?

随着我国股市的发展,股票买卖所的过户费成为了广阔投资者关注的焦点之一。在我国股票商场中,上交所是最重要的买卖所之一,因而上交所过户费的收费规范备受到了广泛关注。那么,上交所过户费的收费规范究竟怎么拟定?对投…

【Docker】Docker私有仓库的使用

目录 一、搭建私有仓库 二、上传镜像到私有仓库 三、从私有仓库拉取镜像 一、搭建私有仓库 首先我们需要拉取仓库的镜像 docker pull registry 然后创建私有仓库容器 docker run -it --namereg -p 5000:5000 registry 这个时候我们可以打开浏览器访问5000端口看是否成功&…

python-opencv对极几何 StereoRectify

OpenCV如何正确使用stereoRectify函数 函数介绍 用于双目相机的立体校正环节中,这里只谈谈这个函数怎么使用,参数具体指哪些函数参数 随便去网上一搜或者看官方手册就能得到参数信息,但是!!相对关系非常容易出错&…

【MySQL】事务的多版本并发控制(MVCC)

目录 一、数据库并发的三种场景二、MVCC2.1 三个记录隐藏字段2.2 undo log(撤销日志)2.3 模拟MVCC2.3.1 模拟更新(update)2.3.1 模拟删除(delete)2.3.1 模拟插入(insert)2.3.1 模拟查…

maven中常见问题

文章目录 一、配置项提示二、父子打包三、打包之后不显示target四、自定义打包之后的jar包名称五、整个项目打包5.1、父项目管理插件和微服务打包 一、配置项提示 SpringBoot中提示错误信息 表示的是SpringBoot中的注释提示没有配置!那么可以来使用一下springboot官…

安全学习DAY14_JS信息打点

信息打点——前端JS框架 文章目录 信息打点——前端JS框架小节概述-思维导图JS安全概述什么是JS渗透测试?前后端差异JS安全问题流行的Js框架如何判定JS开发应用? 测试方法(JS文件的获取以及分析方法1、手工搜索分析2、半自动Burp分析插件介绍…

problem(3):python IDE和python解释器

为什么写这篇文章呢?遇到了下面的问题,相同的解释器,如果运行angr库的代码,会出现 这样的情况,但是用spyder IDE 会显示正常,很奇怪 应该就是IDE的原因 IDE的循环导入问题 检查IDE配置: 如果可…

引流精准客源方法,学会这一招就够你用的了

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 第一,你要想一想,你想吸引什么样的人? 您的排水目的是推…

构建语言模型:BERT 分步实施指南

学习目标 了解 BERT 的架构和组件。了解 BERT 输入所需的预处理步骤以及如何处理不同的输入序列长度。获得使用 TensorFlow 或 PyTorch 等流行机器学习框架实施 BERT 的实践知识。了解如何针对特定下游任务(例如文本分类或命名实体识别)微调 BERT。为什么我们需要 BERT? 正…

Vue3+SpringBoot快速开发模板

起因:个人开发过程经常会使用到Vue3SpringBoot技术栈来开发项目,每次在项目初始化时都需要涉及一些重复的整理工作,于是结合一些个人觉得不错的前后端模板进行整合,打通一些大多数项目都需要的实现的基础功能,以便于快…

Spring 事务管理

目录 1. 事务管理 1.1. Spring框架的事务支持模型的优势 1.1.1. 全局事务 1.1.2. 本地事务 1.1.3. Spring框架的一致化编程模型 1.2. 了解Spring框架的事务抽象(Transaction Abstraction) 1.2.1. Hibernate 事务设置 1.3. 用事务同步资源 1.3.1…

协议,序列化,反序列化,Json

文章目录 协议序列化和反序列化网络计算器protocol.hppServer.hppServer.ccClient.hppClient.cclog.txt通过结果再次理解通信过程 Json效果 协议 协议究竟是什么呢?首先得知道主机之间的网络通信交互的是什么数据,像平时使用聊天APP聊天可以清楚&#x…

springboot 对接 minio 分布式文件系统

1. minio介绍 Minio 是一个基于Go语言的对象存储服务。它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象…

npm install时出现的问题Failed at the node-sass@4.14.1 postinstall script

从阿里云上拉取下来项目后,首先使用npm install 命令进行安装所需依赖,意想不到的事情发生了,报出了Failed at the node-sass4.14.1 postinstall script,这个问题,顿时一脸懵逼;询问前端大佬,给…

内存快照:宕机后,Redis如何实现快速恢复?RDB

AOF的回顾 回顾Redis 的AOF的持久化机制。 Redis 避免数据丢失的 AOF 方法。这个方法的好处,是每次执行只需要记录操作命令,需要持久化的数据量不大。一般而言,只要你采用的不是 always 的持久化策略,就不会对性能造成太大影响。 …

CS 144 Lab Six -- building an IP router

CS 144 Lab Six -- building an IP router 引言路由器的实现测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Six 对应的PDF: Lab Checkpoint 5: building an IP router 引言 在本实验中,你将在现有的NetworkInterface基础上实现一个IP路由器&#xf…

scala连接mysql数据库

scala中通常是通过JDBC组件来连接Mysql。JDBC, 全称为Java DataBase Connectivity standard。 加载依赖 其中包含 JDBC driver <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29&l…

分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离 (三)

本篇主要说明&#xff1a; 1. 因为这个mysql版本是8.0&#xff0c;所以当其中一台mysql节点挂掉之后&#xff0c;主从同步&#xff0c;甚至双向数据同步都失效了&#xff0c;所以本篇主要记录下当其中的节点挂掉之后如何再次生效。另外推荐大家使用mysql5.7的版本&#xff0c;这…