美文网首页
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