京公网安备 11010802034615号
经营许可证编号:京B2-20210330
数据科学中“专业化”意味着什么
我作为一个数据科学家的经历跟我在书本和博客上所读到的根本不一样。我曾读到过为数字超级新星公司工作的数据科学家,他们听上去像是英雄,可以写出自动化(近乎有感知能力的)算法并不断地大量获取认知结果。我也读到过像百战天龙那样的数据科学家黑客,他们可以通过将他们周围有的任意原始材料拼凑出数据产品来拯救世界。
我的团队创建的数据产品并没有重要到可以评价大型的企业级基础设施。只是我觉得,投资超高效的自动化以及产品控制是不值得的。另一方面,我们的数据产品影响了企业中的重要决策,并且我们的努力是可测量,这一点十分重要。我们负担不起总是将所有的事情人为来做,但我们也需要高效的方法来为成千上万的人们共享结果。
现实中大部分还是 “常规”的数据科学家。我们比黑客们更有组织但是并不需要一个超级英雄般的数据科学老巢。我们一组人聚在一起进行思维碰撞,我们在此对于写出稳定的代码的最佳实践进行头脑风暴。这篇文章是对这次对话的一个总结,并且试图将我们的知识收集起来,取其精华至于一处。
如何变得专业化
数据科学家需要具备一些软件工程的技能,只不过并不是一个专业的软件工程师所需要的所有技能。我将具备必要的数据产品工程技能的数据科学家称为专业的数据科学程序员。专业并不是指类似一个证书或者多少小时的经验,我所指的是方法上的专业性。专业的数据科学程序员在他们建立数据产品的过程中是可以自我改正的。他们有着常见的策略来识别工作中的问题并纠正错误。
专业的数据科学程序员不得不将一个假说用一个可以测试的程序来表达出来。数据科学编程在软件工程中是独特的,这是因为数据科学家所处理的那些问题类 型。巨大的挑战在于数据科学本质就是实验性的。这些挑战经常是困难的,数据是混乱的。对于很多这类问题,并没有已知的解决方案和策略,通往解决方案的路是前所未有的,可能的解决方案都是步步为营取最优来得出的。在下面的内容中,我会介绍一个规范的、有生产力的试错的常见策略:将问题分成多个小步骤,分别尝试解决方案,在过程中一直做出纠正和改进。
像专业人士一样思考
为了成为一个专业的数据科学程序员,你必须了解比系统是如何构造的更多。你必须知道如何设计一个解决方案,在你有一个解决方案时你必须能够识别出 来,你也必须在你没有完全理解你的方案时有所察觉。最后一点是你必须能够自我纠错。当你识别出你方法中的概念差异的时候,你能够自己将其完善。为了以一个你可以自我纠错的方式来设计数据科学解决方案,我发现依照以下基本步骤是很有用的:观察、理解、想象以及展示。
第一步:观察。从扫描环境开始。做背景研究并对所有可能与你试图解决的问题有关的细枝末节有所了解。以尽量宽广的视野来看待你的问题。尽量多的发现场景并且收集各类不同的信息。
第二步:理解。将你发现的各种信息碎片抽象成符合黑板模式的元素。在这个阶段,你正在将问题中的元素转化为有意义的技术性的概念。理解问题是为可行的设计奠定基础的关键步骤。
第三步:想象。根据你理解的技术概念,想象一些可以使你往目标更近一步的实现。如果你不能想象出一个实现,那么你可能在你观察问题的时候错过了什么。
第四步:展示。首先将你的解决方案解释给自己听,然后是你的伙伴,然后是你的老板,最后是你的目标客户。每一次解释只需要以传达到你的观点的正式程 度即可:一次饮水机旁的短暂谈话,一封电子邮件、一次15分钟的散步。这是在成为一个自我纠错的专业数据程序员的过程中最重要的常规实践。如果你的方案有任何漏洞,那么他们将会在你尝试解释的时候发现它。花点时间来填充这些沟通代沟,并且确保你可以恰当地解释问题和针对它的解决方案。
像专业人士一样设计
创建和发布一个数据产品的活动是多样且复杂的,但是,一般来说,你将要做的会在阿利斯泰尔克罗尔(Alistair Croll )描述的大数据供应链中所包含。
由于数据产品依照一个范式(实时、批量或者两者的混合)来执行,你很有可能发现你自己正在一个数据供应链活动和一个数据范式的整合之中:注入和清理 批量更新的数据,建立一个算法来分析实时数据,将批处理的结果进行共享等。幸运的是,黑板架构模式给予了我们一个基础的蓝图来应用良好的软件工程应对这些场景。
黑板模式
图片由Jerry Overton提供
黑板模式告诉我们通过将整个任务进行划分来找到一系列更小的自包含的子任务的方式来解决问题。每一个子任务将你的假说转化为一个更容易解决或是解法已知的假说。每一个任务逐渐改进解决方案,并且理想的情况下通向一个可行的解决方案。
数据科学被工具所淹没,每一个都有其独特的优点。生产力是很重要的,我喜欢让我的团队选择任何他们最熟悉的工具。使用黑板模式使得从一系列不同的技 术来构建数据产品变得可行。算法之间的协作通过共享数据仓库来发生。每一个算法可以获取数据,将它们作为输入并且将结果返回给数据仓库为其他的算法作为输入。
最后,所有的算法都通过使用单个代表用来解决问题的启发者的控制组件来互相协作。控制器是你已经选择的解决问题的策略的实现。这是最高层面的对问题 的抽象和理解,这是由可以交互的并且决定所有算法顺序的技术所实现的。控制器可以是像一个cron的定时任务或者脚本一样的自动化组件。或者可以是人工 的,按照顺序执行不同步骤。但总体来说,这是解决问题的根本策略。这是一个你可以从头到尾了解问题解决方案的地方。
这一基本的方法已被证明在构建必须通过不完全数据解决不确定的、假设的问题的软件系统时是有用的。最棒的一部分是它使得我们通过确定的部分在不确定 的问题上获得进展。不幸的是,我们并不保证你的努力真的一定会解决问题。你最好尽早知道如果你走的路是不起作用的。你需要通过你实现系统的顺序来完成。
像专业人士一样构建
你不一定非要以固定的顺序来构筑数据产品的元素(例如,先建立数据仓库,然后是算法,然后是控制器)。专业的方法是按照最高的技术风险来构建。从最高风险的元素先开始。一个元素会因为很多原因成为技术风险。最有风险的部分可能是那个有着最高工作负载的或者是你最不了解的部分。
你可以通过专注于单个元素然后解决其他的方式以任意顺序构建组件。例如,如果你决定从构建算法开始,无视数据输入并且定义一个临时点来写入算法输出。
图片由Jerry Overton提供
然后,以技术风险高低的顺序实现数据产品:风险最高的元素最先开始。专注于一个特定的元素,无视其他的,稍后再替换它们。
这里的关键是以小块的方式构建并执行:以你理解的小步骤来写算法,一个数据源一次的方式构建数据仓库,以及一个算法执行步骤一次的方式构建你的控制器。目标是总是有一个可以工作的数据产品,只不过它只有到最后才是功能完备的。
专业人士的工具
每一个专业人员需要有质量的工具。有太多的选择可以使用。下面列出了一些公认最常用的工具,我附上了链接使得你们可以了解更多信息:
D3.js: D3.js (或者D3, 数据驱动文档) 是一个JavaScript 库,旨在在浏览器中建立动态的可交互的数据可视化。它利用了广泛被实现的SVG, HTML5以及 CSS 标准。
版本控制:
GitHub: GitHub 是一个基于网络的Git仓库服务,它提供了所有的Git的分布式修订控制和源代码管理功能,也添加了它自己的功能特性。GitHub提供了一个基于网络的图形化界面和移动端的桌面应用。
编程语言:
R: R 是一个针对统计计算和图形化的编程语言及软件环境。R语言在统计学家和开发统计软件和数据分析的数据挖掘者中被广泛使用。
Python: Python 是一种被广泛使用的通用的高层次的编程语言。它的设计理念强调代码的可读性,它的语法允许编程人员用比C++和Java更少的代码来表达概念。
Scala: Scala 是一种针对通用软件应用的对象函数式编程语言。Scala有着对函数式编程的全面支持,以及一个非常健壮的静态类型系统。这使得用Scala写的程序非常简洁因而比其他通用编程语言尺寸更小。
Java: Java 是一种通用的计算机编程语言,它是并发的、基于类的、面向对象的、特别为了减少实现依赖而设计的。它旨在让应用“一次编写,随处执行”
Hadoop生态系统:
Hadoop: Hadoop 是一个用Java开发的开源的软件框架,为了在基于商业硬件的计算机集群上进行分布式存储和分布式处理海量数据集。
Pig: Pig 是一个为了创建Hadoop之上MapReduce程序的高层平台
Hive: Hive 是一个在Hadoop之上构建的数据仓库基础结构,旨在提供数据汇总、查询和分析。
Spark: Spark的内存原语操作为某些应用提供了高达100倍的性能提升
结束语:本文来自哪里
这篇文章起始于一次偶然的关于我的团队中正面临的生产力问题的讨论。我们最终将问题追溯到技术平台和我们的软件工程知识。我们需要在我们的软件工程实践中补上漏洞,但是每次的经验都太抽象或是太细节(对于专业的软件开发者来说)。我是一个由外至内数据科学方法的拥护者,我决定主办一个开放的群聊来讨论这些事。
我们获得了相当大的参与度:30分钟之内有179条发布;600个观点,以及28000多个访问。我主持了讨论并基于最有影响力的答案总结了我们的发现,然后我将那个总结作为本文的基础。我想要感谢所有那些参加了这一过程的人们,并花一些时间来认可他们的贡献。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在电商行业精细化运营时代,流量红利逐步消退,粗放式投流、广撒网营销模式已无法适配市场竞争需求。依托用户点击、加购、收藏、 ...
2026-09-17在数据可视化与数据分析工作中,图表是将零散数据转化为直观业务规律的核心工具。不同图表拥有专属的数据逻辑与分析维度,能够从 ...
2026-09-17 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“哪些指标在所有行业都适用”“哪些指标只对电商有意义”“二者如何搭 ...
2026-09-17在企业数字化运营、业务流程管理与精细化管控体系中,流程运营是串联各项业务环节、保障工作落地、提升运转效率的核心载体。无论 ...
2026-09-16在数据分析与统计学研究中,卡方检验是分析分类变量关联性与差异性的重要方法,广泛应用于市场调研、行为统计、社会调查、商业数 ...
2026-09-16 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“什么是指标”“指标和维度有什么区别”“如何定义指标值的计算规则和 ...
2026-09-16CDA数据分析师 出品 作者:李诗怡 定义: 用户增长核心分析框架,刻画用户从接触产品到自发推荐的全生命周期,五个递进环节构建 ...
2026-09-15在数字化营销与精细化用户运营时代,企业传统的广撒网式营销模式成本高、转化率低,已无法适配精准商业竞争需求。客户画像作为大 ...
2026-09-15 很多数据分析师精通描述性统计,能熟练计算均值、中位数、标准差,但当被问到“用500个样本如何推断10万用户的真实满意度” ...
2026-09-15在MySQL数据库数据查询与数据分析中,GROUP BY与ORDER BY是使用频率极高的核心关键字。二者语法结构相似,常搭配使用,但核心功 ...
2026-09-14随着数字化治理、智慧运营、数字孪生技术的普及,数字体征成为衡量业务状态、系统运行、城市治理与企业经营健康度的核心体系。数 ...
2026-09-14 很多数据分析师沉迷于复杂的模型和算法,却忽略了数据分析的一项基础能力——描述性统计。事实上,大量商业分析问题,用描述 ...
2026-09-14在MySQL数据库运维与开发实践中,经常出现一种典型现象:数据库实际存储的数据量很小,数据表条数少、文件体积低,但服务器整体 ...
2026-09-11 很多数据分析师能熟练计算均值、标准差,但当被问到“总体和样本有什么区别”“参数和统计量有什么关系”“数据级别的高低如 ...
2026-09-11CDA数据分析师 出品 作者:李诗怡 定义: 将同一时间段内因具备相同属性或共同经历的用户划分为群体,分析其留存与生命周期价值 ...
2026-09-11在零售、商超、餐饮、线下门店等实体商业运营中,客流与销售额是衡量门店经营状态的两大核心指标。销售额是门店经营的最终结果, ...
2026-09-10在数据可视化体系中,柱形图是最基础、应用最广泛的图表类型,其中**累计柱形图(堆积柱状图)**是兼顾整体总量与内部结构的核心 ...
2026-09-10 许多数据分析师精通Excel函数和SQL查询,但当面对一张上万行的销售明细表,要快速回答“哪个地区销量最高”“哪款产品增长最 ...
2026-09-10在Python Pandas数据分析中,DataFrame是承载结构化数据的核心载体,数据清洗、数据修正、条件赋值、字段更新等实操场景,都离不 ...
2026-09-09 很多数据分析师掌握了Excel函数、会写SQL查询,但当被问到“数据从哪里来”“数据加工有哪些步骤”“如何使用分析工具连接数 ...
2026-09-09