陌陌聊天数据案例分析

目录

  • 背景介绍和需求分析
  • 基于hive数仓实现需求开发
    • 根据聊天数据建库建表
    • 加载数据
    • ETL数据清洗
      • 背景
      • 分析原始数据出现的问题
      • ETL实现
    • 需求指标统计
      • 思路
      • 需求开发
  • 基于FineBI实现可视化报表
    • 配置流程
    • 构建可视化报表
  • 总结

背景介绍和需求分析

  1. 陌陌是一个聊天平台,每天都会产生大量大聊天数据,通过对聊天数据的统计分析,可以更好的构建用户画像,为用户提供更好的服务以及实现高ROI的平台运营推广,给公司的决策提供精准的数据支撑。
  2. 基于Hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表。
  3. 统计今日总消息量、每小时消息量、发送和接受用户数、各地区发送消息数据量、发送消息和接收消息的用户数、发送消息最多的top10用户、接收消息最多的top10用户、发送人手机型号的分布情况、发送人的设备操作系统的分布情况。

基于hive数仓实现需求开发

根据聊天数据建库建表

-- 建立数据库
create database db_msg;
-- 使用数据库
use db_msg;
-- 查看已有数据库
show databases;
-- 建表
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';

加载数据

从本地文件系统加载数据到表中

-- 从本地文件系统加载数据到表中
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;

ETL数据清洗

背景

在使用原始数据做分析时,有些数据的格式等规范对我们的分析不友好。为了让数据对分析具有更强的支撑作用,出现了数据清晰流程。
ETL数据清洗,即数据的抽取、转换、加载。抽取有效合法的数据、把格式调整转换一下。
ETL数据清洗是针对原始数据中出现的一些问题进行针对性的操作。
数据转换的标准:向支撑数据分析的方向调整。

分析原始数据出现的问题

---- ETL数据清洗
-- 问题1:当前数据中有一些数据的字段为空,不是合法数据
select msg_time,sender_name,sender_gps from tb_msg_source where length(sender_gps) = 0 limit 10;-- 问题2:需求中需要统计每天、每小时的数据量,但是数据中没有天和小时的字段,只有整体时间字段,不好处理
select msg_time
from tb_msg_source limit 10;-- 问题3:需求中需要精度和维度构建可视化地图,但是数据中只有经纬度一个字段,不好处理
select sender_gps from tb_msg_source limit 10;

ETL实现

-- ETl实现
-- 将select语句的结果保存到新表中
create table tb_msg_etl as
select*,substr(msg_time,0,10) as dayinfo, --获取天substr(msg_time,10,2) as hourinfo, --获取小时split(sender_gps,',')[0] as sender_lng, --获取精度split(sender_gps,',')[1] as sender_lat --获取纬度
from tb_msg_source
-- 过滤字段值为空的数据
where length(sender_gps) > 0;-- 验证ETL处理之后的结果
select dayinfo,hourinfo,sender_lng,sender_lat from tb_msg_etl limit 10;

需求指标统计

思路

  1. 正确解读需求
  2. 确定要查询的表——>from 表
  3. 找出分析的维度——>group by 分组的字段
  4. 找出计算的指标——>聚合的字段
  5. 其他细节点(过滤、排序等)

需求开发

