我在使用R语言的pdftools时,报错不能识别中文字体,如何解决?
这个问题非常专业,既涉及到R语言编程,还涉及到PDF文档的处理,还有令人头大的中文编码问题。
也许提问者会得到非常详尽的技术指导,花上六个小时解决这一问题。但是他最初是想做什么?
原来他只是有几份PDF要拼接到一起,是一个一次性的任务。但他第一反应就是去写程序解决这个问题。
所以,提问时不能只描述「我在做什么的过程中遇到了什么问题」,而要把问题的背景描述清楚。
如果这么问,只要五分钟就能解决问题:
我有几份PDF要拼接到一起,目前试图用R语言编程拼接,但是pdftools报了中文字体无法识别的错误。
我在使用R语言的pdftools时,报错不能识别中文字体,如何解决?
回答者就会意识到,提问者并不是R-specific的,他的目的是拼接PDF。于是回答者就会说:
你可以去smallpdf.com在线处理自己的PDF文档,不一定要用R。
回答者视角
在我司,数据科学家/数据分析师除了团队内部的项目,还有一部分工作是帮助商业分析师处理数据,比较像「回答者」。
回答者作为提供技术帮助的人,会提供详细的技术解答,或者快速响应商业分析师的需求。快速响应不是坏事,但是不清不楚地快速响应,往往会导致「不知道自己在做什么」,甚至忽视了问题中的坑,导致工作返工。
这个时候就要搞清项目背景,而不要急匆匆地开始工作。也就是说,即便提问者提出来一个不好的Y问题,作为回答者也需要主动去多问一句,你想做的X是什么?
例如,去年刚入职的时候,我收到一位商业分析师的需求(有改动):
我有一组数据,需要你按照A、B列分组,统计C列的加总,再按照A、B、C倒序排列,每组取C列出现的第一个B值。如果同一个A、B组里有两个相同的C值,那么随意取一个B。
商业分析师可能是怕给我增加工作量,所以把处理的每一步都详细地写了出来,只要我用代码实现即可。但是这个需求是什么意思?如果直接照做,可能落入提问者都没发现的数据陷阱中。
于是需要问,做这个的目的是什么?这个数据是什么意思?
原来是这样的:
这是一份用户年度消费去向的数据,A列是用户的ID,B列是消费类目(食物、影音娱乐、旅行、电子产品等),C列是消费的数值。商业分析师其实是想找到这一年中,每个用户最大的消费类目是哪个。
于是,你可以找到非常方便的方法处理,而不需要接受提问者的「技术指导」。例如,一份R的代码如下:
income_source_stat = income_source[, .(channel_sum = sum(C)), .(A, B)] %>% setorder(A, B, -channel_sum) income_source_stat[, rank:=rowid(A)] income_source_top = income_source_stat[rank==1]
此外,你还可以发现数据的异常值,例如有些消费金额是负数,有些是NA,这些显然不能直接加总处理,需要和提问者探讨,看看如何处理。也许是这份数据本身就出了问题,需要从源头上更换——也许这样就避免了一次无谓的返工。
小结
最后再重复一句,在工作中,不论是「提问者」还是「回答者」都需要确认问题的最初目的,不要沉迷于一个特定的方案细节而忽视了整体背景。
参考链接