美文网首页
24.关于Exploratory Data Analysis之五

24.关于Exploratory Data Analysis之五

作者: 心惊梦醒 | 来源:发表于2021-08-08 00:01 被阅读0次

【上一篇:24.关于Exploratory Data Analysis之四】
【下一篇:25.关于Exploratory Data Analysis之六】

    本篇介绍共变的第二部分:两个分类变量的共变。


    两个分类变量
    为了可视化两个分类变量之间的共变,需要计算每个组合(combination)中观测值(observation)的数量。一种实现方法是用内置函数geom_count()。

ggplot(data = diamonds) +
  geom_count(mapping = aes(x = cut, y = color))
两个分类变量

    图中每个圈的大小代表这个combination中observation的个数。共变表现为特定的x值和特定的y值之间有很强的相关性(这句话没理解)。
    另一种实现方法是先计算count再直接可视化count值。

# 计算count
diamonds %>%  count(color, cut)
# 或者diamonds %>% group_by(color,cut) %>% summarise(n=n())
# A tibble: 35 x 3
   color cut           n
   <ord> <ord>     <int>
 1 D     Fair        163
 2 D     Good        662
 3 D     Very Good  1513
 4 D     Premium    1603
 5 D     Ideal      2834
 6 E     Fair        224
 7 E     Good        933
 8 E     Very Good  2400
 9 E     Premium    2337
10 E     Ideal      3903
# ... with 25 more rows

# 计算count+geom_tile()可视化
diamonds %>% 
  count(color, cut) %>%  
  ggplot(mapping = aes(x = color, y = cut)) +
    geom_tile(mapping = aes(fill = n))

# tile是瓷砖、瓦片的意思,就是一个小方块一个小方块排列的感觉,
# 然后可以用颜色填充每个小方块。
color和cut的瓦片图

    图中每个combination用一个方块表示,方块的颜色代表count值的大小。(距我这些年的工作经历,当分类变量比较少的时候用第一种比较多,分类变量很多的时候用第二种热图的形式,做热图有很多函数,geom_tile()函数用得也比较少。)
    如果分类变量是无序的,您可能希望使用序列化包同时重新排序行和列,以便更清楚地显示有趣的模式。对于较大的图,您可能希望尝试d3heatmap或heatmapply包,它们可以创建交互式图。
    练习题
    1. 如何重新调节上述count数据集以更清楚地展示cut下color的分布或者color下cut的分布?
    呃,说的是这种吗?因为圈的大小看不到细节?

diamonds %>% group_by(color,cut) %>% 
summarise(n=n()) %>% 
ggplot(mapping=aes(x=cut,y=n,fill=color))
+geom_bar(stat="identity",position = "dodge")
图片.png

    2. 使用geom_tile()和dplyr来研究平均航班延误如何随目的地和月份而变化。是什么让图难以读懂?你如何改进它?
    难道是这个意思?

flights %>% filter(!is.na(dep_delay)) %>% 
group_by(year,month,dest) %>% 
summarise(average_delay=mean(dep_delay)) %>% 
ggplot(mapping=aes(x=month,y=dest,fill=average_delay))
+geom_tile()
每个月的不同目的的飞机的平均延误时间

    图片问题1:横坐标没有显示所有月份,而且有小数点,不符合月份是个整数的实际情况。
    图片问题2:纵坐标分类变量太多(统计了下是105个),都重叠到一起了。
    图片问题3:图的最左边和最右边有空白的部分。
    问题1和问题3的原因在于绘图数据集中month这一列数据类型其实是int,这样的话绘图的时候就不会认为这是离散型的变量,所以需要先把month变量变成一个离散型的变量,你可以用as.character先将其变成字符型,但你会发现绘图后横坐标的排序不是你想要的,所以直接用as.factor变成因子了。问题2暂时的解决办法是将字体变小,要是y上的分类变量再多,就只能不展示y上的label了。

flights %>% filter(!is.na(dep_delay)) %>% 
group_by(year,month,dest) %>% 
summarise(average_delay=mean(dep_delay)) %>% 
ggplot(mapping=aes(x=as.factor(month),y=dest,fill=average_delay))
+geom_tile()+theme(axis.text.y=element_text(size=4))

要是想去掉y轴上label,则用theme(axis.text.y=element_blank())
修改后的geom_tile图

    3. 为什么在上面的例子中使用aes(x = color, y = cut)比aes(x = cut, y = color)稍微好一点?
    下面这两张图彼此好在哪里了?还是我理解题干错了。


点图 瓦片图

【上一篇:24.关于Exploratory Data Analysis之四】
【下一篇:25.关于Exploratory Data Analysis之六】

相关文章

网友评论

      本文标题:24.关于Exploratory Data Analysis之五

      本文链接:https://www.haomeiwen.com/subject/nndgvltx.html