百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

中了数据可视化的毒:BBC如何使用R语言绘制数据图表?

bigegpt 2024-12-26 11:47 9 浏览

生动的图表能极大地帮助呈现更有信息量的新闻。BBC(英国广播公司)近日分享了他们的视觉与数据新闻团队使用 R 语言绘制新闻图表的经验。为了简化流程,他们创建了一个 bbplot 软件包和一份参考手册,并也已将它们开源。

过去一年里,BBC 视觉与数据新闻(Visual and Data Journalism)团队的数据记者已经从根本上改变了他们绘制发表在 BBC 新闻网站上的数据图表的方式。我们将在这篇文章中介绍我们如何以及为何要使用 R 语言的 ggplot2 软件包来创建可直接使用的图表,我们也会给出我们的流程和代码以及分享我们一路上所学到的东西。

BBC 视觉与数据新闻团队的数据记者已经使用 R 来执行复杂和可重复的数据分析以及构建原型一些时日了。

比如,在获过奖的 NHS 跟踪项目中,我们使用了 R 来提取、清洗、清理和探索数百份电子表格中的数据,以了解 NHS 目标是否遭受了攻击。当我们在 2017 年分析英格兰和威尔士超过 800 万住宅物业交易以便了解扣除了物价因素的房价变化情况时,R 也是我们的首要选择;该项目去年获得了皇家统计学会的一个奖项。

但当涉及到绘制图表时,情况又不一样。

我们曾使用了 R(尤其是 R 的数据可视化软件包 ggplot2)来进行数据探索,从而让模式可视化以及帮助我们理解数据和寻找故事。但我们没有按照 BBC 新闻的图表风格来构建可用于网上发布的图表。

为了创建在 BBC 新闻网站上伴随故事的图表,我们有两个主要选项:如果时间充足,我们可以委托我们的设计团队绘制图表。如果我们需要快速周转,我们会转而选择我们的内部制图工具。

在 2018 年的前几个月,数据团队中一些充满好奇心的成员开始了实验,深入到了 ggplot2 软件包内部,想要搞清楚我们还需要多少工作才能复现 BBC 的内部风格。

在去年三月份,我们发布了第一张从头至尾都使用 ggplot2 绘制的图表。

自那以后,进展很快。

比起制图工具,ggplot2 能提供更多控制和创造性,能让人不局限于数量有限的图表。使用脚本能节省大量时间和精力,尤其是在操作需要定期更新的数据时——可重复性是我们的工作流程的一大关键需求。

简而言之,这带来了彻底的变革,所以我们很快就将注意力转向了如何最好地管理这种新发现的能力。

我们需要找到一种收集和共享我们积累的知识的好方法,并且让我们整个团队都能使用;我们还要开发出一个简单且易于重复的工作流程,让团队在从头至尾绘制图表时有一致性的体验。

在使用 R 制图时,我们采用了一种双管齐下的方法:将这些难题的解决方案放入了一个我们称之为 bbplot 的软件包以及我们团队的 R「食谱」——一份 ggplot 参考手册。现在我们将它们都开源了。

bbplot:https://github.com/bbc/bbplot

R cookbook:https://bbc.github.io/rcookbook/

bbplot 软件包有什么用?

这个软件包的开发目的是处理所有反复出现的障碍,简化在所有图表中添加对象的工作流程。

当我们刚开始使用 R 时,每次绘制图表时都必须调整每个单独的元素以将默认的 ggplot 风格改成我们内部的 BBC 风格。

将其保存为一个函数很明显是简化我们生活的第一要务。

我们还有很多类似的难题需要搞清楚:如何添加 BBC 标识,并且无论你想要导出的图表的纵横比如何,都能有合适的尺寸?如何将图表标题对齐到左上角?就是这类问题。

通过与视觉与数据新闻团队的设计师紧密合作,我们逐一解决了这一问题,将解决方案放入了易于重复使用的函数中。

下一步是将这些解决方案集中于一处,以提供一致的体验以及让所有一切都能尽可能简单地复用——这就是 bbplot。

之前我们讨论了需要加入到该软件包中的功能。我们是否应该创建制作特定图表类型的函数?预选择条形图的颜色以匹配我们的设计调色板好不好?

