R语言初步-探索性数据分析EDA-2

R语言学习笔记总结


R语言初步-探索性数据分析-EDA

2.突出数据中的异常值

当我们让软件自动生成图片时,两轴的取值范围是由系统决定的,此时可能会造成某些特殊的值不可见,有可能会错过具有特殊意义的异常值。比如:

library(tidyverse)

ggplot(diamonds)+
  geom_histogram(mapping=aes(x=y,binwidth=0.5))
#生成稍有异常的直方图
稍显异常的直方图.png

仔细观察可知,数据都聚集在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))
#生成调整后的直方图
调整后的直方图.png

三个异常值分别位于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). 
异常值换为了缺失值.png

缺失值无法具体描绘出来,所以运行后会出现上面中的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
  ) 
#航班对比
航班对比.png

但由于数据本身性质,对比的效果有限。取消的航班很少,没有明显的特征。所以需要我们了解数据,进行有效的比较,获得我们自己想要的效果~~

更多等待后续更新~~~❀

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容