DataExplorer,自定义单变量分布
DataExplorer, customize univariate distribution
我正在尝试使用 DataExplorer 来帮助进行快速 EDA。我喜欢它显示单变量分布的方式。这是一个可重现的例子。
A <- c(rep(c(1,2,3,4,5), 200))
A<- factor(A)
B <- c(x=rnorm(1000))
C <- c(x= rnorm(1000, mean = 100, sd=2))
D <- c(x= rnorm(1000, 2, 2))
df<- data.frame(A, B, C, D)
df %>%
create_report(
output_file = "trial",
y= "A", #to get barplots, QQ plots and scatterplots by grouping variable "A"
report_title = "trial_EDA",
config = configure_report(
add_plot_density = TRUE #To add density plots to report
)
)
我想通过分组变量“A”来可视化密度,如附图所示。
但我不知道如何正确使用绘图密度参数来做到这一点。另外,请建议其他包以轻松浏览大型数据集作为初步分析。谢谢!
您尚未指定 B
、C
或 D
密度图应应用于哪个变量。
如果只有一个,例如B
然后这样做:
library(tidyverse)
library(ggpubr)
A <- c(rep(c(1,2,3,4,5), 200))
A<- factor(A)
B <- c(x=rnorm(1000))
C <- c(x= rnorm(1000, mean = 100, sd=2))
D <- c(x= rnorm(1000, 2, 2))
df<- data.frame(A, B, C, D)
df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(B, fill=A)) +
geom_density(alpha=0.2)
您也可以对一个图上的每个变量单独执行此操作。
pB = df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(B, fill=A)) +
geom_density(alpha=0.2)
pC = df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(C, fill=A)) +
geom_density(alpha=0.2)
pD = df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(D, fill=A)) +
geom_density(alpha=0.2)
ggarrange(pB, pC, pD,
labels = c("B", "C", "D"))
如果你不喜欢馅料,你可以这样做
df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(B, color=A)) +
geom_density()
更新 1
可以为任意数量的列创建图表。我将在下面的示例中向您展示。
首先,我们将以一种非常简单甚至微不足道的方式进行。
library(tidyverse)
df = tibble(
A = rep(c(1,2,3,4,5), 200) %>% factor(),
B = rnorm(1000),
C = rnorm(1000, mean = 100, sd=2),
D = rnorm(1000, 2, 2)
)
fPlot = function(x, group) tibble(x=x, group=group) %>%
ggplot(aes(x, color=group)) +
geom_density()
df %>% select_at(vars(B:D)) %>%
map(~fPlot(., df$A))
如您所见,我们为变量 B
、C
和 D
.
创建了三个图
第二种方式有点难理解。但它会给你一些额外的奖励。
fPlot2 = function(df, group) df$data[[1]] %>%
ggplot(aes(val, color=A)) +
geom_density() +
ggtitle(group)
df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>%
group_by(var) %>%
nest() %>%
group_map(fPlot2)
请注意,df %>% pivot_longer(B:D, names_to = "var", values_to = "val")
之后的 tibble
看起来像这样。
# A tibble: 3,000 x 3
A var val
<fct> <chr> <dbl>
1 1 B 1.06
2 1 C 100.
3 1 D 3.54
4 2 B -0.652
5 2 C 100.
6 2 D 1.12
7 3 B 0.652
8 3 C 97.3
9 3 D 3.57
10 4 B -0.0972
# ... with 2,990 more rows
完成后 df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>% group_by(var) %>% nest()
看起来像这样:
# A tibble: 3 x 2
# Groups: var [3]
var data
<chr> <list>
1 B <tibble [1,000 x 2]>
2 C <tibble [1,000 x 2]>
3 D <tibble [1,000 x 2]>
如您所见,数据已折叠成变量 data
中的三个内部 tibble
。
这种方法将允许您轻松地分别计算每列的所有统计信息。看看这个。
fStat = function(df) df$data[[1]] %>%
group_by(A) %>%
summarise(
n = n(),
min = min(val),
mean = mean(val),
max = max(val),
median = median(val),
sd = sd(val),
sw.stat = stats::shapiro.test(val)$statistic,
sw.p = stats::shapiro.test(val)$p.value,
)
df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>%
group_by(var) %>%
nest() %>%
group_modify(~fStat(.x))
输出
# A tibble: 15 x 10
# Groups: var [3]
var A n min mean max median sd sw.stat sw.p
<chr> <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 B 1 200 -2.14 0.139 3.16 0.153 0.960 0.994 0.561
2 B 2 200 -2.00 0.0185 2.61 0.0162 0.923 0.992 0.373
3 B 3 200 -3.15 0.0245 2.42 0.0718 1.02 0.992 0.347
4 B 4 200 -2.75 0.00112 2.73 -0.00691 1.02 0.993 0.496
5 B 5 200 -3.32 -0.00758 3.23 -0.000105 0.993 0.991 0.250
6 C 1 200 94.6 99.8 104. 99.8 1.97 0.992 0.365
7 C 2 200 94.8 100. 104. 100. 1.85 0.991 0.290
8 C 3 200 94.5 100. 106. 100. 1.94 0.996 0.877
9 C 4 200 94.4 99.9 107. 99.9 1.97 0.993 0.463
10 C 5 200 94.3 99.8 106. 99.8 2.07 0.996 0.887
11 D 1 200 -4.89 1.81 8.11 1.90 2.09 0.995 0.750
12 D 2 200 -5.42 2.15 7.57 2.18 2.14 0.995 0.726
13 D 3 200 -4.38 2.09 7.10 2.02 1.97 0.989 0.111
14 D 4 200 -4.73 2.13 8.98 1.93 1.99 0.989 0.138
15 D 5 200 -2.19 2.24 7.79 2.25 1.87 0.996 0.867
你喜欢 nie fajne 吗?
我正在尝试使用 DataExplorer 来帮助进行快速 EDA。我喜欢它显示单变量分布的方式。这是一个可重现的例子。
A <- c(rep(c(1,2,3,4,5), 200))
A<- factor(A)
B <- c(x=rnorm(1000))
C <- c(x= rnorm(1000, mean = 100, sd=2))
D <- c(x= rnorm(1000, 2, 2))
df<- data.frame(A, B, C, D)
df %>%
create_report(
output_file = "trial",
y= "A", #to get barplots, QQ plots and scatterplots by grouping variable "A"
report_title = "trial_EDA",
config = configure_report(
add_plot_density = TRUE #To add density plots to report
)
)
我想通过分组变量“A”来可视化密度,如附图所示。
但我不知道如何正确使用绘图密度参数来做到这一点。另外,请建议其他包以轻松浏览大型数据集作为初步分析。谢谢!
您尚未指定 B
、C
或 D
密度图应应用于哪个变量。
如果只有一个,例如B
然后这样做:
library(tidyverse)
library(ggpubr)
A <- c(rep(c(1,2,3,4,5), 200))
A<- factor(A)
B <- c(x=rnorm(1000))
C <- c(x= rnorm(1000, mean = 100, sd=2))
D <- c(x= rnorm(1000, 2, 2))
df<- data.frame(A, B, C, D)
df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(B, fill=A)) +
geom_density(alpha=0.2)
您也可以对一个图上的每个变量单独执行此操作。
pB = df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(B, fill=A)) +
geom_density(alpha=0.2)
pC = df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(C, fill=A)) +
geom_density(alpha=0.2)
pD = df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(D, fill=A)) +
geom_density(alpha=0.2)
ggarrange(pB, pC, pD,
labels = c("B", "C", "D"))
如果你不喜欢馅料,你可以这样做
df %>% mutate(A = A %>% fct_inorder()) %>%
ggplot(aes(B, color=A)) +
geom_density()
更新 1
可以为任意数量的列创建图表。我将在下面的示例中向您展示。 首先,我们将以一种非常简单甚至微不足道的方式进行。
library(tidyverse)
df = tibble(
A = rep(c(1,2,3,4,5), 200) %>% factor(),
B = rnorm(1000),
C = rnorm(1000, mean = 100, sd=2),
D = rnorm(1000, 2, 2)
)
fPlot = function(x, group) tibble(x=x, group=group) %>%
ggplot(aes(x, color=group)) +
geom_density()
df %>% select_at(vars(B:D)) %>%
map(~fPlot(., df$A))
如您所见,我们为变量 B
、C
和 D
.
第二种方式有点难理解。但它会给你一些额外的奖励。
fPlot2 = function(df, group) df$data[[1]] %>%
ggplot(aes(val, color=A)) +
geom_density() +
ggtitle(group)
df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>%
group_by(var) %>%
nest() %>%
group_map(fPlot2)
请注意,df %>% pivot_longer(B:D, names_to = "var", values_to = "val")
之后的 tibble
看起来像这样。
# A tibble: 3,000 x 3
A var val
<fct> <chr> <dbl>
1 1 B 1.06
2 1 C 100.
3 1 D 3.54
4 2 B -0.652
5 2 C 100.
6 2 D 1.12
7 3 B 0.652
8 3 C 97.3
9 3 D 3.57
10 4 B -0.0972
# ... with 2,990 more rows
完成后 df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>% group_by(var) %>% nest()
看起来像这样:
# A tibble: 3 x 2
# Groups: var [3]
var data
<chr> <list>
1 B <tibble [1,000 x 2]>
2 C <tibble [1,000 x 2]>
3 D <tibble [1,000 x 2]>
如您所见,数据已折叠成变量 data
中的三个内部 tibble
。
这种方法将允许您轻松地分别计算每列的所有统计信息。看看这个。
fStat = function(df) df$data[[1]] %>%
group_by(A) %>%
summarise(
n = n(),
min = min(val),
mean = mean(val),
max = max(val),
median = median(val),
sd = sd(val),
sw.stat = stats::shapiro.test(val)$statistic,
sw.p = stats::shapiro.test(val)$p.value,
)
df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>%
group_by(var) %>%
nest() %>%
group_modify(~fStat(.x))
输出
# A tibble: 15 x 10
# Groups: var [3]
var A n min mean max median sd sw.stat sw.p
<chr> <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 B 1 200 -2.14 0.139 3.16 0.153 0.960 0.994 0.561
2 B 2 200 -2.00 0.0185 2.61 0.0162 0.923 0.992 0.373
3 B 3 200 -3.15 0.0245 2.42 0.0718 1.02 0.992 0.347
4 B 4 200 -2.75 0.00112 2.73 -0.00691 1.02 0.993 0.496
5 B 5 200 -3.32 -0.00758 3.23 -0.000105 0.993 0.991 0.250
6 C 1 200 94.6 99.8 104. 99.8 1.97 0.992 0.365
7 C 2 200 94.8 100. 104. 100. 1.85 0.991 0.290
8 C 3 200 94.5 100. 106. 100. 1.94 0.996 0.877
9 C 4 200 94.4 99.9 107. 99.9 1.97 0.993 0.463
10 C 5 200 94.3 99.8 106. 99.8 2.07 0.996 0.887
11 D 1 200 -4.89 1.81 8.11 1.90 2.09 0.995 0.750
12 D 2 200 -5.42 2.15 7.57 2.18 2.14 0.995 0.726
13 D 3 200 -4.38 2.09 7.10 2.02 1.97 0.989 0.111
14 D 4 200 -4.73 2.13 8.98 1.93 1.99 0.989 0.138
15 D 5 200 -2.19 2.24 7.79 2.25 1.87 0.996 0.867
你喜欢 nie fajne 吗?