csvtk命令行版极简dplyr

写在前面

什么时候写 csvtk 呀,csvtk 也借鉴了些 datamash 的东西。

之前写 datamash 的使用教程,收到了一位读者的私信,内容如上。

话说这位读者不是别人,正是大名鼎鼎 seqkit 和 csvtk 的开发者 shenwei356 (github ID),江湖人称「爪哥」。我从来没有问过他为什么 ID 有个数字后缀「356」,我私以为是一年 365 天里有 356 天他都在写程序,剩下的几天过年放假。说到爪哥,如果你看到这篇文章之前不知道他我不怪你,但是今天以后希望他可以每天都和你在一起。

爪哥用两个工具就让自己在生物信息领域有了一席之地。其中 seqkit 是用来处理 fasta/q 文本的工具,这篇文章要写的 csvtk 是处理 c/tsv 文本的工具。如果你感觉我的说法夸张了,不妨想想每天接触到的各种文件,无论是 gff 还是 bed 还是 sam 甚至是 vcf,其本质都是 tsv 格式,再加上 seqkit 针对的 fasta 和 fastq。如果你能熟练使用这两个工具,今后的每一天就都会感受到爪哥无微不至的关怀。我经常在敲完一行命令后会在心里大喊一声「爪哥NB」。

linux极简统计分析工具datamash教程

引子

之前写 awk 教程的时候,曾经提到过一些对文本中行列进行某些计算统计的需求,例如使用数组分类求和。一些基本需求 awk 都可以实现,但是写起来稍显复杂。在 R 中使用 dplyr 或者基础函数 aggregate() 可以方便的进行分组操作,如果能在 linux 中使用更加简洁的单行命令针对数值和字符进行一些基本运算就省去了在 R 终端操作的时间。这篇文章介绍一个 linux 中能满足这类需求的工具 GNU datamash

两个使用 awk 的例子如下:

极速安装软件的升级版 conda

喜欢科比的球迷应该熟悉这个词,mamba(曼巴)是科比的绰号,同时曼巴也是眼镜蛇的一种,黑曼巴是世界上移动速度最快的蛇。不过这篇文章里的 mamba 和科比没关系和蛇也没啥关系,说的是一个极速版 conda 。

大文本另类去重多种解法

今天分析数据的时候刚好碰到一个小问题,因为本身文件较大一开始想不出比较好的解决方法,睡个午觉醒来突然有了灵感,自认为目前解决的还算巧妙。

问题

一个 3 列 3,741,430 行的文本(行数比较多),第一列是字符,第二列是字符,第三列是数值,tab 分割。数据格式如下:

A23    B66    1234
C56 D34 2334
B66 A23 1234
D34 C56 2334
E78 F88 1234

这个文本虽然是3,741,430 行,但是其有效信息只有一半。因为A23 B66 1234B66 A23 1234 只是第二列和第一列互换了下位置。

需求

如何尽可能快的处理这个 3 列 3,741,430 行的文本,当某一行的第一列和另一行的第二列相同同时它的第二列又和那一行的第一列相同时,就只保留这两行中的一行即可(具体留哪行没有要求)。简单说就是如下的4行只保留2行:

A23    B66    1234
C56 D34 2334
B66 A23 1234 # 同第一行
D34 C56 2334 # 同第二行

要修改为

A23    B66    1234
D34 C56 2334

数据分析需要更好的问题

设计思维和更好的问题

这篇文章的主要内容来自 Roger Peng 最近的一篇博客 Tukey, Design Thinking, and Better Questions。读了之后有些启发便做简单记录。

John Tukey 是美国的数据学,快速傅里叶变换发明人。它在 1962 年发表过一篇题为 “The Future of Data Analysis” 的论文,其中有一句非常著名的话。

Far better an approximate answer to the right question, which is often vague, than an exact answer to the wrong question, which can always be made precise.

