
康夏散书事件的技术分析:在数据面前,他无能为力
在写这篇文章之前,我特意翻看了一下最近的微博。看到已经有人拿到了康夏的书,并且也收到了退款。那么,至少,随着时间推移,事情的真相会变得更清楚。
我之所以要写这篇文章,其一是因为我和康夏有过两封邮件,一通长电话的接触,帮他做了发书和退款数据的基本整理;其二是因为,从我对Excel这个工具的理解和经验,以及对数据长期的观察,认为康夏卖书过程中间至少有一半的状况是由数据引发,他的确被数据“坑”了;其三,原本过去也就过去了,大家都知道康夏最后选择诀别社交网络,但未来一定还会有个人甚至企业,会在社交网络上发起有商品交易的互动行为,而数据,将决定事件走向“天堂”或“地狱”。
我希望把数据的经验分享出来,以便发起人将来可以作为参考,参与者也更能理解事件的进程。而且,从我个人来讲,以Excel数据状况为事实,想要告诉大家,我们认为的康夏的某些错误,其实他真的无能为力,甚至,已经尽力。
我和康夏本是彻彻底底的陌生人,在这件事之前我没有关注他的微博和公众号,甚至不知道有这么一个人存在。有一天,我看到朋友圈里一位最近刚刚长聊过的,和我育儿理念非常相似,且相互认同的朋友,转发了康夏收到77万元时的第一篇说明文章。而我这位朋友在朋友圈表达的意思是,通过康夏卖书这件事,她发现有很多和她相同的读书人,她很开心。出于对她个人品质的认可,我看完了那篇文章。当时脑子里瞬间出现了两个想法:一是,康夏表现的非常有诚意,是个不错的人;另外,他一定会遭遇严重到他没办法解决的数据问题。由于我信任我这位朋友,爱屋及乌,再加上我的数据观点一直是,原始数据对于数据工作有决定性作用。所以,既然是缘分让我看到了这件事,我决定帮帮他。
我给他发去了一封邮件,说:“我对数据有些研究,觉得你可能马上会面临极大的数据难题。如果到时候需要帮助,就通过邮件联系我。”为了证明我是一个真实存在的人(没办法,互联网上的信息真真假假),我还让他上网搜搜,好确定我不是什么骗子。我是5月19日给他发的邮件,5月20日,他的回复是:“太感动了……非常感谢,已经快被海量数据搞死了。”
接下来的内容,是纯技术性的,Excel用得稍好的人会理解得更清楚一些。如果你压根儿不知道什么是Vlookup函数,也没有听说过数据透视表,也不知道Excel中函数和数据处理的一般原则,那么,这一段你可能无法比较有共鸣的感受到什么叫“数据灾难”。
康夏在后来的文章中反复提到几个东西:1万条支付数据,一个人打款多次,做匹配很难,有的人信息填写不全,支付宝限制20个字。一般人看到这样的文字,都不会有特别的感受,但事实上,数据灾难就藏在这里面。他说的这张支付数据表,我给大家看看。(为了真实起见,我用的是康夏发给我的原始数据,但为了别人的隐私,我把与个人相关的关键数据做了类似遮挡、缩短等处理。我尝试了把图片另存下来,可以看到表格细节。)
第一点——支付数据太多
这张表一共有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条数据核对看起来也不多,做做就知道了。
所以,从数据的角度,亲身体会真的比文字上看到的要残酷得多。有时候是尽力而为,但大多数时候是无能为力。
第二张表——康夏自己整理的买家信息
前面说了那么多,想要证明的是,支付宝导出来的支付数据,由于有先天的缺陷,是无法用于做出发书或退款决定的(退款一会儿详细讲)。于是,康夏通过各种渠道,收集了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号)就会给了钱没有收到书,后期还收不到退款,这事儿就闹得更大了。
我想说这根本不是人干的活儿,没错,进退两难,有心无力。
各种数据缺陷下的折衷方案
从任何角度来讲,我都没有立场帮康夏决定应该寄书给谁。所以,我提供的仅仅是数据的初步整理和匹配,并且尽量给他更多的数据维度以便他做决定。同时,设定好退款清单的自动获得,这件事很重要。至于那张表他最后是怎么使用的,我也不得而知,能确定的是,这应该为他节约了至少一周的时间。兵荒马乱中,能争取到时间就很宝贵了,康夏自己在一篇文章中开心地说快了半个月,当然,后来都删了。最终的寄书清单和退款清单,也许是从这张表来的。
这张表用名字,从2607条完整的买家数据中,匹配出了已经支付的1896个买家,并且提取了一条对应的备注信息用于参考,以及与收集来的地址做可能的对照。
他要做的是,根据自己的判断,从1896个买家中选出要寄书的人,在表格的“发货标记”列选中“是”,这些数据就会返回到1万条支付数据中,将对应的人标记出来。那么,剩下的就是需要退款的买家清单。由于支付宝已经答应帮他做统一的退款,但清单需要他提供。所以,康夏必须先搞定所有的数据,把寄书的清单确定下来,甚至可能把书真实的寄了,才能给到支付宝一份最终的退款数据,退款这件事才能开始进行。
康夏在这件事上没有撒谎,退款的确不是点一个按钮就可以完成的,那么多个0.1块钱,假如他自己进行了一部分操作,后续数据的对应就更加难上加难,到时候场面会完全失控。
结语
过去的一段时间,很多文章从社交和互联网方面,分析了康夏卖书事件演变过程中的种种原因和结果。孰是孰非,真相如何,我确定我自己也搞不清楚。就像有一篇文章说,对于一个事件,局外人就算以为自己知道了所有细节,其实也不知道其中真正的细节。
我不愿意去揣测康夏的心思,但也没办法相信网络上各方的言论,只是凭着自己原始的感受,以及有限的接触,包括上面讲到的数据灾难。我会觉得,他并不可恶。真正要作恶的人,应该不会和自己的父母一起来干这件事,也许请临时工会更好。对于即将留学的人,大部分都会至少准备半年吧,而临到走之前,谁又会愿意给自己惹一身事呢。再有,康夏也不是一个突然从石头里蹦出来的人,他之前在公众号里的形象,对于关注他的人来说,也是认可才会参与到这个事件里来的。我是愿意相信这里面有信息不对称所导致的误会,也有一个人面对突发网络事件的措手不及,同时,在特定情况下脑子短路也许会做不当选择的可能。
无论怎样,一棒子打死一个人,否定他的所有过去,是没必要的。而且,他在自己的公众号和自己的粉丝玩了一件事,这点自由还是应该给他的。就像蔡康永在康熙来了有一集中,对黄国伦的建议:你家不收拾,只要你们夫妻俩自己受得了就行,其实,也不关别人的事。但是,以后倒也不用再把没有收拾的照片拿出来吓人。康夏卖书事件至此,至少,慢慢已经有人收到书,收到退款了。而康夏本人,因为这件事离开了社交网络。一阵风起云涌,终归回到平静。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
R 语言:数据科学与科研领域的核心工具及优势解析 一、引言 在数据驱动决策的时代,无论是科研人员验证实验假设(如前文中的 T ...
2025-09-08T 检验在假设检验中的应用与实践 一、引言 在科研数据分析、医学实验验证、经济指标对比等领域,常常需要判断 “样本间的差异是 ...
2025-09-08在商业竞争日益激烈的当下,“用数据说话” 已从企业的 “加分项” 变为 “生存必需”。然而,零散的数据分析无法持续为业务赋能 ...
2025-09-08随机森林算法的核心特点:原理、优势与应用解析 在机器学习领域,随机森林(Random Forest)作为集成学习(Ensemble Learning) ...
2025-09-05Excel 区域名定义:从基础到进阶的高效应用指南 在 Excel 数据处理中,频繁引用单元格区域(如A2:A100、B3:D20)不仅容易出错, ...
2025-09-05CDA 数据分析师:以六大分析方法构建数据驱动业务的核心能力 在数据驱动决策成为企业共识的当下,CDA(Certified Data Analyst) ...
2025-09-05SQL 日期截取:从基础方法到业务实战的全维度解析 在数据处理与业务分析中,日期数据是连接 “业务行为” 与 “时间维度” 的核 ...
2025-09-04在卷积神经网络(CNN)的发展历程中,解决 “梯度消失”“特征复用不足”“模型参数冗余” 一直是核心命题。2017 年提出的密集连 ...
2025-09-04CDA 数据分析师:驾驭数据范式,释放数据价值 在数字化转型浪潮席卷全球的当下,数据已成为企业核心生产要素。而 CDA(Certified ...
2025-09-04K-Means 聚类:无监督学习中数据分群的核心算法 在数据分析领域,当我们面对海量无标签数据(如用户行为记录、商品属性数据、图 ...
2025-09-03特征值、特征向量与主成分:数据降维背后的线性代数逻辑 在机器学习、数据分析与信号处理领域,“降维” 是破解高维数据复杂性的 ...
2025-09-03CDA 数据分析师与数据分析:解锁数据价值的关键 在数字经济高速发展的今天,数据已成为企业核心资产与社会发展的重要驱动力。无 ...
2025-09-03解析 loss.backward ():深度学习中梯度汇总与同步的自动触发核心 在深度学习模型训练流程中,loss.backward()是连接 “前向计算 ...
2025-09-02要解答 “画 K-S 图时横轴是等距还是等频” 的问题,需先明确 K-S 图的核心用途(检验样本分布与理论分布的一致性),再结合横轴 ...
2025-09-02CDA 数据分析师:助力企业破解数据需求与数据分析需求难题 在数字化浪潮席卷全球的当下,数据已成为企业核心战略资产。无论是市 ...
2025-09-02Power BI 度量值实战:基于每月收入与税金占比计算累计税金分摊金额 在企业财务分析中,税金分摊是成本核算与利润统计的核心环节 ...
2025-09-01巧用 ALTER TABLE rent ADD INDEX:租房系统数据库性能优化实践 在租房管理系统中,rent表是核心业务表之一,通常存储租赁订单信 ...
2025-09-01CDA 数据分析师:企业数字化转型的核心引擎 —— 从能力落地到价值跃迁 当数字化转型从 “选择题” 变为企业生存的 “必答题”, ...
2025-09-01数据清洗工具全景指南:从入门到进阶的实操路径 在数据驱动决策的链条中,“数据清洗” 是决定后续分析与建模有效性的 “第一道 ...
2025-08-29机器学习中的参数优化:以预测结果为核心的闭环调优路径 在机器学习模型落地中,“参数” 是连接 “数据” 与 “预测结果” 的关 ...
2025-08-29