京公网安备 11010802034615号
经营许可证编号:京B2-20210330
一次数据分析的全过程
刚下完班的时候,在公司无聊的坐着,一位同事拿了一些数据给我,说让我实现一个类似交叉表格的统计报表。
源数据就是个日志文本信息
2008/1/11 02:14:33:181 181 00001c68 SeqID 418370 ToBack()=TRUE Len=154 MsgID=x00000202
2008/1/11 02:14:33:181 181 00001c68 SeqID 418370 ToFront()=TRUE Len=260 MsgID=x08000202 BEIP=192.168.1.162 BEPort=22049
2008/1/11 03:05:42:330 330 00004110 SeqID 418370 ToBack()=TRUE Len=154 MsgID=x00000202
2008/1/11 03:05:42:346 346 00004110 SeqID 418370 ToFront()=TRUE Len=261 MsgID=x08000202 BEIP=192.168.1.163 BEPort=22049
要的结果是统计一下,各时段对应的超时毫秒的数量
理论上也不复杂,能找出数据规律,进行分组统计而已,但问题在于:
首先统计是上下文相关的,即通过上下文的数据相计算才能获取到相应的指标
其次如何判断上下文的场景,根据几组字段判断都有问题,即得不到唯一的标示
原来想着应该是轻而易举的事情,先把数据导入oracle吧
有日期有时间,需要把文本的日期时间处理成oracle的date类型,可偏偏date类型不支持毫秒运算,第一个问题出来了,依赖于日志中已有的毫秒进行上下文计算又有一定的问题。
先统计了再说吧
select b.hours,
case when overlap<10 then '<10ms'
when overlap<20 then '10-20'
when overlap<30 then '20-30'
when overlap<40 then '30-40'
when overlap<50 then '40-50'
when overlap<60 then '50-60'
when overlap<70 then '60-70'
when overlap<80 then '70-80'
when overlap<90 then '80-90'
else '>90ms'
end tt,
count(*)
from
(
select a.f,a.d from
(
select k,a,b,f,d,g,c,
LAG(c, 1, 0) OVER (partition by f,d ORDER BY B,g) lastc,
LAG(b, 1, 0) OVER (partition by f,d ORDER BY B,g) lastb,
case when c - LAG(c, 1, 0) OVER (ORDER BY tt)>=0 then c - LAG(c, 1, 0) OVER (ORDER BY tt)
else c - LAG(c, 1, 0) OVER (ORDER BY tt)+1000 end aa
from test6 t
) a
where a.g='ToFront()=TRUE' and a.aa>90 )
order by f,d,b,g
) b
group by b.hours,
case when overlap<10 then '<10ms'
when overlap<20 then '10-20'
when overlap<30 then '20-30'
when overlap<40 then '30-40'
when overlap<50 then '40-50'
when overlap<60 then '50-60'
when overlap<70 then '60-70'
when overlap<80 then '70-80'
when overlap<90 then '80-90'
else '>90ms'
end
结果统计出来了,结果非预期的,又对几条数据进行了统计和明细的对比,发现确实有些小问题,可问题出在哪里,也说不清楚。
为了解释清楚这个问题,还是对数据加上行号吧,再次进行对比,发现数据的位置变化了,和原本的日志顺序是不一样的。
为了解决这个问题,还是用rownum加上表数据生成到另外一张测试表吧,再去看看行号和日志的顺序是否能够对应,却发现日志的插入顺序和行号是不一致的!
又问了下同事,业务逻辑到底是怎样的,答曰:日志中上下文的顺序是很严格的
看来需要彻底解决行号问题了。
又在Excel中做了一下测试,Excel做测试很容易,先获取上条记录的毫秒信息,再进行排序,再把数据进行筛选,然后再进行分组判断,最后进行交叉表的生成。
对应大数据量来说,Excel的拖拉显然就满了很多,其次还需要函数、排序、复制数据,总的来说还是比较耗时的。
还是想想怎么解决行号问题吧,确保行号就是数据的原始顺序,首先加了一个sequence,后来又在该表中增加了一个触发器,然后把数据重新导入一遍
create or replace trigger trigger_test6
before insert on test6
for each row
declare
begin
select tt.nextval into :new.tt from dual;
end trigger_test6;
再去验证数据的顺序,这次才算正常了
数据正常了,业务逻辑就简单多了,只需要把最内核的部分修改一下,按行号排序即可
select rr,k,a,b,f,d,g,c,
LAG(c, 1, 0) OVER (ORDER BY tt) lastc,
LAG(b, 1, 0) OVER (ORDER BY tt) lastb
from test6 t
统计完成后,再拷贝到Excel中进行数据透视表转换,再把表格数据拷贝出来,加一些美观信息即可。
该件事情还是没有得到完美解决
主要是毫秒的处理,理论上是时间的直接相减即可,可由于Oracle的date类型无法直接处理,只能采用日志中的毫秒字段进行相减了,碰到相减为负的,则再加回来1000,多少有些问题。
再其次, oracle导入时的数据顺序有问题,不过我想也许是我自己还没找解决问题的根本原因吧。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在大数据技术飞速迭代、数字营销竞争日趋激烈的今天,“精准触达、高效转化、成本可控”已成为企业营销的核心诉求。传统广告投放 ...
2026-04-24在游戏行业竞争白热化的当下,用户流失已成为制约游戏生命周期、影响营收增长的核心痛点。据行业报告显示,2024年移动游戏平均次 ...
2026-04-24 很多业务负责人开会常说“我们要数据驱动”,最后却变成“看哪张报表数据多就用哪个”,往往因为缺乏一套结构性的方法去搭建 ...
2026-04-24在Power BI数据可视化分析中,切片器是连接用户与数据的核心交互工具,其核心价值在于帮助使用者快速筛选目标数据、聚焦分析重点 ...
2026-04-23以数为据,以析促优——数据分析结果指导临床技术改进的实践路径 临床技术是医疗服务的核心载体,其水平直接决定患者诊疗效果、 ...
2026-04-23很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“哪些指标是所有企业都需要的”“哪些指标是因行业而异的”“北极星指标和 ...
2026-04-23近日,由 CDA 数据科学研究院重磅发布的《2026 全球数智化人才指数报告》,被中国教育科学研究院官方账号正式收录, ...
2026-04-22在数字化时代,客户每一次点击、浏览、下单、咨询等行为,都在传递其潜在需求与决策倾向——这些按时间顺序串联的行为轨迹,构成 ...
2026-04-22数据是数据分析、建模与业务决策的核心基石,而“数据清洗”作为数据预处理的核心环节,是打通数据从“原始杂乱”到“干净可用” ...
2026-04-22 很多数据分析师每天盯着GMV、转化率、DAU等数字看,但当被问到“什么是指标”“指标和维度有什么区别”“如何搭建一套完整的 ...
2026-04-22在数据分析与业务决策中,数据并非静止不变的数值,而是始终处于动态波动之中——股市收盘价的每日涨跌、企业月度销售额的起伏、 ...
2026-04-21在数据分析领域,当研究涉及多个自变量与多个因变量之间的复杂关联时,多变量一般线性分析(Multivariate General Linear Analys ...
2026-04-21很多数据分析师精通描述性统计,能熟练计算均值、中位数、标准差,但当被问到“用500个样本如何推断10万用户的真实满意度”“这 ...
2026-04-21在数据处理与分析的全流程中,日期数据是贯穿业务场景的核心维度之一——无论是业务报表统计、用户行为追踪,还是风控规则落地、 ...
2026-04-20在机器学习建模全流程中,特征工程是连接原始数据与模型效果的关键环节,而特征重要性分析则是特征工程的“灵魂”——它不仅能帮 ...
2026-04-20很多数据分析师沉迷于复杂的机器学习算法,却忽略了数据分析最基础也最核心的能力——描述性统计。事实上,80%的商业分析问题, ...
2026-04-20在数字化时代,数据已成为企业决策的核心驱动力,数据分析与数据挖掘作为解锁数据价值的关键手段,广泛应用于互联网、金融、医疗 ...
2026-04-17在数据处理、后端开发、报表生成与自动化脚本中,将 SQL 查询结果转换为字符串是一项高频且实用的操作。无论是拼接多行数据为逗 ...
2026-04-17面对一份上万行的销售明细表,要快速回答“哪个地区卖得最好”“哪款产品增长最快”“不同客户类型的购买力如何”——这些看似复 ...
2026-04-17数据分析师一天的工作,80% 的时间围绕表格结构数据展开。从一张销售明细表到一份完整的分析报告,表格结构数据贯穿始终。但你真 ...
2026-04-16