我的代码数据管理方法
风乎舞雩(今天的不开心就止于此吧)
今天看到一个关注的豆瓣朋友的吐槽:“赛博文件管理依然像狗窝,所以这个世界上有没有简单易follow的data/code management 教程啊。”
因为回复没法发图片,所以开一个帖子,来说说我现在在用的方法。不是最完美的,但是我目前用着还行。希望能帮到这位朋友,也帮到有需要的uu。
叠甲:社科专业(非CS),所以,方法未必是最专业的(在计算机系看来),我非常想请教大佬,有没有更好的软件和方法,如果有的话,期待回复,如果说不清推荐开贴,我一定第一时间去点赞。
需求:我希望这个工具能展现我的文件系统(code & data),并且能展现我code的逻辑关系,能展现数据的依赖路径,并且可以在任意节点或者空白处写note。能搜索,能插入图片(如果可以的话)。
解释:因为我非常需要图形显示来展现逻辑,这个比较符合科研数据处理的工作流,这个和计算系工程软件开发不太一样(个人感觉,术语使用可能不当)。我知道有github类工具可以管理版本,但是我一直没学会,也不清楚TA如何能解决我上面的需求,希望大佬能解答。
正文:
我使用了一款叫MindMaster的工具,中文名叫亿图。它本身是一款流程图、思维导图软件,但是我发现它的功能之强大,远超同类竞品。并且稍作调整,可以几乎完美契合我上述的需求。
首先,我的项目可以创建很多个版本,每一个版本都用"Code_X", X是数字,来命名。因为版本,本质上其实是代码。这每一个版本,对应了相应的代码文件夹。下面展示了MindMaster底栏的tabs,和Excel类似。

下图是项目的文件夹。

下图是每一个tab里的具体内容,展示Code_7的粗略概览(后有细分)。

没错,这是第7版了(因为你永远不知道你的导师或者coauthor会提什么奇奇怪怪的要求)。
啰嗦一句,我相信用Code_X的方式来命名,一定会让强迫症或者完美狂,发疯。这数字代表了什么意思?1年后我打开,我怎么可能知道这第7版是什么意思?这对于我这个强迫症和完美狂来说,是不能接受的。所以,如下图所示,每个图里,都会有一个根节点,这个根节点,我就会写上注释,告诉我自己,这个版本主要是干嘛的。

所以 ,可以注解,我就放松了对命名可读性的要求。如果不能注解,不能检索,就需要对命名可读性严格一些。二者选其一就行。多年经验,在可以检索可以注解的情况下,依然很严格地来命名,其实不太需要。这种是完美到极致的人,是艺术,但是普通人如我,没必要,有点浪费精力(导致名字太长,下面底栏都延伸到南极去了)。
如概览图所示,这个软件的好处是,可以有很多种展现逻辑关系的方式。比如我就用到了总分式,流程图,下拉式。这三个是我最常用的。
绿色的圆角矩形节点,其实是我的步骤,不是代码也不是数据,只是说这一步的主题是什么。比如,有Summary,Market,Operating,Other等等。那么我相应的代码都是放在了这些主题节点下面的。流程图这样的设计,展现了一个一个步骤,可以和文章的逻辑关系对应起来。
然后,再讲下拉式,也就是每一个绿色主题节点下面具体的code节点。这里面我会存储具体的代码。比如“Eval_XXXX_performance.R”。我怎么知道这个代码在哪里?它一定是在Code_7文件夹里面的。然后在这个"Eval_XXXX_performance.R"节点下面。我主要会做2件事情:标注输入输出和写注解
- 标注输入输出:我使用了什么数据集(从哪里开始的?)。我输出了什么?清洗好的数据?表格?图片?(从哪里结束)。输入输出是最重要的。1年后再看这个图,立马能从代码名称、输入输出,理解自己到底干了什么。
- 输入输出的格式之一:我使用的是,路径名称,注意,是相对名称(是你项目根目录下的路径)。(歪楼:强烈推荐使用项目管理的方式,比如在R里用Rproject,然后所有代码都使用相对路径,好处是,把你的项目文件夹移植到任何一台电脑,都可以直接运行。)(技巧:如果快速获取文件的相对路径名?R mac: cmd+c 文件,cmd+v到R的editor或者console,前提是你正确设置了Rproject。 其他软件stata等,貌似可以获取绝对路径,自己截一下吧。)其实用绝对路径也没问题。
- 输入输出的格式之二:用路径的好处是什么?你只需要看这个图就行了。想打开“XXXXX.R”代码文件是吧?直接复制,然后在电脑全局搜索框里,输入,立马定位到,直接打开。(Windows可搭配Listary使用)另外,你也可以在该图内部进行搜索。code太多了?只记得一个关键词“ABC”?那么直接搜就行了,可以定位到对应节点。
- 输入输出的格式之三:另外,更酷的地方在于,MindMaster帮你做了文件超链接,也就是说,你可以直接把你的每一个item,链接到对应的文件夹、文件。进一步释放完美狂无处安放的精力。我自己没弄这步,这是艺术,但是没必要,所以没弄。
- 输入输出的格式之四:MindMaster好用的地方在于,他可以在你的item前面加上小图标。你可以根据自己的习惯,建立一套图标体系,这样一目了然,如图红字所示。

