李东风r语言教程是一份面向初学者的r语言学习教材,该教程共分为五个部分,包括入门篇、数据分析篇、数据清洗篇、数据可视化篇和高级应用篇,每个部分包含多个章节。
在入门篇中,教程介绍了r语言的基本语法和常用数据结构,如向量、矩阵和数据框等。同时还介绍了如何在r环境中进行代码编写和运行,并展示了一些简单的数据处理操作。
在数据分析篇中,教程介绍了如何利用r语言进行数据分析和统计学建模,详细讲解了线性回归、分类树、聚类等算法的实现步骤,并提供了相应的案例和代码示例。
在数据清洗篇中,教程着重讲解了如何对数据进行清洗、变换、汇总和聚合等操作,以消除数据的噪声和错误,确保数据质量。
在数据可视化篇中,教程介绍了如何使用r语言进行数据可视化,包括绘制散点图、直方图、箱线图和折线图等,教学方式生动易懂,适合初学者掌握。
在高级应用篇中,教程涵盖了r语言在文本处理、网络分析、机器学习等方面的应用,介绍了一些高级的编程技巧和操作方法,帮助读者更深入地了解r语言的应用场景和优势所在。
总之,李东风r语言教程是一份内容全面、易于理解的r语言学习教材,对于想要学习r语言的初学者具有较高的实用价值。
本文是个人笔记,请谨慎付费[星球用户可免费看]。
我们在分析了差异表达数据之后,经常要进行热图的可视化展示。
热图(Heat map) 是一个以 颜色 变化来显示数据的 矩阵 。虽然“热图”是一个新兴的词汇,但是用明暗的矩阵来标示元素的方法已经有超过一世纪的历史了。
热图源自于展示数据的平面图像,较大的数字以小的深灰色、黑色方格呈现,而较小的数字则以较亮的方格标示。如Toussaint Loua在1873年就曾使用这样的手法来绘制对 巴黎 各区的社会学统计。 [1] 彼得·斯伊斯在1957年时进行 群集分析 时也透过置换矩阵的行和列的方法将更相似的值标示在一起。雅克·贝尔坦也曾用过类似的方法标示出 累积量表 的资料。而将 阶层式分群法 加入到矩阵中的概念则是由罗伯特·F·林于1973年创造,他利用多次印刷堆叠出的字符来表示不同程度的灰色,将每个字符大小则视为一像素。利兰·威尔金森则是于1994年开发出了第一个能生成高分辨率的矩阵的计算机程序—SYSTAT。
软件设计师科尔马克·金尼则在1991年时注册了热图这个商标用以形容一种描绘金融市场信息的平面图形, [2] 但是取得了金尼发明的公司在2003年时不小心使得这个商标失效了 [3]
@[toc]
Q型分析:样本之间的关系(聚类算法等)
R型分析:变量之间的关系(主成分分析、因子分析等)。
有时候我们不仅要弄清样本之间和变量之间的关系,还要弄清 样本与变量之间的关系 ,而对应分析就是这样一种分析方法。(变量就是指特征)
对应分析为我们可以提供三个方面的信息
上述三方面信息都可以通过二维图呈现出来
当对两个分类变量进行的对应分析称为 简单对应分析 ;
对两个以上的分类变量进行的对应分析称为 多重对应分析 。
对应分析将变量及变量之间的联系同时反映在一张二维或三维的散点图上,并使联系密切的类别点较集中,联系疏远的类别点较分散;通过观察对应分布图就能直观地把握变量类别之间的联系。
对于该方法,在减少维度方面与因子分析相似,在作分布图方面与多维尺度方法相似。
在对数据作对应分析之前,需要先了解因素间是否独立。如果因素之间相互独立,则没有必要进行对应分析,当因素间在统计学上具有显著的关联性时,在此基础上使用对应分析方法,其分析结果才具有意义。
p-value < 0001,两组变量显著不独立,说明具有相关性。
用R语言进行关联分析
关联是两个或多个变量取值之间存在的一类重要的可被发现的某种规律性。关联分析目的是寻找给定数据记录集中数据项之间隐藏的关联关系,描述数据之间的密切度。
几个基本概念
1 项集
这是一个集合的概念,在一篮子商品中的一件消费品即为一项(Item),则若干项的集合为项集,如{啤酒,尿布}构成一个二元项集。
2 关联规则
一般记为的形式,X为先决条件,Y为相应的关联结果,用于表示数据内隐含的关联性。如:,表示购买了尿布的消费者往往也会购买啤酒。
关联性强度如何,由三个概念——支持度、置信度、提升度来控制和评价。
例:有10000个消费者购买了商品,其中购买尿布1000个,购买啤酒2000个,购买面包500个,同时购买尿布和面包800个,同时购买尿布和面包100个。
3 支持度(Support)
支持度是指在所有项集中{X, Y}出现的可能性,即项集中同时含有X和Y的概率:
该指标作为建立强关联规则的第一个门槛,衡量了所考察关联规则在“量”上的多少。通过设定最小阈值(minsup),剔除“出镜率”较低的无意义规则,保留出现较为频繁的项集所隐含的规则。
设定最小阈值为5%,由于{尿布,啤酒}的支持度为800/10000=8%,满足基本输了要求,成为频繁项集,保留规则;而{尿布,面包}的支持度为100/10000=1%,被剔除。
4 置信度(Confidence)
置信度表示在先决条件X发生的条件下,关联结果Y发生的概率:
这是生成强关联规则的第二个门槛,衡量了所考察的关联规则在“质”上的可靠性。相似的,我们需要对置信度设定最小阈值(mincon)来实现进一步筛选。
具体的,当设定置信度的最小阈值为70%时,置信度为800/1000=80%,而的置信度为800/2000=40%,被剔除。
5 提升度(lift)
提升度表示在含有X的条件下同时含有Y的可能性与没有X这个条件下项集中含有Y的可能性之比:
该指标与置信度同样衡量规则的可靠性,可以看作是置信度的一种互补指标。
R中Apriori算法
算法步骤:
1 选出满足支持度最小阈值的所有项集,即频繁项集;
2 从频繁项集中找出满足最小置信度的所有规则。
> library(arules) #加载arules包
> click_detail =readtransactions("click_detailtxt",format="basket",sep=",",cols=c(1)) #读取txt文档(文档编码为ANSI)
> rules <- apriori(click_detail, parameter =list(supp=001,conf=05,target="rules")) #调用apriori算法
> rules
set of419 rules
> inspect(rules[1:10]) #查看前十条规则
解释
1) library(arules):加载程序包arules,当然如果你前面没有下载过这个包,就要先installpackages(arules)
2) click_detail =readtransactions("click_detailtxt",format="basket",sep=",",cols=c(1)):读入数据
readtransactions(file, format =c("basket", "single"), sep = NULL,
cols = NULL, rmduplicates =FALSE, encoding = "unknown")
file:文件名,对应click_detail中的“click_detailtxt”
format:文件格式,可以有两种,分别为“basket”,“single”,click_detailtxt中用的是basket。
basket: basket就是篮子,一个顾客买的东西都放到同一个篮子,所有顾客的transactions就是一个个篮子的组合结果。如下形式,每条交易都是独立的。
文件形式:
item1,item2
item1
item2,item3
读入后:
items
1 {item1,
item2}
2 {item1}
3 {item2,
item3}
single: single的意思,顾名思义,就是单独的交易,简单说,交易记录为:顾客1买了产品1, 顾客1买了产品2,顾客2买了产品3……(产品1,产品2,产品3中可以是单个产品,也可以是多个产品),如下形式:
trans1 item1
trans2 item1
trans2 item2
读入后:
items transactionID
1 {item1} trans1
2 {item1,
item2} trans2
sep:文件中数据是怎么被分隔的,默认为空格,click_detail里面用逗号分隔
cols:对basket, col=1,表示第一列是数据的transaction ids(交易号),如果col=NULL,则表示数据里面没有交易号这一列;对single,col=c(1,2)表示第一列是transaction ids,第二列是item ids
rmduplicates:是否移除重复项,默认为FALSE
encoding:写到这里研究了encoding是什么意思,发现前面txt可以不是”ANSI”类型,如果TXT是“UTF-8”,写encoding=”UTF-8”,就OK了
3) rules <- apriori(click_detail,parameter = list(supp=001,conf=05,target="rules")):apriori函数
apriori(data, parameter = NULL, appearance = NULL, control = NULL)
data:数据
parameter:设置参数,默认情况下parameter=list(supp=01,conf=08,maxlen=10,minlen=1,target=”rules”)
supp:支持度(support)
conf:置信度(confidence)
maxlen,minlen:每个项集所含项数的最大最小值
target:“rules”或“frequent itemsets”(输出关联规则/频繁项集)
apperence:对先决条件X(lhs),关联结果Y(rhs)中具体包含哪些项进行限制,如:设置lhs=beer,将仅输出lhs含有beer这一项的关联规则。默认情况下,所有项都将无限制出现。
control:控制函数性能,如可以设定对项集进行升序sort=1或降序sort=-1排序,是否向使用者报告进程(verbose=F/T)
补充
通过支持度控制:rulessorted_sup = sort(rules, by=”support”)
通过置信度控制:rulessorted_con = sort(rules, by=”confidence”)
通过提升度控制:rulessorted_lift = sort(rules, by=”lift”)
Apriori算法
两步法:
1 频繁项集的产生:找出所有满足最小支持度阈值的项集,称为频繁项集;
2 规则的产生:对于每一个频繁项集l,找出其中所有的非空子集;然后,对于每一个这样的子集a,如果support(l)与support(a)的比值大于最小可信度,则存在规则a==>(l-a)。
频繁项集产生所需要的计算开销远大于规则产生所需的计算开销
频繁项集的产生
几个概念:
1, 一个包含K个项的数据集,可能产生2^k个候选集
2,先验原理:如果一个项集是频繁的,则它的所有子集也是频繁的(理解了频繁项集的意义,这句话很容易理解的);相反,如果一个项集是非频繁的,则它所有子集也一定是非频繁的。
3基于支持度(SUPPORT)度量的一个关键性质:一个项集的支持度不会超过它的子集的支持度(很好理解,支持度是共同发生的概率,假设项集{A,B,C},{A,B}是它的一个自己,A,B,C同时发生的概率肯定不会超过A,B同时发生的概率)。
上面这条规则就是Apriori中使用到的,如下图,当寻找频繁项集时,从上往下扫描,当遇到一个项集是非频繁项集(该项集支持度小于Minsup),那么它下面的项集肯定就是非频繁项集,这一部分就剪枝掉了。
一个例子(百度到的一个PPT上的):
当我在理解频繁项集的意义时,在R上简单的复现了这个例子,这里采用了eclat算法,跟apriori应该差不多:
代码:
item <- list(
c("bread","milk"),
c("bread","diaper","beer","eggs"),
c("milk","diaper","beer","coke"),
c("bread","milk","diaper","beer"),
c("bread","milk","diaper","coke")
)
names(item) <- paste("tr",c(1:5),sep = "")
item
trans <- as(item,"transactions") #将List转为transactions型
rules = eclat(trans,parameter = list(supp = 06,
target ="frequent itemsets"),control = list(sort=1))
inspect(rules) #查看频繁项集
运行后结果:
>inspect(rules)
items support
1{beer,
diaper} 06
2{diaper,
milk} 06
3{bread,
diaper} 06
4{bread,
milk} 06
5{beer} 06
6{milk} 08
7{bread} 08
8{diaper} 08
以上就是该例子的所有频繁项集,然后我发现少了{bread,milk,diaper}这个项集,回到例子一看,这个项集实际上只出现了两次,所以是没有这个项集的。
规则的产生
每个频繁k项集能产生最多2k-2个关联规则
将项集Y划分成两个非空的子集X和Y-X,使得X ->Y-X满足置信度阈值
定理:如果规则X->Y-X不满足置信度阈值,则X’->Y-X’的规则一定也不满足置信度阈值,其中X’是X的子集
Apriori按下图进行逐层计算,当发现一个不满足置信度的项集后,该项集所有子集的规则都可以剪枝掉了。
聚类分析有两种主要计算方法,分别是凝聚层次聚类(Agglomerative hierarchical method)和K均值聚类(K-Means)。
层次聚类又称为系统聚类,首先要定义样本之间的距离关系,距离较近的归为一类,较远的则属于不同的类。可用于定义“距离”的统计量包括了欧氏距离 (euclidean)、马氏距离(manhattan)、 两项距离(binary)、明氏距离(minkowski)。还包括相关系数和夹角余弦。 层次聚类首先将每个样本单独作为一类,然后将不同类之间距离最近的进行合并,合并后重新计算类间距离。这个过程一直持续到将所有样本归为一类为止。在计算类间距离时则有六种不同的方法,分别是最短距离法、最长距离法、类平均法、重心法、中间距离法、离差平方和法。 下面我们用iris数据集来进行聚类分析,在R语言中所用到的函数为hclust。
首先提取iris数据中的4个数值变量,然后计算其欧氏距离矩阵。然后将矩阵绘制热图,从图中可以看到颜色越深表示样本间距离越近,大致上可以区分出三到四个区块,其样本之间比较接近。 data=iris[,-5] diste=dist(data,method='euclidean') heatmap(asmatrix(diste),labRow = F, labCol = F) X 然后使用hclust函数建立聚类模型,结果存在model1变量中,其中ward参数是将类间距离计算方法设置为离差平方和法。
使用plot(model1)可以绘制出聚类树图。如果我们希望将类别设为3类,可以使用cutree函数提取每个样本所属的类别。 model1=hclust(diste,method='ward') result=cutree(model1,k=3) 为了显示聚类的效果,我们可以结合多维标度和聚类的结果。先将数据用MDS进行降维,然后以不同的的形状表示原本的分类,用不同的颜色来表示聚类的结果。可以看到setose品种聚类很成功,但有一些virginica品种的花被错误和virginica品种聚类到一起。
采编自 DataMiningWithR
21 观察各个变量数据的规范性
几乎每个变量都有异常值存在,多是异常大值
22 观察变量间的相关性
23 双变量间的相关性
由上可知,"oPO4"和"PO4"高度相关,达到091
24 观察单个变量的数据分布情况
左图可明显判断异常值的存在,右图可展现数据在不同范围内的分布集中度
31 了解缺失值的基本分布情况
32 直接删除缺失值,在缺失值占比很少的情况采用
33 基于一定的规则填充缺失值
41 数据准备和聚类预览
初步判断,可分为4组
42 层次聚类
43 kmeans均值聚类 (1)
43 kmeans均值聚类 (2)
41 盖帽法处理异常值
即分别设定数据的上下限,高于上限的用上限替换,低于下限的用下限替换
42 盖帽法处理异常值后重现考察数据的分布情况
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)