记录数据处理流程中用到的excel工具

具体场景列举

使用到的场景包括
场景1、针对VLOOKUP使用时,同一个检索字段存在多个实际匹配结果时,需要返回所有的匹配结果的场景,提供一种曲线救国的方法。
场景2、对同一个字段下不同值的出现情况进行统计,提供一种上述vlookup的复杂用法的实现,以及另一种基于常规数据透视图的方法。
场景3、COUNTIFS函数的使用,对多列同时匹配某些不同条件的场景进行判断统计。
场景4、多条件排序的应用
场景5、筛选后选择复制
场景6、分列的应用
场景7:通过子母表来展现结果
如果需要了解对应场景的使用方法,可直接根据 “场景X” 类似的形式搜索即可。

问题背景

在工作中涉及到一种IoT的应用场景,就是app端通过某种发现手段,发现局域网中未添加的设备,将其添加到app端的管理设备中。因该流程是使用设备的最先步骤,如果失败,会严重影响用户体验。故而希望进行数据收集,来考察该流程的一次成功率,如果一次成功率不及预期,则需要对问题进行分析,确认是环境影响还是系统bug,通过优化UI界面来引导或是解决技术问题来提高成功率,优化用户首次添加设备的使用体验。

分析和数据准备

因完成设备添加的流程需要设备端和app端双端合作,如果设备处于未就绪的状态,app自然无法添加设备。故而需要设备端和app端同时上传日志,并通过某种方式将一次完整流程中双端上传的日志进行关联。这里很自然的想法是让设备端和app端通过某个random ID(简称RID,表格中也会出现associationID关联ID,与此同义)进行关联,在成功添加设备后,由app触发设备上传日志,同时app自身也上传日志。故而我们需要对两端同时上传的日志进行基于RID进行关联分析,得到用户环境下,实际发现流程的一次成功率。

本次分析假设app添加设备失败的主要原因是由于设备尚未启动就绪,数据处理围绕证明该点假设展开。

设备端上传的数据主要为设备就绪时间点。
app端上传的数据主要为对每一次执行发现任务的时间节点和结果进行记录。比如一次成功即为Yes;前2次失败,第3次成功,则记录为No,No,Yes; 3次失败,则记录为No,No,No。上述三类均分别属于3次发现过程,每次分别拥有同样的RID。

目标主要包含2个,一个是一次成功率,一个是含有失败的情况是否符合上述假设。

成功率分析

  • 数据观察,部分原始数据如下截图所示,可以看到部分情况下发现任务一次成功,部分情况下发现任务在多次失败后的某一次成功,也有部分情况下发现任务一直失败。
    在这里插入图片描述

  • 故而我们需要对结果RID 基于包含YES和NO的数量进行分类。但是基于常规的透视表,我们只能得到统计的结果,即针对每个RID,YES和NO那一栏的数量,比如如下的形式,此处的行是RID关键字,值是searchResult列的计数项。(但其实后面介绍同时对行列进行透视即可得到结果)
    在这里插入图片描述

  • 故而这里需要用到一种基于VLOOKUP字段匹配的曲线救国的方式,该种方式其实主要不应用于当前场景,而是应用于针对VLOOKUP使用时,同一个检索字段存在多个实际匹配结果时,对所有的匹配结果进行返回的场景。

VLOOKUP匹配函数,根据查找值,在数据表的首列搜索指定的查找值,并返回指定的查找值所在行中  的  指定列处的值
VLOOKUP(lookup_value, table_array, col_index_num,range_lookup)
                         |                     |                     |                          | 
                根据什么值查找      |                     |                         精确匹配(0),模糊匹配(非0)
                                        在哪里查找,        |
                                        数据表区域           |
                                                              找到第几列的值
                
——《谁说菜鸟不会数据分析》 p75
类似于数据库中的select操作,只是这里规定的匹配的列为首列,同时返回的结果也只能是索引指定的特定列。

场景1、针对VLOOKUP使用时,同一个检索字段存在多个实际匹配结果时,需要返回所有的匹配结果的场景,提供一种曲线救国的方法。

a) 先要把上述的一维的RID数据转化为基于RID的二维数据表,类似如下格式:
在这里插入图片描述

那么如何做到呢?
核心思路是将RID进行细分,一个RID比如RIDA,对应了多个记录,比如No,No,Yes, 原来是RIDA:YES,RIDA:NO,RIDA:NO。现在拆分为RIDA1:NO,RIDA2:NO,RIDA3:YES。根据RID在表格中出现的次序,加上出现序号的尾缀,区分出不同的RIDA,得到类似如下表显示的结果
在这里插入图片描述

A10的公式
=B10&COUNTIF($B$2:B10,B10)

COUNTIF(range,criteria) 对满足单个指定条件的单元格进行计数
range: 要计数的单元格范围
criteria: 计算条件,可以是数字,文本或表达式。 32,"32",">32","NO" 。数字和文本都是配置值,表达式则是匹配逻辑表达式。
——《谁说菜鸟不会数据分析》 p62
$B$2 表示绝对位置 B2
&表示拼接字符串

通过找到整个B列中到当前行的 当前单元格的值的个数,来确定当前单元格是出现的第几次,并把这个次序拼接到单元格值的末尾。

然后在查找的时候,每一列填充各个序号的RIDA的值,得到基于RID的二维数据表
来看看G2单元格的公式

G2
=IFERROR(VLOOKUP($F2&COLUMN(A1),$A:$C,3,FALSE),"")
H2
=IFERROR(VLOOKUP($F2&COLUMN(B1),$A:$C,3,FALSE),"")

