Author Archive for 写长城的诗

python的数据科学资源

python和R是数据科学家手中两种最常用的工具,R已经介绍的太多了,后续我们来玩玩python吧。从出身来看,R是统计学家写的,python是计算机科学家写的,两者的出生背景不一样,随着数据爆发,python也慢慢发展,逐渐在数据科学中找到了一席之地。

包:
python也有非常多的扩展包,不过用于数据分析的并不象R那么品种繁多。常用的:
numpy:提供最基本的数值计算,使向量化计算成为可能。
scipy:提供了包括最优化在内的科学计算函数,不用自己写啦。
pandas:提供了类似dataframe的数据结构,处理表格数据非常方便。
matplotlib:画图必备,但用起来感觉不如ggplot2啊。
statsmodel:提供包括回归、检验等多种统计分析函数,python也能干R的活。
sklearn:数据挖掘必备,各种函数非常丰富,文档齐全,看得出CS出品就是不一样啊。

书:
python的数据方面书还不算很多,不过很有CS的味道,就是用show me the code,公式不多,这点我很喜欢。

现有可以找到的书基本上分为三类,一类是用基本语法实现统计分析和科学计算,例如下面的:
Think Stats
Think Bayes
A Primer on Scientific Programming with Python

另一类是以介绍一些包为目的,带有一些案例,例如:
Introduction to Python for Econometrics, Statistics and Data Analysis
numpy begin guide
Python for Data Analysis
matplotlib cookbook
Learning scikit learn Machine Learning
python text processing with nltk 2.0 cookbook
Social Network Analysis for Startups

最后一类是专门讲数据挖掘、机器学习的书:
programming collective intelligence:不用numpy包,只用基本语法实现一些算法
Machine Learning in Action:使用了numpy包,介绍了如何实现大部分算法
Machine learning an algorithmic perspective:体系非常完善,而且示例代码中使用了类

Notebook:
python的一大妙处就是ipython notebook,它可以把代码及其结果都存在一个网页上,方便分享学习。网上有非常多的notebook,其中成体系而又精彩的有下面三个:
https://github.com/datadave/GADS9-NYC-Spring2014-Lectures
http://blog.yhathq.com/posts/data-science-in-python-tutorial.html
http://slendermeans.org/pages/will-it-python.html

have fun!

python读入csv的三种方式

读数据到python有好几种方法,我们以读取iris.csv为例,将其中的数值部分提取出来。第一种方法是列表理解,文件读取到lines之后用一个嵌套的列表理解就可以将数值存为一个list。第二种方法是使用numpy库,它内带的loadtxt函数,读取的数据都认作是字符串,所以在第二行取我们需要的部分,并转为数值array。第三种方法是使用pandas库,它内带read_csv函数,读取数据会自动判断数值还是字符串,而且会自动保存好变量名,只需要用ix方法就可以类似R一样取出需要的子集,它存为dataframe对象。

这三种方法中最后一种最简单,不过花费时间比较长一点,第一种最麻烦,不过用时最短。这个可以通过ipython中的magic函数%%timeit来看。

python和ggplot2

python有个非常强大的工具,那就是ipython notebook。用户可以在浏览器中直接编写python脚本,并立即得到输出结果。这类文档可以存为ipynb分享给其它人,也可以存为html直接放在网站上,非常有利于学习交流。

在R语言方面就缺乏这类工具,不过ipython有一种“魔法”,可以在ipython中运行其它语言。在数据分析时,可以将python和R代码混编,充分利用两种语言的优势。以可视化为例,R的ggplot2图形语法可谓是独步江湖,python中虽然已经有不少优秀的绘图库。但总不及ggplot2用得习惯。下面的小例子就是示范在ipython notebook中画ggplot2。

首先是用numpy库建立两个向量,再用%load_ext建立python和R的连接机制。之后在ipython notebook的一个cell里面就可以使用%R后面接R代码行,或者使用%%R使用代码块。如果要在R代码块中读入python的对象,需要使用-i参数。

