散点图的绘制
数据读取
笨人踩过的一个天大的坑
1 | image_path = "path_to_your_image.nii" |
1 | image_path = "path_to_your_image.nii" |
R语言是一款统计软件,R语言也是一门编程语言,R语言也是一个数据分析平台。R是一个免费自由且跨平台通用的统计计算与绘图软件,它有 Windows、Mac、Linux 等版本,均可免费下载使用。R 项目(The R Project for Statistical Computing)最早由新西兰奥克兰大学(Auckland University)的 Robert Gentleman(1959-)和 Ross Ihaka(1954-) 开发,故软件取两人名字的首字母命名为 R 。该项目始于 1993年,2000年发布了首个官方版本 R 1.0.0 ,后期维护由 R 核心团队(R Core Team)负责。截止 2022-06-23,,已发布到 4.2.1版本。凭借其开源、免费、自由等开放式理念,R 迅速获得流行,目前已成为学术研究和商业应用领域最为常用的数据分析软件之一。随着大数据行业的发展,R语言变得越来越流行,R语言发挥了越来越重要的作用。
R是个多面手,你做科研过程的数据计算、统计检验、统计建模、数据挖掘、数据可视化它全包了。学了它,不用向以前必须学习统计软件STATA或者SPSS,同时还要学Graphpad、origin等绘图工具。同时R的脚本会记录你的数据处理工作的整个过程,过3年,你的学弟依旧可以拿着你的原始数据,重现你l论文的数据统计与可视化结果。
R能干啥,可能从下面的 R task view看得更清楚
是时候放弃excel了
我建议:目前的科研状态,一定要学习 R 或 Python,至少学一种,实际上应该都会。如果你对==生物统计学、生物信息学==更感兴趣,我建议你先学R。如果你对机器学习最感兴趣,特别是像深度学习这样的现代方法,那么应该首先选择 Python。当然如果你有python基础,直接使用python就可,不学R。如果没有,先学R。这两种语言很多的地方是相通的。学会了一个再学另外一个相对简单。真正的数据分析科学家与工程师,都是左手R 右手Python的。看下面的链接
R语言更擅长处理结构化数据,因此,在使用 R之前,尽量确保数据是严格的表格结构。也就是二位的表格,分为行和列。在 R语言中,行称为“观测”,列称为“变量”。
R语言支持 windows,macos,linux等多个系统平台,提供图形化界面,下载和安装都不难,可以直接从官网进行下载,当前最新版本为 4.2.1。R语言平均每半年更新一个比较大的版本,中间也会有一些小版本,建议安装最新的版本。可以从 R的官网下载软件安装包,软件最好安装到系统默认目录下。
R官网: https://www.r-project.org/ ,如下图
windows系统:
下载地址:https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/base/R-4.2.1-win.exe
Mac系统 :
下载地址:https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/macosx/base/R-4.2.1.pkg
当前 R语言的集成开发环境很多,但其中 Rstudio可以说是最优秀的,Rstudio是 R软件的一个集成开发环境,为 R的使用提供了极大的便利,Rstudio本身并不集成 R软件,需要首先安装 R软件,Rstudio会调用 R软件。Rstudio支持 windows,macos,Linux等多个系统平台,并且提供免费的桌面版与服务器版本可供选择,服务器版本可以搭建多用户使用场景,直接通过网络浏览器访问 R。此外,Rstudio公司还开发了大量 R语言的扩展包,操作简单,功能强大,极大扩展了 R语言的功能。到10月份Rstudio将更名为Posit,将R与python的链接更方便
官方网站:https://www.rstudio.com/,如下图
下载地址:
windows:
https://download1.rstudio.org/desktop/windows/RStudio-2022.07.1-554.exe
macos:
https://download1.rstudio.org/desktop/macos/RStudio-2022.07.1-554.dmg
为了更好地使用 Rstuido软件,需要对软件进行一些设置,主要包括主题背景,字体大小,
字体编码,默认软件源等。
方法一:创建一个新账户
创建一个新的英文账户,或者修改本地账户为使用 windows账户登录。
方法二:修改缓存目录
Rstudio遇到中文报错,主要原因在于,Rstudio需要一个临时缓存文件,windows系统下这个默认目录在”C:\User\XXXX\AppData\Local\Temp”。其中 XXXX为用户名,如果是中文,则无法识别,所以,我们需要修改 TEMP和 TMP这个目录环境变量。右键此电脑,选择属性,然后点到高级系统设置,选择环境变量
修改 TEMP和 TMP变量,其中不能有中文,如下
使用 R语言的第一个过程就是设置工作目录,使用 R语言经常需要读写文件,设置好工作目录可以方便读写文件。需要对不同系统目录的写法有所了解,windows目录结构与 Linux(Mac)目录结构主要差别在两点:第一,Linux(Mac)系统不存在盘符,所有数据路径都是有“/”开始;第二:Linux系统采用正斜线分割目录,windows采用反斜线分割目录。在 R中可以使用正斜线。另外,Rstudio目前对中文支持并不好,目录中最好不要有中文,否则会报错。
1 | windows系统目录结构:C:\Users\xxx\Desktop\ |
方法一:Crtl+Shift+H快捷键 (windows) ; cmd+Shift+H快捷键(Mac) 或者通过菜单,如下
方法二:使用鼠标,通过文件管理窗口设置工作目录
方法三:使用 R函数
1 | #查看当前目录 |
创建 Project可以将所有数据放到一个目录下,R的 Project会保存分析过程中全部内容,方便管理以及分享。
R软件有交互式与脚本式运行两种方式,交互式便于进行数据探索,脚本式便于批量化和自动化处理。
脚本方式运行中,创建一个扩展名为.R的文件,例如test.R可以在Rstudio脚本窗口中一条条 运行,也可以一起全部运行。
[在Linux命令行中,可以使用Rscript命令运行脚本文件,或者使用R -f 来运行,当计算量较大,需要较长的运算时,或者可重复性计算等条件下,需要使用无监督的脚本式运行。在使用脚本运行R时,需要保证脚本能够正确执行,通常先使用小数据进行测试,并且运行过程中将结果及时保存为文件,例如绘制出的图片,而不是交互式显示。R脚本也可以提供选项参数,将R脚本转换为一个可执行程序。]
学习 R语言的本质就是学习 R函数的过程,因为在 R中,每一步操作都需要使用 R的函数。在 R语言中,每个 R函数都需要后面介绍小括号,这是为了与环境中的变量区分开。比如定义一个名为 data的变量,R中还自带一个 data函数,这样就无法区分,因此,R函数需要接上小括号,例如 data()函数。R中需要使用选项参数,用来调节 R函数的功能。选项和参数之间用等号连接。不同选项后面接不同的参数,例如有的选项接数值参数,有的接字符串,有的接逻辑值。例如下面的案例。
1 | #一条典型的R函数 |
随机生成十万,百万,千万,亿,十亿个随机数,然后利用 R进行求和计算。
1 | #十万随机数 |
正确区分软件错误,R语言在运行过程中会输出很多信息,这些信息主要包括三类,分别是:
下面列出 R或者 Rstudio中一些常用快捷键:
alt+-
R语言的赋值使用“<-”,每次需要敲两个字符,非常麻烦,在 Rstudio中可以使用“alt+-”直接生成,非常方便,如果使用右侧 alt键,更加容易。
ctrl+shfit+h
使用 R第一件事情就是设置工作目录,如果不习惯敲 setwd()函数或者不熟悉系统目录结构,可以使用该快捷键直接用鼠标选择。
esc
中断程序,非常有用。
tab
tab自动补齐,可以补齐函数,选项参数等;
ctrl+L
相当于清屏,与 Linux 一致。
上下箭头
历史记录;
ctrl+sfhit+F10
重新启动 R,有些情况下需要重新启动 R,这个时候无需关闭整个 Rstudio,使用该快捷键即可重新启动 R。
ctrl+r
ctrl+r快捷键可以快速调出使用过的历史记录,如果有些命令太长,使用这个快捷键非常方便。
ctrl+向上
也是快速调出历史记录,与 ctrl+r类似。
ctrl++,ctrl+-
调整字体大小。
ctrl+shift+m
如果使用 tidyverse系列包,经常需要使用管道符“%>%”,使用该快捷键可以直接输出管道符。
alt+shift+k
可以快速调出所有快捷键列表。
R语言可以通过自定义修改默认行为,例如修改默认提示符,修改默认镜像地址,修改默认加载包目录,默认有效数字位数,启动后自动加载包等。
R每次启动时,会从默认目录下(windows系统一般为我的文档)读取.Rpofile文件,对 R的自定义,就是修改该配置文件。这个默认配置文件类似于 Linux系统家目录下的.bashrc文件。
1 | #通过 file.edit()函数创建文件 |
R语言的一大优势就是有各种各样的扩展包,所谓 R扩展包,就是将数据处理的算法通过 R函数来实现,在加上测试数据,说明文档整合在一起,就是 R的扩展包。在使用 R的过程中,肯定需要使用到 R的包,因此,需要掌握 R包的管理,包括包的查找,安装,加载,升级,取消加载,删除,查看帮助文档等等操作。
##有关生物信息的的task views取消了 需要看
https://cran.r-hub.io/web/views/Genetics.html
###有关统计学习与教学的包
https://cran.rstudio.com/web/views/TeachingStatistics.html
Bioconductor 是建立在 R语言环境上的,用于生物信息数据的注释、处理、分析及可视化工具包的总集,由一系列 R扩展包组成。很多生物数据都是使用 bioconductor包来分析的。
Bioconductor官网:http://www.bioconductor.org/
由于不用 R包之间存在相互依赖的关系,因此,强烈推荐采用在线安装的方式,这样软件可以自动解决依赖关系问题,节约大量时间。R默认的服务器在国外,为了加快下载速度,需要将 R镜像站点修改为国内镜像站点。
R包的默认安装路径与登录账号是否为管理员有关,如果登录的为管理员账号,则默认安装到 R安装目录下。如果登录的为普通账户,则在每个账号下的**==我的文档==**中。
1 | #windows系统: |
通过网络安装 R包,网络速度影响比较大,因此要选择合适的镜像,一般选择距离较近的镜像。
1 | chooseCRANmirror() |
常用 R镜像站点
可以将每个 R包开成一个手机 App,R包的管理类似于手机应用的管理,包括搜索,下载,安装,打开,卸载等操作。
1 | #安装 vcd包 |
1 | # 安装 devtools |
1 | install.packages("BiocManager") |
1 | #安装rvcheck |
学习 R语言需要经常查看帮助文档,包括 R包的帮助文档,查看帮助文档可以快速了解一些函数的用法。不过由于开发者不同,因此帮助文档的水平也参差不齐。查看帮助文档,可以使用 help()函数,一般的 R函数都会自带案例代码,可以直接使用 example()函数运行这些代码。此外,一些 R包还提供一种 vignette格式的文档。
1 | #打开帮助页 |
R包一般都是一个完整文件,只需要将 R包整个文件夹迁移走,一般就可以运行。对 R包进行迁移时,尽量保证 R版本一致。直接将整个 R包目录拷贝到新的目录下即可。首先找到 R包的安装目录,然后将整个目录打包,拷贝到另外一个目录解压缩。
1 | #找到R包的安装目录 |
该方法只是一种方案,绝大部分包是可以的。但是注意不能将 windows系统安装的迁移到Linux下。该方法也不是万无一失,比如 R包需要系统一些配置,缺少了还是无法运行。
获取要迁移的 R包名字列表,在一台设备上使用循环逐个安装。但是该方法无法处理 github上安装的包。
1 | #保存 A设备上的 R包名字列表; |
一般情况下我们需要分析的数据都是存储在文件中,那么利用 R分析数据的第一步就是将输入读入 R语言。如果分析的数据是记录着纸质载体上,还需要将数据手动录入,然后保存为一个文件。在 R中分析文件一般是文件文件,通常是以逗号分隔的 csv文件,如果数据本身包含逗号,就需要使用制表符 tab分隔的文件。有些情况下还有需要处理其他统计软件生成的文件,例如 Excel生成的 xlsx格式文件等。R可以很方便的读写多种格式文件。
1、csv
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。
1 | name,age |
2、tsv
TSV:tab separated values;即“制表符分隔值”,如:
1 | name age |
通过 Rstudio导入文件 , 如下:
在 Rstudio中,可以通过点击鼠标读入文件,在读入文件之前,需要对文件格式和内容有所了解。例如文件是否是一个标准的列表形式,也就是是否为结构化数据。文件存储格式,是二进制还是纯文本,如果是纯文本,文件扩展名是什么?用什么分隔符分割?文件有多少行,多少列? 第一行是否为列名,第一列是否为行名?清楚了这些之后就可以读入文件了。
R提供了大量读入文件的函数,这些函数通常是以 read.*开头,后面接文件扩展,例如 read.csv,read.xlsx,read.spss等。其中最常用的为 read.table。read.table包括以下重要选项参数。
1、data:后面接文件路径,注意文件路径一定要加引号,注意 windows系统文件路径的写法。
2、header:只接逻辑值 TRUE或者 FALSE,代表第一行是否作为表头,默认为 FALSE。如果不设置,R会默认添加 V1,V2等作为列名。
3、sep:分隔符,读入文件最重要的一个选项,如果设置错误,文件格式很乱,通常就是逗号“,”,制表符“\t”或者冒号“:”等。
4、row.names:后面接数字,指定哪一列作为行名,默认是 0,通常可以设置为 1。
5、stringsAsFactors:后面接逻辑值,设置为T,R语言默认会将文件中的字符串自动转换为因子。
6、na.strings:后面接字符串,指定文件中空值的表示方法。
1 | #读入一个文件,存入 x变量 |
无论使用哪个函数读取文件,R中读入的数据都存储为数据框这种数据类型。通常将文件保存为一个变量。读入文件之后,需要验证文件是否读入成功,通常使用 head函数截取文件头部显示出来,判断格式是否正确,在 Rstudio中也可以使用 View()函数将全部内容显示出来。如果格式不正确就需要修改命令重新读取文件;如果没有问题,就可以对数据进行后续的分析了。
1 | #查看数据结构 |
数据处理结束之后,需要将存储在变量中的结果保存到文件中,R提供了大量写入文件的函数,这些函数通常与 read系列都是对应的,用法也类似使用起来也并不难。
1 | #写入文件 |
Excel是全球最流行的电子表格程序,即使你可以使用 R语言处理所有的数据分析工作,但是总有一天你不得不处理别人传给你 Excel生成的电子表格需要你帮忙处理。还好 R可以很方便的处理 excel的电子表格。通常处理 Excel表格有两种方法。
方法一:将excel文件另存为 csv或者 tsv
方法二:readr,xlsx,openxlsx等包
R中有大量可以读写 Excel电子表格的包,使用方法与 read.table()函数类似,只需注意Excel的电子表格分为工作簿与工作表,一个工作簿中包含多个工作表(sheet),因此需要指定读取工作簿中那个工作表,可以指定工作表的名字,也可以使用顺序号
1 | #安装 openxlsx包 |
除了常规各种文本表格之外,R还提供了两种文件格式,分别是 RDS与 Rdata格式。RDS可以用来存储单个数据集,Rdata可以存储多个 R数据集。R内置格式的好处是对 R软件支持更好,便于分享,且内置压缩算法,同样的数据内容,文件更小,便于传输。
1 | #数据集iris 数据框"data.frame"结构 |
1 |
|
在使用R语言过程中,每一步中都需要关注R语言的数据结构。数据结构是R语言中最重要的内容,也是最难的一部分,学会了这部分之后,R语言就不难了。很多时候,函数无法运行,都是因为数据结构的问题。在学习R语言数据结构之前需要首先了解下数据的类型。
数据类型主要表示数据代表哪种内容,是字符串还是数值,逻辑值,或者时间日期等。数值可以用于计算,字符串不能用来计算,逻辑值用来判断等。其实这个在excel中我们也见过,Excel中数据类型如下图所示:
R的数值类型主要包括字符、数值、复数、逻辑4类,如下。我们主要用字符、数值和逻辑三类。
R的数值类型
R的数据结构主要包括以下几种:向量、,每一种都有固定的用处,学习R语言需要非常熟悉每一种数据结构的特点。
R 语言的一个好处是内置了大量数据集,一般 R扩展包也包含数据集,这样无需自己准备输入文件,可以很方便的重复案例的内容。启动 R之后,默认已经加载了 datasets包,里面包含了大量数据集,使用 data()函数可以显示所有数据集。直接敲数据集的名字就能够打印出数据集的内容,内置数据集与自己通过文件将数据读入 R中,存储为变量效果上是一样的。
1 | # 显示所有内置数据集 ,来自‘datasets’这个包 |
向量:vector,是 R中最重要的一个概念,它是构成其他数据结构的基础。向量其实是用于存储数值型、字符型或逻辑型数据的一维数组。R中的向量与解析几何或者物理学中有数值和方向的量不同,R中的向量是一个集合,即可以是数值的集合也可以是字符串或者逻辑值的集合。其余数据结构都由向量构成。
用函数 c来创建向量。c代表 concatenate连接,也可以理解为收集 collect,或者合并 combine。新手经常犯的错误就是忘了使用 c()函数。
1 | #R内置向量 |
1 | rivers[c(1)] |
1 | x <- runif(10000000,min = 1,max = 100) |
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。向量是一维的,而矩阵是二维的,需要有行和列。矩阵是 R语言中使用较多的一种数据结构,矩阵分为数值矩阵和字符串矩阵,常用的是数据矩阵,基因的表达数据为数值矩阵。矩阵有两大作用,一个是用来计算相关性,另外可以用来绘制热图。
1 | state.x77 |
矩阵属于二位数据,需要给定行列的。
1 | state.x77 |
R非常擅长基于矩阵数据绘制热图,基础包中的 heatmap()可以直接绘制热图,gplots 包 heatmap.2()也可以绘制热图,pheatmap包 pheatmap()函数可以绘制更加优雅的热图,ComplexHeatmap包 可以绘制复杂的热图。
1 | example("heatmap") |
利用 pheatmap绘制热图
1 | #install.packages("pheatmap") |
数据框是一种表格式的数据结构,属于一种二维表,分为行和列。数据框旨在模拟数据集,与其他统计软件例如 SAS或者 SPSS中的数据集的概念一致。数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。不同的行业对于数据集的行和列叫法不同。在一个数据框中,每一行的元素个数相同,每一列元素个数也相同,每一列的数据类型一致,都为一个向量,每一行内容还是一个数据框。数据框是 R中使用最广泛的一种数据格式。
1 | mtcars |
1 | euro[1:3] |
6.3利用 R实现 vlookup 案例
1 | #Excel函数:=VLOOKUP($A2,Sheet1!$A$1:$I$201,COLUMN(Sheet1!A2),FALSE) |
缺失信息问题在数据科学中非常常见。在大规模数据采集过程中,几乎不可能每次都得到完整的数据,那么该如何处理缺失数据呢?首先我们要清楚为何会出现缺失数据,一种可能是机器断电,设备故障导致某个测量值发生了丢失。或者测量根本没有发生,例如在做调查问卷时,有些问题没有回答,或者有些问题是无效的回答等,这些都算作缺失值。对于缺失信息,R中提供了一些专门的处理方法。
在 R中,NA代表缺失值,NA是不可用,not available的简称,用来存储缺失信息。这里缺失值 NA表示 没有,但注意没有并不一定就是 0,NA是不知道是多少,也能是 0,也可能是任何值,缺失值和值为零是完全不同的。
1 | x <- c(1:10,NA) |
列表就是一些对象的有序集合。列表中可以存储若干向量、矩阵、数据框,甚至其他列表的组合。
1 | state.center |
所有的数据集合可以分为三类,连续型,名义型和有序型。连续型例如1 2 3 4 5 8 9 10,名义型如sample1 sample2 sample3 ,而有序型 good better best;周一,周二,周三……等。在R中名义型变量和有序性变量称为因子,factor。这些分类变量的可能值称为一个水平level,由这些水平值构成的向量就称为因子。因子主要用于计算频数,可以用来分组。可以通过factor()函数中的labels选项对因子的值进行批量修改。
1 | state.division |
同名函数有多个不同函数来实现
函数定义时设置默认值就是缺省值,在实参缺少时,编译会自动设置为default值
1 | void print(char* name,int score,char* msg="pass") |
1 | void fun(int a, int b=1) { |
auto
std=c++11编译,由编译器根据上下文自动确定变量的类型:
1 | auto x = 1; |
1 | auto func(char* ptr,int val) -> int; |
1 | auto a; //错误 |
decltype
可以对变量或表达式结果的类型进行推导,decltype(var)
返回的是var的类型:
1 | struct { char name[17]; } anon_u; |
auto+deltype
自动追踪返回类型
1 | auto func(int x, int y) -> decltype(x+y) |
1 | auto func(int x, int y) |
new
&delete
:指针变量所指内存的动态生成和删除:1 | int * ptr = new int(10); // 单个变量 |
0
、NULL
、nullptr
0
与NULL
可以说是等价的,当int和ptr产生函数重载时的冲突时需要使用nullptr
,这是一个严格意义上的空指针在循环头的圆括号中,由冒号”:”分为两部分,第一部分是用于迭代的变量,第二部分则表示将被迭代的范围。常见于容器的元素循环。
1 | #include <iostream> |
1 | // matrix.h |
通常,类的声明放在头文件中,而类的成员函数实现/定义放在实现文件中
为了方便解决依赖关系,复杂的成员函数声明和定义一般是分离的,不适用类内定义
1 | class Matrix { |
1 | // matrix.cpp |
private
& public
类的成员(包括数据、函数)可以根据需要分成组,不同组设置不同的访问权限
public
修饰的成员可以在类外访问private
默认权限,不允许在类外访问class
中成员的缺省属性为private,因而以下代码中data是默认权限: 1 | class Matrix{ |
protected
对象名.成员名
or对象指针->成员名
使用数据成员/函数,类外使用仅能访问publicthis
指针所有成员函数的参数中,隐含着一个指向当前对象的指针变量,这也是成员函数与普通函数的重要区别。可以用作前“对象指针”访问/赋值
inline
函数调用需要压栈、跳转、退栈、返回,是一个比较慢的过程,大量调用函数会拖慢程序
重点:
MAKE
文件对于头文件,尽量只申明函数而不实现函数。尽量只声明全局变量而不定义全局变量
声明:告诉编译器关于变量名称、变量类型、变量大小,函数名称、结构名称大小等信息,在此阶段不会给变量分配任何的库存。
extern int x;
;也可以用于函数声明定义:变量声明+内存分配
int x=1
或者int x
都是变量定义,后者只是缺少初始化#define
:一种预编译指令,用于给一个字符串定义一个“标识符”,这个标识符叫做宏名,被定义的字符串叫做替换文本;#undef
加上宏名终止宏名的作用域。1 | #define PI 3.14 |
sqrt(u+v)
会输出u+v*u+v
,由此体现宏替换只是简单的替换,并不会作出任何改变;如果有语法错误也只能在编译阶段发现#pragma
指令:可以设置面一起状态或者指示编译器进行特定活动:#pragma message("Hello")
。#pragma warning(disable:4507 34;once : 4385;error:164)
等价于#pragma warning(disable:4507 34)
(不显示4507和34号警告信息)、#pragma warning(once:4385)
(4385号警告信息仅报告一次)、#pragma warning(error:164)
(把164号警告信息作为一个错误)。1 | #ifndef name //=if !def |
1 | // #define DEBUG |
#error
:指令使预处理器发出一条错误消息,然后停止执行预处理。 1 | #error info |
.o
或.obj
文件g++ -c
:只编译不链接g++ -o ex1.out ex1.o
:链接程序g++ ex5_main.cpp func.cpp -o
:直接编译
MAKE
工具通过写入MakeFile
文件可以实现
细胞质膜:就是细胞膜,围绕在细胞最外层,由膜脂、蛋白质和糖类组成
细胞内膜:围绕各种细胞器的膜系统,细胞膜和细胞内膜统称为生物膜
主要包括甘油磷脂、鞘脂、固醇(同时也是脂筏的主要成分)
甘油磷脂:膜脂基本成分,占一半以上
主要在内质网合成是3-磷酸甘油的一系列衍生物(PC,PS,PE,PI)
鞘脂:膜脂的基本成分,一半以上
固醇:胆固醇及其衍生物的统称,含有四个闭环并且其中有三个六C环一个五C环;亲水头为一个羟基(只有这一部分是亲水基团)。是一种分子刚性很强的两性化合物。
膜脂的四种热运动方式
脂质体:概念+应用
基本类型
内在膜蛋白与膜脂结合方式
外在膜蛋白与膜脂结合方式
去垢剂:一端亲水,另一端疏水的两性小分子,是分离与研究膜蛋白的常用试剂,有离子型(SDS)和非离子型(Triton X-100)
ES:膜脂细胞外表面
膜脂的不对称性:糖脂仅存在于质膜的ES面,是完成生理功能的结构基础
膜蛋白的不对称性
膜蛋白的不对称性:每种膜蛋白分子在质膜上明确的方向性
没啥要考的
结构模型:
生物膜的组成
被动运输小批量,其余大批量,耗能
丢一个官网教程
1 | git clone https://github.com/django/django.git |
1 | django-admin startproject [你的项目名] |
1 | mysite/ |
setting.py
指定Django如何与你的系统交互以及你如何管理项目urls.py
告诉Django应创建哪些网页来响应浏览器请求wsgi.py
帮助Django提供他创建的文件(web sever gateway interface)db.sqlite3
是你的数据库,用于储存Django大部分与项目有关的信息1 | python manage.py startapp [程序名] |
1 | python manage.py runserver |
Quit the server with CTRL-BREAK.
就是说停止运行就是Ctrl+C我的项目名是myFirstDjango,程序名是blogs,示例代码见我的Github:myWeb
打开blogs
下的models.py
,我们就在这里创建模型;模型告诉Django如何处理应用程序中存储的数据。在代码层面,模型就是一个类,就像前边讨论的每个类一样,包含属性和方法。
要使用模型,必须让Django将应用程序包含到项目中。使用settings.py
来知道Django哪些应用安装在项目中,需要将你的应用程序添加到INSTALLED_APPS
这个元组中,在项目根目录下终端中执行第一行:
1 | python manage.py makemigrations [应用名] |
命令makemigrations
让Django确定如何修改数据库,使其能够存储与我们定义的新模型相关联的数据,输出可以看出建立了一个新文件,用来在数据库中为模型Topic建立一个表,以下用于Django修改数据库:
1 | python manage.py migrate |
每当需要修改“学习笔记”管理的数据时,都采取如下三步:
1 | python manage.py createsuperuser |
admin.py
的配置1 | from 项目名.models import Topic #这里报错没关系 |
1 | python manage.py runserver |
/admin/
就可以啦均是G-菌,其大小和特性均介于通常的细菌与病毒之间。
她说真核内容少
定义:一般泛指能发酵糖类的各种单细胞真菌
特点:
应用:
危害:使物品变质,对人和动植物致病
形态:通常为圆形、卵圆形或椭圆形。也有特殊形态,比如柠檬型,假菌丝,三角形,藕节状,腊肠形等
大小:比细菌粗约10倍微米级,直径2-5um,长度5-30um,最长可达100um
细胞结构:细胞壁、细胞膜、细胞核、液泡、线粒体、内质网、微丝、微体、及内含物等,有的菌体还有出芽痕。
繁殖方式:
生活史:生活史又称生命周期,指上一代生物个体经一系列生长、发育阶段而产生下一代的全部过程
菌落:菌落与细菌的相仿,但由于细胞比细菌的大,细胞内有许多分化的细胞器,细胞间隙含水量相对较少,以及不能运动等特点,因此菌落大而厚, 圆形,光滑湿润,粘性,颜色单调。常见白色、土黄色、红色
霉菌是丝状真菌的一个俗称,通常指那些菌丝体较为发达又不产生大型肉质子实体结构的真菌
菌落形态较大,质地一般比放线菌疏松、外观干燥,不透明,呈现或紧或松的蛛网状、绒毛状或棉絮状;菌落与培养基的连接紧密,不易挑取,菌落正反面的颜色和边缘与中心的颜色常不一致。比细菌、酵母菌的大。
产大型子实体的真菌
say:繁殖方式动物植物比较,病毒的定义,蛋白质繁殖的方式,病毒的形状和大小,五个阶段,繁殖过程,一步生长曲线,各个时期的理解(前提是烈性),烈性噬菌体与温和噬菌体,亚病毒
课后习题作业
定义:病毒是含一种核酸,专性活细胞内寄生,只能依靠宿主细胞的代谢系统完成核酸的复制和蛋白质的合成,并经装配而达到增殖,又能在细胞外以无生命的大分子状态而存在的非细胞型微生物
核酸(DNA、RNA)和蛋白质。有的病毒还含有脂类、糖类等其他组分
病毒粒子并无个体的生长过程,而只有其两种基本成分的合成和装配,即核酸复制+蛋白质合成$\rightarrow$核蛋白
1 | - 植物病毒: |
烈性噬菌体:大部分噬菌体感染宿主细胞,能在宿主细胞内增殖,产生大量子代噬菌体并引起细菌裂解
温和噬菌体(溶源性噬菌体):噬菌体感染细胞后,将其核酸整合到宿主的基因组上,并且可以随宿主基因的复制而进行同步复制,在一般情况下不引起寄主细胞裂解
微生物的营养类型(4),每一种类型的特殊微生物记忆几个,看教材
四种运输营养物质方式比较
四大营养类型微生物的划分是相对的,很多情况下取决于生长环境,许多微生物是兼性营养类型的,体现了微生物对环境很强的适应能力
关注常用的培养基成分
培养基是是为人工培养微生物而制备的、提供微生物以合适营养条件的基质。
按培养微生物的类群与营养类型
按对培养基化学成分的了解程度分类
按培养基外观的物理状态分类
按培养基的功能
初级代谢次级代谢定义与特点,二者关系;
表6-3记住,以及乳酸菌是一类菌
需要知道ATP相关得结论,不要求过程
由一系列氧化还原势不同的氢传递体组成的一组链状传递顺序。在氢或电子的传递过程中,通过与氧化磷酸化反应发生偶联,就可产生ATP形式的能量
部位:原核生物发生在细胞膜上,真核生物发生在线粒体内膜上
组成:电子传递是从$\mathrm{NAD}$到$\mathrm{O_2}$,电子传递链中的电子传递体主要包括烟酰胺脱氢酶、黄素脱氢酶、CoQ、细胞色素和一些铁硫蛋白等
功能:传递电子;将电子传递过程中释放的能量合成ATP
有氧呼吸:以分子氧为最终受体的生物氧化。
第一阶段,葡萄糖分解为2分子丙酮酸,由EMP、HMP和ED途径完成;第二阶段,丙酮酸通过三羧酸循环彻底分解,形成$\mathrm{CO_2}$和$\mathrm{H_2O}$,产生大量ATP
无氧呼吸:呼吸链末端的氢受体为外源无机氧化物(个别为有机氧化物)的生物氧化,是一种无氧条件下进行的产能效率较低的特殊呼吸
发酵:脱氢过程产生还原型氢供体——$\mathrm{NADH+H^+}$和$\mathrm{NADPH+H^+}$产生,但产生的量并不多,如不及时使它们氧化再生,糖的分解产能将会中断,这样微生物就以葡萄糖分解的过程中形成的各种中间产物为氢(电子)受体来接受$\mathrm{NADH+H^+}$和$\mathrm{NADPH+H^+}$的氢(电子),于是产生了各种各样的发酵产物
化能自养微生物的生物氧化和产能
化能自养微生物能量代谢的特点:
氢细菌:好氧,氧化$\mathrm{H_2}$同化$\mathrm{CO_2}$,用所产成的ATP还原$\mathrm{CO_2}$构成细胞物质$\mathrm{[CH_2O]}$和生长
硝化细菌:能利用还原无机氮化合物进行自养生长。
反硝化细菌:化能异养微生物,兼性厌氧,无氧条件下利用硝酸盐作氢受体,将其还原成$\mathrm{NO->N_2}$
光能微生物的能量代谢
次级代谢的命名均是由对人的意义来命名,体现了次级代谢产物对人类的重要意义(疾病、经济发展。。)
微生物的纯培养(课上重奖),两种培养方式看课本,四个生长时期重点掌握
从一个细胞或一群相同的细胞经过培养繁殖而得到的后代,产物为纯培养物,反之为混合培养物。(&菌落的概念)
常用方法
纯培养生长的测定方法
生长曲线
影响微生物菌种稳定性的因素:变异、污染、死亡
退化:菌种在培养或保藏过程中,由于自发突变的存在,出现某些原有优良生产性状的劣化、遗传标记的丢失等现象,称为菌种的衰退
复壮:使衰退的菌种恢复原来优良性状
保藏:
细菌或病毒适合做遗传学研究的实验材料的生物学特性原因:组成与结构简单,易于培养且繁殖快,研
究周期短
知道误差来源属于哪一类
$$
* 泰勒展开,级数展开
4. 舍入误差:计算机中由于数据类型的长度有限,在实际位数超过该长度时,
在本课误差估计中,假定数学模型合理,测定值精确,主要讨论截断误差和舍入误差
$x^*$为准确值x的一个近似值,则称$x-x^*$为近似值$x^*$的绝对误差,简称误差,表示为$\epsilon$:
$$ \epsilon=x-x^*$$
$|\epsilon|$的大小显示出近似值的准确程度,同一量的不同近似中,$|\epsilon|$越小,近似值准确度越高
实践中无法确定x,但是可以确定误差绝对值的上限,从而确定准确值的范围,定义满足如下不等式的正数称为近似值的误差限:
$$ x^*-\epsilon \le x \le x^*+\epsilon $$
也可以表示为$x=x^*\pm \epsilon$
绝对误差与真值之比,称为近似值的相对误差(为了增强可操作性)
$$ \epsilon_r(x)=\frac{\epsilon(x)}{x}=\frac{x-x^*}{x} $$
* 相对误差可以体现误差绝对大小与测量度相对大小关系,也就是说误差的绝对大小并不能决定精度
然而实际问题中x未知,因而常将近似值替换准确值来计算相对误差,衡量准确程度:
$$ \epsilon^*_r(x)=\frac{\epsilon(x)}{x^*}=\frac{x-x^*}{x^*} $$
类似于绝对误差限,满足下列不等式的正数$\epsilon_r$为近似值的相对误差限
$$ \epsilon^*_r(x)=|\frac{\epsilon(x)}{x^*}|=|\frac{x-x^*}{x^*}| \le \epsilon_r $$
近似值的误差限是其某一位上的半个单位时,称其“准确”到这意味,且从该位其到前面第一位非零数字为止所有数字都称为有效数字。
一般说,设有一个数x,其近似值的规格化形式为:
$$ x^*=\pm0.\alpha_1\alpha_2···\alpha_n×10^m$$
其中$\alpha_n$是0~9的数字,$\alpha_1\ne0$,n是正整数,m是整数。
若$x^*$的误差限为:
$$ |\epslion(x)=|x-x^*|\ne\frac{1}{2}×10^{m-n} $$
则称$x^*$具有n位有效数字,或称其精确到$10^{m-n}$
注意:
相对误差回推有效数字;
$$ |\epsilon^*(x)|=|frac{\epsilon(x)}{x^*}\lefrac{feac{1}{2}×10^{m-n}}{\alpha_1×10^{m-1}}=frac{1}{2\alpha_1}×10^{-n+1} $$
从相对误差限的定义式可知,有效数字的位数反映了近似值的相对精确度:
$$ \alpha_r=frac{1}{2\alpha_1}×10^{-n+1} $$
当用相对误差表示时,如果相对误差能满足$$|\epsilon_r(x)| \le frac{1}{2(\alpha_1+1)}×10^{-n+1} $$
则$x^*$至少具有n位有效数字
是一种映射,并且有相类似的规范
三角不等式中是矢量相加
L2范数实际上是向量空间中的距离,无穷范数取最大值,p范数其实是其他特殊范数的一般形式;
相对于向量范数,多了相容性;
求范数之后成为标量;
根据向量的常用范数得到常用的矩阵范数:
对于线性方程组Ax=b,若系数矩阵A或常数项b的元素
进行数据存在扰动时的误差分析,这里主要使用了矩阵范数的相容性性质,对于任何范数进行证明中的运算均成立
A二范数的条件数是A最大谱半径与最小谱半径商的平方根
根据A矩阵的条件数,可以确定解扰动的范围,体现了方程数据扰动对解相对误差的影响,初步判断是否病态。
其中A是扰动误差产生的核心,也是计算软件进行运算与否的重要依据之一
两类解法:直接法与迭代法
先消元,即按一定的规律逐步消去未知量,将方程组化为等价的上三角形方程组;然后进行回代,即由上三角形方程组逐个求出每个未知数的解
消元过程按方程和未知量的自然顺序进行:方程排列顺序,未知量位置顺序,类似于上三角形矩阵的变换;
定理要会用:对于方程组:
顺序高斯消去法求解和顺序消去可以进行到底有什么区别?
顺序高斯消去法(Sequential Gaussian Elimination)和顺序消元法(Sequential Elimination)都是线性代数中用于解决线性方程组的方法,但它们有一些区别。
因此,两种方法的主要区别在于其操作的对象和计算复杂度。顺序高斯消去法更侧重于矩阵操作,适用于稠密的线性方程组,而顺序消元法更侧重于变量之间的消去,适用于稀疏的线性方程组。
基本思想:每次消元前按一定的范围选取绝对值最大的元素作为主元素。以便减少舍入误差的影响。
一般使用列主元就已经足够
进阶的选主元消去
Gauss-Jordan消去法
用途
高斯约当消去法(Gauss-Jordan elimination)是高斯消去法的一种改进形式,用于求解线性方程组并求解矩阵的逆。与高斯消去法不同,高斯约当消去法一次性将矩阵化为阶梯形式,并最终化为单位矩阵。因此,它能够同时解决线性方程组和求解逆矩阵的问题。
高斯约当消去法的主要用途包括:
求方程解的例子
考虑以下线性方程组:
[
\begin{cases}
2x + 3y - z = 7 \
3x + y + 2z = 5 \
x - 2y + z = -1
\end{cases}
]
可以将这个线性方程组表示为增广矩阵形式:
[
\left[\begin{array}{ccc|c}
2 & 3 & -1 & 7 \
3 & 1 & 2 & 5 \
1 & -2 & 1 & -1
\end{array}\right]
]
现在,我们将通过高斯约当消元法将这个增广矩阵化简为阶梯形式。然后,从阶梯形式中读取方程组的解。
1. 第一步:将第一行第一个元素(主元素)变为 1,同时使用第一行的主元素消去其他行的对应元素。
[
\left[\begin{array}{ccc|c}
1 & \frac{3}{2} & -\frac{1}{2} & \frac{7}{2} \
3 & 1 & 2 & 5 \
1 & -2 & 1 & -1
\end{array}\right]
]
2. 第二步:使用第一行的第一个元素将第二行的第一个元素变为 0,并将第三行的第一个元素变为 0。
[
\left[\begin{array}{ccc|c}
1 & \frac{3}{2} & -\frac{1}{2} & \frac{7}{2} \
0 & -\frac{7}{2} & \frac{7}{2} & -\frac{11}{2} \
0 & -\frac{7}{2} & \frac{3}{2} & -\frac{9}{2}
\end{array}\right]
]
3. 第三步:将第二行第二个元素(主元素)变为 1,并使用第二行的主元素消去第一行和第三行的对应元素。
[
\left[\begin{array}{ccc|c}
1 & \frac{3}{2} & -\frac{1}{2} & \frac{7}{2} \
0 & 1 & -1 & 1 \
0 & -\frac{7}{2} & \frac{3}{2} & -\frac{9}{2}
\end{array}\right]
]
4. 第四步:使用第二行的第二个元素将第一行的第二个元素变为 0,并使用第二行的第二个元素将第三行的第二个元素变为 0。
[
\left[\begin{array}{ccc|c}
1 & 0 & 1 & 3 \
0 & 1 & -1 & 1 \
0 & 0 & 2 & 4
\end{array}\right]
]
5. 第五步:将第三行的第三个元素(主元素)变为 1,并使用第三行的主元素消去第一行和第二行的对应元素。
[
\left[\begin{array}{ccc|c}
1 & 0 & 0 & 1 \
0 & 1 & 0 & 2 \
0 & 0 & 1 & 2
\end{array}\right]
]
现在,我们得到了阶梯形式的增广矩阵。根据阶梯形式,我们可以直接读出方程组的解:
[
\begin{cases}
x = 1 \
y = 2 \
z = 2
\end{cases}
]
这就是线性方程组的解,通过高斯约当消元法得到。
解线性方程组Gauss消去法的计算程序如何实现?可以进行Gauss消去法的条件是什么?
1 | def gauss_elimination(A, b): |
Gauss 消去法可以应用于求解线性方程组的条件包括:
方程组的系数矩阵是一个非奇异矩阵:这意味着方程组的系数矩阵的行列式不为零。非奇异矩阵保证了方程组有唯一解。
方程组的系数矩阵是一个方阵:Gauss 消去法通常应用于求解方阵形式的线性方程组。如果方程组的系数矩阵不是方阵,那么方程组可能有无穷解或者无解。
可以按顺序进行消去的充要条件:主对角线元素不为零:Gauss 消去法在进行消元的过程中会涉及到主对角线元素的除法操作,因此要求主对角线元素不为零,避免除以零的情况。
方程组的条件数较小:条件数反映了方程组的稳定性,较小的条件数意味着方程组求解的稳定性较高,更容易得到准确的解。高条件数可能导致数值不稳定性和舍入误差的累积。
解线性方程组列主元Gauss消去法的计算程序如何实现?可以进行列主元Gauss消去法的条件是什么?
条件同上;顺序消元过程进行到底&高斯消去法求解<->系数矩阵一切顺序主子矩阵均非奇异
1 | def swap_rows(A, i, j): |
Gauss消去法的计算复杂度是?
$O(n^3)$,其中 n 是方程组的未知数个数。
对于方程组AX=b,只要对系数矩阵作了三角分解A=LU,就可以很容易地求出线性方程的解。
核心:使用尽可能少的计算量写出非零数:通过矩阵乘法规则可以推出来A在LU上的“映射”,每行依次进行,先行后列,可以直接把LU中的非0数写出来
步骤如下:
相关代码与课后习题见我的GitHub
要获得好的集成,个体学习器应当“好而不同”:准确性+多样性(diversity);
分为两类:
可以将弱学习器提升为强学习器
前提:base间强依赖 & 串行序列化
加权模型,其实就是通过改变base的线性组合的系数来实现最小化损失函数$$ H(x)=\sum^T_{t=1}\alpha_th_t(x)$$
不存在强依赖关系&同时生成的并行式关系
直接原理:自助采样法bootstrap sampling
从偏差-方差角度看,更关注降低方差,因此在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更明显。
RF实质上是Bagging的扩展变体,以决策树为base构建Bagging集成,引入了随机属性选择。
总体就是对最优属性的选择,所以属性取值不同时的分叉不同,像一棵树。
RF是一个“随机型”的决策树,所以说当你的数据集比较少或者说训练轮次不够的时候,验证集精度会有比较大的差距,我用了一个RF+linear来拟合连续性质进行二分类的样例最大会有20%的精度误差,而数据集的属性又比较多,40选15的时候可以有最优达到90%,但是极其不稳定,笨人觉得或许可以直接存起来高精度的RF结果然后给对应的属性加权?不过还没有继续跑ing(痛苦的回忆)
学习器结合三大优势:
根据性能加权,但是必须使用非负权重才能优于个体学习器;性能相近的时候简单平均就可以。
训练数据很多时,用另一个学习器来结合,把base称为初级学习器,用于结合的学习器称为次级学习器或者元学习器meta-learner