| Title: | Preliminary Visualisation of Data | 
| Version: | 0.6.0 | 
| Description: | Create preliminary exploratory data visualisations of an entire dataset to identify problems or unexpected features using 'ggplot2'. | 
| Depends: | R (≥ 3.2.2) | 
| License: | MIT + file LICENSE | 
| LazyData: | true | 
| RoxygenNote: | 7.2.3 | 
| Imports: | ggplot2, tidyr, dplyr, purrr, readr, magrittr, stats, tibble, glue, forcats, cli, scales | 
| URL: | https://docs.ropensci.org/visdat/, https://github.com/ropensci/visdat | 
| BugReports: | https://github.com/ropensci/visdat/issues | 
| Suggests: | testthat (≥ 3.0.0), plotly (≥ 4.5.6), knitr, rmarkdown, vdiffr, spelling, covr, stringr | 
| VignetteBuilder: | knitr | 
| Encoding: | UTF-8 | 
| Language: | en-US | 
| Config/testthat/edition: | 3 | 
| NeedsCompilation: | no | 
| Packaged: | 2023-02-02 00:52:14 UTC; nick | 
| Author: | Nicholas Tierney | 
| Maintainer: | Nicholas Tierney <nicholas.tierney@gmail.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2023-02-02 03:10:02 UTC | 
visdat
Description
visdat is a package that helps with the preliminary visualisation of data. visdat makes it easy to visualise your whole dataset so that you can visually identify problems.
Author(s)
Maintainer: Nicholas Tierney nicholas.tierney@gmail.com (ORCID)
Other contributors:
- Sean Hughes (ORCID) (Sean Hughes reviewed the package for rOpenSci, see https://github.com/ropensci/onboarding/issues/87) [reviewer] 
- Mara Averick (Mara Averick reviewed the package for rOpenSci, see https://github.com/ropensci/onboarding/issues/87) [reviewer] 
- Stuart Lee [contributor] 
- Earo Wang [contributor] 
- Nic Crane [contributor] 
- Christophe Regouby [contributor] 
See Also
It's main functions are:
Learn more about visdat at https://docs.ropensci.org/visdat/
Pipe operator
Description
See magrittr::%>% for details.
Usage
lhs %>% rhs
Arguments
| lhs | A value or the magrittr placeholder. | 
| rhs | A function call using the magrittr semantics. | 
Value
The result of calling rhs(lhs).
Abbreviate all variables in a data frame
Description
It can be useful to abbreviate variable names in a data set to make them easier to plot. This function takes in a data set and some minimum length to abbreviate the data to.
Usage
abbreviate_vars(data, min_length = 10)
Arguments
| data | data.frame | 
| min_length | minimum number of characters to abbreviate down to | 
Value
data frame with abbreviated variable names
Examples
long_data <- data.frame(
  really_really_long_name = c(NA, NA, 1:8),
  very_quite_long_name = c(-1:-8, NA, NA),
  this_long_name_is_something_else = c(NA, NA,
                                       seq(from = 0, to = 1, length.out = 8))
)
vis_miss(long_data)
long_data %>% abbreviate_vars() %>% vis_miss()
A small toy dataset of binary data with missings.
Description
A dataset containing binary values and missing values. It is created to
illustrate the usage of vis_binary().
Usage
dat_bin
Format
A data frame with 100 rows and 3 variables:
- x
- a binary variable with missing values. 
- y
- a binary variable with missing values. 
- z
- a binary variable with no missing values. 
Return data used to create vis_cor plot
Description
Return data used to create vis_cor plot
Create a tidy dataframe of correlations suitable for plotting
Usage
data_vis_cor(x, ...)
## Default S3 method:
data_vis_cor(x, ...)
## S3 method for class 'data.frame'
data_vis_cor(
  x,
  cor_method = "pearson",
  na_action = "pairwise.complete.obs",
  ...
)
## S3 method for class 'grouped_df'
data_vis_cor(x, ...)
Arguments
| x | data.frame | 
| ... | extra arguments (currently unused) | 
| cor_method | correlation method to use, from  | 
| na_action | The method for computing covariances when there are missing
values present. This can be "everything", "all.obs", "complete.obs",
"na.or.complete", or "pairwise.complete.obs" (default). This option is
taken from the  | 
Value
data frame
tidy dataframe of correlations
Examples
data_vis_cor(airquality)
## Not run: 
#return vis_dat data for each group
library(dplyr)
airquality %>%
  group_by(Month) %>%
  data_vis_cor()
## End(Not run)
data_vis_cor(airquality)
Return data used to create vis_dat plot
Description
Return data used to create vis_dat plot
Usage
data_vis_dat(x, ...)
## Default S3 method:
data_vis_dat(x, ...)
## S3 method for class 'data.frame'
data_vis_dat(x, ...)
## S3 method for class 'grouped_df'
data_vis_dat(x, ...)
Arguments
| x | data.frame | 
| ... | extra arguments (currently unused) | 
Value
data frame
Examples
data_vis_dat(airquality)
## Not run: 
#return vis_dat data for each group
library(dplyr)
airquality %>%
  group_by(Month) %>%
  data_vis_dat()
## End(Not run)
Return data used to create vis_miss plot
Description
Return data used to create vis_miss plot
Create a tidy dataframe of missing data suitable for plotting
Usage
data_vis_miss(x, ...)
## Default S3 method:
data_vis_miss(x, ...)
## S3 method for class 'data.frame'
data_vis_miss(x, cluster = FALSE, ...)
## S3 method for class 'grouped_df'
data_vis_miss(x, ...)
Arguments
| x | data.frame | 
| ... | extra arguments (currently unused) | 
| cluster | logical - whether to cluster missingness. Default is FALSE. | 
Value
data frame
tidy dataframe of missing data
Examples
data_vis_miss(airquality)
## Not run: 
#return vis_dat data for each group
library(dplyr)
airquality %>%
  group_by(Month) %>%
  data_vis_miss()
## End(Not run)
data_vis_miss(airquality)
A small toy dataset of imaginary people
Description
A dataset containing information about some randomly generated people,
created using the excellent wakefield package. It is created as
deliberately messy dataset.
Usage
typical_data
Format
A data frame with 5000 rows and 11 variables:
- ID
- Unique identifier for each individual, a sequential character vector of zero-padded identification numbers (IDs). see ?wakefield::id 
- Race
- Race for each individual, "Black", "White", "Hispanic", "Asian", "Other", "Bi-Racial", "Native", and "Hawaiin", see ?wakefield::race 
- Age
- Age of each individual, see ?wakefield::age 
- Sex
- Male or female, see ?wakefield::sex 
- Height(cm)
- Height in centimeters, see ?wakefield::height 
- IQ
- vector of intelligence quotients (IQ), see ?wakefield::iq 
- Smokes
- whether or not this person smokes, see ?wakefield::smokes 
- Income
- Yearly income in dollars, see ?wakefield::income 
- Died
- Whether or not this person has died yet., see ?wakefield::died 
A small toy dataset of imaginary people
Description
A wider dataset than typical_data containing information about some
randomly generated people, created using the excellent wakefield
package. It is created as deliberately odd / eclectic dataset.
Usage
typical_data_large
Format
A data frame with 300 rows and 49 variables:
- Age
- Age of each individual, see ?wakefield::age for more info 
- Animal
- A vector of animals, see ?wakefield::animal 
- Answer
- A vector of "Yes" or "No" 
- Area
- A vector of living areas "Suburban", "Urban", "Rural" 
- Car
- names of cars - see ?mtcars 
- Children
- vector of number of children - see ?wakefield::children 
- Coin
- character vector of "heads" and "tails" 
- Color
- vector of vectors from "colors()" 
- Date
- vector of "important" dates for an individual 
- Death
- TRUE / FALSE for whether this person died 
- Dice
- 6 sided dice result 
- DNA
- vector of GATC nucleobases 
- DOB
- birth dates 
- Dummy
- a 0/1 dummy var 
- Education
- education attainment level 
- Employment
- employee status 
- Eye
- eye colour 
- Grade
- percent grades 
- Grade_Level
- favorite school grade 
- Group
- control or treatment 
- hair
- hair colours - "brown", "black", "blonde", or "red" 
- Height
- height in cm 
- Income
- yearly income 
- Browser
- choice of internet browser 
- IQ
- intelligence quotient 
- Language
- random language of the world 
- Level
- levels between 1 and 4 
- Likert
- likert response - "strongly agree", "agree", and so on 
- Lorem_Ipsum
- lorem ipsum text 
- Marital
- marital status- "married", "divorced", "widowed", "separated", etc 
- Military
- miliary branch they are in 
- Month
- their favorite month 
- Name
- their name 
- Normal
- a random normal number 
- Political
- their favorite political party 
- Race
- their race 
- Religion
- their religion 
- SAT
- their SAT score 
- Sentence
- an uttered sentence 
- Sex_1
- sex of their first child 
- Sex_2
- sex of their second child 
- Smokes
- do they smoke 
- Speed
- their median speed travelled in a car 
- State
- the last state they visited in the USA 
- String
- a random string they smashed out on the keyboard 
- Upper
- the last key they hit in upper case 
- Valid
- TRUE FALSE answer to a question 
- Year
- significant year to that individuals 
- Zip
- a zip code they have visited 
Visualise binary values
Description
Visualise binary values
Usage
vis_binary(
  data,
  col_zero = "salmon",
  col_one = "steelblue2",
  col_na = "grey90",
  order = NULL
)
Arguments
| data | a data.frame | 
| col_zero | colour for zeroes, default is "salmon" | 
| col_one | colour for ones, default is "steelblue2" | 
| col_na | colour for NA, default is "grey90" | 
| order | optional character vector of the order of variables | 
Value
a ggplot plot of the binary values
Examples
vis_binary(dat_bin)
# changing order of variables
# create numeric names
df <-  setNames(dat_bin, c("1.1", "8.9", "10.4"))
df
# not ideal
vis_binary(df)
# good - specify the original order
vis_binary(df, order = names(df))
Visually compare two dataframes and see where they are different.
Description
vis_compare, like the other vis_* families, gives an at-a-glance ggplot
of a dataset, but in this case, hones in on visualising two different
dataframes of the same dimension, so it takes two dataframes as arguments.
Usage
vis_compare(df1, df2)
Arguments
| df1 | The first dataframe to compare | 
| df2 | The second dataframe to compare to the first. | 
Value
ggplot2 object displaying which values in each data frame are
present in each other, and which are not.
See Also
vis_miss() vis_dat() vis_guess() vis_expect() vis_cor()
Examples
# make a new dataset of iris that contains some NA values
aq_diff <- airquality
aq_diff[1:10, 1:2] <- NA
vis_compare(airquality, aq_diff)
Visualise correlations amongst variables in your data as a heatmap
Description
Visualise correlations amongst variables in your data as a heatmap
Usage
vis_cor(
  data,
  cor_method = "pearson",
  na_action = "pairwise.complete.obs",
  facet,
  ...
)
Arguments
| data | data.frame | 
| cor_method | correlation method to use, from  | 
| na_action | The method for computing covariances when there are missing
values present. This can be "everything", "all.obs", "complete.obs",
"na.or.complete", or "pairwise.complete.obs" (default). This option is
taken from the  | 
| facet | bare unqouted variable to use for facetting | 
| ... | extra arguments you may want to pass to  | 
Value
ggplot2 object
Examples
vis_cor(airquality)
vis_cor(airquality, facet = Month)
vis_cor(mtcars)
## Not run: 
# this will error
vis_cor(iris)
## End(Not run)
Visualises a data.frame to tell you what it contains.
Description
vis_dat gives you an at-a-glance ggplot object of what is inside a
dataframe. Cells are coloured according to what class they are and whether
the values are missing. As vis_dat returns a ggplot object, it is very
easy to customize and change labels, and customize the plot
Usage
vis_dat(
  x,
  sort_type = TRUE,
  palette = "default",
  warn_large_data = TRUE,
  large_data_size = 9e+05,
  facet
)
Arguments
| x | a data.frame object | 
| sort_type | logical TRUE/FALSE. When TRUE (default), it sorts by the type in the column to make it easier to see what is in the data | 
| palette | character "default", "qual" or "cb_safe". "default" (the default) provides the stock ggplot scale for separating the colours. "qual" uses an experimental qualitative colour scheme for providing distinct colours for each Type. "cb_safe" is a set of colours that are appropriate for those with colourblindness. "qual" and "cb_safe" are drawn from http://colorbrewer2.org/. | 
| warn_large_data | logical - warn if there is large data? Default is TRUE see note for more details | 
| large_data_size | integer default is 900000 (given by 'nrow(data.frame) * ncol(data.frame)“). This can be changed. See note for more details. | 
| facet | bare variable name for a variable you would like to facet
by. By default there is no facetting. Only one variable can be facetted.
You can get the data structure using  | 
Value
ggplot2 object displaying the type of values in the data frame and
the position of any missing values.
Note
Some datasets might be too large to plot, sometimes creating a blank plot - if this happens, I would recommend downsampling the data, either looking at the first 1,000 rows or by taking a random sample. This means that you won't get the same "look" at the data, but it is better than a blank plot! See example code for suggestions on doing this.
See Also
vis_miss() vis_guess() vis_expect() vis_cor()
vis_compare()
Examples
vis_dat(airquality)
# experimental colourblind safe palette
vis_dat(airquality, palette = "cb_safe")
vis_dat(airquality, palette = "qual")
# if you have a large dataset, you might want to try downsampling:
## Not run: 
library(nycflights13)
library(dplyr)
flights %>%
  sample_n(1000) %>%
  vis_dat()
flights %>%
  slice(1:1000) %>%
  vis_dat()
## End(Not run)
Visualise whether a value is in a data frame
Description
vis_expect visualises certain conditions or values in your data. For
example, If you are not sure whether to expect -1 in your data, you could
write: vis_expect(data, ~.x == -1), and you can see if there are times
where the values in your data are equal to -1. You could also, for example,
explore a set of bad strings, or possible NA values and visualise where
they are using vis_expect(data, ~.x %in% bad_strings) where
bad_strings is a character vector containing bad strings  like N A
N/A etc.
Usage
vis_expect(data, expectation, show_perc = TRUE)
Arguments
| data | a data.frame | 
| expectation | a formula following the syntax:  | 
| show_perc | logical. TRUE now adds in the \ TRUE or FALSE in the whole dataset into the legend. Default value is TRUE. | 
Value
a ggplot2 object
See Also
vis_miss() vis_dat() vis_guess() vis_cor() vis_compare()
Examples
dat_test <- tibble::tribble(
            ~x, ~y,
            -1,  "A",
            0,  "B",
            1,  "C",
            NA, NA
            )
vis_expect(dat_test, ~.x == -1)
vis_expect(airquality, ~.x == 5.1)
# explore some common NA strings
common_nas <- c(
"NA",
"N A",
"N/A",
"na",
"n a",
"n/a"
)
dat_ms <- tibble::tribble(~x,  ~y,    ~z,
                         "1",   "A",   -100,
                         "3",   "N/A", -99,
                         "NA",  NA,    -98,
                         "N A", "E",   -101,
                         "na", "F",   -1)
vis_expect(dat_ms, ~.x %in% common_nas)
Visualise type guess in a data.frame
Description
vis_guess visualises the class of every single individual cell in a
dataframe and displays it as ggplot object, similar to vis_dat. Cells
are coloured according to what class they are and whether the values are
missing. vis_guess estimates the class of individual elements using
readr::guess_parser.  It may be currently slow on larger datasets.
Usage
vis_guess(x, palette = "default")
Arguments
| x | a data.frame | 
| palette | character "default", "qual" or "cb_safe". "default" (the default) provides the stock ggplot scale for separating the colours. "qual" uses an experimental qualitative colour scheme for providing distinct colours for each Type. "cb_safe" is a set of colours that are appropriate for those with colourblindness. "qual" and "cb_safe" are drawn from http://colorbrewer2.org/. | 
Value
ggplot2 object displaying the guess of the type of values in the
data frame and the position of any missing values.
See Also
vis_miss() vis_dat() vis_expect() vis_cor() vis_compare()
Examples
messy_vector <- c(TRUE,
                 "TRUE",
                 "T",
                 "01/01/01",
                 "01/01/2001",
                 NA,
                 NaN,
                 "NA",
                 "Na",
                 "na",
                 "10",
                 10,
                 "10.1",
                 10.1,
                 "abc",
                 "$%TG")
set.seed(1114)
messy_df <- data.frame(var1 = messy_vector,
                       var2 = sample(messy_vector),
                       var3 = sample(messy_vector))
vis_guess(messy_df)
Visualise a data.frame to display missingness.
Description
vis_miss provides an at-a-glance ggplot of the missingness inside a
dataframe, colouring cells according to missingness, where black indicates
a missing cell and grey indicates a present cell. As it returns a ggplot
object, it is very easy to customize and change labels.
Usage
vis_miss(
  x,
  cluster = FALSE,
  sort_miss = FALSE,
  show_perc = TRUE,
  show_perc_col = TRUE,
  large_data_size = 9e+05,
  warn_large_data = TRUE,
  facet
)
Arguments
| x | a data.frame | 
| cluster | logical. TRUE specifies that you want to use hierarchical clustering (mcquitty method) to arrange rows according to missingness. FALSE specifies that you want to leave it as is. Default value is FALSE. | 
| sort_miss | logical. TRUE arranges the columns in order of missingness. Default value is FALSE. | 
| show_perc | logical. TRUE now adds in the \ in the whole dataset into the legend. Default value is TRUE. | 
| show_perc_col | logical. TRUE adds in the \
column into the x axis. Can be disabled with FALSE. Default value is TRUE.
No missingness percentage column information will be presented when  | 
| large_data_size | integer default is 900000 (given by 'nrow(data.frame) * ncol(data.frame)“). This can be changed. See note for more details. | 
| warn_large_data | logical - warn if there is large data? Default is TRUE see note for more details | 
| facet | (optional) bare variable name, if you want to create a faceted
plot, with one plot per level of the variable. No missingness percentage
column information will be presented when  | 
Details
The missingness summaries in the columns are rounded to the nearest integer.
For more detailed summaries, please see the summaries in the naniar R
package, specifically, naniar::miss_var_summary().
Value
ggplot2 object displaying the position of missing values in the
dataframe, and the percentage of values missing and present.
Note
Some datasets might be too large to plot, sometimes creating a blank plot - if this happens, I would recommend downsampling the data, either looking at the first 1,000 rows or by taking a random sample. This means that you won't get the same "look" at the data, but it is better than a blank plot! See example code for suggestions on doing this.
See Also
vis_dat() vis_guess() vis_expect() vis_cor() vis_compare()
Examples
vis_miss(airquality)
vis_miss(airquality, cluster = TRUE)
vis_miss(airquality, sort_miss = TRUE)
vis_miss(airquality, facet = Month)
## Not run: 
# if you have a large dataset, you might want to try downsampling:
library(nycflights13)
library(dplyr)
flights %>%
  sample_n(1000) %>%
  vis_miss()
flights %>%
  slice(1:1000) %>%
  vis_miss()
## End(Not run)
Visualise the value of data values
Description
Visualise all of the values in the data on a 0 to 1 scale. Only works on numeric data - see examples for how to subset to only numeric data.
Usage
vis_value(data, na_colour = "grey90", viridis_option = "D")
Arguments
| data | a data.frame | 
| na_colour | a character vector of length one describing what colour you want the NA values to be. Default is "grey90" | 
| viridis_option | A character string indicating the colormap option to use. Four options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" (or "C"), "viridis" (or "D", the default option) and "cividis" (or "E"). | 
Value
a ggplot plot of the values
Examples
vis_value(airquality)
vis_value(airquality, viridis_option = "A")
vis_value(airquality, viridis_option = "B")
vis_value(airquality, viridis_option = "C")
vis_value(airquality, viridis_option = "E")
## Not run: 
library(dplyr)
diamonds %>%
  select_if(is.numeric) %>%
  vis_value()
## End(Not run)