其它例子可以参见这个,python中也有人复制了ggplot语法,可参见这里

理解MCMC

在贝叶斯统计中,经常需要计算后验概率,概率计算就涉及到积分问题。一种解决方法是用解析式得到后验概率直接计算,另一种是利用统计模拟来计算近似值。 考虑一个简单问题,我们对一个硬币反复投掷,对于出现正面的概率theta先主观设定为一个均匀分布,然后实际投掷14次,得到11次正面,要根据这个信息data来更新后验概率。下面用统计模拟来计算。 因为实际的数据表现是正面出现次数较多,所以后验概率会做出相应调整。这个统计模拟的例子非常简单,容易实施。但如果涉及的参数个数很多时,计算量就会非常大。此时就可以尝试另一种统计模拟方法,即MCMC(Markov chain Monte Carlo)。我们先考虑一个思想实验:

一个岛国下面有7个岛,各岛人数不一样。旅行者已经在其中一个岛上,他要去各岛游历,准备在人口多的岛上游玩的时间长一些。但他并不知道具体的人口数,可以询问本岛和相邻岛的市长。他的旅行计划如下:
首先每天会扔一枚硬币,如果正面向上,就计划去左岛,如果反面向上,就计划去右岛。
然后比较当前所在岛人口数a和计划去的目的岛人口数b,若b小于a,则实际去的概率为b/a,若b大于a,则实际去的概率为1。所以实际去的概率归纳为min(1,b/a)。
就这样,旅行者每天不断的在不同岛间移动,最终他在各岛上呆的时间之比,就会收敛为各岛人口之比,这样就通过一个随机模拟得到了一个概率分布。

参考资料:Doing Bayesian Data Analysis with R

一个简单排队论问题的python实现

一个诊所只有一个医生,病人到来的时间是随机的,从早上九点开始,服从一个时间参数为10min的泊松过程,即每个人到来的时间服从独立同分布的指数分布,其期望为10min,每个病人到来之后,下一个病人到来的时间服从独立同分布的指数分布,期望为10min。当一个病人到来以后,将等待直到医生有空。每个医生在每个病人上花费的时间是一个随机变量,在5min到10min之间均匀分布。诊所从下午4点不再接受新病人,最后一个病人走后,诊所关门。
(1)模拟一天的病人到来和医生接诊情况,有多少个病人来诊所看病?其中有多少病人需要等待医生?平均等待时间是多少?
(2)模拟100天的情况,给出上面各个数值的分布

从模拟角度理解混合模型第三:广义和加性混合模型(完)

之前讨论的混合效应模型均是最常见的线性模型基础上的扩展。但在实际使用中会发现用到其它情况,例如要处理分类问题,需要logistic回归模型。再比如说线性关系不存在,需要用加性模型来处理复杂的非线性关系。这两种模型分别归于广义线性模型和加性模型。那么在这两种模型基础上再考虑解释变量的混合效应,要分别衍生出广义混合效应模型和加性混合效应模型。在R中lme4包可以处理广义混合效应模型,而mgcv包可以处理加性混合效应模型。在之前文章一样,我们先模拟这两种数据,再分别进行建模。代码来源于《Regress by simulation》

用模拟来理解混合效应模型之二:Random Intercept and slope model

在之前的这篇文章中,混合效应模型的意义已经说的比较清楚了,简言之,样本中不能穷尽总体level的变量都是随机效应。也可以这么认为,会影响目标变量,但我们不关心的解释变量都是随机效应。之前文章的随机效应只影响模型的intercept,那么也会有影响slope的随机效应。我们先来看一下这种混合效应模型的假设,再用假设来生成数据,并建模和绘图。

Yij = b0 + (b1+si)*Xij +  bi + eij 
* b0: fixed intercept
* b1: fixed slope
* X: fixed effect
* bi: random effect(influence intercept)
* eij: noise
* si: random effect(influence slope)

《R语言与Bioconductor生物信息学应用》已经出版

