如何和统计学家分享数据How to share data with a statistician
如何和统计学家分享数据
原文地址:https://github.com/jtleek/datasharing
将原文渣翻译的版本。
这是一份指南给需要分享数据给统计学家或者数据科学家的任何人。我认为的目标读者是:
- 需要统计学家或数据科学家帮助他们分析数据的合作者
- 正在寻求咨询建议的各个领域的学生或博士后
- 任务是收集/清洗/整理数据集的低年级统计学学生
本指南的目的是就共享数据的最佳方式提供一些指导, 以避免从数据收集到数据分析过程中最常见的陷阱。Leek Group和很多合作者合作,而决定我们拿到结果的速度的第一要素是数据到Leek group时的状态。根据我与其他统计学家的谈话, 这几乎是普遍的。
我认为统计学家应该能够处理拿到的任何形式的数据。重要的是要看到原始数据,了解处理的过程,并且能够综合其他人的数据分析的变化的隐藏信息。另一方面, 对于许多数据类型, 处理步骤都有很好的记录和标准化。因此, 在求助统计学家之前, 可以完成将数据从原始形式转换为可直接分析形式的工作。这可以极大地加快周转时间, 因为统计学家不必先完成所有的预处理步骤。
你应该给统计学家发送什么
为了便于进行最有效和最及时的分析, 这是你应该传递给统计学家的信息:
1.原始数据
2.整洁数据集(A tidy data set)
3.描述整洁数据集中的每个变量及其值的代码簿
4.你用来将1处理成2,3的明确而准确的工作程序
原始数据
关键的是,你应该包含你所能获取的最原始的形式的数据。这可确保在整个工作流中保持数据来源。下面是数据原始形式的一些示例:
- 你的测量仪器给的奇怪的二进制文件
- 与你签约的公司发送给你的,10个工作表的未格式化Excel文件
- 你爬取Twitter API所获得的复杂的json数据
- 你通过显微镜收集到的手工输入的数字
如果你做到了下面这几点,那么你就知道原始数据的格式是正确的:
1.没有对数据运用任何软件处理
2.没有修改任何数据值
3.没有从数据集中删除任何数据
4.没有用任何方式归纳数据
如果你对原始数据进行了任何修改,那么它就不是数据的原始形式了。将修改后的数据报告为原始数据是让分析过程变慢的一种非常常见的方法, 因为分析师通常必须对你的数据进行像法医一样的研究, 以找出原始数据看起来很奇怪的原因。
整洁数据集
这篇文章和这个视频都阐述了Hadley Wickham 获取整洁数据的一般原则。虽然文章和视频都是使用R来描述整洁数据,但是这个原则是普遍适用的:
1.你测度的每个变量都应该在一列
2.对于变量的每一个不同的观测都应该在不同的行
3.每个变量的 "种类" 应该有一个表
4.如果你有多个表, 它们应在表中包含允许它们联接或合并的列
虽然这些都是硬性规定, 但还有很多其他的事情可以让你的数据集更容易处理。首先是在每个数据表/电子表格的顶部包含一行, 其中包含完整的行名称。因此, 如果你在诊断病人时估计年龄, 你会在该专栏中使用名为AgeAtDiagnosis, 而不是像ADx 或另一个可能让另一个人难以理解的缩写。
下面是一个例子, 说明这将如何从基因组学中发挥作用。假设你已经收集了20个人的基因表达方式与RNA序列。你还收集了有关患者的人口统计和临床信息, 包括他们的年龄、治疗方法和诊断结果。你将有一个表格/电子表格, 其中包含临床/人口统计信息。它将有四列 (病人身份证、年龄、治疗、诊断) 和21行 (一行为变量名, 然后每个病人一行)。你还将有一个用于汇总基因组数据的电子表格。通常, 这种类型的数据汇总在每个外显子的计数数级别。假设你有 100, 000个外显子, 那么你将有一个表/电子表格, 其中包含21行 (基因名称为一行, 每个患者为一行) 和1000000一列 (患者 id 为一行, 每个数据类型为一行)。
如果要与合作者使用Excel共享数据, 那么整洁数据的每张表应在一个Excel文件中。它们不应具有多个工作表, 不应将宏应用于数据, 也不应突出显示列/单元格。或者使用共享 csv 或 tab 分隔的文本文件来分享数据。(但是要注意的是, 将 csv 文件读入 excel 有时会导致日期和时间变量的不可复制的情况。)
代码簿
对于几乎所有的数据集, 你计算的方法需要比你可以或应该使用的电子表格更详细地描述。代码簿就包含了这些信息。至少它应该包含:
1.整洁数据集中未包含的变量 (包括单位!) 的信息
2.你做出的归纳整理决定的信息
3.你使用的实验方案设计的信息
在我们的基因组学示例中, 分析师想知道每个临床/人口变量的测量单位是什么 (以年为单位的年龄, 按名称或剂量的治疗方法, 诊断水平,异质性水平)。他们还想知道你是如何挑选用于汇总基因组数据的外显子 (UCSC/Ensembl 等) 的。他们还想了解有关你如何进行数据收集/研究设计的任何其他信息。比如, 这些是走进诊所的前20名患者吗?他们是20个通过一些特征如年龄挑选出来的病人吗?他们是随机治疗的吗?
此文档的常见格式是 word 文件。应该有一个名为 "研究设计" 的部分, 其中有一个全面的描述, 你是如何收集数据。有一个名为 "代码簿" 的部分, 描述每个变量及其单位。
如何对变量进行编码
当你将变量放入电子表格时, 根据其数据类型, 你将遇到几个主要类别:
1.连续的
2.顺序的
3.分类的
4.缺失的
5.删改的
连续变量是在数量尺度上测量的任何东西, 可以是任何小数。比如说以公斤为单位的重量。顺序数据是具有固定的、小级别 (< 100) 但按顺序排序的数据。例如, 在调查反馈中的选项: 贫穷、正常、良好。分类数据是有多个类别的数据, 但未对其进行排序。比如说性别: 男性或女性。这种编码很有吸引力, 因为它是自我描述的。缺失数据是未观测到的数据, 而且你不知道这个机制。你应该将缺失的值编码为NA。删改数据是在某种程度上你知道错误机制的数据。常见的例子是测量值低于检测界限或者病人在随访中跟丢。当你没有这个数据时, 它们也应被编码为NA。但你也应该给你的整洁数据集添加一个新的列"缺失的变量名称", 其中缺失值True与未缺失False。在代码簿中, 您应该解释为什么缺少这些值。如果您知道某些数据丢失是有原因的, 则向分析师报告是绝对重要的。你也不应该模仿/扔掉缺失的观测结果。
通常, 尽量避免将分类变量或序号变量编码为数字。当你在整洁的数据中输入性别的值时, 它应该是 "男性" 或 "女性"。数据集中的序号值应该是 "差"、"公平" 和 "好", 而不是1、2、3。这将避免有关方向效果的潜在混淆, 并有助于识别编码错误。
始终使用文本对有关观察的每一条信息进行编码。例如, 如果你使用Excel存储数据,并使用一种彩色文本或单元格背景格式来指示有关观察的信息 ("在实验1中观察到的变量用红色表示")。将数据导出为原始文本时,那么这个信息不会被导出 (并且会丢失)。每个数据块都应编码为可以导出的实际文本。
操作指南的列表/脚本
你可能以前听说过这一点, 但重现性在计算科学中是一件大事。这意味着, 当你提交论文时, 审阅者和世界其他国家应该能够准确地复制这项分析从原始数据到最终结果。如果你试图提高效率, 那么你可能在数据被认为是整洁之前,会执行一些汇总/数据分析的步骤。
在执行归纳汇总的操作时,你最理想的做法是创建一个计算机脚本(R,Python或其他的)。这个脚本把原始数据作为输入,并生成共享的整洁数据。你可以尝试运行脚本几次, 看看代码是否生成相同的输出。
在许多情况下,收集数据的人有动力来把更整洁的数据给统计学家,以此来加快合作进程。他们可能不知道如何用脚本语言编写代码。在这种情况下, 你应该提供给统计学家的是所谓的伪代码。它应该看起来像:
1.步骤1-使用原始文件,运行版本为3.1.2的汇总软件,参数设置为a=1,b=2,c=3
2.步骤2-分别对每个样本运行这个软件
3.步骤3-取出每个样本的outputfile.out文件的第三列,它是输出数据集中的对应行
你也应该包含你使用运行软件的系统(Mac/Windows/Linux)的信息,以及你是否尝试多次来确保得到相同的结果。理想情况下, 你应让同学/实验室伙伴运行此操作, 以确认他们可以获得与你相同的输出文件。
你应该期待从分析者那得到什么
当你转交一份适当的整洁数据集时,它将极大地减少统计学家的工作量。所以希望他们能早点给你回复。但是,大多数细心的统计学家会检查你的方法,询问你所执行的步骤的问题,并试图确认他们至少可以获得你所做的同样整洁的数据。
然后, 你应该期待从统计学家处获得的东西如下:
1.执行每次分析的分析文本(不仅仅是说明)
2.他们用来运行分析的确切的计算机代码
3.他们生成的所有输出文件/图表
这是你将在补充中使用的信息, 以建立你的结果的重现性和准确性。分析中的每个步骤都应该清楚地解释, 当你不明白分析师做了什么的时候, 你应该问问题。统计分析是统计学家和科学家的责任。如果没有统计学家的代码, 你可能无法进行准确的分析, 但你应该能够对你的实验室伙伴/投资者解释为什么统计学家执行的每一步。
贡献者
- Jeff Leek - 书写了最初的版本
- L. Collado-Torres - 修改了一些小错误,加上了一些链接
- Nick Reich - 加上了一些在存储数据时的小建议
- Nick Horton - 一些小的措词建议
如何和统计学家分享数据How to share data with a statistician的更多相关文章
- 黑洞版视频裂变程序【接口版】全新上线,全新UI,支持分享数据统计
黑洞版视频裂变程序[接口版]全新上线,全新UI,支持分享数据统计! 后台效果 程序统一售价:1899/套(包安装,包更新) 注:本程序不属于之前视频程序的更新版,展现形式和广告位设置均不同,是 ...
- 为什么很多 Android 程序喜欢在存储卡根目录建文件夹来存储数据而不是 Android/data 目录下?
知乎回答. http://www.zhihu.com/question/19866689 pansz,欢迎评论 知乎用户.弓长.知乎用户 赞同 这个道理很简单:因为没人管啊.你乱存放文件,在a ...
- 试图使用未在此报表服务器中注册或此版 Reporting Services 不支持的数据扩展插件“Devart.Data.PostgreSql”
数据源用的是Postgresql 我在Deploy Report的时候出现这条ErrorMessage Error 2 试图使用未在此报表服务器中注册或此版 Reporting Services 不支 ...
- 17.1.1.6 Creating a Data Snapshot Using Raw Data Files 创建一个数据快照使用 Raw Data Files
17.1.1.6 Creating a Data Snapshot Using Raw Data Files 创建一个数据快照使用 Raw Data Files 如果数据库是大的, 复制raw 数据文 ...
- Spark笔记之数据本地性(data locality)
一.什么是数据本地性(data locality) 大数据中有一个很有名的概念就是"移动数据不如移动计算",之所以有数据本地性就是因为数据在网络中传输会有不小的I/O消耗,如果能够 ...
- 架构模式数据源模式之:表数据入口(Table Data Gateway)、行数据入口(Row Data Gateway)、活动记录(Active Record)
一:表数据入口(Table Data Gateway) 表数据入口提供了用于访问单个表或者视图(也包含了联表查询)的所有SQL,通常一个表一个类.其它代码通过它来实现对数据库的交互.基于这个特点,表数 ...
- Android训练课程(Android Training) - 使用Volley传输网络数据(Transmitting Network Data Using Volley)
使用Volley传输网络数据(Transmitting Network Data Using Volley) Volley 是一个 HTTP 库,它使得在Android应用程序中操作网络更容易,是重要 ...
- mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)
mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式) 首先将要导入的数据文件top5000W.txt放入到数据库数据目录/var/local/mysql/data/${d ...
- 构建企业级数据湖?Azure Data Lake Storage Gen2实战体验(中)
引言 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 因此数据湖相关服务 ...
随机推荐
- 绿色计算大赛决赛 第二阶段 消息传递(斯坦纳树 状压dp+spfa)
传送门 Description 作为公司老板的你手下有N个员工,其中有M个特殊员工.现在,你有一个消息需要传递给你的特殊员工.因为你的公司业务非常紧张,所以你和员工之间以及员工之间传递消息会造成损失. ...
- vs2013 查找进行的过程中被停止
VS"Find in Files"失效的解决方法一:让VS窗口获得焦点,依次按以下快捷键Ctrl+BreakCtrl+Scroll LockAlt+Break VS"Fi ...
- 学习Spring Boot:(九)统一异常处理
前言 开发的时候,每个controller的接口都需要进行捕捉异常的处理,以前有的是用切面做的,但是SpringMVC中就自带了@ControllerAdvice ,用来定义统一异常处理类,在 Spr ...
- BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划
BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划 又是一道卡精度卡得我头皮发麻的题-- 题面(--蜜汁改编版) YL大哥是24OI的大哥,有一天,他想要从\(N\)个候选人中选 ...
- Android获取长按按键响应
Android获取长按按键响应http://www.2cto.com/kf/201312/261719.html Android下Listview的onItemClick以及onItemLongCli ...
- [HAOI2011]防线修建
题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢?又由于 ...
- RabbitMQ 中 Connection 和 Channel 详解
我们知道无论是生产者还是消费者,都需要和 RabbitMQ Broker 建立连接,这个连接就是一条 TCP 连接,也就是 Connection. 一旦 TCP 连接建立起来,客户端紧接着可以创建一个 ...
- merger_by_one 处理二维数组,根据里面某字段合并, 里面有的保留,有的求和~~
public function tt(){ $param = array( array ( 'hykno' => '2222222-CB', 'tcdk_fid' => '458B6D70 ...
- Ansible10:Playbook的角色及包含
目录 说明 一.Playbook的包含 1.tasks包含 2.handlers包含 3.混合包含 二.角色(roles) 1.创建role 2.引用roles 3.pre_tasks和post_ta ...
- Dockerfile基本语法
Dockerfile的组成 Dockerfile分为四部分: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 Dockerfile指令说明 FROM 格式为FROM <image&g ...