作者 | Phoebe Wong
译者 | 陆离
修正 | Jane
前语
怎么才干成为一名实在的“全栈(full-stack)”数据科学家?需求了解哪些常识?把握哪些技术?
归纳来讲,一名全能型选手要把数据科学进程中从数据存储到把猜测模型投入正式出产的每一步都能 hold 住。
一般来说,咱们在学习进程中更重视机器学习或深度学习技术的理论学习与运用,数据办理方面的常识往往是“事后诸葛亮”;数据科学专业的学生们对怎么处理、清洗数据等建模技术重视较多,疏忽了怎么制造“数据腊肠”。
可是在实在工程环境中,有近 80%的作业都在环绕“怎么从各种来历获取原始数据”这一进程,从而为后续树立模型做准备;此外,企业级的项目一般触及许多数据,本地核算机并不具有处理这些数据的才干。
因而整个建模进程一般会在云上进行,大多运用和数据库也会保管在其它当地的数据中心服务器上,数据办理则成为数据工程团队十分关怀的作业。
NIST大数据分类 (来历:WikiCommons)
因为许多数据科学家对数据存储和根底设施了解甚少,影响了他们在作业中做出正确决议计划的才干。
而这篇文章就旨在供给一个线路图,从数据库类型、数据存储和处理的方位和办法,到其时的商业挑选,给想成为一名数据科学家的开发者们同享必备的数据办理常识。
根据此文触及面广,体系常识全面,对初级数据科学家、数据科学专业的学生、想转行进入数据科学范畴的开发者们都很适宜;对从业经验丰富,已深耕此范畴的开发者来说,内容偏根底,不过咱们可以根据此文进行更深化地研讨,欢迎咱们互动沟通,同享你的观念和定见。
非结构化数据和大数据东西的鼓起
IBM 305 RAMAC (来历:WikiCommons)
实际上,数据科学的实质便是数据存储。在进入数字年代之前,数据存储在咱们的大脑中、陶片或纸上,这使得数据的搜集和剖析极端耗时。
1956年,IBM推出了第一台带有磁盘的商用核算机,305 RAMAC。整个单元需求30英尺x 50英尺的物理空间,分量超越一吨,租一个这样的单元,每个月花费 3200 美元,可存储大约5MB的数据。
在随后60年的时刻里,DRAM每GB价格从1965年的26.4亿美元大幅下降到2017年的4.9美元。数据存储设备不只价格极端低价,而且密度更大、体积更小。
在305 RAMAC的一个磁盘中,每平方英寸存储100 比特的数据,比照之下,今日的一个一般磁盘,每平方英寸存储数据可超越1万亿比特。
数据存储的本钱和规划的大幅下降正是现如今让大数据剖析成为或许的首要原因。凭仗超低的存储本钱,建造数据科学根底设施,从海量数据中搜集和提取有用的信息,这也成为了企业盈余的途径。
跟着不断出产和传输用户数据的物联网(IoT)设备的许多呈现,企业们正在搜集越来越多的用户行为数据,并发明许多的高容量、高速度和高多样性的信息财物(或称为“3V大数据”)。
这些行为(如电子邮件、视频、音频、谈天信息、交际媒体帖子)大多发生了非结构化数据,这些数据占当今企业数据总量的近80%,添加速度是在曩昔十年中结构化数据的两倍。
图中显现了在2017年存储了125 EB的企业数据,80%对错结构化数据 (来历:Credit Suisse)
海量数据的添加极大地改变了数据存储和剖析的办法,因为传统的东西和办法不具有处理“3V大数据”的才干。跟着新技术的开展,有才干处理不断添加的数据量和数据品种,而且速度更快,本钱更低。
这些新的东西还对数据科学家的作业办法发生了深远的影响,使他们可以经过数据剖析,以及开发前看起来不或许的运用程序来完结海量数据的变现。下面罗列的是咱们认为每个数据科学家都应该知道的大数据办理范畴的立异办法。
联系数据库和NoSQL
联系数据库办理体系(RDBMS)呈现于20世纪70年代,它将数据存储在具有行和列的表里边,运用结构化查询言语(SQL)进行查询和保护数据库。联系数据库基本上便是多个表的调集,每个表中都有一个形式(schema),形式严厉界说了所存储数据的特点和类型,以及标识用于拜访的特定行或列的键。
RDBMS曾经由Oracle和IBM所操控,但现在,呈现了许多开源的数据库体系,如MySQL、SQLite和PostgreSQL等等,也相同很受欢迎。
上图显现了RDBMS的受欢迎度排名 (来历:DB-Engines)
因为一些特性十分受欢迎,联系数据库在商业范畴中找到了一席之地,而数据完好性是联系数据库中最重要的特性之一。
RDBMS须满意原子性、一致性、阻隔性和持久性(ACID)的要求,它运用一些束缚来保证所存储数据是牢靠的、精确的,这就使它们成为监测和存储一些比方帐号、订单和付款等数据信息的抱负挑选。
可是,这些束缚也带来了昂扬的价值。因为形式和数据类型的约束,RDBMS在存储非结构化或半结构化数据方面的体现十分糟糕。呆板的形式也使得RDBMS在创立、保护和晋级等方面的本钱变得更高。
树立RDBMS需求用户预先具有特定的用例,对形式的任何更改一般都是十分困难和耗时的。别的,传统的RDBMS被规划用在一个单机上运转,这意味着它们在处理许多数据时的速度要慢得多。
在保证ACID特性的一起,水平扩展RDBMS(分库分表)也是一项十分具有应战性的使命。一切的这些特点使得传统联系型数据库办理体系无法处理现如今的大数据。
截止到2000年,一些互联网公司开发了许多的非联系型(NoSQL)数据库,因为已有的 RDBMS 或许无法长期地支撑一个成功的互联网公司(下图是一个关于Facebook在数据量开端添加之后怎么应对MySQL约束的比方)。
在其时没有任何已有处理方案的状况下,这些互联网公司发明了新的办法和东西来处理搜集到的许多非结构化数据:谷歌发布了GFS、MapReduce和BigTable;亚马逊发布了DynamoDB;yahoo发布了Hadoop;Facebook发布了Cassandra和Hive;linkedIn发布了Kafka。
其间一些公司开放了他们的源代码,一些公司则发布了他们具体的研讨规划论文,这也就促进了各种新数据库与新技术的激增,而NoSQL数据库成为了职业中的一个首要的参与者。
上图显现了自2000年以来各种数据库体系激增的状况。来历:Korflatis et. al (2016)
NoSQL数据库与形式无关,它供给了存储和操作许多非结构化和半结构化数据所需的灵敏性。用户不需求知道在创立数据库的时分将存储哪些类型的数据,体系可以习惯数据类型和形式的改变。
NoSQL数据库可以跨节点分发数据,它一般具有更高的水平伸缩性和分区容错性。可是,这些功用优势一起也还伴跟着本钱的开支。NoSQL数据库不符合ACID特性,因而,数据一致性也无法得到保证。
相反,它们供给了“终究一致性”:当旧数据被掩盖时,它们将回来暂时有些收支的作用。
例如,当人们一起查找同一个词的时分,谷歌的查找引擎索引不能更新这个词的相关数据,因而它在咱们查找时不会回来给咱们最新的数据作用,但它会回来最适宜的作用。
虽然这个特性在肯定需求保证数据一致性的状况下(如金融买卖)不太适宜,但关于那些需求功率而不是精确度的使命的场景,它却十分的适宜。
现在,NoSQL分为几个不同的类别,每个类别都有其特定的作用。
键值存储,如Redis、DynamoDB和Cosmos DB,只用于存储键值对,并供给检索与已知键相关联的值的基本功用。当速度要素很重要的时分,它们在简略的数据库形式下履行的功率最高。
宽列存储,如Cassandra、Scylla和Hbase,将数据存储在列族或表中,并用来为大型散布式体系办理PB级的数据量。
文档存储,如MongoDB和Couchbase,以XML或JSON格局存储数据,文档称号作为主键,文档内容作为值。文档可以包含许多不同的值类型,而且可以嵌套,使它们特别适用于办理散布式体系的半结构化数据。
图形数据库,如Neo4J和Amazon Neptune等将数据表明为相关联节点或方针的网络,以便于数据的可视化和图形化剖析。图形数据库关于剖析异构数据点之间的联系特别的有用,例如防诈骗或Facebook的老友联系图。
MongoDB是现在最盛行的NoSQL数据库,它为一些一向在运用传统RDBMS办法处理非结构化数据的企业带来了巨大的协助。
这里有两个职业比方:MetLife花费了多年的时刻,企图在一个可以处理其一切保险产品的RDBMS上树立一个会集式的客户数据库,之后,一个Hackathon的人在数小时内就用MongoDB创立了一个数据库,该数据库在不到90天就投入了出产。
YouGov是一家每小时搜集5GB数据的市场调查公司,它将一切的数据从RDBMS搬迁到了MongoDB,存储空间节省了70%。
数据仓库、数据湖和数据沼地
跟着数据源的不断增多,运用多个数据库进行数据剖析的作业变得功率低下、本钱昂扬。在2000年之后,呈现了一种称为数据仓库(Data Warehouse)的处理方案,它能将企业一切数据库中的数据会集起来。
数据仓库经过创立一个来自不同数据源(内部和外部)数据的存储库,支撑从操作体系到剖析和决议计划体系的数据流。
在大多数的状况下,数据仓库是一个联系型数据库,它存储了为搜集事务信息而优化的已处理数据。
它搜集了来自买卖体系和事务运用体系的具有预订结构和形式的数据,这些数据一般用于生成运营陈述和剖析作用。
可是,因为进入数据仓库的数据需求在存储之前就进行处理,还存在着许多的非结构化数据,这或许需求消耗许多的时刻和资源。
因而,企业开端保护数据湖(Data Lakes),它能以任何规划存储企业的一切结构化和非结构化的数据。创立一个能存储原始数据的数据湖,无需一开端就界说数据结构和形式。
数据湖答运用户履行剖析使命,而无需将数据搬迁到独自的剖析体系上,从而使企业可以从曾经不能用于剖析的新数据源中取得信息,例如,经过运用日志文件、拜访数据、交际媒体和物联网设备中的数据来创立机器学习模型。
经过随时都可以剖析企业一切的数据,数据科学家们可以答复更多的新事务问题,或许用新数据处理旧问题。
上图是数据仓库与数据湖的比照(来历:AWS)
数据湖的体系结构面对的一个常见应战是,假如没有适宜的数据质量和数据办理结构,当数以TB计的结构化和非结构化的数据流入数据湖时,往往很难对其内容进行分类和排序。
数据湖就变成了数据沼地(Data Swamps),因为它们变得太乱了,无法运用。许多安排现在要求进行更多的数据办理和元数据办理。
散布式和并行核算:Hadoop、 Spark和MPP
虽然企业对数据存储和核算的需求在曩昔几十年里日新月异地添加,但传统硬件的开展还远远跟不上要求。
企业数据不再适宜规范存储,处理大多数的大数据剖析使命所需求的核算才干或许需求数周、数月,或许底子不或许在一般核算机上完结。
为了处理这一问题,许多新技术现已开展到多台核算机协同作业,将数据库分发给数千台产品服务器来进行处理。
当多个核算机连接起来构成一个网络并共同完结同一使命的时分,这些核算机就构成了一个集群。
一个集群可以看作是一台核算才干强壮的核算机,它可以运用一般的硬件,十分低价的本钱,但可以明显地进步功用、可用性和可扩展性。
Apache Hadoop是散布式数据根底设施的一个比方,它运用集群来存储和处理海量的数据,并支撑数据湖体系结构。
数据库技术的开展进程(来历:Business Analytic 3.0)
当你想到Hadoop的时分,就想想“数据分发”。Hadoop由三个首要的部分组成:Hadoop散布式文件体系(HDFS),它是一种跨多个(散布式)物理硬盘来存储和监测数据的办法;
MapReduce,是一种跨散布式处理器处理数据的结构;还有另一个是资源协商者(YARN),这是一个集群办理结构,它在散布式体系上和谐资源,如CPU的巨细、内存的多少和网络带宽分配等等。
Hadoop的处理层是一个特别值得注意的立异:MapReduce运用一种两步核算的办法,用于以一个牢靠的、容错的办法处理散布在大型商用集群中的大数据集。
第一步是将数据分发到多台核算机(Map)上,每台核算机对分发的数据片履行并行核算。第二步是以成对的办法兼并这些核算作用(Reduce)。
谷歌在2004年宣布了一篇关于MapReduce的论文,2006年的时分,在开源Apache环境中完结了MapReduce的一个Yahoo程序员看到了这篇论文,得认为每个企业供给了运用商业硬件来存储史无前例的数据量的才干。
虽然这个主意有许多开源的完结,但Google的MapReduce却一向保持着优势,有点像Jacuzzi或Kleenex。
Hadoop是为迭代核算而规划的,它在一次操作中从磁盘扫描许多的数据,将处理使命分发到多个节点,并将作用回来并存储到磁盘上。
运用Hadoop和Hbase,查询ZB级的索引数据可以在10-12秒内完结,而在传统数据仓库环境中运转则需求4个小时。
Hadoop一般用于生成杂乱的剖析模型或海量数据存储的运用程序,例如回忆性和猜测性剖析、机器学习和形式匹配、客户细分和客户丢掉剖析,以及活动归档等等。
可是,MapReduce用于处理批量的数据,因而它不适宜处理实时数据。Apache Spark是在2012年发布的,可以用来添补这一空白。Spark是一种并行数据处理东西,它经过在内存中处理数据来进步运转速度和功率。
它与MapReduce的原理相同,但经过在内存中完结大部分的核算作业,而且仅在内存已满或核算完结的时分才会写入磁盘,因而,它的运转速度会快得多。
这种内存核算答应Spark“在内存中运转程序比在Hadoop MapReduce中快100倍,比在磁盘上快10倍”。
可是,当数据集太大而导致内存不足(一般是数百GB以上)的时分,Hadoop MapReduce或许比Spark体现的更好。
Spark还具有一套强壮的数据剖析库,涵盖了广泛的功用:用于SQL的Spark SQL和结构化数据,用于机器学习的MLib,用于流式核算的Spark Streaming和用于图形剖析的GraphX。
因为Spark的重点是核算,所以它没有自带的存储体系,而是运转在各种存储体系之上,如 Amazon S3、Azure Storage和Hadoop’s HDFS。
在MPP体系中,一切的节点都是互连的,数据可以经过网络进行交流(来历:IBM)
Hadoop和Spark并不是仅有运用集群处理海量数据的技术。另一个盛行的散布式查询处理办法称为大规划并行处理(Massively Parallel Processing ,MPP)。
类似于MapReduce,MPP跨多个节点分发数据处理使命,而且节点运用愈加快速的并行处理办法。
但与Hadoop不同的是,MPP是在RDBMS中运用的,并运用“无同享”式的体系结构,每个节点运用多核处理器处理自己的数据片,使它们比传统的RDBMS快许多倍。
一些MPP数据库,如Pivotal Greenplum,具有老练的机器学习库,答应进行库内数据剖析。
可是,与传统的RDBMS相同,大多数MPP数据库不支撑非结构化数据,乃至结构化数据也需求经过一些处理之后才干习惯MPP的根底结构。
因而,为MPP数据库设置数据管道需求花费额定的时刻和资源。
因为MPP数据库是支撑ACID特性的,而且比传统的RDBMS履行速度要快得多,因而它们一般用于高档企业数据仓库处理方案,如Amazon Redshift、 Pivotal Greenplum和 Snowflake。
作为一个职业事例,纽约证券买卖所每天接纳4~5TB的数据量,并进行杂乱的剖析、市场调查、容量规划和监测。
该公司一向在运用一个简直无法承当数据处理作业的传统数据库体系,它需求数小时才干加载完结,查询速度也十分的差。搬迁到MPP数据库后,他们每日的运转数据剖析时刻减少了8个小时。
云服务
另一个彻底改变的企业大数据剖析才干的立异是云服务的鼓起。
在云服务呈现之前,企业不得不从软件和硬件的供货商那里购买本地数据存储软件、设备和数据剖析处理方案,这一般要付出永久性的软件答应费用以及每年的硬件保护费和技术服务费。
除此之外,还有电力、空调、网络安全、容灾保护、IT技术人员等方面的本钱,用于建造和保护内部根底设施。
即便在技术上有才干存储和处理大数据的时分,大多数企业也会发现海量数据的存储和处理的本钱太高了。
别的,扩展内部根底设施还需求一个规划和收购的进程,这需求很长的时刻来施行,并需求许多的资金预算。许多潜在有价值的数据搜集和剖析或许就因而被抛弃了。
云服务的供给商:例如根底设施即服务(IaaS)和存储即服务(SaaS)(来历:IMELGRAT.ME)
当云服务在2000年底被引进的时分,内部自建形式开端迅速地失去了市场份额——在曩昔十年里,全球云服务市场份额每年添加15%。
云服务渠道供给对各种服务(从虚拟核算到存储根底设施再到数据库)的定制,这些服务在线经过用多少付多少的办法供给,为用户灵敏快速地拜访和低本钱的数据存储,以及为虚拟核算资源供给了便当条件。
云服务供给商担任其一切硬件和软件的收购和保护,他们一般具有巨大的服务器网络和技术支撑团队来供给牢靠的服务。
许多企业在运用之后发现,他们可以经过云服务明显下降运营本钱和进步运营功率,而且可以运用现成的云资源和内置的可伸缩性更快地开发和出产产品。
不只没有了自建根底设施的巨大本钱和周期,云服务还避免了树立大数据渠道的费事,并有用地使中小企业的大数据剖析作业愈加的灵敏。
这里有几种云服务模型,其间公有云是最常见的。
在公有云中,一切硬件、软件和其它的支撑根底设施都由云服务供给商自行树立和办理。用户与其他的“云租户”同享云根底设施,并可以经过Web浏览器拜访他们的服务。
而具有特别安全需求的安排一般会运用私有云,如政府机构和金融机构等。在私有云中,服务和根底设施仅供给给一个安排运用,并在私有网络上进行保护。私有云可所以本地的,也可以由第三方服务供给商保管。
混合云将私有云与公有云结合起来,使安排可以一起取得两者的优势。在混合云中,数据和运用程序可以在私有云和公有云之间进行传输和拜访以取得更大的灵敏性:例如,公有云可用于高拜访量、低安全性的数据,而私有云可用于灵敏的、事务要害型的数据,如财务陈述、金融数据等等。
多云模型则触及到多个云渠道,每个渠道都供给特定的运用服务。多云可所以公有云、私有云和混合云的组合,以完结安排的方针为意图。安排一般挑选多云是为了满意一些特定的事务,以及方位和时刻上的需求,并避免供货商的局限性。
事例研讨:构建端到端的数据科学根底设施
规划一个可行的数据产品,不只仅是用Scikit-Learn(Scikit-learn是专门面向机器学习的Python开源结构)构建一个机器学习模型,还要对其进行重复优化,并加载到服务器上。
不同数据环境下的机器学习包(来历:Kosyakov (2016))
它需求了解企业生态体系的一切部分是怎么协同作业的,从数据流入的方位和办法、数据处理和转化的环境、企业可视化和展示数据的常规,以及怎么将模型输出转化为某些其它的企业运用的输入。
它的首要方针包含创立一个易于保护的进程,在这个进程中,模型可以被迭代,功用是可仿制的,模型的输出可以可视化地展示出来并能让老板们轻松地了解,以便他们能做出愈加正确的事务决议计划。
完结这些方针需求挑选正确的东西,并了解同行们都正在做什么以及做出了什么作用。接下来,咱们用一个场景来加以阐明。
假定你刚刚被一家休假引荐App的草创公司聘为首席数据科学家,该公司估计将搜集数百GB的关于用户每天的数据,包含结构化的(客户资料、温度、价格和买卖记载)和非结构化的(客户的帖子、谈论和图片文件)。
你的猜测模型需求每周都从头练习新的数据,并根据需求即时提出合理化建议。想让自己的这款 APP 运用能大受欢迎,数据的搜集、存储和剖析才干有必要是可扩展的。
你将怎么规划数据处理进程和模型产品化呢?你需求什么样的东西来完结作业呢?已然这是一家草创公司,而你是数据科学家中的首席,或许也是仅有的数据科学家,那么就只能由你来做这些决议。
首要,你有必要了解怎么设置数据管道,管道接纳来自数据源的原始数据,并进行数据处理,然后将处理过的数据写入数据库。
抱负化的数据管道具有较低的事情推迟(在搜集到数据后可以当即进行数据查询)、可伸缩性(可以在产品扩展时处理海量数据)、交互式查询功用(支撑批量查询和较小规划的交互式查询,使数据科学家可以查找表和形式)、版别操控功用(在不关闭管道和丢掉数据的状况下对管道进行修正的才干);
监控功用(数据一旦中止输入管道应促发警报)、可测验性(在不中止的状况下测验管道的才干)。
或许最重要的是它最好不要搅扰日常的事务操作,例如,假如你正在测验新的模型,从而导致数据库操作中止,则操作会回滚。
创立和保护数据管道一般是数据工程师的责任(本文对草创公司创立数据管道有一个更具体的概述),可是数据科学家至少也应该了解这个进程和它的局限性,以及对处理过的数据进行剖析的东西。
接下来,你有必要决议企业是要自建根底设施仍是运用云服务。关于草创公司来说,首要使命是在不添加有限资源的状况下扩展数据搜集量。
如前面所说,自建根底设施需求巨大的前期投入和保护本钱,因而云服务往往是草创公司更好的挑选。
云服务答应自在扩展来满意需求,而且只需求很少的保护作业,这样你的小团队就可以专心于产品规划和数据剖析作业了,而不是对根底设施的办理。
上图显现了一些供给根据Hadoop处理方案的供货商 (来历:WikiCommons)
为了挑选一个云服务商,你有必要先确认要剖析的数据,然后再确认最适宜这些数据类型的数据库和根底设施。
因为在数据剖析的管道傍边既有结构化数据,也有非结构化数据,所以你或许期望一起树立数据仓库和数据湖。
数据科学家需求考虑的一个重要问题是,存储层是否支撑构建模型所需求的大数据东西,以及数据库是否供给了有用的库内剖析功用。
例如,Spark的MLlib等一些机器学习库不能有用地将数据库作为首要接口运用,有必要先从数据库中把数据下载下来,然后才干对其进行操作,这或许会跟着数据量的添加而越来越耗时,而当你不得不定期从头练习模型的时分,这就将会成为功用的瓶颈。
关于云端的数据科学,大多数云服务供给商正在尽力开发他们的本地机器学习功用,这就答应数据科学家可以运用存储在自己渠道上的数据来轻松构建和布置机器学习模型(亚马逊有SageMaker,谷歌有BigQuery ML,微软有 Azure Machine Learning)。
可是这些东西集现在依然处于开发完善阶段,而且功用上经常不太完好,例如,BigQuery ML现在只支撑线性回归、二元逻辑回归和多类逻辑回归、K-means聚类和TensorFlow模型导入。
假如决议运用这些东西,你有必要完好地测验一下它们的功用,以保证能完结你的使命。
挑选云服务供给商时要考虑的另一个重要问题是产品供货商的挑选。假如挑选专有的云数据库处理方案,则很或许无法拜访本地环境中的运用或数据,而替换供货商则需求搬迁到其它的数据库体系,这很或许会发生昂扬的本钱。
处理这个问题的一个办法是挑选支撑开源技术的供货商(这里是Netflix解说为什么运用开源软件的理由)。
运用开源技术的另一个优势是,它们往往会招引更多的用户,这意味着可以更容易地找到了解你的根底架构并具有相关作业经验和技术的技术人员。
还有别的一个办法,便是挑选一个第三方供货商(如Pivotal Greenplum和Snowflake),他们运用一些首要的云服务供给商作为数据存储端来供给云数据库处理方案,这将答应你把数据一起存储在多个云渠道上,假如这适宜你的草创公司的需求。
最终,因为你是这家草创公司的首席数据科学家,而且期望公司可以开展壮大,那么你有必要树立一个强壮的云服务办理机制来保护你的云安全,避免数据的丢掉和走漏,比方办理数据拜访权限、保护各种数据接口和API。当然你还期望完结最佳的数据办理作用,以保护数据的质量,并保证数据湖不会变成数据沼地。
正如咱们所看到的那样,在企业数据科学项目中调整的超参数的数量要比在机器学习模型中的多得多。咱们期望这个较高水平的概述能让你有爱好了解更多关于数据办理范畴方面的常识,能学到一些东西招引更多的开发者们成为数据工程师。
https://towardsdatascience.com/everything-a-data-scientist-should-know-about-data-management-6877788c6a42
【END】
热 文推 荐
你点的每个“在看”,我都仔细当成了喜爱