如何解决如何使用 Tableau 在我的数据中找到最常见的字符串序列?
通常的免责声明:在 Tableau(以及 R,这是我首选的数据整理语言)方面,我是一个新手。
这是我想要做的:
我有一个包含多个变量的数据集,其中两个是“时间”和“流派”。以下是数据外观的示例:
Index Title Date Genre Time
1 Sherlock 01/01/20 Drama 21:00
2 Peaky Blinders 01/01/20 Drama 20:00
3 Eastenders 01/01/20 Drama 19:30
4 BBC News 01/01/20 News 18:30
5 Antiques Roadshow 01/01/20 Factual 18:00
6 Peaky Blinders 02/01/20 Drama 21:00
7 Casualty 02/01/20 Drama 20:00
8 Eastenders 02/01/20 Drama 19:30
9 BBC News 02/01/20 News 18:30
10 Dragons Den 02/01/20 Entertainment 18:00
这只是来自一个非常大的数据集的一个非常小的样本,但我想确定的是:最常见的流派组合/序列是什么?例如,在上面的数据中,最常见的三个序列是“戏剧+戏剧+戏剧”。最常见的四种顺序是“新闻+戏剧+戏剧+戏剧”。
我的数据有数千个日期(这是 BBC One 的广播时间表,以防您想知道),我想找出最常见的类型组合/序列是什么(至少 3 个)。
我想知道这对 Tableau 来说是否太复杂,而我需要在 R 中做些什么?任何建议将是最受欢迎的!和往常一样,我很乐意详细说明任何不清楚的地方。
解决方法
如果您查看大量数据,其中数据行的顺序对分析至关重要,那么无论您使用何种可视化工具,您都应该了解 SQL 窗口查询。
最简单的方法是从预处理步骤开始,将简化的数据提供给您的可视化层,使用 Python、R,可能使用 Tableau-Prep 或其他一些工具。如果您可以非常清楚地定义需要在最后显示的信息并回溯确定预处理步骤应该生成什么来启用该可视化,那么这样做会更容易。
如果预先准备数据过于静态,不允许您根据需要进行交互探索,那么您可以将一些预处理工作拉入交互层,或许可以使用 Tableau 的自定义 SQL 或传递函数来调用您在预处理步骤中开发的一些相同 SQL。
无论如何,窗口查询(也称为分析查询)可能对此有用。
,由于 Tableau 方法会偏离主题,让我们考虑R
:
我们可以使用滚动函数来确定 3 的所有序列。zoo
包有一个 rollapply
函数:
library(zoo)
rollapply(data$Genre,3,c)
# [,1] [,2] [,3]
#[1,] "Drama" "Drama" "Drama"
#[2,] "Drama" "Drama" "News"
#[3,] "Drama" "News" "Factual"
#[4,] "News" "Factual" "Drama"
#[5,] "Factual" "Drama" "Drama"
#[6,] "Drama" "Drama" "Drama"
#[7,] "Drama" "Drama" "News"
#[8,] "Drama" "News" "Entertainment"
有很多方法可以从这里开始,但我更喜欢dplyr
:
library(dplyr)
rollapply(data$Genre,c) %>%
as_tibble() %>%
group_by_all() %>%
tally()
# V1 V2 V3 n
# <chr> <chr> <chr> <int>
#1 Drama Drama Drama 2
#2 Drama Drama News 2
#3 Drama News Entertainment 1
#4 Drama News Factual 1
#5 Factual Drama Drama 1
#6 News Factual Drama 1
数据:
data <- structure(list(Index = 1:10,Title = c("Sherlock","Peaky Blinders","Eastenders","BBC News","Antiques Roadshow","Casualty","Dragons Den"),Date = c("01/01/20","01/01/20","02/01/20","02/01/20"),Genre = c("Drama","Drama","News","Factual","Entertainment"),Time = c("21:00","20:00","19:30","18:30","18:00","21:00","18:00")),class = "data.frame",row.names = c(NA,-10L))
,
要在 r
中执行此操作,您还可以使用包 runner
。要检查可变长度,请使用这样的策略。
n <- 3
cols <- paste0('Col',seq_len(n))
library(runner)
map_dfr(runner(x=data$Genre,k=n,f = function(x) ifelse(length(x) == n,list(x),list(rep(NA,n)))),~ setNames(.x,cols)) %>%
na.omit() %>%
group_by_all() %>%
summarise(m = n()) %>%
ungroup() %>%
filter(m == max(m))
# A tibble: 2 x 4
Col1 Col2 Col3 m
<chr> <chr> <chr> <int>
1 Drama Drama Drama 2
2 Drama Drama News 2
对于长度 4
只需更改 n
和
n <- 4
cols <- paste0('Col',seq_len(n))
map_dfr(runner(x=data$Genre,cols)) %>%
na.omit() %>%
group_by_all() %>%
summarise(m = n()) %>%
ungroup() %>%
filter(m == max(m))
# A tibble: 1 x 5
Col1 Col2 Col3 Col4 m
<chr> <chr> <chr> <chr> <int>
1 Drama Drama Drama News 2
使用的数据
> data
Index Title Date Genre Time
1 1 Sherlock 01/01/20 Drama 21:00
2 2 Peaky Blinders 01/01/20 Drama 20:00
3 3 Eastenders 01/01/20 Drama 19:30
4 4 BBC News 01/01/20 News 18:30
5 5 Antiques Roadshow 01/01/20 Factual 18:00
6 6 Peaky Blinders 02/01/20 Drama 21:00
7 7 Casualty 02/01/20 Drama 20:00
8 8 Eastenders 02/01/20 Drama 19:30
9 9 BBC News 02/01/20 News 18:30
10 10 Dragons Den 02/01/20 Entertainment 18:00
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。