------需求指标统计分析
-- 需求1:统计今日总消息量
create table if not exists tb_rs_total_msg_cnt
comment '每日消息总量'
as -- 以查询结果建表
selectdayinfo,count(*) as total_msg_cnt -- 指标
from tb_msg_etl -- 表
group by dayinfo; -- 维度分组,每天select * from tb_rs_total_msg_cnt; -- 结果验证-- 需求2:统计今日每小时消息量、发送和接收用户数
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_user_cnt, -- 每小时发送用户数count(distinct receiver_account) as receiver_user_cnt--每小时接收用户数
from tb_msg_etl -- 表
group by dayinfo,hourinfo; -- 维度,每小时select * from tb_rs_hour_msg_cnt; -- 结果验证-- 需求3:统计今日各地区发送消息数据量
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(*)
from tb_msg_etl
group by dayinfo, sender_gps, cast(sender_lng as double), cast(sender_lat as double); -- 维度:今日、地区、经纬度select * from tb_rs_loc_cnt; -- 结果验证-- 需求4:统计今日发送消息和接收消息的用户数
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 tb_msg_etl
group by dayinfo;select * from tb_rs_usr_cnt;-- 需求5:统计今日发送消息最多的Top10用户
create table if not exists tb_rs_usr_top10
comment '今日发送消息最多的top10用户'
as
selectdayinfo,sender_name as username,count(*) as sender_msg_cnt
from tb_msg_etl
group by dayinfo, sender_name
order by sender_msg_cnt desc --按发送消息降序的顺序排列
limit 10;select * from tb_rs_usr_top10;-- 需求6:统计今日接收消息最多的Top10用户
create table if not exists tb_rs_rusr_top10
comment '今日接收消息最多的top10用户'
as
selectdayinfo,receiver_name as username,count(*) as receiver_msg_cnt
from tb_msg_etl
group by dayinfo, receiver_name
order by receiver_msg_cnt desc --按发送消息降序的顺序排列
limit 10;select * from tb_rs_rusr_top10;-- 需求7:统计发送人的手机型号分布情况
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;-- 需求8:统计发送人的设备操作系统分布情况
create table if not exists tb_rs_sender_os
comment '发送人设备操作系统分布情况'
as
selectdayinfo,sender_os,count(distinct sender_account) cnt
from tb_msg_etl
group by dayinfo, sender_os;select * from tb_rs_sender_os;

基于FineBI实现可视化报表

配置流程

  1. 官网下载、注册用户、获取激活码
  2. 给Fine BI添加驱动、并安装hive隔离插件隔离驱动
  3. 添加数据连接
  4. 数据准备,添加分组和业务包
  5. 使用仪表板构建可视化报表

构建可视化报表

  1. 制作方法:选定图标类型后,把指定的维度和指标拖入指定的位置即可
  2. 最多使用:图标类型、图标属性、组件样式、维度、指标

总结

  1. 一些基础:
    到这里初步学习了大数据的一部分技术栈:Hadoop的HDFS、Yarn、MapReduce,Hive,了解了这些组件的原理和安装配置。
    在这之前,也大致熟悉了一些基础知识:Linux操作系统的一些指令、sql语言的一些语法。
  2. 业务场景中的重点
    在Hive中写一些sql的建库、建表、查询语句
  3. 数据的可视化
    使用Fine BI进行了数据的可视化,将hive中统计好的数据制作成可视化的报表。

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

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

相关文章

不能包含中文的正则表达式

原文 1、不包含汉字[^\u4e00-\u9fa5] var r /^[^\u4e00-\u9fa5]$/ if(r.test(str)){} 2、只能包含汉字 [\u4e00-\u9fa5]

STM32自己从零开始实操10:PCB全过程

一、PCB总体分布 分布主要参考有: 方便供电布线。方便布信号线。方便接口。人体工学。 以下只能让大家看到各个模块大致分布在板子的哪一块,只能说每个人画都有自己的理由,我的理由如下。 还有很多没有表达出来的东西,我也不知…

二叉树---二叉搜索树中的众数

题目: 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满…

PingCAP 王琦智:下一代 RAG,tidb.ai 使用知识图谱增强 RAG 能力

导读 随着 ChatGPT 的流行,LLMs(大语言模型)再次进入人们的视野。然而,在处理特定领域查询时,大模型生成的内容往往存在信息滞后和准确性不足的问题。如何让 RAG 和向量搜索技术在实际应用中更好地满足企业需求&#…

昇思25天学习打卡营第14天|计算机视觉

昇思25天学习打卡营第14天 文章目录 昇思25天学习打卡营第14天FCN图像语义分割语义分割模型简介网络特点数据处理数据预处理数据加载训练集可视化 网络构建网络流程 训练准备导入VGG-16部分预训练权重损失函数自定义评价指标 Metrics 模型训练模型评估模型推理总结引用 打卡记录…

Electron 和 React 开发桌面应用程序

目录 书籍推荐 Electron React 在线资源和教程 官方文档 在线教程 综合学习路径 经典开发案例 Visual Studio Code Hyper Tusk Notable Beekeeper Studio 开源项目和示例代码 Electron React Boilerplate Electron Forge + React Electron React Template 学…

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别

