美文网首页R语言R数据可视化小教程收藏
R语言新神器visdat包(一行代码看穿整个数据集)

R语言新神器visdat包(一行代码看穿整个数据集)

作者: 柳叶刀与小鼠标 | 来源:发表于2019-05-30 20:42 被阅读401次

    这是一个非常简单,功能却非常强大的包

    介绍

    (1)visdat的目的是

    vis_dat通过将数据框中的变量类显示为绘图,并使用vis_miss简要查看缺失的数据,帮助数据框的可视化。

    (2)visdat有6个功能函数:

    • vis_dat()可视化一个数据框,显示列的类别,并显示缺少的数据。
    • vis_miss()只显示缺失的数据,并允许对缺失进行聚类并重新排列。vis_miss()类似于mi包中的missing.pattern.plot。
    • vis_compare()可视化相同维度的两个数据帧之间的差异
    • vis_expect()可视化数据中满足某些条件成立的数据
    • vis_cor()在一个漂亮的热图中可视化变量的相关性
    • vis_guess()可视化数据中各个数据的类别

    示例

    (1)使用vis_dat()函数

    通过经典的airquality数据集(其中包含有关1973年5月至9月纽约每日空气质量测量的信息)展示vis_dat()的功能。

    install.packages("visdat")
    head(airquality)
    > head(airquality)
      Ozone Solar.R Wind Temp Month Day
    1    41     190  7.4   67     5   1
    2    36     118  8.0   72     5   2
    3    12     149 12.6   74     5   3
    4    18     313 11.5   62     5   4
    5    NA      NA 14.3   56     5   5
    6    28      NA 14.9   66     5   6
    
    library(visdat)
    vis_dat(airquality)
    

    上图告诉我们:R将此数据集读取为数值型或者整数型,并在OzoneSolar.R中存在一些缺失的数据。缺少的数据由灰色表示。通过图片的输出结果我们可以看出, OzoneSolar.RTempMonth Day这几列为数字型,而Wind这一列为整数型。

    (2)使用vis_miss()函数

    vis_miss(airquality)
    

    vis_miss()中缺失值的百分比精确到小数点后1位。可以通过设置cluster = TRUE来对缺失进行聚类:
    vis_miss(airquality,cluster = TRUE)
    

    通过设置sort_miss = TRUE,列也可以按缺失最多的列排列:
    vis_miss(airquality,
             sort_miss = TRUE)
    

    当缺失率<0.1%时,或者缺少数据的数量非常少时

    test_miss_df <- data.frame(x1 = 1:10000,
                               x2 = rep("A", 10000),
                               x3 = c(rep(1L, 9999), NA))
    
    vis_miss(test_miss_df)
    

    如果数据不含有任何缺失数据:

    vis_miss(mtcars)
    

    (3) vis_compare()对比数据框差异

    vis_compare()可以显示两个相同大小的数据帧的差异。 我们来看一个例子。

    set.seed(2019-04-03-1105)
    chickwts_diff <- chickwts
    chickwts_diff[sample(1:nrow(chickwts), 30),sample(1:ncol(chickwts), 2)] <- NA
    vis_compare(chickwts_diff, chickwts)
    

    两个数据框的差异被蓝色标出。如果尝试在列不同时比较两个数据框的差异,则会出现一个错误:

    chickwts_diff_2 <- chickwts
    chickwts_diff_2$new_col <- chickwts_diff_2$weight*2
    
    vis_compare(chickwts, chickwts_diff_2)
    # Error in vis_compare(chickwts, chickwts_diff_2) : 
    #   Dimensions of df1 and df2 are not the same. vis_compare requires dataframes of identical dimensions.
    

    (4)vis_expect函数

    vis_expect可视化数据中满足条件的值。 例如显示数据中大于25的值可以通过:

    vis_expect(airquality, ~.x >= 25)
    

    还可以探索一组字符串或可能的NA值,并可视化它们的位置,

    bad_data <- data.frame(x = c(rnorm(100), rep("N/A", 10)),
                           y = c(rep("N A ", 30), rnorm(80)))
    
    vis_expect(bad_data, ~.x %in% c("N/A", "N A "))
    

    (5)为了便于绘制数据的相关性,请使用vis_cor函数:

    vis_cor是基于基础R中的cor函数,并且可以指示要计算哪个相关系数: “pearson”(默认),“kendall”或“spearman”之一。

    vis_cor(airquality, cor_method = "spearman")
    

    可以使用na_action函数指定要对缺失数据执行的操作,该函数再次借用cor方法。例如:

    vis_cor(airquality,
            na_action = "complete.obs")
    

    (6)vis_guess()函数

    用来猜测数据框中每个单元格是什么类型的数据。因此最好使用一些杂乱的数据进行说明:

    messy_vector <- c(TRUE,
                      T,
                      "TRUE",
                      "T",
                      "01/01/01",
                      "01/01/2001",
                      NA,
                      NaN,
                      "NA",
                      "Na",
                      "na",
                      "10",
                      10,
                      "10.1",
                      10.1,
                      "abc",
                      "$%TG")
    
    set.seed(2019-04-03-1106)
    messy_df <- data.frame(var1 = messy_vector,
                           var2 = sample(messy_vector),
                           var3 = sample(messy_vector))
    messy_df
    vis_guess(messy_df)
    

    目前vis_guess非常缓慢。 当在超过1000行的数据上使用它时,请考虑这一点。

    (7)绘制交互性图片

    您可以通过将它们包装在plotly :: ggplotly中来制作visdat中的图:

    library(plotly)
    ggplotly(vis_dat(airquality))
    ggplotly(vis_miss(airquality))
    ggplotly(vis_guess(airquality))
    

    相关文章

      网友评论

        本文标题:R语言新神器visdat包(一行代码看穿整个数据集)

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