ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

开放科学实践指南:从预印本到数据归档的完整流程

开放科学实践指南:从预印本到数据归档的完整流程 大家可能都遇到过类似的情况论文里写了“数据可应要求提供”结果审稿人真的来信要数据你翻遍移动硬盘才找到当年的原始文件打开一看——变量名缩写早就看不懂了或者合作者问起你那篇论文的代码在哪儿你说“在旧电脑里等我找找”然后就没有然后了。我这些年参与和推动过不少open-science相关的工作越来越笃定一件事开放科学不是一项多余的行政要求也不只是期刊的“面子工程”。它是一套能让科研流程更顺、成果复用率更高、甚至能减少扯皮的工作方法。这篇文章我想用一个普通研究者的视角把open-science的核心构成、落地工具、实操流程和常见坑位一次说清楚。不喊口号只讲怎么把事情做出来。适合谁看正在被导师或基金方要求“公开数据/代码”的研究生和青年学者想了解预印本和开放评审机制的科研人员以及任何一个想让自己未来的科研产出更规范、更经得起追问的人。1. 内容整体设计与思路拆解1.1 别把open-science理解成“强制开源”你如果去查各类定义会看到开放获取、开放数据、开放代码、开放同行评议等等一堆术语。但说白了open-science要解决的只有一个问题研究成果的产出过程能不能让外人看得懂、查得到、用得上传统科研模式下论文是唯一的“正式成果”。数据存在实验室硬盘里代码存在个人电脑里实验设计思路只在Methods部分写个大概审稿过程全部保密。结果就是别人想复现你的工作光靠一篇文章根本做不到。很多领域的经典实验独立小组复现出来的效果远不如原论文那么好——这不一定是造假很可能是原始条件、样本处理细节、参数选择这些东西在文章里根本写不下或者压根没打算写。Open-science的逻辑是论文只是“成果面”数据、代码、文档、评审记录这些“过程面”也应该以合理的方式开放出来。于是就有了预印本提前发布论文草稿、开放数据原始数据或最小数据集上线、开放代码把分析脚本、软件工具放上GitHub、开放评审公开审稿意见和作者回复。我做项目的时候习惯先把开放科学拆成一个一个具体动作而不是当成一个宏大概念。比如这个阶段我要不要写数据管理计划论文投出去之前要不要先挂预印本代码仓库里的许可证选哪一种数据集要不要配README把这些小问题一个个解决开放科学自然就落地了。1.2 为什么这两年必须重视这件事以前开放科学是“锦上添花”现在慢慢变成了“硬性要求”。我见过不少真实案例有些国际期刊已经明确要求投稿时必须提交数据可用性声明Data Availability Statement甚至要求把原始数据放在指定仓库。很多国家级科研基金在申报时开始要求附数据管理计划结题时要检查数据是否按计划归档。越来越多的机构在职称评审或成果评估里不再只看论文数量和期刊影响因子也开始看数据集的引用、代码仓库的复用情况。这背后的推力我理解是“科研可重复性危机”倒逼出来的。心理学、医学、经济学这些领域早年大规模重复实验发现很多经典结论经不起复现。Open-science就是用来缓解这个信任危机的。咱们普通研究者可以不把自己当成“开放科学运动家”但必须适应这套规则——否则可能面临论文补充材料被要求重做、数据复审不通过、甚至因为“数据不可获得”被撤稿的风险。1.3 我的总体设计思路一个普通项目的开放科学闭环如果让我给一个典型科研项目设计开放科学路径我会画这么一条线脑补即可不用画图项目启动时写数据管理计划 → 研究过程中用版本控制管理代码和数据 → 论文写完后第一时间挂预印本 → 投稿时声明数据和代码可得性 → 修改阶段补全匿名仓库 → 文章接收后把数据和代码归档到长期仓库并生成DOI → 把DOI反填进文章。这套路径看上去繁琐实际上每个环节都有现成工具你不用一次全部做到位但越早考虑越省力。接下来的内容我会分两块讲先讲清楚五个核心零件的来龙去脉再给你一套可以直接照着操作的完整实践流程。2. 核心细节解析与实操要点2.1 预印本最快建立“首发权”的方式很多人一听到预印本第一反应是“不是正规发表能算成果吗”我一开始也有这个顾虑后来彻底被使用体验说服了。预印本就是把还没经过同行评审的论文草稿传到公开平台上。它的核心价值有三条第一抢时间。传统期刊从投稿到见刊动不动半年到一年。预印本平台从上传到公开快的只要一两天。你做完研究、写好文章立刻挂出去全世界都能看到。后面就算期刊审稿拖了很久你的工作早就被别人看见了不怕“撞车”。第二抢首发权。学术圈最怕的就是“明明是我先做出来的结果别人先发了”。预印本平台有严格的上传时间记录这就是很有效的首发凭证。我之前有个朋友做计算化学论文写好后正好赶上竞争对手发了篇类似主题他马上把预印本挂了出去后续投稿的时候引用自己的预印本把时间线摆得很清楚问题就化解了。第三提前获取反馈。论文在正式见刊前如果能在预印本阶段收到同行评论你就可以在正式投稿前把硬伤修掉。我自己就遇到过预印本挂出去后有位素不相识的同行帮我指出了一个统计方法的隐患我赶在投稿前改完了避开了评审阶段的重大翻车。实操要点来了。不同学科用不同平台物理学、数学、计算机基本都在arXiv生物学有bioRxiv和medRxiv社科有SocArXiv化学有ChemRxiv。国内也有ChinaXiv这样的预印本平台。上传前记得检查期刊政策绝大多数期刊都接受预印本先行但个别期刊有不同规定可以到Sherpa Romeo上查清楚。上传的文章版本要选对。我建议上传“投稿版”或者“被接收后未排版版”不要上传最终排版版因为很多期刊对最终版的版权有要求。另外一个细节一定要在预印本里写清楚“本文尚未经过同行评审”让别人看的时候知道这是早期版本。2.2 开放代码从“能跑”到“能复现”之间差一个README开放代码这件事很多人有个误区以为把代码传到GitHub上点个Public就算开放了。但其实代码开放的核心不是“被看到”而是“能被别的人拿到之后跑起来”。我自己早期吃过亏。有次我把一个分析脚本传到GitHub文件名是analysis_final_v2.py——懂的都懂这种文件名一看就是改了很多轮的。没有README没有环境说明没有输入输出样例。过了半年我自己打开那个仓库都一头雾水。你想连作者自己都看不懂别人怎么可能复现后来我总结出一套代码开放的最低标准只要能做到这几点基本就能算“有效开放”仓库里有README.md写明这个项目是干什么的、怎么安装依赖、怎么运行、输入输出长什么样。提供环境配置文件。Python项目用requirements.txt或environment.ymlR项目用renv或者写明sessionInfo()这样别人可以复现你的计算环境。代码里写清楚运行参数。哪怕是你自己的论文结果也要能通过一套固定的参数命令复现出论文里的图。数据和代码分开。原始数据如果不是特别大可以放在数据仓库比如Zenodo、figshare里代码仓库里只放处理好的中间数据或示例数据。选择宽松的开源许可证。最常用的代码许可证是MIT和Apache 2.0。没有许可证别人在法律上根本不能合法使用你的代码。这里单独说一句许可证的问题。我在实际过程中发现很多人完全不Care许可证觉得“我都公开了谁还用不了”。其实不是的没有许可证的代码按照版权法默认条款其他人只能看不能复制、不能修改、不能使用。这跟你开放代码的初衷正好相反。所以不管代码多简单一定在根目录放一个LICENSE文件。2.3 开放数据最小数据集是个折中方案很多研究者一听到开放数据第一反应就是“我的数据涉密/涉及隐私/涉及未发表后续工作不能公开”。这些顾虑是真实的但开放科学也有弹性的做法。如果你心里有这个纠结我最推荐的方式是公开“最小数据集”。什么意思就是把支撑论文结论所必需的那部分数据公开而不是把所有的实验记录、原始访谈、全部被试信息都摊开来。比如你做了1000人的问卷调查论文里用了其中500人你可以公开这500人经过匿名化处理后的数据以及问卷题目和编码说明。至于另外500人的原始数据或者包含个人身份标识的字段完全可以不公开在数据可用性声明里写清楚“涉及隐私按合理要求提供”就行。数据集开放不只是传个Excel上去。你必须同时提供数据字典或README说明每个变量叫什么、代表什么、取值区间是什么、缺失值怎么编码。我见过很多数据集变量名全是MEAN_1、TOTAL_2这种你根本没法猜它们是什么意思。所以我的建议是把数据集开放当成写一份“给陌生人的说明书”而不是把文件丢上去就完事。数据许可证方面我一般用CC0也就是放弃所有权利任何人都可以自由使用。如果你希望别人使用你的数据时注明出处那可以用CC-BY 4.0。注意这是数据/文档的许可证和代码的MIT/Apache别混了。2.4 开放同行评议与注册报告走在前面的新玩法这部分目前还算“少数人的实践”但趋势已经很明显了。传统同行评审是匿名的、关起门来的。评审意见只有编辑、作者和审稿人能看到。开放同行评议的做法是把审稿意见和作者的回复一起公开出来读者看论文的时候能同时看到这篇文章是怎么被质疑、怎么被修改的。这个价值在于它把“评审过程”本身变成了学术资源。如果你还是愿意走传统去投我建议你可以主动在学术社区比如Publons记录自己的审稿工作这本身也算是开放科学的一部分。另外有些期刊已经在尝试“注册报告”模式你先提交研究方案和数据分析计划先审方案方案通过了再去做实验、分析数据。这种方式能有效降低“结果不好看就不发”“P值凑不出就不发”这类问题。我倒不建议每个人都去追求最激进的开放形式但你至少要了解期刊在做什么。很多时候期刊的新政策就写在投稿指南里花十分钟读一读能帮你避开不少坑。2.5 作者标识与数据可用性声明开放科学时代辨识度是很重要的。我强烈建议大家去注册一个ORCID它是一个学术版“身份证号”可以把你所有的论文、数据集、审稿记录关联在一起。现在投稿的时候ORCID基本是标配了你没注册的话编辑都不好处理。另一个容易被忽略的细节是数据可用性声明。这不是“数据在补充材料里”一句话就完了。期刊的标准格式一般是“本研究的原始数据已上传至[仓库名]可通过[DOI或链接]获取分析代码可在[GitHub链接]找到。”写清楚放置位置和获取方式方便审稿人核对也方便读者复用。这里体现的是对读者的尊重让人觉得你的成果经得起验证。3. 实操过程与核心环节实现3.1 第一步立项阶段就把数据管理计划写清楚很多人在项目开始的时候根本不会想“数据以后怎么办”等到论文即将投稿了才开始四处找文件。这个习惯一定要改。数据管理计划Data Management PlanDMP就是解决这个问题的。DMP不需要多复杂但我认为至少要回答这些问题这个项目会产生哪些类型的数据原始数据、中间数据、分析输出、代码、文档等数据格式是什么CSV、NetCDF、SPSS、JSON等哪些数据需要公开哪些不能公开不能公开的理由是什么数据存储和备份方案是什么本地网盘实验室NAS项目结束后数据存放在哪里托管在哪个仓库数据如何组织和命名谁负责维护写DMP的时候可以用公共模板比如DMPTool上有很多机构定制的模板节省不少时间。这个阶段的投入到项目后期能省下好几倍的精力。我把这个过程比作装修。你装修前不做水电布局图住进去之后想加个插座就得砸墙。数据管理计划就是科研项目的“水电布局图”前期画好后面省心。3.2 第二步研究过程里的版本控制习惯我做研究的时候最怕听到的一句话是“最终版最终版真的最终版”。文件命名混乱、版本覆盖错误本质上是没有用版本控制工具。代码层面的习惯很简单所有代码、文档、分析脚本全部纳入Git仓库。用Git不是为了开源而是为了给自己留一条“后悔药”。你每改一个版本都能看到差异出了问题可以直接回滚。数据层面的版本控制就更有讲究了。原始数据永远是不可修改的任何清洗、转换操作都生成新文件不要在原文件上覆盖。我习惯按照“01_raw_data”“02_processed_data”“03_analysis_output”这样的目录结构组织项目每层文件命名带上日期和版本号。比如survey_data_20240601_v1.csv后面再改就是v2而不是“最终版”。这套习惯让我受益很大。后来有次审稿人要求“把某次分析的中间结果补充到附录”我直接到对应目录把当时的文件翻出来十分钟搞定。要是在以前我可能得花半天时间回忆还不一定能找对版本。3.3 第三步论文写完后先挂预印本再投稿论文初稿完成在正式提交期刊之前我强烈建议先上传预印本。这个顺序能给你带来三重保障时间戳保护首发权、提前暴露问题、让合作者确认最终版本。上传预印本的步骤以arXiv或bioRxiv为例注册账号。上传论文PDF或源文件LaTeX或Word。填写题目、作者、摘要、学科分类。选择是否允许预印本平台上的评论。确认所有作者都已知晓并同意上传。这里有一个非常重要的细节上传预印本前一定要征得所有作者的同意。有些合作者可能担心预印本影响后续期刊发表虽然绝大多数期刊不介意但你最好先沟通清楚。我就是有一次差点直接传了预印本结果一位资深合作者强烈反对说他们学圈有期刊明确不接受预印本吓得我赶紧取消。这种问题提前沟通比事后解释容易多了。预印本平台对论文格式要求不高但有几个硬性要求PDF能正常显示、参考文献完整、图表清晰。有些平台需要你确认没有在其他地方发表过所以上传前最好先看一遍平台条款。3.4 第四步构建可复现的代码仓库这是我最看重的环节。你想想看审稿人拿到你的论文想看看你的分析有没有问题如果他连代码都跑不起来他只能靠猜。反过来如果你把代码和环境配置都给全了审稿人在自己电脑上一跑结果和论文一致那他对你工作的信任度会高非常多。我的代码仓库标准结构是这样的project_name/ ├── README.md ├── LICENSE ├── requirements.txt (或者 environment.yml) ├── data/ │ ├── raw/ (原始数据通常不传Git只是留结构) │ └── processed/ (处理后的数据小文件可以传) ├── scripts/ │ ├── 01_clean_data.py │ ├── 02_run_analysis.py │ └── 03_make_figures.py ├── results/ │ ├── figures/ │ └── tables/ └── docs/ ├── data_dictionary.md └── analysis_log.mdREADME.md我一般会包含这些内容项目一句话简介、系统依赖Python/R/Julia版本、安装步骤、运行顺序、每个脚本的输入输出说明、复现论文图表的具体命令、如何引用本代码。写README的时候请用“一个素未谋面的同行”的视角来检查你写的指令对方拿到后能不能一步步走通我当时就把自己的README当“实验报告”来写每个命令都自己跑一遍确保从零开始也能复现。写完后发给一个不同研究方向的师弟试跑他成功跑通了。这个过程虽然费时间但很有成就感。代码仓库要不要在投稿前匿名如果期刊实行双盲评审审稿人不知道作者是谁那么GitHub仓库里带有你的姓名邮箱就可能暴露身份。解决办法是把仓库复制一份去掉所有作者信息在投稿系统的补充材料里提供匿名仓库的链接正式被接收后再把公开仓库的链接写进文章。GitHub上新建一个匿名账号就行也可以用一些在线匿名工具把仓库“复制并转换身份”。这个操作不复杂但确实容易忘需要提前做。3.5 第五步利用Zenodo生成DOI完成数据归档GitHub仓库本身不提供DOI学术引用必须要DOI。Zenodo欧洲核子研究中心开发的一个通用开放数据仓库和GitHub有官方集成每次你在GitHub上创建一个ReleaseZenodo就会自动抓取版本快照并生成一个新的DOI。操作步骤其实挺简单登录Zenodo用GitHub账号授权。在Zenodo“GitHub”页面把你要归档的仓库设置为开启。在GitHub仓库创建一个Release并填写版本号比如v1.0.0。Zenodo自动生成一个DOI并显示在仓库页面上。这个DOI要填入论文里作为代码和数据的引用标识。以后别人引用你的数据和代码可以直接引用这个DOI引用量是可以纳入学术影响力统计的。如果你有数据集需要单独归档比如原始数据文件比较大也可以直接上传到Zenodo填好题目、作者、关键词、许可证提交后同样会生成DOI。figshare和Dryad是常见替代品具体选哪个有时候取决于学科惯例或期刊要求。还有一点版本号和DOI的关系。你更新代码后GitHub上发新ReleaseZenodo会给新版本分配新的DOI但原来的DOI仍然有效永远指向旧版本。这意味着你可以放心迭代不用担心老版本“消失”导致引用失效。这个机制是我喜欢Zenodo的原因之一。3.6 第六步投稿、返修和接收后的开放动作投稿的时候正文里一定要写数据可用性声明。这个声明可长可短但必须具体。一般放在正文结尾、参考文献之前。返修阶段审稿人可能会要求补充数据或代码。这时候你开放仓库的好处就体现出来了你可以直接在回复信里贴链接、说明路径。如果审稿人要求匿名记得用匿名仓库如果审稿人不要求匿名直接用带个人信息的公开仓库反而能积累曝光。文章接收后还有几个动作别漏掉把预印本更新为“已被XX期刊接收”的状态把最终版DOI和引用信息回填到预印本页面在个人主页、学术社交平台比如ResearchGate、LinkedIn同步放链接。如果你所在机构有自己的成果库Institutional Repository也建议把论文的最终接受版上传一份。这能帮你锁定“合法开放获取”版本即使在付费期刊发表的论文也能让读者免费看到你的“作者接受版本”。4. 常见问题与排查技巧实录4.1 担心“被抢发”怎么办前文说了预印本的时间戳就是你的防御武器。但这里还有一层心理博弈你的数据公开后别人会不会拿着你的思路抢先做下一步研究我的观点是这个问题要分阶段看。预印本只开放论文文字通常不强制要求同时开放数据。你可以先挂预印本占住首发权数据和代码等论文接收后再开放。这样你既保住了后续研究空间又满足期刊的数据可用性要求。如果你确实要提前公开数据有些期刊要求在投稿阶段就提供数据给审稿人那可以考虑设置数据仓库的“embargo”机制。Zenodo支持设置一个访问延迟期比如论文接收前数据集不公开接收后自动公开。这样既让审稿人通过私密链接查看又不会提前泄露给所有同行。4.2 数据太大了传不上去怎么办这是一个非常现实的问题。有些领域的数据集动辄几百GB甚至TB级显然不能直接传到Zenodo或figshare上。我的建议是“分层公开”论文的核心图、表对应的最小数据集严格来说不会太大一般几MB到几GB都传得上去真正的大规模原始数据可以放在你所在机构的服务器或专门的大数据存储平台然后在论文里写清楚获取方式。有些领域还有自己的专用数据库比如基因组学有NCBI的SRA、气象气候有专门的再分析数据集存储平台这类领域通常会要求“原始测序数据上传到SRA并获得访问号”这也是开放科学的一种形式。如果你的代码仓库用到Git LFSLarge File Storage来跟踪大文件注意Zenodo归档时默认可能不包含LFS文件所以大文件最好还是走数据库托管平台代码仓库里只放路径描述。4.3 老板不支持、同组不配合怎么处理很多时候你想做开放科学但实验室的管理者担心“还没发表就泄密”“学生辛辛苦苦整理的数据凭什么给别人用”。说实话这种担忧很难三言两语打消但我有几个操作性比较强的建议第一从小范围做起。不用一上来就把所有项目都开放。选一个已经投稿或已经接收的项目按开放科学的流程重新整理一遍给大家做个样板让大家看到“开放之后没有坏事情发生反而多了一些引用”。第二把开放数据变成“正式成果”。数据集的DOI是可以写进简历、基金结题报告的。很多单位现在认可数据集、代码、预印本作为科研产出。你可以在年终总结时把公开数据集和开源软件列进去让领导和同事意识到这是资产而不是负担。第三跟合作者谈清楚规则。比如明确“数据公开不影响第一作者的主权”“后续项目使用数据需要引注”“敏感数据匿名化后再公开”。把这些规则写到项目数据管理计划里大家都按规则办争议自然就少。4.4 论文初期代码写得太乱还有救吗有救但需要一定时间的整理。我在上面强调过研究过程中的版本控制是最佳方案但如果错过了那个阶段也不是世界末日。你至少可以做这样几件事把“能跑”的那个版本的代码找出来单独建一个干净仓库。删掉所有临时文件和测试输出。写一个README把所有运行步骤记录下来。在README里忘写环境依赖的地方补上。把你使用的软件版本、库版本记下来。如果是Python用pip freeze或conda list把全部依赖输出到requirements.txt或environment.yml。只要这些做到位别人就能大致复现你的结果了。如果你连代码都找不全那只能把能做的分析步骤写成详细的文字说明放到补充材料里。这虽然不完美但总比完全没有好。4.5 常见问题速查表问题解决方案不知道期刊是否接受预印本使用Sherpa Romeo查询期刊政策代码没有许可证在仓库添加LICENSEPython/R项目常用MIT、Apache-2.0数据集变量含义不清楚写数据字典data dictionary说明每个变量名、类型、取值范围、缺失值编码双盲评审怕暴露身份创建匿名GitHub仓库去除个人信息提交给期刊的补充材料大文件无法放入代码仓库原始数据放专用平台如SRA、机构存储代码仓库只放示例数据和路径说明数据涉及隐私不能公开匿名化后公开最小数据集隐私敏感字段不公开并在声明中说明审稿人要求复现结果但环境不同提供Dockerfile或环境配置文件写明运行平台和依赖版本担心成果被引用不到在题目和README中写明“Official implementation”并鼓励引用DOI合作者不同意公开先沟通用最小数据集方案代替全部公开必要时写清数据使用协议不知道从哪里开始选择一个已接收项目先补README和许可证再上传到Zenodo生成DOI4.6 一个完整流程的时间成本预估很多人不做开放科学本质原因是觉得“太费时间”。我根据自己的经验列一个粗略的时间成本表写DMP1个小时以内用模板更快。整理代码仓库写README配环境半天到一天。这个时间取决于你的项目复杂度和代码质量。数据整理写数据字典半天到一天。挂预印本30分钟到2小时主要是上传和格式检查。Zenodo归档生成DOI30分钟以内。写数据可用性声明10分钟。也就是说从一个“啥都没整理”的普通项目到具备基本开放科学素养的归档项目满打满算不超过三天。而这三天的投入可以给你后续工作带来非常多的便利。我自己的经验是开放流程带来的好处——比如审稿人更信任、合作者沟通更顺畅、自己以后找文件更容易——远超这几天的投入。我个人在做这些实践时最深的体会是开放科学与其说是一个理念不如说是一种“你以后一定会感谢现在自己”的好习惯。它没有你想的那么贵也没有你怕的那么危险。从一个小项目开始哪怕只是一份写清楚的README、一个带DOI的数据集你都会发现科研这件事变得更透彻、更可靠了。
返回列表