## 用Git+R实现项目管理和自动化 阿弥陀佛!欢迎来到Git+R大讲堂!我是唐三藏,英文名SanzangTang。今天我将给您讲解git和R的一些基础知识,以及使用Git+R做项目托管和自动化的背景、优势和一些基本的概念。希望通过我的讲解能够让您对Git和R有个基本的了解。为了方便起见,下文将Git+R简写为GitR。 ### Git 和 R是什么 * Git是一个版本控制系统,也可以看作一个带版本控制功能的文件数据库。目前主要用于软件开发的代码管理和团队协作。 * R是一种编程语言,因强大的统计分析功能及大数据领域的卓越表现,正在或者已经成为超越Matlab和SAS的数据科学领域的主流语言。 ### Git为什么要和R结合 * 越来越多的科研人员使用Git管理科研项目,而科研项目的核心是数据,是数据分析,是数据的可视化,是数据的发布与共享,这些都是通过R实现的。因此Git+R是十分自然的组合。 * R不仅是统计分析的专家,还是一个功能强大的编程语言。Git提供了一个项目寄宿的空间,R则可以接管项目中的所有其他任务,实现项目的自动化。 ### 为什么要用GitR? * 安全存储:办公室、实验室、家里、旅途中,随时随地工作。即使电脑崩溃,项目数据可完全修复,不会丢失。 * 版本管理:自动跟踪项目变动信息,用版本追踪项目执行过程中工作流程的变动,对比文件的更改,用分支记录执行过程中思路和工作的变化。 * 团队协作:提供简单易用的团队工作环境。团队成员在同一个项目载体上工作,保证了项目的统一与协调,同时又通过分支隔离团队成员的工作,保证其相对的独立性。 * 工单系统:工单系统实现项目任务的合理分配,进展监控,结果审核与最终的集成。发现问题,随时随地讨论解决的办法。比定期的学术交流更及时,更有针对性。 * wiki系统:使用wiki系统对项目的目标、思路、方法、路线、数据、结果等进行详细的描述,让潜在的协作者清楚的了解你的项目,有利于为社区同行作出贡献。 * 项目网站:每个项目对应一个项目网站,展示项目的成果、数据、图表,加强宣传的效果。对于公益性监测站项目,可作为监测数据的发布窗口。 * 符合多数人的习惯:git的存储介质是文件,以文件夹形式组织,符合大多数人的工作习惯,本地仓库以隐含文件的形式存在,正常显示模式下根本看不出有什么不同。 * 可扩展性:与关系数据库相比,文件的数据结构更加灵活,能够适应多样的试验类型。一般试验的数据量很小,用文件存取速度更快。现在的模型软件也都以文件作为输入,因此也利于建模。 * 数据采集自动化:Git可用于实现数据采集自动化,相比于webAPI数据接口,Git文件更加灵活,也更容易实现。尤其是网络不稳定的情况下,不需要考虑数据的暂存和延迟提交问题。一般的数据分析仪器都以文件存储数据,只要将目标存储地址设为项目的数据文件夹,就一切OK:数据整理->数据分析->绘制图表->试验报告->网站发布,几秒钟之内即可完成。 * 数据分析自动化:对于两年、三年甚至多年的重复实验,每年的数据处理方法相同,对于观测类项目,数据格式固定,处理方法也固定,处理程序可重复使用,Git+R可实现数据自动处理,一次开发,多次使用。这个外国人叫reproductive research。有了数据,分析工作就已经完成了 。这样可以防止数据积压,来不及处理的情况,并根据结果及时调整试验方案。 * 试验报告自动化:对于两年、三年甚至多年的重复实验,每年的数据处理方法相同,对于观测类项目,数据格式固定,处理方法也固定,处理程序可重复使用,GitR可实现数据自动处理,一次开发设计,多次使用。有了数据,分析工作就已经完成了 。这样可以防止数据积压,来不及处理的情况,并根据结果及时调整试验方案。 * 撰写文章半自动化:根据期刊的格式要求制作文章模板。这个需要LaTeX基础,由专人定制,一般人只要关心数据、分析方法就行了。这样可以减少因格式问题带来的麻烦。我们只要编辑简单的文本,word、pdf、LaTeX,随你要啥,一键生成。不同期刊任意切换。 * 半自动化的意思是,文档结构,格式,表格、图表、参考文献等基本素材自动生成,而思想、逻辑、结构、句法、修辞、文字,还得靠自己。 ### GitR怎么实现? * 系统组成:一个项目托管系统,寄宿项目的主仓库。多个终端,存储个人仓库。主仓库用于项目文件的克隆,工单分发,个人仓库提交合并,交流讨论。终端可以是个人电脑、手机,也可以是观测站、样品分析仪器、传感器,这些仪器一般都会带有一台电脑,或者aduino、raspberry之类的超微电脑,用于数据录入,数据采集和预处理。 * 需要的软件:服务器端如何实现不需要普通用户关心;客户端不管是电脑还是数据采集设备,都需要一个git客户端软件;用于数据分析的电脑需要安装R和相关的函数包,如dplyr、ggplot2、rmarkdown等;推荐使用rstudio编辑和管理。 * 如果嫌安装配置麻烦,如rstudio对中文不太友好,可以使用服务器版,所有安装配置问题不用操心,拥有一个账号就行了,而且非常好用。换句话说,最极端的情况下,你只要有一个账号就一切OK,当然,你得有一台能联网的电脑。 * 对于一个几十人的组织而言,理想的配置是这样的。一台中高性能的服务器,可以自备,最好是租赁,如阿里云、华为云都行,他们会提供一个外部出口,价格一万元左右的就够用了。自备一个高性能服务器,安装rstudio server等相关软件,作为组织成员的工作空间。所谓高性能的服务器,其实只要一个好一点的台式机就可以了。 * 如果需要较大规模的计算,如土壤气象作物模拟,数据挖掘,可以利用本单位的个人计算机,共享部分闲置计算能力,建立集群(其实一般用不着)。要实现GitR项目管理和自动化,用docker建立swarm就可以了。这对每个成员的工作几乎没有影响,但却用这些旧计算机建立了一个强大的共同工作空间。我用两台微型计算机建立了一个最小的swarm集群,实现了负载均衡,实验证明这种共享模式是可行的。 * GitR系统的实际建筑过程还是要费些周章的,具体的理论、方法、技巧三言两语也说不清楚。科研人员也不一定要搞清楚,否则就违背了GitR的初衷了。GitR的目标是让专业人员的精力集中到专业中去。当然,一个宏观大致的了解还是必须的,知其然也知其所以然,便于更好地应用。我会有个通俗的教程帮助大家对此有个概念性的了解。 ### GitR实例:盆栽试验数据自动采集与分析项目 * 继承“看苗施肥”的旧思路,坚定给作物“号脉”的大理想,实现“刷脸”替代”测土"的小目标,做了一些预备的试验。利用Git+R做项目管理和自动化,项目托管在http://git.boogoo.com.cn上。 * 用rstudio进行项目管理和数据处理工作,结束之前,提交推送一次。到办公室之后,同样的工作环境,拉去最新内容。下班前推送一次,回家继续。换个工作空间,pull和push一次就行了。 * 数据采集部分用raspberry-zero小电脑作为主控,连接摄像头和小米miFlora,采集图像、气温、湿度、光照和土壤电导率,设置采样间隔为5分钟。 * 我把这个zero小电脑和摄像头放到牙刷盒子里,方便移动还防雨。 * 小电脑在整个项目中的分工是数据采集,预处理,包括数据存储管理,图像特征值提取等前期工作,用Python和go语言实现。 * 一个原则是数据处理尽量前移,减少服务器的工作量,因为生产环境下服务器要处理很多项目,运算资源宝贵。 * zero小电脑有个内置的git系统,用于处理本地仓库与中心仓库的数据同步。就是说,每隔5分钟就把预处理的数据向中心仓库推送一次。 * 为了方便移植,我把这个系统做了个image,要想复制这个做法,花160块钱整个小电脑,再加个退役的手机卡就跑起来了。给它起个好听的名字,“智能盆栽试验装置”、或者“大数据视角下基于IoT的作物微环境数据自动采集系统",好像也行。高大上吧,其实就是个牙刷盒子。 * 主仓库的结构这里就忽略了。我的教程中已经写完了这部分内容。其中的data文件夹用来存储原始数据。zero的数据会被推送到这里。 * 但是zero的数据并不是被设计称主仓库的组成部分,而是作为主仓库的子仓库被引用到主项目仓库。换句话说,zero是独立存在的。 * 这样设计的目的是其他项目也可以引用zero数据,从而实现数据复用。主项目引入zero数据后,对数据的使用与本项目数据没有什么不同。除了一点,zero仓库会有个设置,防止你对原始数据进行恶意篡改。 * 数据分析的部分在主项目仓库中,数据加载、数据清洗、整理的都实现了自动化,但群体纹理数据提取、特征值筛选、时空分解等都还在摸索中。 * 这几天在学习多元时间序列分析,先把土壤电导率中的“水分”挤出来,看剩下来的“肥力”是怎么变化的。在这里请求帮助。于天仁老先生认为电导率可以作为土壤肥力的综合指标,我感觉用更精细的数据也能证明这一点,甚至可以给出个更精确的定量描述。当然,我们没有忘记我们的终极目标,刷脸。 * 项目第三个重要的部分是项目网站,放在docs文件夹中,也是以子项目的形式存在。数据、图表、网站都可以随着数据的更新自动生成和发布。但我选择了手工发布,因为我目前的系统硬件配置很低(阿里云的最低配置),5分钟一次的更新太耗费资源,我还有别的事情要它做。所以你看到的项目仪表盘上的温度不是实时的。数据分析的内容也没有,因为还没搞清楚,项目文档也没有,还没来得及写,只有数据和简单的时间序列图表。http://docs.boogoo.com.cn/hungerzs/servey/ ### GitR是什么 * GitR是一种项目管理的工具 * GitR是一套简化工作的方法 * GitR是大一统的世界观 * GitR是同乐共享的价值观 * GitR是群众路线的方法论 * GitR的背后基础是辩证逻辑学 ### GitR的哲学与文化 * GitR的哲学是主体哲学。强调独立、共享、协作。独立是共享与协作的基础。独立保证个体成为能动性的主体。共享是松散的协作形式,支撑思路的发散性、开拓性。协作是包含共享,但组织更加严密,目标更加明确,更加集中。 * 鼓励奉献:欢迎牛人分享自己观点、方法,牛人一句话,胜过十箱子书。牛人分享一段代码,我们少加十个班。 * 不排斥有偿服务:研究不容易,成果分享,收点钱不过分。项目里有些知识自己不具备,请人代劳,给点钱也应该。有偿服务作为无偿奉献的补充,便于充分利用闲置的智力资源。 * 以奉献为主:帮助别人,就是帮助自己。付出一点,会得到很多。 [网页界面及各部分功能](web_interface.md)