康夏散书事件的技术分析:在数据面前,他无能为力
2015-06-13 11:14

康夏散书事件的技术分析:在数据面前,他无能为力

在写这篇文章之前,我特意翻看了一下最近的微博。看到已经有人拿到了康夏的书,并且也收到了退款。那么,至少,随着时间推移,事情的真相会变得更清楚。


我之所以要写这篇文章,其一是因为我和康夏有过两封邮件,一通长电话的接触,帮他做了发书和退款数据的基本整理;其二是因为,从我对Excel这个工具的理解和经验,以及对数据长期的观察,认为康夏卖书过程中间至少有一半的状况是由数据引发,他的确被数据“坑”了;其三,原本过去也就过去了,大家都知道康夏最后选择诀别社交网络,但未来一定还会有个人甚至企业,会在社交网络上发起有商品交易的互动行为,而数据,将决定事件走向“天堂”或“地狱”。


我希望把数据的经验分享出来,以便发起人将来可以作为参考,参与者也更能理解事件的进程。而且,从我个人来讲,以Excel数据状况为事实,想要告诉大家,我们认为的康夏的某些错误,其实他真的无能为力,甚至,已经尽力。


我和康夏本是彻彻底底的陌生人,在这件事之前我没有关注他的微博和公众号,甚至不知道有这么一个人存在。有一天,我看到朋友圈里一位最近刚刚长聊过的,和我育儿理念非常相似,且相互认同的朋友,转发了康夏收到77万元时的第一篇说明文章。而我这位朋友在朋友圈表达的意思是,通过康夏卖书这件事,她发现有很多和她相同的读书人,她很开心。出于对她个人品质的认可,我看完了那篇文章。当时脑子里瞬间出现了两个想法:一是,康夏表现的非常有诚意,是个不错的人;另外,他一定会遭遇严重到他没办法解决的数据问题。由于我信任我这位朋友,爱屋及乌,再加上我的数据观点一直是,原始数据对于数据工作有决定性作用。所以,既然是缘分让我看到了这件事,我决定帮帮他。


我给他发去了一封邮件,说:“我对数据有些研究,觉得你可能马上会面临极大的数据难题。如果到时候需要帮助,就通过邮件联系我。”为了证明我是一个真实存在的人(没办法,互联网上的信息真真假假),我还让他上网搜搜,好确定我不是什么骗子。我是5月19日给他发的邮件,5月20日,他的回复是:“太感动了……非常感谢,已经快被海量数据搞死了。”


接下来的内容,是纯技术性的,Excel用得稍好的人会理解得更清楚一些。如果你压根儿不知道什么是Vlookup函数,也没有听说过数据透视表,也不知道Excel中函数和数据处理的一般原则,那么,这一段你可能无法比较有共鸣的感受到什么叫“数据灾难”。


康夏在后来的文章中反复提到几个东西:1万条支付数据,一个人打款多次,做匹配很难,有的人信息填写不全,支付宝限制20个字。一般人看到这样的文字,都不会有特别的感受,但事实上,数据灾难就藏在这里面。他说的这张支付数据表,我给大家看看。(为了真实起见,我用的是康夏发给我的原始数据,但为了别人的隐私,我把与个人相关的关键数据做了类似遮挡、缩短等处理。我尝试了把图片另存下来,可以看到表格细节。)


1.png


第一点——支付数据太多


这张表一共有11744条支付数据(截图的时候往上挪动了一些,因为这部分数据更有代表性),若用肉眼看,手工整理,假设一条数据10秒,那也不是一般地球人体力和精力能承受的。在企业做过从系统中导出的这样的表的人,就会很清楚其中的痛楚。所以,首先,数据量的确大到超出手工整理范围了。我之所以强调手工,一是因为康夏告诉我他不怎么会用Excel,二是我后面会讲的,这份数据有先天的问题,函数等等只能给到辅助性的处理信息,而没办法真正批量得到最精准的结果。


第二点——支付数据先天有缺陷


表格中蓝色框内的内容,体现了“支付宝限制20个字”以及“一个人多次打款”这两件事。限制20个字带来的严重后果,就是买家必须通过多次打款,每次留20个字,才能填写清楚自己完整的地址以及对于书的喜好,甚至,还要给康夏留言,说两句贴心话。而这件事给后期处理带来的是什么呢?


我们必须假设1万条支付信息中,有名字相同的人,那么,在发书和整理数据的时候,就要把名字相同的人挑出来。而由于一个人就可能形成了多条数据记录,那么,张三(1号)有10条数据(很多个0.1块钱),张三(2号)有5条数据,Excel根本没办法知道,到底有几个张三。传统的“去重”方法不可行,用数据透视表计数的方法也不可行。而且,表格中其他数据,例如“交易号”、“交易创建时间”、“付款时间”等都不能用于辅助判断,到底有多少重名的人。这就为后期的匹配埋下了严重隐患。


