几天前,Kaggle社区跨越了1000万注册用户这一惊人的里程碑!为了庆祝,我在论坛上发了一个帖子,直观地展示了这些年来的加速增长。为了庆祝,我在论坛上发了一篇帖子,将这些年的加速增长情况可视化。在这里我展示了这些图背后的R代码,并谈了一下我的可视化选择。
在这篇文章中,我们需要一小套基本的库。
libs <- c('dplyr', 'readr', # wrangling
'lubridate', 'ggrepel', # datetime, plots
'ggthemes', 'ggplot2') # plots
invisible(lapply(libs, library, character.only = TRUE))
我们将使用的数据是公开的Meta Kaggle数据集中的一个稍加处理的版本。我下载了Users.csv表,并将每天的用户数和累计数汇总到这个输入表中。
users <- read_csv("../../static/files/users_daily.csv", col_types = cols())
在我们分解之前,这里有完整的视觉效果来说明社区的增长情况。
foo <- users %>%
filter(date < max(date)) %>%
mutate(millions = ct %/% 1e6) %>%
mutate(year = year(date))
year(foo$date) <- 2017
col_values = rep(c("#008abc", "#e56c3a"), 10)[1:nrow(distinct(foo, millions))]
foo %>%
ggplot(aes(date, n, col = as.factor(millions))) +
geom_line(na.rm = TRUE) +
facet_wrap(~ year, scales = "free_y") +
scale_x_date(date_labels= "%b") +
scale_color_manual(values = col_values) +
theme_hc() +
theme(legend.position = "none") +
labs(x = "", y = "New Daily Users",
title = "13 years of Kaggle Community growth up to 10 million registered users",
subtitle = "New daily users over time for each year from 2010 to 2022. Note the scaled y-axis for each facet. Change in colour = Million Cumulative User Milestones.",
caption = "@headsortails with Meta Kaggle dataset")
我选择了这个图表来形象地说明这些年来的加速增长。每一个颜色的变化都代表着跨越一百万用户的里程碑。除了增长趋势外,该图还展示了季节性模式、每周周期和一些有趣的峰值。
但最突出的是,随着用户数量增加得越来越快,颜色变化之间的时间也越来越短。从2016年是只有单一颜色的最后一年,到2017年我们跨越了100万用户的大关,2021年总共显示了四次颜色变化。
该图的构建从一个小技巧开始。在提取了一个year 列之后,我们将把每个date 的年份转换为2017年。这样,我们就可以构建一个面包的视觉,仍然显示每一年,但也有共享的X轴。也许还有更优雅的方法,但这对我来说是可行的。(为什么是2017年?因为那是我加入Kaggle社区的一年。但这一年并没有出现在图中,所以这是给自己的一个微妙的复活节彩蛋)。millions ,这一栏将有助于上色。
foo <- users %>%
filter(date < max(date)) %>%
mutate(millions = ct %/% 1e6) %>%
mutate(year = year(date))
year(foo$date) <- 2017
我们根据百万用户里程碑的数量动态地获得颜色的顺序。
col_values = rep(c("#008abc", "#e56c3a"), 10)[1:nrow(distinct(foo, millions))]
实际的视觉效果是从每日用户的线图开始的,它被分成按年份划分的面。对date 功能的修改现在允许我们在每个面之间共享X轴。在这里,我们还没有对主题或颜色进行任何造型设计。
foo %>%
ggplot(aes(date, n, col = as.factor(millions))) +
geom_line(na.rm = TRUE) +
facet_wrap(~ year, scales = "free_y") +
scale_x_date(date_labels= "%b")

现在我们添加了交替的颜色,并选择了一个更淡入背景的主题。颜色图例消失了;我们将在副标题中描述这些颜色。
foo %>%
ggplot(aes(date, n, col = as.factor(millions))) +
geom_line(na.rm = TRUE) +
facet_wrap(~ year, scales = "free_y") +
scale_x_date(date_labels= "%b") +
scale_color_manual(values = col_values) +
theme_hc() +
theme(legend.position = "none")

最后的润色:我们去掉了X轴的标签,因为日期轴是非常不言自明的。添加一个标题来传达大局。还有一个副标题,把重点放在一些情节细节上。
foo %>%
ggplot(aes(date, n, col = as.factor(millions))) +
geom_line(na.rm = TRUE) +
facet_wrap(~ year, scales = "free_y") +
scale_x_date(date_labels= "%b") +
scale_color_manual(values = col_values) +
theme_hc() +
theme(legend.position = "none") +
labs(x = "", y = "New Daily Users",
title = "13 years of Kaggle Community growth up to 10 million registered users",
subtitle = "New daily users over time for each year from 2010 to 2022. Note the scaled y-axis for each facet. Change in colour = Million Cumulative User Milestones.",
caption = "@headsortails with Meta Kaggle dataset")
社区的加速发展证明了Kaggle作为机器学习和数据科学的家园的巨大声誉。回到我加入的时候,5年前的2017年,我的用户ID是1,014,468。从那时起,发生了很多事情:比赛的重点从表格转向NLP和视觉(与深度学习);我们有了数据集类别;讨论社区来了又走;内核变成了笔记本;笔记本比赛变得更加频繁;还有很多。
许多新面孔通过他们的创造性和鼓舞人心的贡献而获得了知名度。许多经验丰富的Kagglers通过持续的创新和支持来提高他们的技能。我们偶尔会有戏剧性的争论;但谁不是这样呢?通过这一切,社区的发展速度越来越快,达到了一个数量级,跟上了机器学习领域令人窒息的发展。
一切都表明,这种增长在不久的将来会继续下去。作为一个社区,我们处于一个独特的位置,可以从数据科学和机器学习的不断进步中学习,并为这些令人兴奋的发展贡献我们从业者的观点。我们也有责任保持我们社区的热情和支持性,培养人才和热情,打击垃圾邮件,维持一个安全和包容的环境,促进任人唯贤,并保持好奇心。
在我们面前有许多新的冒险,但也有挑战。
最后,这里有一个奖励情节供你解构。这个可视化图记录了2022年6月18日这一天,Kaggle社区首次达到1000万独立注册会员。
users %>%
filter(date >= date("2022-06-20") - 7) %>%
filter(date != max(date)) %>%
group_by(date) %>%
mutate(lab = max(ct)) %>%
ungroup() %>%
ggplot(aes(date, n)) +
geom_line(col = "black") +
geom_label_repel(aes(date, n, label = scales::comma(lab)), size = 8, col = "#008abc",
alpha = 0.8, force = 10, na.rm = TRUE) +
scale_y_continuous(labels = scales::comma) +
labs(x = "", y = "New Daily Users",
title = "Kaggle crosses 10 million unique users on June 18th 2022!",
subtitle = "Black curve shows new daily users over time. Blue labels show total number of users.",
caption = "@headsortails with Meta Kaggle dataset") +
theme_minimal() +
theme(axis.text = element_text(size = 12, colour = "black"),
title = element_text(size = 15, colour = "#008abc"), # "#e56c3a"
axis.title = element_text(colour = "black"),
plot.subtitle = element_text(size = 12, colour = "black"),
plot.caption = element_text(colour = "black"))
祝你玩得开心!