R语言学习笔记总结
R语言初步-探索性数据分析-EDA
2.突出数据中的异常值
当我们让软件自动生成图片时,两轴的取值范围是由系统决定的,此时可能会造成某些特殊的值不可见,有可能会错过具有特殊意义的异常值。比如:
library(tidyverse)
ggplot(diamonds)+
geom_histogram(mapping=aes(x=y,binwidth=0.5))
#生成稍有异常的直方图
仔细观察可知,数据都聚集在0-20之间,但是为什么系统还会把横轴的范围设置为0-60?那是因为异常分箱的数值太少,以致不可见。我们需要自行设置,将横轴放大。
使用coord_cartesian()函数:coord_cartesian()函数中有用于放大x轴的xlim()和ylim()参数。
ggplot2中也有类似的xlim()和ylim()函数,但是他们会忽略溢出坐标轴范畴的数据。
ggplot(diamonds)+
geom_histogram(mapping=aes(x=y,binwidth=0.5))+
coord_cartesian(ylim=c(0,50))
#生成调整后的直方图
三个异常值分别位于0/30/60附近。
可以用之前提到的dplyr函数将这些数据筛选出来,生成数据表:
# A tibble: 9 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 1 Very Good H VS2 63.3 53 5139 0 0 0
2 1.14 Fair G VS1 57.5 67 6381 0 0 0
3 1.56 Ideal G VS2 62.2 54 12800 0 0 0
4 1.2 Premium D VVS1 62.1 59 15686 0 0 0
5 2.25 Premium H SI2 62.8 59 18034 0 0 0
6 0.71 Good F SI2 64.1 60 2130 0 0 0
7 0.71 Good F SI2 64.1 60 2130 0 0 0
8 0.51 Ideal E VS1 61.8 55 2075 5.15 31.8 5.12
9 2 Premium H SI2 58.9 57 12210 8.09 58.9 8.06
从数据里可以看到许多大小值为0的钻石,显然这些值是错误的。
在对自己的数据进行分析时,初步生成的图也许不尽人意,那么需要自己进行调整,对数据进行取舍也是其中一种。比如可以用缺失值代替异常值,如果代替之后,生成的结果更令人满意,那么可以选择去除这些异常值。如果没有具体差异,那么就不能随意丢弃数据。如果需要丢弃,最好进行说明。
这也是EDA的一种思维方式。
3.用缺失值代替异常值
数据出现问题时,可以直接丢弃无效测量:
diamonds2 <- diamonds%>%
filter(between(y<3|y>20))
但是这样可能会让数据所剩无几,所以更好的方法是
用缺失值代替异常值,具体做法如下:
- ifelse()函数的说明:ifelse(test,TRUE,FALSE)有三个参数:
- 1.第一个test参数,应该是自行设置的逻辑向量。
- 2.如果满足此逻辑,则输出第二个参数TRUE的值。
- 3.如果不满足此逻辑,则输出第三个参数FALSE的值。
diamonds2 <- diamonds%>%
mutate(y=ifelse(y<3|y>20,NA,y))
diamonds2 #查看
ggplot(data=diamonds2,mapping=aes(x=x,y=y))+
geom_point()
#运行后出图,并且显示提醒:
Warning message:
Removed 9 rows containing missing values (geom_point).
缺失值无法具体描绘出来,所以运行后会出现上面中的warning提醒。如果不想显示此词条,可以设置na.rm=true:
ggplot(data=diamonds2,mapping=aes(x=x,y=y))+
geom_point(na.rm=true)
运行后不会出现Warning message。
4.对比数据中缺失值的有无带来的差异
以nycflights13::flights数据为例,flights表中,dep_time列中有一些空位,这些是临时取消的航班,所以没有出发时间
我们比较取消和没取消的航班原计划出发时间,会是什么效果?(用is.na()函数)
nycflights13::flights%>%
mutate(cancelled=is.na(dep_time), #is.na()函数提取出了缺失值
sched_hour=sched_dep_time%/%100,
sched_min=sched_dep_time%%100,
sched_dep_time=sched_hour+ sched_min/60
)%>%
ggplot(mapping=aes(sched_dep_time))+
geom_freqpoly(
mapping=aes(color=cancelled),
binwidth=1/4
)
#航班对比
但由于数据本身性质,对比的效果有限。取消的航班很少,没有明显的特征。所以需要我们了解数据,进行有效的比较,获得我们自己想要的效果~~
更多等待后续更新~~~❀