图解常规数据分析R语言实战笔记(一)

在进行数据分析之前,一定要明确你所在的行业领域,行业领域不同数据分析的方法的差异其实蛮大的,比如我需要进行生态学数据分析,那我可以去文献网站,按照关键词(Method)查找对应的protocol:
image.png

本次笔记来自【作者:韩信子@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语言进行箱型图(不受异常值影响)绘制实战演练,采用的数据

image.png
①箱子的大小取决于数据的四分位距(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)

image.png
image.png

posted @   严谨认真  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇
点击右上角即可分享
微信分享提示