一、概念 阻塞赋值:阻塞赋值的赋值号用“”表示,对应的是串行执行。 对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句…

Transformer-Bert---散装知识点---mlm,nsp

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点,有时间就会整理收录,希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同,bert是使用大量无标签的数据进行预训…

规范:前后端接口规范

1、前言 随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致前后端研发各自专注于自己擅长的领域深耕细作。 然…

volatile,最轻量的同步机制

目录 一、volatile 二、如何使用? 三、volatile关键字能代替synchronized关键字吗? 四、总结: 还是老样子,先来看一段代码: 我们先由我们自己的常规思路分析一下代码:子线程中,一直循环&…

NoSQL之Redis非关系型数据库

目录 一、数据库类型 1)关系型数据库 2)非关系型数据库 二、Redis远程字典服务器 1)redis介绍 2)redis的优点 3)Redis 为什么那么快? 4)Redis使用场景 三、Redis安装部署 1&#xff0…

kail-linux如何使用NAT连接修改静态IP

1、Contos修改静态IP vi /etc/sysconfig/network-scripts/ifcfg-ens33, 标记红色处可能序号会变动 参考linux配置网络不通解决方案_kylinv10sp2 网关不通-CSDN博客https://tanrt06.blog.csdn.net/article/details/132430485?spm1001.2014.3001.5502 Kail时候NAT连…

从 NextJS SSRF 漏洞看 Host 头滥用所带来的危害

前言 本篇博文主要内容是通过代码审计以及场景复现一个 NextJS 的安全漏洞(CVE-2024-34351)来讲述滥用 Host 头的危害。 严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能…

NCRE2-3 网络服务器选型

记忆的部分比较多,会有错误 网络服务器的分类 了解 应用领域不同 Internet通用服务器数据库服务器文件服务器应用服务器 按网络应用规模 基础级服务器工作组级服务器部门级服务器企业级服务器 按网络服务器主机的硬件体系结构 基于CISC处理器的Inter机构(IA)的…

浅谈断言之XML Schema断言

浅谈断言之XML Schema断言 “XML Schema断言”是一种专门用于验证基于XML的响应是否遵循特定XML Schema定义的标准和结构的断言类型。下面我们将详细探讨XML Schema断言的各个方面。 XML Schema断言简介 XML Schema断言(XML Schema Assertion)允许用户…

fastJSON 解决kafka消息斜杠转义问题

Bug: kafka发送消息时的JSON转义异常 问题描述: 问题描述:kafka消息发送出去但是消费者执行相关逻辑的时候报错. 场景:当时实习的时候需要模拟数据做一个实时经纬度传输的接口,使用kafka实时发送消息将数据同步到数据库中 问题分析: fastjson使用不当可能导致转义异常**,kafka…

Android 15 之如何快速适配 16K Page Size

在此之前,我们通过 《Android 15 上 16K Page Size 为什么是最坑》 介绍了: 什么是16K Page Size为什么它对于 Android 很坑如何测试 如果你还没了解,建议先去了解下前文,然后本篇主要是提供适配的思路,因为这类适配…

计算机视觉9 全卷积网络

全卷积网络(Fully Convolutional Network,简称 FCN)在计算机视觉领域具有重要地位。 传统的卷积神经网络(CNN)在最后的输出层通常使用全连接层来进行分类任务。然而,全连接层会丢失空间信息,使得…

Facebook Dating:社交平台的约会新体验

随着社交媒体的普及和技术的发展,传统的社交方式正在经历革新,尤其是在约会这个领域。Facebook作为全球领先的社交平台,推出了Facebook Dating,旨在为用户提供一个全新的约会体验。本文将探讨Facebook Dating如何重新定义社交平台…

OpenCV 安装与基础使用教程(Python)

文章目录 一、硬件要求二、安装三、功能介绍总结 一、硬件要求 OpenCV 是一个跨平台的计算机视觉库,对硬件的要求并不严格,但为了更好的性能和体验,建议满足以下配置: 操作系统:Windows 10 或更高版本,Ub…