用Git+R管理项目实现项目自动化的简明教程。

三藏唐 8ede99d2d7 更新 'README.md' 6 年之前
chap4 afc2b8a865 删除 'chap4/2018年终学术报告(张恒敢).ppt' 6 年之前
README.md 8ede99d2d7 更新 'README.md' 6 年之前
page_layout.md f44242b4d9 更新 'page_layout.md' 6 年之前

README.md

用Git+R实现项目管理和自动化

阿弥陀佛!欢迎来到Git+R大讲堂!我是唐三藏,英文名SanzangTang。今天我将给您讲解使用Git+R做项目托管和自动化的背景、优势和一些git和R基本的概念,希望通过我的讲解能够让您对此有个基本的了解。为了方便起见,下文将Git+R简写为GitR。

Git 和 R是什么

  • Git是一个版本控制系统,也可以看作一个带版本控制功能的文件数据库。目前主要用于软件开发的代码管理和团队协作。
  • R是一种编程语言,因强大的统计分析功能及大数据领域的卓越表现,正在或者已经成为超越Matlab和SAS的数据科学领域的主流语言。

Git为什么要和R结合

  • 越来越多的科研人员使用Git管理科研项目,而科研项目的核心是数据,是数据分析,是数据的可视化,是数据的发布与共享,这些都是通过R实现的。因此Git+R是十分自然的组合。
  • R不仅是统计分析的专家,还是一个功能强大的编程语言。Git提供了一个项目寄宿的空间,R则可以接管项目中的所有其他任务,实现项目的自动化。

为什么要用GitR?

从GitR提供的功能模块说明使用GitR进行科研管理的必要性。

  • 安全存储:办公室、实验室、家里、旅途中,随时随地工作。即使电脑崩溃,项目数据可完全修复,不会丢失。
  • 版本管理:自动跟踪项目变动信息,用版本追踪项目执行过程中工作流程的变动,对比文件的更改,用分支记录执行过程中思路和工作的变化。
  • 团队协作:提供简单易用的团队工作环境。团队成员在同一个项目载体上工作,保证了项目的统一与协调,同时又通过分支隔离团队成员的工作,保证其相对的独立性。
  • 工单系统:工单系统实现项目任务的合理分配,进展监控,结果审核与最终的集成。发现问题,随时随地讨论解决的办法。比定期的学术交流更及时,更有针对性。
  • wiki系统:使用wiki系统对项目的目标、思路、方法、路线、数据、结果等进行详细的描述,让潜在的协作者清楚的了解你的项目,有利于为社区同行作出贡献。
  • 项目网站:每个项目对应一个项目网站,展示项目的成果、数据、图表,加强宣传的效果。对于公益性监测站项目,可作为监测数据的发布窗口。
  • 可扩展性:与关系数据库相比,文件的数据结构更加灵活,能够适应多样的试验类型。一般试验的数据量很小,用文件存取速度更快。现在的模型软件也都以文件作为输入,因此也利于建模。

Git的存储介质是文件,以文件夹形式组织,符合大多数人的工作习惯,本地仓库以隐含文件的形式存在,正常显示模式下根本看不出有什么不同。Git提供的项目管理和团队协作给我们的科研工作带来方便,但还不仅如此,R的加入则给我们带来了更多激动人心的功能。

  • 数据采集自动化:Git可用于实现数据采集自动化,相比于webAPI数据接口,Git文件更加灵活,也更容易实现。尤其是网络不稳定的情况下,不需要考虑数据的暂存和延迟提交问题。一般的数据分析仪器都以文件存储数据,只要将目标存储地址设为项目的数据文件夹,就一切OK:数据整理->数据分析->绘制图表->试验报告->网站发布,几秒钟之内即可完成。
  • 数据分析自动化:对于两年、三年甚至多年的重复实验,每年的数据处理方法相同,对于观测类项目,数据格式固定,处理方法也固定,处理程序可重复使用,GitR可实现数据自动处理,一次开发,多次使用。有了数据,分析工作就已经完成了 。这样可以防止数据积压,来不及处理的情况,并根据结果及时调整试验方案。
  • 试验报告自动化:对于两年、三年甚至多年的重复实验,每年的数据处理方法相同,对于观测类项目,数据格式固定,处理方法也固定,处理程序可重复使用,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有个大致的了解,尽量说的简单明白,让没有任何GitR基础的同学也有学习的兴趣,不至于被那些陌生的词汇吓跑。

GitR实例:盆栽试验数据自动采集与分析项目

  • 这是“看苗施肥”项目的预备试验,主要试验田间作物长势状况和农田微环境参数的自动采集,同时也是为了进行GitR数据自动化的试验和开发。利用Git+R做项目管理和自动化,项目托管地址:http://git.boogoo.com.cn/hungerzs/zero
  • 用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分钟一次的更新太耗费资源,我还有别的事情要它做。

GitR是什么

  • GitR是一种项目管理的工具
  • GitR是一套简化工作的方法
  • GitR是大一统的世界观
  • GitR是同乐共享的价值观
  • GitR是群众路线的方法论
  • GitR的背后基础是辩证逻辑学

GitR的哲学与文化

  • GitR的哲学是主体哲学。强调独立、共享、协作。独立是共享与协作的基础。独立保证个体成为能动性的主体。共享是松散的协作形式,支撑思路的发散性、开拓性。协作是包含共享,但组织更加严密,目标更加明确,更加集中。
  • 鼓励奉献:欢迎牛人分享自己观点、方法,牛人一句话,胜过十箱子书。牛人分享一段代码,我们少加十个班。
  • 不排斥有偿服务:研究不容易,成果分享,收点钱不过分。项目里有些知识自己不具备,请人代劳,给点钱也应该。有偿服务作为无偿奉献的补充,便于充分利用闲置的智力资源。GitR借鉴区块链技术,采用价值取向的工作量证明方式,作为项目社区的推动力,充分调动每个用户的积极性,实现项目社区的可持续发展。
  • 以奉献为主:帮助别人,就是帮助自己。付出一点,会得到很多。

>>> 网页界面及各部分功能