Tukey 将数据分析的前三个阶段定义为如下三步:

  1. 识别一个问题 Recognition of problem
  2. 使用一个方法 One technique used
  3. 使用大量其他方式 Competing techniques used

用漫威数据学习 ggplot2 facet

本文主要内容翻译整理自:Easy multi-panel plots in R using facet_wrap() and facet_grid() from ggplot2,部分代码有修改。

ggplot2 一个非常强大的功能就是进行 multi-panel plots 的呈现,也就是我们常说的分面(facet)。通过使用 facet_wrap() 或者 facet_grid() 这样的函数我们就可以很方面的将单一的一个图变为多个相关的图。本文将通过一个具体的数据示例帮助你理解 ggplot2 分面的不同方法以及参数。

R 语言可视化之案例

qplot 使用

导入所需数据格式为 data.frame

data(mtcars)
df <- mtcars[, c("mpg", "cyl", "wt")]
head(df)

qplot() 基本用法

qplot(x, y=NULL, data, geom="auto",
xlim = c(NA, NA), ylim =c(NA, NA))

# geom 画什么图;main 题目;xlab,ylab xy 轴标签
# color 颜色;size 点大小;shape 点形状

R 语言可视化之原理概述篇

整体介绍

一张统计图形就是从数据到几何对象 (geometric object, 缩写为 geom, 包括点、线、条形等)的图形属性 (aesthetic attributes, 缩写为 aes, 包括颜色、形状、大小等)的一个映射。此外,图形中还可能包含数据的统计变换 (statistical transformation, 缩写为 stats), 最后绘制在某个特定的坐标系 (coordinate system, 缩写为 coord) 中,而分面 (facet, 指将绘图窗口划分为若干个子窗口)则可以用来生成数据中不同子集的图形。

要素

  • 数据 (data)
  • 映射 (mapping): 建立数据与图形元素的关系
  • 几何对象 (geom):对数据的渲染和展示
  • 统计变换 (stats)
  • 标度 (scale)
  • 坐标系 (coord)
  • 分面 (facet)
  • 主题 (theme)

多快好省用 R 处理数据

很早之前我一直都是使用命令行来处理软,cut,sed 再 grep 再加上终极 awk 基本上就可以随意的按照需求处理各种软件跑出来的文本文件了,再后来就要开始学习 python,python 学的怎么样了呢?呵呵。

虽然做过统计学课的助教,上课的时候用的也是 R 语言,但是博客里并没有几篇 R 相关的文章。印象中一篇是 给初学者的 R 语言介绍(写这篇文章当时是为了激发一点学生学习 R 语言的热情),另一篇是 R 必备基础知识(写这篇文章当时是因为在写 R 与统计学基础系列文章,就不得不总结一些 R 语言的基础知识)。

说实话,我本身对 R 还是非常喜欢和欣赏的,但是日常的使用需求并不高。就拿最基本的文本处理来说,基本上都可以在 shell 中进行随心所欲地增删改成,处理成很多 R 相关软件需要的文本格式,用需要的 R 包跑一两个命令就可以了。但是目前已经有点厌倦了这样的生活,我后期打算有机会的话用 R shiny 写一点网页工具给大家娱乐,也打算精进一下 R 的画图技能。这里就 have to 用 R 去做一些数据处理,于是就有了这样一系列文章。这篇是关于如何用 R 多快好省的进行数据处理。另外,说句题外话,从我这几天的实际处理数据情况来看,R 有些工作做起来,还是太慢了,也可能是我的业务不够娴熟吧。

R 语言必备基础知识

写着写着 R 与统计基础莫名其妙地又写开 R 基础了,一起写吧。

R 编程基础

算数运算

常用的+ - * \ ^ 可以直接在 console 中计算

计算函数

常用的log2(x) log10(x) exp(x) sin(x) tan(x) abs(x) sqrt(x) 也可以直接计算

变量赋值

a <- 3;a <- "b"赋值符号是<-, 使用 ls() 可以显示当前已经创建的对象

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×