你可能会问:为什么要匹配?匹配什么?因为支付数据里,很多人一激动,根本没留地址,甚至电话也没有。那么,康夏就没有办法给他们寄书,也不可能联系到他们(能力和精力都不行)。他就只能从自己的收集渠道,也就是他讲的,公众号、QQ、通讯录、通讯地址上拔下来的,有地址和电话的,给他留言的买家中,用他们的信息再去支付大表里进行匹配,看他们是否已经付款,以及付了多少钱,才能决定,应该给谁发书,发几本。匹配的过程,虽然是Vlookup可以轻易做的,但这中间又有其他问题,所以,Vlookup的最终结果只能说凑合能用,这后面会讲。


第三点——文本信息无法整理


表格中黑色框的部分,一个叫“商品名称”,一个叫“备注”。我不知道买家在操作支付宝的时候是怎么输入的,但显然,在一份原始数据中,有两列文本描述的信息是极大的数据灾难。因为,这两列,有的人填的内容相同,有的人在两列中内容互补,有的人填了其中一列而另外一列没填,有的人把电话写在“商品名称”列,而有的写在“备注”列。


Excel对于数据的判断,是按属性来的,例如:单元格填历史、地理、天文这样的代表科目的属性词。假如单元格内是一句话,要提取其中某个部分可就困难了。你可能说,不是有文本函数可以做吗?对的,文本函数Right/Left/Mid/Search都可以做,但1万行数据要有统一的规律才能批量处理。而像这张支付数据表,文本部分根本没有任何规律可言,且分布在两列里面。这是违反Excel数据结构规则的,所以,它帮不上忙。假设,文本只是分布在两列中,而同一个人的打款记录只有一条数据,那么,用&符号或者Concatenate函数,可以把两部分文本合并到一个单元格,还有可能进行关键信息的提取。


但前面说过,张三可能有9条打款记录,每一条备注了20个字,也就是说,不仅在行方向需要合并单元格内容,在列方向也要合并,这几乎是不可能的。而提取不出支付数据中的关键文本信息,就相当于对买家的身份、联系方式、喜好等一无所知。也许还有人觉得,既然你康夏接了这个活儿,死也得用手工的方式,一条一条把数据对出来,这样才对得起观众。


公平的讲,姑且不说那段时间他有5000封邮件要处理,每分钟微信都会留几百条信息,还要打包,处理各种琐事,就说啥事情也不做,只盯着数据看,一条核对30秒,中间不停,那也是一个时间上的天文数字。


亲身体会数据,比从文字上看要残酷得多


既然说到了工作量的问题,我觉得有必要多说两句。我们平时看文章里写维护10个微信群,一个人去了26个国家深度旅游,或者800条数据要核对。这些数字往往看起来不太累,但真实做起来,却要人命。罗辑思维二期会员招募的时候,一个死磕侠管理10个微信群,一个群几百号人,一分钟就会产生几千条留言,而且每分钟都在产生。你想想,读完都不可能,怎么在里面回复。那时候,我亲眼看见死磕侠们吐血地每天加班到凌晨甚至5点,那是一段回忆起来简直血腥的日子。26个国家深度旅游,看起来没很多吧,但假设一年两次选2个国家深度旅游,26个国家需要13年。从17岁花季要干到30而立。800条数据核对看起来也不多,做做就知道了。


所以,从数据的角度,亲身体会真的比文字上看到的要残酷得多。有时候是尽力而为,但大多数时候是无能为力。


第二张表——康夏自己整理的买家信息


2.png


前面说了那么多,想要证明的是,支付宝导出来的支付数据,由于有先天的缺陷,是无法用于做出发书或退款决定的(退款一会儿详细讲)。于是,康夏通过各种渠道,收集了2607条比较完整的买家信息。接下来,他就面临要将这2607条数据(截止5月23日他给到我的),去到1万条支付数据中进行匹配的工作。


匹配的目的是:第一,看这个买家真实体现在支付宝中的支付金额是多少?第二,看这个买家是否已经支付?前者,用于决定该寄出几本书;后者,用于决定是不是要寄书。这时候,麻烦就来了。两张表唯一可以进行匹配的只有“姓名”,在支付数据中叫做“交易对方”。姓名这件事很容易出问题,按照Vlookup的默认规则,只能匹配出第一条数据,当有相同名字的人存在于支付数据中时,Vlookup无法精确判断谁和康夏收集的这个名字对应。这是处理后的数据可能不精准的第一原因。