IFERROR(value,value_if_error)
该函数仅为提供value值无法计算时的默认显示结果,此处为“”空字符串,为保证整个界面结果美观。

查找范围是A列到C列,即上述图表中的列,要匹配的值是F2单元格的值加上A1的列名,即1。H2的公式由G2递推得到,列为B1,即2。查找的值在第三列,即searchResult,YES或者NO的结果。将该公式应用到尽可能多的列,即可得到一个基于RID的完整二维数据表

b) 然后便可基于YES或者NO的次数进行利用COUNTIF公式进行统计计数,得到YES或者NO的数量,

D20公式
=COUNTIF(G2:AJ2,"NO")
D21公式
=COUNTIF(G2:AJ2,"YES")

得到类似如下的图表
在这里插入图片描述

c) 再对得到的D和E的列进行二次的COUNTIF公式应用,即可得到我们预期的只包含YES的RID的数量,以及同时包含NO和YES的RID的数量。不过COUNTIF公式只能对单一的范围进行统计。COUNTIFS公式可以统计符合多重条件的单元格数量
场景3、COUNTIFS函数的使用,对多列同时匹配某些不同条件的场景进行判断统计

COUNTIFS(range1,criteria1,[range2,criteria2],...) 对满足单个指定条件的单元格进行计数
range[12...] 和 criteria[1,2,...] 的含义同COUNTIF函数
但注意range的范围要一致,否则比对结果的值会是非法的。

这里把数据放到一张新的表格上,对YES和NO的列进行条件统计得到左上角的结果(为保密,此处数据做脱敏处理),按照如下公式进行多重条件统计。
在这里插入图片描述

只有成功
=COUNTIFS(G21:G631,"=0",H21:H631,">0")

得到了该统计数据后,便可以计算出成功率。

成功率统计的简化方法

场景2、对同一个字段下不同值的出现情况进行统计,一种基于常规数据透视图的方法。
后续研究发现使用二维数据透视表其实能很方便地实现针对不同RID的YES和NO的统计。

在这里插入图片描述

以RID此处即为associationID为行,searchResult为列,同时searchResult也为结果

在这里插入图片描述

再通过上述COUNTIFS函数进行统计即可。

失败情况假设符合度分析

设备的日志与app端日志为分开上传到kibana服务器,需要将app端的最后一次执行搜索失败的时间A与对应的那次设备的启动成功的时间B进行比较。如果 A < B 则证明假设成立,设备尚未启动时即执行搜索当然会出现失败的情况。

场景4、多条件排序的应用:
首先需要根据app端的日志,得到最后一次执行搜索失败失败的时间A,即最后一次返回为NO的时间。这里需要先应用筛选,找到所有为NO的结果,然后需要应用到多条件排序的机制。因为需要区分每一次的搜索,再在每一次的搜索内找到最后一次为NO,即时间最大的一次,并在后续的查找结果中返回,因为VLOOKUP只返回匹配到的第一个结果,故而需要将时间按照降序排列。可看到实际执行的配置如下,先依据ID进行主要排序,再根据时间降序排列

在这里插入图片描述

场景5、筛选后选择复制
为了不影响原始数据,同时便于后续应用VLOOKUP函数 (因VLOOKUP的查找匹配列默认为首列) 应将筛选排序后的结果复制到一个新的表格中,这里常规的复制是不行的,那样只会选择所有行。需选中后使用ctrl+G,进行定位

在这里插入图片描述

并选择定位条件到可见单元格

在这里插入图片描述

通过app端的日志,能够选中所有筛选过的列,此时ctrl+C即可复制这些特定列。然后通过同样的方式获取唯一的ID的列表,根据如下公式即可从原表中筛选得到app端对应id的失败时间戳。

=VLOOKUP(C4,失败改造后原始表!A:K,3,FALSE)

在这里插入图片描述

接下来处理的是设备端的启动时间数据,将其与app端的失败时间进行关联即可得到结果。但是设备上传的内容默认是不带关联ID,该ID是隐含在url中的,故而需要对url进行分列,得到id,格式如下:

http://a.b.c.d:xyz/log/2021-03-09/39/50/89/DEVICEA_LAN_login_9e5fac7364fc8da55d2a4892b36665ae.csv

场景6、分列的应用

选中单元格(最好是新建一列,因为分列会修改原始值)
在这里插入图片描述根据必要的分隔符,此处是 _ 进行分割
在这里插入图片描述
针对不需要的列,勾选不导入对应列即可。
在这里插入图片描述

最终可得到一列的值均为关联ID,类似:9e5fac7364fc8da55d2a4892b36665ae,将该列作为第一列。

=VLOOKUP(C4,设备总表!A:S,6,)

根据VLOOKUP即可将url填写到 app和设备的关联表,再通过url下载设备结果,得到对应时间戳,即可和app的时间戳进行比较,使用COUNTIF进行统计即可得到比例。

在这里插入图片描述

最终数据展示

因为结果涉及到对成功失败比例的体现,以及失败中不同类型的展示,为了方便观察,采用字母表的形式来展示结果。

场景7:通过子母表来展现结果

选择数据区域后,选择如下插入饼图的二维图表中子母饼图即可
在这里插入图片描述

会得到如下的子母图结果,根据原始数据区域得到
在这里插入图片描述

界定子母的标准即哪些数据列放入子饼图,可通过右键 设置图表区域格式选项进行修改,或者直接选中饼图修改结果亦可
在这里插入图片描述

分割依据可选择位置,值,百分比和自定义。
此处选择位置 -第二绘图区的值=3,即第二绘图区中包含3个值。所有选中区域的值的合计为100%,此处一共有4项,即4项合计100%,第二绘图区占4项中的3项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值