一次数据分析的全过程
刚下完班的时候,在公司无聊的坐着,一位同事拿了一些数据给我,说让我实现一个类似交叉表格的统计报表。
我原以为是最多十几分钟就搞定的事情,没想到花了2个小时,所以印象比较深,就把全过程记录了下来
源数据就是个日志文本信息
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,dORDER BY B,g) lastc,
LAG(b, 1, 0) OVER (partition by f,dORDER BY B,g) lastb,
case when c - LAG(c, 1, 0) OVER (ORDER BY tt)>=0then c - LAG(c, 1, 0) OVER (ORDER BY tt)
else c - LAG(c, 1, 0) OVER (ORDER BY tt)+1000 end aa
fromtest6 t
) a
where a.g='ToFront()=TRUE' anda.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导入时的数据顺序有问题,不过我想也许是我自己还没找解决问题的根本原因吧。
一次数据分析的全过程相关推荐
- python猿辅导_如何用数据分析方法剖析“猿辅导”K12课程
前言 本次分析只是用猿辅导的案例来分享数据分析的思路和方法论.禁止将分析结果用于任何商业目的以及非法行为,若引起法律纠纷后果自负.同时声明数据来源与猿辅导官网关键指标数据未必真实. 概述 笔者将通过以 ...
- 遗传:微生物组数据分析方法与应用
本文版权归<遗传>杂志,已获授权,转载请联系杂志社 微生物组数据分析方法与应用 刘永鑫1,2,秦媛1,2,3,郭晓璇1,2,白洋1,2,3 1. 中国科学院遗传与发育生物学研究所,植物基因 ...
- python数据分析的主要流程-Python数据分析全流程实操指南
内容全面:借助5大Python工具库,实现数据分析从获取到建模全流程覆盖: 贴合实际:不空讲Python语法,清晰简明地介绍如何用Python来处理.分析数据: 热点案例:覆盖6大热点应用领域,可直接 ...
- python excel数据分析实战_一次完整的数据分析实战!仅用4步,效率吊打Excel和Python...
我最近发现很多人都走进了这样一个误区:觉得业务数据分析是专业的数据分析岗位的人才需要做的事情,业务人员只需要给他们提需求就可以了. 但实际上业务人员一点数据分析都不会就是只会打仗,不会算账,缺乏了统筹 ...
- 学习生信的系列教程 | 留言您是如何学习生信的免费获取北大出版《Python数据分析》书籍...
生信的作用越来越大,想学的人越来越多,不管是为了以后发展,还是为了解决眼下的问题.但生信学习不是一朝一夕就可以完成的事情,也许你可以很短时间学会一个交互式软件的操作,却不能看完程序教学视频后就直接写程 ...
- 一次完整的数据分析实战!仅用4步,效率吊打Excel和Python
我最近发现很多人都走进了这样一个误区:觉得业务数据分析是专业的数据分析岗位的人才需要做的事情,业务人员只需要给他们提需求就可以了. 但实际上业务人员一点数据分析都不会就是只会打仗,不会算账,缺乏了统筹 ...
- 我用Python做了一个咖啡馆数据分析
在做案例前,我还想回答大家一个疑问,就是excel做数据分析可以实现Python一样的效果,那用Python的意义在哪呢? 经过这段时间学习理解,我的回答是: (https://jq.qq.com/? ...
- 一个案例告诉你Smartbi自助数据分析工具有多实用!
自助数据分析是一个迭代分析过程,在一轮又一轮的分析过程中后得到对数据的洞察,不断产生有价值的派生数据,最终形成分析结果,并落实为企业的管理行动. 自助数据分析是一个迭代分析过程,在一轮又一轮的分析 ...
- 福利 | 《人工智能之数据挖掘》报告发布:北京相关学者流动人次最高(附下载)...
来源:学术头条 本文约1600字,建议阅读5分钟 本文介绍了数据挖掘的最近研究进展,并展望了数据挖掘的未来发展趋势. 文末有数据派THU福利哦 近日,由清华大学人工智能研究院.北京智源人工智能研究院. ...
最新文章
- python 做个创越火线挂_一日一技:用Python做个能挂墙上的大钟表
- centos 桥接配置 设置网络代理 lnmp搭建
- 当推荐系统遇上多模态Embedding
- JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式!...
- Nginx伪静态配置和常用Rewrite伪静态规则
- 分享怎样自己做网站赚钱年入40万
- quicktime ogv_Windows的QuickTime已死,应卸载以确保安全
- 浅谈选择示波器时的“5倍法则”
- 1023: 大小写转换 ZZULIOJ
- 拓嘉启远电商:拼多多店铺访客少怎样解决
- basic4android计算器,vb三角函数计算器代码
- 使用 Neo4j 图数据库可视化(网络安全)知识图谱
- word中插入图片只显示底边,其他看不到,插入公式显示不全
- JavaScript到底算不算函数式编程语言?
- 2019年十大创新产品
- FAPI专题-3:5G nFAPI接口 - 中文规范-3- 协议栈、消息格式
- 随风杂谈(长期更新)
- 总:基于FPGA的OV7670摄像头显示
- 多边形轮廓 等距离外扩
- Matlab中矩阵的平方和矩阵中每个元素的平方