《R语言与Bioconductor生物信息学应用》一书主要是使用R语言来解决生物信息学问题。主要作者是两位在生物信息学界有极深造诣的科研人士,高山和欧剑虹,这二位的博客地址如下:
http://blog.sciencenet.cn/u/gaoshannankai
http://pgfe.umassmed.edu/ou/
我本人也完成了其中部分章节的写作。此书的特点在于:

  • 从实际课题出发,提出解决这个问题的思路,结合用到的原理或基础知识,但更偏重整个解决问题的框架和流程,选用R这种简单易学但功能强大的语言,把讲解延伸到具体程序代码,让读者100%经历整个课题研究过程。
  • 最大的创新点是:实际课题直接来作者发表的SCI文章,全部都是真枪实弹,不杜撰所谓“实际应用”。国内外尚未见到与SCI文章紧密结合的生物信息书籍。
  • 本书是多名R领域专家(全部都是一线科研工作者)通过互联网联手写作。在前期网上调研的基础上,尽量在本书内突出大多数人普遍关心而又难找相关资料的问题。
  • 所见即所得,学到的知识可以通过简单编程(仅仅代码拷贝粘贴)加以实现,印象深刻,学了不会忘。提出三板斧学习法,让无基础的人也能编程。
  • 本书作者通过QQ群直接面向读者答疑,并且共享了大量的参考资料和习题答案。使用正版书籍的读者都可以入群享受最好的服务。不在书中罗列基础知识凑字数,也不使用光盘,既能减轻读者负担,又能保护环境。



此书详细目录如下

