绘制Kaggle发展到1000万用户的图表

339 阅读3分钟

几天前,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"))

祝你玩得开心!