- 写注解:MindMaster的注解功能非常厉害。首先,它可以在任意的item上进行注解。所以,你既可以对code进行注解,也可以对输入输出(上图子节点)来进行注解。做到哪里不会,点哪里。另外,注解的格式内容非常丰富。可以插入图片、latex(不过是以图片形式)。
- 我对注解的理解之一:为什么需要注解?因为,你很有可能在代码里写上一些很重要的备注。这个备注是跟着代码走的。
- 我对注解的理解之二:为什么不把这个注解写在代码里?技术性、过于细节的东西我会写在代码里,但是非常重要、概念性地、总结性的东西,我会写在相应代码节点的注解里。写在代码里的弊端在于,1)它是分散的,不仅分散在各个代码文件,也分散在代码文件里的不同段落(当然你也可以在代码的开头写上总结性注解,我只是没有这个习惯)。2)代码编辑器是不太适合做复杂注解的,大多数只能写无格式文字。
- 我对注解的理解之三:为什么不用另一个更好用的笔记工具来记注释?MindMaster的注解,对于做笔记来说,只能说够用,但是如果和专业笔记软件,比如Notion、Obsidian、一众Markdown软件来对比,肯定是比不上的。那么为什么我不用其他笔记工具来记呢?那样的书写体验和阅读体验不是更好吗?原因是:统一性。我个人多年的经验,凡是越是割裂感强的工具、越是分散的工具,就越容易最后吃灰。另一个我信奉的观点:Less is more。科研编程本身就已经够复杂的了,够吃精力的了,多用一个工具,真的有时候顾不过来。虽然它有100分,但是80分的工具就已经够用了。代码、注解、输入输出等,全都在这张图里。工作、回顾、查资料的时候,只需要打开这张图就行,不需要去别的地方找了。
- 注解的例子:下图是一个注解的例子。这个代码,输出了一个重要的数据集。变量很多,命名复杂,所以我就记录了每个变量是什么意思,插了一张示意图。以后回顾的时候,看看就行。或者以后交论文,需要写数据备注的时候,也可以参考这个。

关于版本更迭(可跳过):
- 如果新的需求是在原有版本基础上进行补充,那么我只需要在对应的主题(绿色圆角矩形)下,新建立一个节点就行,完美融入到现有的体系中。
- 如果新的需求大到需要更迭版本,那么我就新开一个Code_X。数据的话,我也会放到对应的数字的数据文件夹Data_X。但是,如果我需要调用旧版本的数据,我不会另外再复制一份到Data_X里。比如2版本的数据是Data_2/Firms_tts.dta,在3版里,我需要用这个数据,那么我直接在Data_2文件夹里读取它。而不会再复制一份同样的数据到Data_3/Firms_tts.dta。再复制一份,尽管能保证完美性,但是真的没必要,浪费空间。
- 那么这样,不会导致混乱嘛?世上没有十全十美的事情,不能既要又要。另外,其实因为有这个方法的帮助,使得,我的文件多且杂,但是并不乱。我总是能快速定位,理清逻辑,然后上手开干。
- 而且,我不会删除旧版本(这点我不清楚是不是最优的)。因为如果整个项目真的完结了,我会让它下线,从Dropbox里移除,放到我本地的机械硬盘里。所以它多大多占空间都没事,机械硬盘等着它。因为不删旧版本和旧数据。使得我可以复现,任意时间节点的状态。
最后写一写我的工作流(可跳过):
- 我开一个code文档,然后就写。R的话,你可以不用着急命名,可以不立即保存,因为哪怕突然关机,再打开东西都在。但是Stata不行,不保存没了就没了。我可能会先用个temp来命名(除非我明确知道这个code要干嘛)。然后正常写和玩数据就行了。这一步,我不会着急把东西写到MindMaster里,因为我不确定,这是不是成品。
- 如果我很明确,这就是我要的成品代码了。那么,我会重新命名,取个有含义的名字。然后在MindMaster里建一个节点。接着,重新审视我的代码,从头至尾,只要有输入和输出的地方,我就复制粘贴到MindMaster里该代码节点下面,形成子节点。这个过程,其实不复杂,熟悉了挺快的。
- 如果需要写注解了,就写在MindMaster对应的位置。
- 整个图,会保存成emmx文件,建议保存在自己的同步盘里,比如Dropbox,或者国内的坚果云(当年出国前一直在用,不知道现在还是不是国内NO.1)了。这样在任意机器都可以打开。
差不多就这些吧,应该是无了,😂。希望对大家有帮助。或者有任何想法和建议,欢迎留言交流。
你的回复
回复请先 登录 , 或 注册相关内容推荐
最新讨论 ( 更多 )
- 吐槽|读研最可怕的是感觉心气没了 (兴花雾记牛肉丸)
- 博四了,对学术失去兴趣了正常吗 (童年走远)
- 吐槽|明天答辩了,这两天一直觉得什么都没意思 (要在上午起床)
- 经验分享|6个月写完英文毕业论文的经验 (福尔摩橘🍊)
- 论文被权威期刊录用啦,大家快来接Accept (朝花夕拾)