第一章 R基础知识 4
1.1 什么是R 4
1.1.1 R语言的起源 4
1.1.2 R语言的特点 5
1.1.3 R语言的主要用途 7
1.1.4 R语言的应用现状和发展趋势 10
1.2 R的下载与安装 12
1.2.1 主程序的下载与安装 12
1.2.2 扩展包的下载与安装 14
1.2.3 R语言的集成开发环境 16
1.2.4 R主程序和扩展包的管理与升级 19
1.3 R语言快速入门 21
1.3.1 从哪里入手开始学习R 21
1.3.2 三板斧搞定R语言 21
1.3.3 一个例子来说明三板斧 22
1.4 一些简单的语法知识 23
1.4.1 什么是编程 23
1.4.2 变量 23
1.4.3 函数 24
1.4.4 综合案例 25
1.5 本章源代码详解及小结 25
1.5.1 例1-1 25
1.5.2 例1-2 26
1.5.3 例1-3 27
1.5.4 例1-4 28
1.5.5 小结 30
参考文献: 31
第二章 生物信息学基础知识 4
2.1中心法则-生物信息流 4
2.1.1 生物大分子 4
2.1.2 中心法则 7
2.1.3 基因组、转录组和蛋白质组 8
2.1.4 非编码RNA和microRNA 9
2.2测序与序列分析 10
2.2.1 DNA测序技术 10
2.2.2 第二代测序技术的应用领域 12
2.2.3 序列分析 13
2.2.4 序列比对和相似性搜索 14
2.2.5 分子进化和系统发生树 15
2.3基因表达分析 17
2.3.1基因表达的检测方法 17
2.3.2 基因表达数据分析 18
2.3.3基因表达差异的显著性分析 19
2.3.4基因本体论分析 20
2.3.5通路分析 22
2.4注释、统计与可视化 22
2.4.1 注释与ID映射 23
2.4.2 统计与可视化 23
参考文献: 24
第三章 R在生物信息学中的简单应用 2
3.1 一个序列分析课题 2
3.1.1 课题背景 2
3.1.2 研究目的与实验设计 2
3.1.3 数据获取与处理流程 3
3.2 用R包(非bioconductor)实现课题 4
3.2.1 定义全部函数(例3-1) 4
3.2.2 课题实现 13
3.2.3 源代码详解与小结 16
3.3 用R包(bioconductor)实现课题一 21
3.3.1 重新设计数据处理流程和全部函数(例3-2) 21
3.3.2 课题实现 25
3.3.3源代码详解与小结 26
3.4 用R包(bioconductor)实现课题二 26
3.41 重新设计数据处理流程和全部函数(例3-3) 26
3.4.2 课题实现 35
3.4.3源代码详解与小结 35
第四章 Bioconductor简介 1
4.1 什么是Bioconductor 2
4.1.1 Bioconductor的起源 2
4.1.2 Bioconductor主要特点 2
4.2 Bioconductor包的分类介绍 5
4.2.1 三大板块分类介绍 5
4.2.2 软件包的进一步介绍 6
4.2.3 按照应用领域分类 9
4.3 从R到Bioconductor的跨越:Biostrings, BiomaRt以及AnnotationDbi包 12
4.3.1 应用Biostrings处理生物序列 13
4.3.2 应用BiomaRt获取实验数据与注释信息 21
4.3.3 应用AnnotationDbi生成注释包 27
参考文献: 32
第五章Bioconductor分析基因芯片数据
5.1 快速入门 2
5.2 基因芯片基础知识 3
5.2.1 探针组 3
5.2.2 主要的芯片文件格式 4
5.3 基因芯片数据预处理 5
5.3.1 数据输入 6
5.3.2 质量控制 7
5.3.3 背景校正、标准化和汇总 17
5.3.4 预处理的一体化算法 20
5.4 基因芯片数据分析 24
5.4.1 选取差异表达基因 24
5.4.2 注释 27
5.4.3 统计分析及可视化 28
5.5 芯片处理实际课题一 39
5.5.1 课题背景 39
5.5.2 数据集与预处理 40
5.5.3 R程序与代码讲解 41
5.6 芯片处理实际课题二 42
5.6.1 课题背景 42
5.6.2 数据集与处理过程 43
5.6.3 R程序与代码讲解 43
5.7 芯片处理实际课题三 44
5.7.1 课题背景 44
5.7.2 数据集与处理过程 45
5.7.3 R程序与代码讲解 46
参考文献: 48
第六章 Bioconductor分析RNA-seq数据 4
6.1示例课题介绍 4
6.1.1课题背景 4
6.1.2数据集和处理过程 4
6.2高通量测序基础知识 5
6.2.1高通量测序原理 5
6.2.2测序的质量分数 9
6.2.3高通量测序文件格式 12
6.3 RNA-seq技术的特点 16
6.3.1 RNA-seq对芯片的优势 16
6.3.2 RNA-seq存在的问题 17
6.4 RNA-seq数据预处理 18
6.4.1 质量控制 18
6.4.2 读段清理 22
6.4.3 转录组组装 25
6.4.4 转录组定量和标准化 25
6.4.5 线性相关系数 27
6.5 RNA-seq数据分析 28
6.5.1基因表达差异的显著性分析 28
6.5.2 RNA-seq数据的其它分析 31
参考文献: 31
第七章 R的高级语法与如何创建R包
7.1 R的高级语法 2
7.1.1 数据类型及相互转换 2
7.1.2 向量运算 6
7.1.3 函数 8
7.1.4 循环与条件 9
7.1.5 输入输出 11
7.1.6 对象和类 12
7.2 创建及发布自己的R/Bioconductor包 14
7.2.1 在Windows下创建和发布R包 14
7.2.2 在Linux下创建和发布包 25
7.3 R包结构 26
7.3.1 R的源代码包 27
7.3.2 R的二进制包 28
参考文献: 29

附录A 进一步学习的资源
附录B R常用函数
附录C R的内存管理和帮助系统

购买方式:

支付宝账号: [email protected] 何静
留言:姓名+R语言书+册数
定书后,请将邮寄地址(一定要邮编)和电话发以上电子邮件
电子邮件题目是买R语言书,内容就是姓名+邮寄地址+电话
本书定价58元,群内读者预定50元(包快递费);团购5本以上45元(包快递费);50本40元(包快递费);
如果大学指定为教材,我可以提供更多材料,长期合作,打造精品课程