我们抵住了过于规范的诱惑,提出了适用于创建图表时可能出现的每个潜在问题的普适性解决方案。

对于这个软件包,我们的目标是仅包含绘制每张图表时所必需的函数,以简化工作流程,也不失灵活性——因为灵活性是使用 ggplot2 的一大实在优势。

我们想的是,我们为 ggplot2 默认外观到我们内部风格的改变而创建的函数 bbc_style 能够完成 90% 的工作,之后你可以对你的图表进行任何额外的调整,这和其它制图工具不一样——只会给你提供完成的图表,调整空间很小。

为什么要做一个「食谱」?

这个「食谱」是基于我们团队对 ggplot2 的集体知识综合而成的一份指南。这是一份参考手册,而不是教程,其中可能不会告诉你如何用 R 绘制你的第一张图表,但却包含了很多有用的小技巧。

我们的想法是,每当数据团队的成员解决一个特定问题时(比如在图中加入一条曲线箭头或突出显示条形图的一条),都能将代码加入到这个「食谱」中,从而节省你和同事下一次的时间。

在创建图表时,团队成员可以求助这个「食谱」,寻找答案和解决方案——比如如何绘制特定类型的图表(如 dumbbell chart)或如何在你的图中加入文本注释。另一方面,这个软件包可以自动处理你绘制每张图表时都需要的解决方案——比如添加 BBC 标识。

我们希望简化这些事情,但保留脚本带来的自由和控制能力也很重要。

我们学到了什么?

用这种方式处理图表有很多好处。

我们的重点是创建一个可重复的工作流程,这意味着我们无需在另一个程序中进行最后的润色,就能完全使用 R 创建出尽可能多的图表,而且将我们的知识集中到一起能让这些知识轻松地传递给不太习惯使用 R 的团队成员。

R 能够满足我们所有的制图需求吗?不是的。我们没将其用于交互式图表,因为 JavaScript 库 D3 更合适,而且有时候单独使用 Illustrator 等软件来调整注释比直接使用 R 的工作量少得多。但对于静态图表,我们发现 R 和 ggplot2 非常有用。

也许最重要的应该是团队合作:通过将我们的努力汇集一处和分享我们的技能,我们的知识获得了极大的增长。因为推进我们对 R 的使用并不是某一个人独自的责任,而是数据团队很多人共同实验,一起推行的。正因如此,我们收集的知识才得以快速增长。

教会其他人——意料之外的结果

使用 ggplot2 创建生产可用的图表的另一个关键优势原本并不在我们的必需计划中。

团队其他部分的同事的积极反馈让我们开发了一个为期六周的内部课程,以让人们尽快了解使用 R 的基本知识以及上手使用 bbplot 和「食谱」来绘制图表。

这个课程并不能在六次短课中教会人们有关 R 的一切,但能帮助完全不了解 R 的人熟悉这是什么。我们每周都会介绍一个新概念,与他们谈论它并为他们指出他们可以在对应的课程周学习的网络教程。我们为课程参与者创建了一个 Slack 频道,他们可以在这里互相讨论或寻求帮助。

在这六周之中,参与者会学习如何将数据载入 R、不同的数据类型、使用 tidyverse 软件包在 R 中进行一些非常基本的数据操作和分析、对 ggplot2 的介绍。在课程结束时,他们会面临一个挑战:用他们学习到的所有不同的技能、概念和代码,基于原始数据生成基本图表。

课程的最后是一场三小时长的研讨会,主题是 bbplot 软件包的工作方式以及如何有效使用我们的 R「食谱」。我们发现,为人们提供「食谱」以及他们应该在六周的时间里生成的图表,并不能人更轻松地学习 R——但心中有目标,知道这能在日常工作中提供助益,能让人更有动力去学习。

为我们的同事提供课程的一大主要成功在于激励了某些参与者继续使用 R 以及提升他们的 ggplot2 知识。

现在,他们很多人已经对某些事情的工作方式和原因有了更好的理解,而不只是复制我们为他们准备的代码。他们现在已能生成不属于「食谱」配方的图表,实际操作时所需的数据团队的帮助也越来越少。

内容来源:网络大数据

新闻来源:龙岗广电融媒

编辑:巫晓璇编审:郭泓斌监制陈宇翔

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...