图解常规数据分析R语言实战笔记(一)
在进行数据分析之前,一定要明确你所在的行业领域,行业领域不同数据分析的方法的差异其实蛮大的,比如我需要进行生态学数据分析,那我可以去文献网站,按照关键词(Method)查找对应的protocol:
本次笔记来自【作者:韩信子@ShowMeAI,教程地址:https://www.showmeai.tech/tutorials/33】对教程进行了提炼总结,并使用R语言进行实战操作。注:本次教程是最基础的知识点,可以对数据分析路程有一个固定的路程框架。
1.数据分析三板斧(思路脉络):对比,细分,溯源
【对比:对数据进行成对的比较】:1) 当刻画一组数据时,不仅要描述这组数据的一般水平(均值,中间值,Max/Min值),还要考虑到这组数据的波动水平(方差,标准误);2)组间差异要显著,组内差异要细微。常用的显著性检验有T检验和F检验(这里一定要注意在进行检验前的原假设H0,通常我们认为:拒绝是充分的,接受是勉强的);3)这里注意横纵向对比陷阱,千万不要交叉对比;
【细分:增加维度,降低粒度】:文章中提及增加维度即增加指标量,但是我认为这里需要注意的是指标并不是越多越好,一定要注意;降低粒度就是对数据的尺度进行聚合,例如日,周,季,年。在真实的数据分析过程中,具体的指标对粒度的要求都是固定的
【溯源:查看原始数据】:洞察数据是非常重要的,在进行数据分析之前,一定要对原始数据有一个宏观的理解,不要被假象迷惑;
2.数据探索(data exploration)R语言实战
2.1 第一步:描述性统计
千万不要小看或者忽略这一步骤,一方面可以让你全面对数据有个基本了解;另一方面是我们在对数据进行高阶分析之前,对数据的分布形态,相关性以及共线性都是有要求的,在这一步骤可以提前进行清洗处理
描述性统计量分为:集中趋势、离散程度(离中趋势)和分布形态
【集中趋势】数据的集中趋势,用于度量数据分布的中心位置。直观地说,测量一个属性值的大部分落在何处。描述数据集中趋势的统计量是:平均值、中位数、众数。
- 平均值(Mean):指一组数据的算术平均数,描述一组数据的平均水平,是集中趋势中波动最小、最可靠的指标,但是均值容易受到极端值(极小值或极大值)的影响。
- 中位数(Median):指当一组数据按照顺序排列后,位于中间位置的数,不受极端值的影响,对于定序型变量,中位数是最适合的表征集中趋势的指标。
- 众数(Mode):指一组数据中出现次数最多的观测值,不受极端值的影响,常用于描述定性数据的集中趋势。
【离散程度】数据的离散趋势,用于描述数据的分散程度,描述离散趋势的统计量是:极差、四分位数极差(IQR)、标准差、离散系数。
- 极差(Range):又称全距,记作
,是一组数据中的最大观测值和最小观测值之差。一般情况下,极差越大,离散程度越大,其值容易受到极端值的影响。
- 四分位数极差(Inter-Quartile Range, IQR):又称内距,是上四分位数和下四分位数的差值,给出数据的中间一半所覆盖的范围。
- 方差(Variance):方差和标准差是度量数据离散程度时,最重要、最常用的指标。方差,是每个数据值与全体数据值的平均数之差的平方值的平均数,常用
表示。
- 标准差(Standard Deviation):又称均方差,常用
表示,是方差的算术平方根。计算所有数值相对均值的偏离量,反映数据在均值附近的波动程度,比方差更方便直观。
- 离散系数(Coefficient of Variation):又称变异系数,为标准差
与平均值
之比,用于比较不同样本数据的离散程度。离散系数大,说明数据的离散程度大;离散系数小,说明数据的离散程度也小。
【分布形态:峰度与偏度】
偏度(Skewness):用来评估一组数据分布呈现的对称程度。
- 当 偏度系数
时,分布是对称的
- 当 偏度系数
时,分布呈正偏态(右偏)
- 当 偏度系数
时,分布呈负偏态(左偏)
峰度(Kurtosis):用来评估一组数据的分布形状的高低程度的指标。
(一)箱型图的绘制与使用
这里我选择使用R语言进行箱型图(不受异常值影响)绘制实战演练,采用的数据
①箱子的大小取决于数据的四分位距(IQR),即Q75- Q25(Q75 :75%分位数 , Q25: 25%分位数 , Q75和Q25为四分位数)。50%的数据集中于箱体,箱体大表示数据分布离散,数据波动较大,箱体小表示数据集中。
②箱子的上边为上四分位数Q75,下边为下四分位数Q25,箱体中的横线为中位数Q50(50%分位数)
③箱子的上触须为数据的最大值Max,下触须为数据的最小值Min(注意是非离群点的最大最小值)
④若数据值 > Q75+1.5 * IQR(上限值) 或 数据值 < Q25-1.5 * IQR(下限值) ,均视为异常值。数据值 > Q75+3 * IQR 或 数据值 < Q25-3 * IQR ,均视为极值。
⑤偏度:
对称分布:中位线在箱子中间
右偏分布:中位数更靠近下四分位数
左偏分布:中位数更靠近上四分位数
library(ggplot2)
##数据(随机编写,无实际意义)
df <- data.frame(
sample=paste0("S",1:20),##paste0()函数是R语言内置的字符串拼接函数,形成S1,S2,S3....
group1=rep(c("A","B","C","D"),each=5),
group2=rep(c("group1","group2"),times=2),
group3=rep(c("CG","EG"),each=10),
value=sample(20:100,20,replace=FALSE)
)
df$sample<-factor(df$sample,levels=df$sample)##将df数据框的sample列转换为一个因子(factor)类型,并显式地指定了因子的水平(levels)
##--------------------------------------------------------------------------------------------------------------------------------
##绘制基础箱线图
ggplot(df,aes(group1,value))+
geom_boxplot()+
ggtitle("Boxplot of Value by Group1") +
xlab("Group 1") +
ylab("Value")
#按照group1的每个水平为箱线图的每个箱线填充不同的颜色
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1))
#修改边框颜色为统一颜色
ggplot(df,aes(group1,value))+
geom_boxplot(color="orange",linewidth=0.8,fill=NA)
#修改边框颜色为不同颜色
ggplot(df,aes(group1,value))+
geom_boxplot(aes(color=group1),linewidth=0.8,fill=NA)
#同时修改填充色与边框色
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1),color="blue",linewidth=0.8)
##-------------------------------------------------------------
#异常点处理
#细节设置
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1),
outlier.color="blue",#异常点边框颜色
outlier.fill="red",#异常点填充颜色
outlier.shape=21,#异常形状
outlier.size=2.5,##异常点大小
outlier.stroke=0.5,##异常点边框线条粗细
outlier.alpha=0.7)#异常点透明度
#异常点去除
#去除
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1),
outlier.color=NA)#异常点去除
#-------------------------------------------------------------
#箱线图添加散点
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1))+
geom_point(color="black",size=2.5,position="jitter")
#添加最大最小值横线
ggplot(df,aes(group1,value))+
stat_boxplot(geom="errorbar",width=0.1,size=0.8)+
geom_boxplot(aes(fill=group1),outlier.color=NA)
#添加均值点
ggplot(df,aes(group1,value))+
stat_boxplot(geom="errorbar",width=0.1,size=0.8)+
geom_boxplot(fill="white",outlier.color=NA)+
stat_summary(fun=mean,geom="point",size=3,color="blue")
#修改误差棒线条类型
ggplot(df,aes(group1,value))+
stat_boxplot(aes(color=group1),geom="errorbar",width=0.1,size=0.8,linetype=2)+
geom_boxplot(aes(fill=group1),outlier.color=NA,color=NA)+
stat_summary(fun=median,geom="point",size=3,shape=21,color="black",fill="white")
###-----------------------------------------------------------------------------------------------------------------------------------
#分组箱线图
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group3))+
scale_fill_manual(values=c("#037ef3","#f85a40"))#指定颜色
#水平箱线图
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1))+
scale_fill_manual(values=c("#037ef3","#f85a40","#00c16e","#7552cc"))+#自定义颜色
coord_flip()
#并列箱线图
ggplot(df,aes(group3,value))+
geom_boxplot(aes(fill=group2),position=position_dodge(width=0.9))+
scale_fill_manual(values=c("#037ef3","#f85a40"))#自定义颜色
#分面箱线图
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1))+
scale_fill_manual(value=c("#037ef3","#f85a40","#00c16e","#7552cc"))+#自定义颜色
facet_grid(~group2)
#分组分面箱线图
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group3))+
scale_fill_manual(values=c("#037ef3","#f85a40","#00c16e","#7552cc"))+#自定义颜色
facet_grid(~group2)
###-------------------------------------------------------------------------------
#显著性比较
library(ggsignif)
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1))+
geom_signif(comparisons=list(c("A","C"),
c("C","D")),
map_signif_level=F,##是否使用*显示显著性
tip_length=c(0,0,0,0),
y_position=c(100,110),
size=0.8,textsize=6,
test="t.test")+
scale_y_continuous(limits=c(20,130))
###------------------------------------------------------------------
#字母标记
library(dplyr)
library(agricolae)#实现多重比较的R包
#数据的方差检验
variance<-aov(value~group1,data=df)
MC<-LSD.test(variance,"group1",p.adj="none")
GB<-group_by(df,group1)
error<-summarise(GB,sd(value,na.rm=T))
#整理数据
error2<-merge(error,MC$group,by.x="group1",by.y="row.names",all=F)
#绘图
ggplot(df,aes(group1,value))+
geom_boxplot(aes(fill=group1))+
geom_text(data=error2,aes(group1,value+30,label=groups,color=group1),size=5)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