匹配到对应的名字后,要通过Vlookup提取他/她具体支付的款项。由于支付数据中一个人可能打款9次,第一条记录也许是0.1块钱,这就不对。那么,把支付数据中的金额先按降序排列,再匹配呢?也不行。因为,有的人是8个0.1块,1个99块,可以用99块作为最终结果。而有的人是3个30块,那么,Vlookup只能匹配出其中一个30块来,就产生极大的错误了。


假如先用数据透视表,按“交易对方”,也就是人名做金额的汇总后,再用Vlookup匹配,行不行?也不行。因为,在1万条支付记录中,我们根本不知道有几个重名的人。数据透视表会把他们的金额加在一起,而这时候做出来的金额匹配,会出更大的问题。康夏有可能给张三(1号)寄去了6本书,但实际上,他只付了3本书的钱,而另外一个张三(2号)就会给了钱没有收到书,后期还收不到退款,这事儿就闹得更大了。


我想说这根本不是人干的活儿,没错,进退两难,有心无力。


各种数据缺陷下的折衷方案


从任何角度来讲,我都没有立场帮康夏决定应该寄书给谁。所以,我提供的仅仅是数据的初步整理和匹配,并且尽量给他更多的数据维度以便他做决定。同时,设定好退款清单的自动获得,这件事很重要。至于那张表他最后是怎么使用的,我也不得而知,能确定的是,这应该为他节约了至少一周的时间。兵荒马乱中,能争取到时间就很宝贵了,康夏自己在一篇文章中开心地说快了半个月,当然,后来都删了。最终的寄书清单和退款清单,也许是从这张表来的。


3.png


这张表用名字,从2607条完整的买家数据中,匹配出了已经支付的1896个买家,并且提取了一条对应的备注信息用于参考,以及与收集来的地址做可能的对照。


5.png


他要做的是,根据自己的判断,从1896个买家中选出要寄书的人,在表格的“发货标记”列选中“是”,这些数据就会返回到1万条支付数据中,将对应的人标记出来。那么,剩下的就是需要退款的买家清单。由于支付宝已经答应帮他做统一的退款,但清单需要他提供。所以,康夏必须先搞定所有的数据,把寄书的清单确定下来,甚至可能把书真实的寄了,才能给到支付宝一份最终的退款数据,退款这件事才能开始进行。


康夏在这件事上没有撒谎,退款的确不是点一个按钮就可以完成的,那么多个0.1块钱,假如他自己进行了一部分操作,后续数据的对应就更加难上加难,到时候场面会完全失控。


结语


过去的一段时间,很多文章从社交和互联网方面,分析了康夏卖书事件演变过程中的种种原因和结果。孰是孰非,真相如何,我确定我自己也搞不清楚。就像有一篇文章说,对于一个事件,局外人就算以为自己知道了所有细节,其实也不知道其中真正的细节。


我不愿意去揣测康夏的心思,但也没办法相信网络上各方的言论,只是凭着自己原始的感受,以及有限的接触,包括上面讲到的数据灾难。我会觉得,他并不可恶。真正要作恶的人,应该不会和自己的父母一起来干这件事,也许请临时工会更好。对于即将留学的人,大部分都会至少准备半年吧,而临到走之前,谁又会愿意给自己惹一身事呢。再有,康夏也不是一个突然从石头里蹦出来的人,他之前在公众号里的形象,对于关注他的人来说,也是认可才会参与到这个事件里来的。我是愿意相信这里面有信息不对称所导致的误会,也有一个人面对突发网络事件的措手不及,同时,在特定情况下脑子短路也许会做不当选择的可能。


无论怎样,一棒子打死一个人,否定他的所有过去,是没必要的。而且,他在自己的公众号和自己的粉丝玩了一件事,这点自由还是应该给他的。就像蔡康永在康熙来了有一集中,对黄国伦的建议:你家不收拾,只要你们夫妻俩自己受得了就行,其实,也不关别人的事。但是,以后倒也不用再把没有收拾的照片拿出来吓人。康夏卖书事件至此,至少,慢慢已经有人收到书,收到退款了。而康夏本人,因为这件事离开了社交网络。一阵风起云涌,终归回到平静。


祝福大家。


伍昊

于2015/6/13凌晨

本内容为作者独立观点,不代表虎嗅立场。未经允许不得转载,授权事宜请联系hezuo@huxiu.com
如对本稿件有异议或投诉,请联系tougao@huxiu.com
正在改变与想要改变世界的人,都在 虎嗅APP
赞赏
关闭赞赏 开启赞赏

支持一下   修改

确定