虽然好几回告诫自己,白天做的东西要尽可能记下来,否则过一段时间自己会忘的。但是,由于平时主要在“学习”,也就是看论文、学软件、算法等,所以觉得自己实际上做的事情很少,也很散,就懒得记笔记。或者仅仅是按自己的一些想法记点东西,却不系统整理。

日积月累,毕业课题到现在已经2个多月了,数据已收集完毕,网站也做成。不知不觉那些繁琐的事情我都搞定了。

本觉得做网站、收集数据都是靠程序做的,而且我会点编程,这些事完全是靠脚本完成,因此觉得所有的步骤全在程序里,养成写注释的习惯就行。


今日想回顾一下自己做的一些事情,写点东西,却发现我只能记得个大概(比如最初是靠什么作为“种子”开始寻找,然后搜集什么),而我写的程序也只能看懂执行函数名字,至于当初建立的模型(类)以及相关函数,已经忘得差不多,也不肯去“复习”,注释本来就不多,写的内容也不想看。最后花了我好一会儿,才依稀记起了一年我的数据收集过程。


讲下我的收集程序设计理念,是面向对象与面向过程的综合使用:

我研究分子与蛋白,这是两个类,他们有自己的属性,如名字、序列等,而相关的函数就包含

1.从原始数据中挖掘信息(比如从CheMBL中获得某个分子的名字、结构以及与之有活性的蛋白信息,需要调用数据库)

2.为输出做准备

我用的输出方法全是csv.DictWriter,所以每个分子的输出就是一个字典:

{‘compound_id’:xx,’name’:xx,…}

蛋白情况与之类似。


收集数据会有很多繁杂的事情,比如文件输入输出(因为收集数据不能一次完成,要靠文件中转,否则一步出错就要重头来过)。

就如我就是这个顺序,种子蛋白->所有需求蛋白->相关分子->分子蛋白相互作用信息。一步一步来,每做完一步,就保存一个文件

从这点来说,就是面向过程的。我的程序框架也就很简单

program

|execute.py

|main.py

|____model.py


model.py就是上述提到的数据模型(类)。main储存是功能性函数(用main这个词不大好,其实是最初只想用这一个文件,后来发现不大好),execute记录的是所有面向过程函数

#execute.py

from model import

from main import

#—–函数定义层—–

def require_protein():

‘…’

#其中会穿插着main中的过程函数以及model中的模型

def relevant_molecule():

‘…’


#—–执行层—–

require_protein()

relevant_molecule()


面向对象的贬称思想很重要,许多编程习惯也有待慢慢养成。至今也不知类似的“收集”数据的程序如何让他系统化。看我现在写的那点破东西,感觉还是乱的狠。 面向过程虽然很好理解,但再次回顾,可能就会很乱(因为当初只想着越方便越好),系统性很差。而面向对象的思想需要更严谨地设计,我只是贪图了“便于理解”的考虑,而非真正利用。