敏捷数据科学 - 快速指南



敏捷数据科学 - 简介

敏捷数据科学是一种将数据科学与敏捷方法论结合用于Web应用程序开发的方法。它关注数据科学过程的输出,适用于对组织产生影响的变革。数据科学包括构建描述研究过程的应用程序,包括分析、交互式可视化以及现在应用的机器学习。

敏捷数据科学的主要目标是:

记录和指导解释性数据分析,以发现并遵循通往引人注目的产品的关键路径。

敏捷数据科学遵循以下原则:

持续迭代

此过程涉及持续迭代,创建表格、图表、报告和预测。构建预测模型需要多次迭代特征工程,包括特征提取和洞察力生成。

中间输出

这是生成的输出跟踪列表。甚至可以说失败的实验也有输出。跟踪每次迭代的输出将有助于在下次迭代中创建更好的输出。

Learn Data Science in-depth with real-world projects through our Data Science certification course. Enroll and become a certified expert to boost your career.

原型实验

原型实验涉及分配任务并根据实验生成输出。在给定的任务中,我们必须迭代以获得洞察力,这些迭代可以最好地解释为实验。

数据集成

软件开发生命周期包括不同的阶段,数据对于以下方面至关重要:

  • 客户

  • 开发者,以及

  • 企业

数据集成为更好的前景和输出铺平了道路。

金字塔数据价值

Pyramid Data Value

上述金字塔价值描述了“敏捷数据科学”开发所需的层次。它始于基于需求的记录收集和单个记录的整合。在数据清洗和聚合之后创建图表。聚合数据可用于数据可视化。报表以适当的结构、元数据和数据标签生成。从顶部算起的第二层包括预测分析。预测层是创造更多价值的地方,但它有助于创建专注于特征工程的良好预测。

顶层涉及行动,有效地驱动数据的价值。“人工智能”是这一实施的最佳例证。

敏捷数据科学 - 方法论概念

在本章中,我们将重点关注称为“敏捷”的软件开发生命周期概念。敏捷软件开发方法有助于通过短迭代(1到4周)的增量会话构建软件,因此开发与不断变化的业务需求保持一致。

有12项原则详细描述了敏捷方法论:

客户满意度

最高优先级是关注客户,通过尽早并持续交付有价值的软件来满足他们的需求。

欢迎变化

在软件开发过程中是可以接受变化的。敏捷流程旨在运作以匹配客户的竞争优势。

交付

在1到4周内向客户交付可运行的软件。

协作

业务分析师、质量分析师和开发人员必须在项目的整个生命周期中通力合作。

激励

项目应该由一群积极主动的个人设计。它提供了一个支持团队成员的环境。

面对面交流

面对面交流是在开发团队内部以及向开发团队发送信息的最高效和最有效的方法。

进度衡量

衡量进度是帮助定义项目和软件开发进度的关键。

保持持续的节奏

敏捷流程专注于可持续发展。企业、开发人员和用户都应该能够与项目保持一致的步伐。

监控

必须保持对技术卓越和良好设计的持续关注,以增强敏捷功能。

简洁

敏捷流程保持一切简洁,并使用简单的术语来衡量未完成的工作。

自我组织团队

敏捷团队应该能够自我组织,并且应该独立于最佳架构;需求和设计源于自我组织的团队。

回顾工作

定期回顾工作非常重要,以便团队能够反思工作进展情况。及时回顾模块将提高绩效。

每日站会

每日站会是指团队成员之间的每日状态会议。它提供与软件开发相关的更新。它还指的是解决项目开发中的障碍。

每日站会是强制性的实践,无论敏捷团队如何建立,无论其办公地点如何。

每日站会的特点如下:

  • 每日站会的时间应大约为15分钟。不应延长更长时间。

  • 站会应包括关于状态更新的讨论。

  • 此次会议的参与者通常站着,目的是快速结束会议。

用户故事

故事通常是一个需求,它以简单的语言用几句话来表达,并且应该在一个迭代内完成。用户故事应包括以下特征:

  • 所有相关代码都应该有相关的签入。

  • 指定迭代的单元测试用例。

  • 所有验收测试用例都应定义。

  • 产品负责人定义故事时的验收。

Agile Scrum Model

什么是Scrum?

Scrum可以被认为是敏捷方法论的一个子集。它是一个轻量级流程,包括以下功能:

  • 它是一个流程框架,包括一组需要按一致顺序遵循的实践。Scrum 的最佳例证是遵循迭代或冲刺。

  • 它是一个“轻量级”流程,这意味着该流程尽可能精简,以在指定的持续时间内最大化生产性输出。

Scrum 流程以其与其他传统敏捷方法相比的独特流程而闻名。它分为以下三类:

  • 角色

  • 工件

  • 时间盒

角色定义了团队成员及其在整个过程中所扮演的角色。Scrum 团队由以下三个角色组成:

  • Scrum主管

  • 产品负责人

  • 团队

Scrum 工件提供了每个成员都应该了解的关键信息。信息包括产品详情、计划的活动和已完成的活动。Scrum 框架中定义的工件如下:

  • 产品待办事项列表

  • 冲刺待办事项列表

  • 燃尽图

  • 增量

时间盒是为每个迭代计划的用户故事。这些用户故事有助于描述构成 Scrum 工件一部分的产品特性。产品待办事项列表是用户故事的列表。这些用户故事按优先级排序,并转发到用户会议,以决定应该采用哪一个。

为什么需要 Scrum 主管?

Scrum 主管与团队的每个成员互动。现在让我们看看 Scrum 主管与其他团队和资源的互动。

产品负责人

Scrum 主管与产品负责人的互动方式如下:

  • 寻找技术以实现用户故事的有效产品待办事项列表并对其进行管理。

  • 帮助团队理解清晰简洁的产品待办事项列表项的需求。

  • 在特定环境中进行产品规划。

  • 确保产品负责人知道如何提高产品的价值。

  • 根据需要促进 Scrum 活动。

Scrum 团队

Scrum 主管与团队的互动方式多种多样:

  • 指导组织采用 Scrum。

  • 规划 Scrum 在特定组织中的实施。

  • 帮助员工和利益相关者了解产品开发的需求和阶段。

  • 与其他团队的 Scrum 主管合作,以提高指定团队 Scrum 应用的有效性。

组织

Scrum 主管与组织的互动方式多种多样。下面提到了一些:

  • 指导和 Scrum 团队与自我组织互动,并包含跨功能特性。

  • 在 Scrum 尚未完全采用或未被接受的领域指导组织和团队。

Scrum 的好处

Scrum 有助于客户、团队成员和利益相关者之间的协作。它包括时间盒方法和来自产品负责人的持续反馈,确保产品处于可运行状态。Scrum 为项目的不同角色带来了好处。

客户

冲刺或迭代被认为是较短的持续时间,用户故事是根据优先级设计的,并在冲刺计划中采用。它确保每个冲刺交付都满足客户需求。如果没有,则会记录需求,并计划并在冲刺中进行。

组织

借助 Scrum 和 Scrum 主管的组织可以专注于用户故事开发所需的努力,从而减少工作过载并避免任何返工。这也有助于保持开发团队效率的提高和客户满意度。这种方法还有助于提高市场潜力。

产品经理

产品经理的主要责任是确保产品的质量。在 Scrum 主管的帮助下,很容易促进工作、收集快速响应并在出现任何变化时吸收变化。产品经理还验证在每个冲刺中设计的 product 是否符合客户的要求。

开发团队

由于时间盒的性质和冲刺持续时间较短,开发团队变得热情洋溢,看到工作得到正确反映和交付。在每次迭代之后,或我们可以称之为“冲刺”之后,可运行的产品增量都会提高一个级别。为每个冲刺设计的用户故事成为客户的优先事项,为迭代增加了更多价值。

结论

Scrum 是一个高效的框架,您可以在其中通过团队合作开发软件。它完全基于敏捷原则。Scrum 主管随时准备以各种可能的方式帮助和配合 Scrum 团队。他就像一位私人教练,帮助您坚持既定计划并按照计划执行所有活动。Scrum 主管的权力不应超出流程。他/她应该有能力处理各种情况。

敏捷数据科学 - 数据科学流程

本章我们将了解数据科学流程以及理解该流程所需的术语。

“数据科学是数据接口、算法开发和技术相结合,以解决复杂的分析问题”。

Data Science Process

数据科学是一个跨学科领域,它包含科学方法、流程和系统,其中包括机器学习、数学和统计知识以及传统的科研方法。它还包括黑客技能与专业知识的结合。数据科学汲取了数学、统计学、信息科学和计算机科学、数据挖掘和预测分析的原理。

构成数据科学团队的不同角色如下所示:

客户

客户是使用产品的人。他们的兴趣决定了项目的成功,他们的反馈在数据科学中非常宝贵。

业务拓展

数据科学团队通过直接或创建登陆页面和推广的方式签署早期客户。业务拓展团队交付产品的价值。

产品经理

产品经理重视创造最有价值的产品。

交互设计师

他们专注于围绕数据模型设计交互,以便用户找到合适的价值。

数据科学家

数据科学家以新的方式探索和转换数据,以创建和发布新功能。这些科学家还将来自不同来源的数据结合起来,创造新的价值。他们在与研究人员、工程师和网页开发人员一起创建可视化方面发挥着重要作用。

研究人员

顾名思义,研究人员参与研究活动。他们解决数据科学家无法解决的复杂问题。这些问题需要专注于机器学习和统计模块,并投入大量时间。

适应变化

所有数据科学团队成员都需要适应新的变化并根据需求开展工作。为了将敏捷方法应用于数据科学,需要进行一些改变,如下所示:

  • 选择通才而不是专家。

  • 更偏好小型团队而不是大型团队。

  • 使用高级工具和平台。

  • 持续迭代地分享中间成果。

注意

在敏捷数据科学团队中,一个小型的通才团队使用可扩展的高级工具,并通过迭代将数据完善到越来越高的价值状态。

考虑以下与数据科学团队成员工作相关的示例:

  • 设计师交付CSS。

  • 网页开发人员构建完整的应用程序,了解用户体验和界面设计。

  • 数据科学家应该同时从事研究和构建包括 Web 应用程序在内的 Web 服务。

  • 研究人员在代码库中工作,展示解释中间结果的结果。

  • 产品经理试图识别和理解所有相关领域的缺陷。

敏捷工具和安装

本章我们将学习不同的敏捷工具及其安装。敏捷方法的开发栈包括以下组件:

事件

事件是发生的或被记录的事件,以及其特征和时间戳。

事件可以有多种形式,例如服务器、传感器、金融交易或用户在我们应用程序中采取的操作。在本教程中,我们将使用 JSON 文件,这将促进不同工具和语言之间的数据交换。

收集器

收集器是事件聚合器。它们以系统的方式收集事件,以存储和聚合大量数据,并将它们排队等待实时工作者的处理。

分布式文档

这些文档包括多节点(多个节点),它们以特定格式存储文档。在本教程中,我们将重点关注 MongoDB。

Web 应用服务器

Web 应用服务器通过客户端以 JSON 形式提供数据,用于可视化,且开销最小。这意味着 Web 应用服务器有助于测试和部署使用敏捷方法创建的项目。

现代浏览器

它使现代浏览器或应用程序能够将数据作为交互式工具呈现给我们的用户。

本地环境设置

为了管理数据集,我们将重点关注包含用于管理 excel、csv 和更多文件的工具的 python 的 Anaconda 框架。安装后 Anaconda 框架的仪表板如下所示。它也称为“Anaconda Navigator”:

Managing Data Sets

导航器包括“Jupyter 框架”,这是一个笔记本系统,有助于管理数据集。启动框架后,它将在浏览器中托管,如下所示:

jupyter framework

敏捷数据科学 - 敏捷中的数据处理

本章我们将重点介绍结构化数据、半结构化数据和非结构化数据之间的区别。

结构化数据

结构化数据是指以 SQL 格式存储在具有行和列的表中的数据。它包括一个关系键,该关系键映射到预先设计的字段。结构化数据在大规模使用。

结构化数据仅占所有信息数据 5% 到 10%。

半结构化数据

半结构化数据包括不驻留在关系数据库中的数据。它们包含一些组织属性,使分析更容易。它包括将它们存储在关系数据库中的相同过程。半结构化数据库的示例包括 CSV 文件、XML 和 JSON 文档。NoSQL 数据库被认为是半结构化的。

非结构化数据

非结构化数据占数据的 80%。它通常包括文本和多媒体内容。非结构化数据的最佳示例包括音频文件、演示文稿和网页。机器生成的非结构化数据的示例包括卫星图像、科学数据、照片和视频、雷达和声纳数据。

Satellite Images

上述金字塔结构特别关注数据量及其分布比例。

准结构化数据介于非结构化数据和半结构化数据之间。在本教程中,我们将重点关注半结构化数据,因为它有利于敏捷方法和数据科学研究。

半结构化数据没有正式的数据模型,但具有明显、自描述的模式和结构,这些模式和结构是通过其分析而发展起来的。

敏捷数据科学 - SQL 与 NoSQL

本教程的重点是遵循敏捷方法,减少步骤,并实施更多有用的工具。要理解这一点,重要的是要知道 SQL 和 NoSQL 数据库之间的区别。

大多数用户都了解 SQL 数据库,并且对 MySQL、Oracle 或其他 SQL 数据库都有很好的了解。在过去的几年里,NoSQL 数据库已被广泛采用,以解决各种业务问题和项目需求。

Difference Sql Nosql

下表显示了 SQL 和 NoSQL 数据库之间的区别:

SQL NoSQL
SQL 数据库主要被称为关系数据库管理系统 (RDBMS)。 NoSQL 数据库也称为面向文档的数据库。它是非关系型和分布式的。
基于 SQL 的数据库包括具有行和列的表结构。表和其他模式结构的集合称为数据库。 NoSQL 数据库包含文档作为主要结构,文档的集合称为集合。
SQL 数据库包含预定义的模式。 NoSQL 数据库具有动态数据,并包含非结构化数据。
SQL 数据库是垂直可扩展的。 NoSQL 数据库是水平可扩展的。
SQL 数据库非常适合复杂的查询环境。 NoSQL 没有用于复杂查询开发的标准接口。
SQL 数据库不适合分层数据存储。 NoSQL 数据库更适合分层数据存储。
SQL 数据库最适合指定应用程序中的大量事务。 NoSQL 数据库在高负载下对于复杂的交易应用程序仍然不被认为是可比的。
SQL 数据库得到了其供应商的出色支持。 NoSQL 数据库仍然依赖于社区支持。只有少数专家可以进行大规模 NoSQL 部署的设置和部署。
SQL 数据库专注于 ACID 属性——原子性、一致性、隔离性和持久性。 NoSQL 数据库专注于 CAP 属性——一致性、可用性和分区容错性。
SQL 数据库可以根据选择它们的供应商分类为开源或闭源。 NoSQL 数据库根据存储类型进行分类。NoSQL 数据库默认是开源的。

为什么敏捷选择 NoSQL?

上述比较表明,NoSQL 文档数据库完全支持敏捷开发。它没有模式,并且不完全专注于数据建模。相反,NoSQL 推迟应用程序和服务,因此开发人员可以更好地了解如何建模数据。NoSQL 将数据模型定义为应用程序模型。

Comparison Shows

MongoDB 安装

在本教程中,我们将更多地关注 MongoDB 的示例,因为它被认为是最好的“NoSQL 模式”。

Mongodb First Mongodb Second Mongodb Third Mongodb Fourth Mongodb Fifth

NoSQL 和数据流编程

有时数据以非关系格式不可用,我们需要借助 NoSQL 数据库使其保持事务性。

本章我们将重点介绍 NoSQL 的数据流。我们还将学习它如何与敏捷和数据科学相结合进行操作。

使用 NoSQL 与敏捷的主要原因之一是提高与市场竞争的速度。以下原因说明了为什么 NoSQL 最适合敏捷软件方法:

更少的障碍

更改当前正在进行中的模型即使在敏捷开发中也有一些实际成本。使用 NoSQL,用户使用聚合数据,而不是浪费时间规范化数据。要点是完成某些工作并朝着使模型数据完善的目标努力。

可扩展性增强

每当一个组织创建产品时,它都会更加关注其可扩展性。NoSQL 始终以其可扩展性而闻名,但在水平可扩展性设计时效果更好。

利用数据的能力

NoSQL 是一种无模式数据模型,允许用户轻松使用大量数据,其中包括多个可变性和速度参数。在考虑技术选择时,您应该始终考虑能够更大规模地利用数据的技术。

NoSQL 的数据流

让我们考虑以下示例,其中我们展示了如何将数据模型集中于创建 RDBMS 模式。

以下是模式的不同需求:

  • 应列出用户标识。

  • 每个用户至少必须具备一项技能。

  • 应妥善维护每个用户的经验详情。

Users Experience

用户表已使用 3 个单独的表进行规范化:

  • 用户

  • 用户技能

  • 用户体验

查询数据库时复杂性会增加,并且随着规范化的增加,时间消耗也会增加,这不利于敏捷方法。可以使用 NoSQL 数据库设计相同的模式,如下所示:

Complexity Increases

NoSQL 以 JSON 格式维护结构,结构轻量级。使用 JSON,应用程序可以将具有嵌套数据的对象存储为单个文档。

收集和显示记录

本章我们将重点介绍构成“敏捷方法”一部分的 JSON 结构。MongoDB 是一种广泛使用的 NoSQL 数据结构,易于收集和显示记录。

JSON Structure

步骤 1

此步骤涉及与 MongoDB 建立连接以创建集合和指定数据模型。您需要执行的是“mongod”命令以启动连接,以及“mongo”命令以连接到指定的终端。

Specified Data Model

步骤 2

创建一个新数据库以创建 JSON 格式的记录。现在,我们创建一个名为“mydb”的虚拟数据库。

>use mydb
switched to db mydb
>db
mydb
>show dbs
local 0.78125GB
test 0.23012GB
>db.user.insert({"name":"Agile Data Science"})
>show dbs
local 0.78125GB
mydb 0.23012GB
test 0.23012GB

步骤 3

创建集合是获取记录列表的必要步骤。此功能有利于数据科学研究和输出。

>use test
switched to db test
>db.createCollection("mycollection")
{ "ok" : 1 }
>show collections
mycollection
system.indexes
>db.createCollection("mycol", { capped : true, autoIndexId : true, size :
 6142800, max : 10000 } )
{ "ok" : 1 }
>db.agiledatascience.insert({"name" : "demoname"})
>show collections
mycol
mycollection
system.indexes
demoname

敏捷数据科学 - 数据可视化

数据可视化在数据科学中扮演着非常重要的角色。我们可以将数据可视化视为数据科学的一个模块。数据科学不仅仅是构建预测模型。它包括模型的解释以及使用模型来理解数据并做出决策。数据可视化是将数据以最令人信服的方式呈现出的一个组成部分。

从数据科学的角度来看,数据可视化是一个突出显示特征,它显示了变化和趋势。

请考虑以下有效数据可视化的指导原则:

  • 将数据置于共同的比例尺上。

  • 与圆形和方形相比,使用条形图更有效。

  • 散点图应使用合适的颜色。

  • 使用饼图显示比例。

  • 旭日图更适用于层次图。

敏捷方法需要一种简单的数据可视化脚本语言,并且与数据科学结合,“Python”是建议用于数据可视化的语言。

示例 1

以下示例演示了特定年份计算的 GDP 的数据可视化。“Matplotlib”是 Python 中最好的数据可视化库。该库的安装如下所示:

Demonstrates Data Visualization

请考虑以下代码以了解这一点:

import matplotlib.pyplot as plt
years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [300.2, 543.3, 1075.9, 2862.5, 5979.6, 10289.7, 14958.3]

# create a line chart, years on x-axis, gdp on y-axis
plt.plot(years, gdp, color='green', marker='o', linestyle='solid')

# add a title plt.title("Nominal GDP")
# add a label to the y-axis
plt.ylabel("Billions of $")
plt.show()

输出

上述代码生成以下输出:

Code Generates

有很多方法可以使用轴标签、线型和点标记来自定义图表。让我们关注下一个示例,它演示了更好的数据可视化效果。这些结果可用于获得更好的输出。

示例 2

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot(x,y)

# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()

输出

上述代码生成以下输出:

Code Generates Second

敏捷数据科学 - 数据增强

数据增强是指用于增强、细化和改进原始数据的一系列流程。它指的是有用的数据转换(原始数据到有用信息)。数据增强的过程侧重于使数据成为现代企业或组织宝贵的数据资产。

最常见的数据增强过程包括通过使用特定的决策算法来纠正数据库中的拼写错误或排版错误。数据增强工具会向简单的數據表中添加有用的信息。

请考虑以下用于单词拼写纠正的代码:

import re
from collections import Counter
def words(text): return re.findall(r'\w+', text.lower())
WORDS = Counter(words(open('big.txt').read()))

def P(word, N=sum(WORDS.values())):
   "Probabilities of words"
   return WORDS[word] / N
	
def correction(word):
   "Spelling correction of word"
   return max(candidates(word), key=P)
	
def candidates(word):
   "Generate possible spelling corrections for word."
   return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])
	
def known(words):
   "The subset of `words` that appear in the dictionary of WORDS."
   return set(w for w in words if w in WORDS)
	
def edits1(word):
   "All edits that are one edit away from `word`."
   letters = 'abcdefghijklmnopqrstuvwxyz'
   splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
   deletes = [L + R[1:] for L, R in splits if R]
   transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]
   replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
   inserts = [L + c + R for L, R in splits for c in letters]
   return set(deletes + transposes + replaces + inserts)
	
def edits2(word):
   "All edits that are two edits away from `word`."
   return (e2 for e1 in edits1(word) for e2 in edits1(e1))
   print(correction('speling'))
   print(correction('korrectud'))

在这个程序中,我们将与包含已更正单词的“big.txt”进行匹配。单词与文本文件中包含的单词匹配,并相应地打印适当的结果。

输出

上述代码将生成以下输出:

Code Will Generate

敏捷数据科学 - 使用报表

在本章中,我们将学习报表创建,这是敏捷方法的一个重要模块。敏捷冲刺图表将可视化创建的页面转换成完整的报表。借助报表,图表变得交互式,静态页面变得动态,并且与网络相关的数据。报表阶段的数据价值金字塔特征如下所示:

Agile Sprints Chart Pages

我们将更加重视创建 csv 文件,该文件可用作数据科学分析的报表,并得出结论。尽管敏捷方法侧重于减少文档,但生成报表以说明产品开发进度始终被认为是重要的。

import csv
#----------------------------------------------------------------------
def csv_writer(data, path):
   """
      Write data to a CSV file path
   """
   with open(path, "wb") as csv_file:
   writer = csv.writer(csv_file, delimiter=',')
   for line in data:
   writer.writerow(line)
#----------------------------------------------------------------------
if __name__ == "__main__":
   data = ["first_name,last_name,city".split(","),
      "Tyrese,Hirthe,Strackeport".split(","),
      "Jules,Dicki,Lake Nickolasville".split(","),
      "Dedric,Medhurst,Stiedemannberg".split(",")
   ]
	
   path = "output.csv"
   csv_writer(data, path)

上述代码将帮助您生成如下所示的“csv 文件”:

Comma Separated Values

让我们考虑一下 csv(逗号分隔值)报表的以下好处:

  • 它对用户友好,易于手动编辑。
  • 它易于实现和解析。
  • CSV 可在所有应用程序中处理。
  • 它更小,处理速度更快。
  • CSV 遵循标准格式。
  • 它为数据科学家提供了直观的模式。

敏捷数据科学 - 预测的作用

在本章中,我们将学习预测在敏捷数据科学中的作用。交互式报表揭示了数据的不同方面。预测构成敏捷冲刺的第四层。

Fourth Layer

在进行预测时,我们总是参考过去的数据,并将它们用作未来迭代的推论。在这个完整的过程中,我们将数据从历史数据的批量处理转换为关于未来的实时数据。

预测的作用包括以下方面:

  • 预测有助于预测。一些预测基于统计推断。一些预测基于专家的意见。

  • 统计推断涉及各种预测。

  • 有时预测是准确的,而有时预测是不准确的。

预测分析

预测分析包括来自预测建模、机器学习和数据挖掘的各种统计技术,这些技术分析当前和历史事实以预测未来和未知事件。

预测分析需要训练数据。训练数据包括独立特征和依赖特征。依赖特征是用户试图预测的值。独立特征是描述我们想要根据依赖特征进行预测的事物的特征。

对特征的研究称为特征工程;这对于进行预测至关重要。数据可视化和探索性数据分析是特征工程的一部分;它们构成了**敏捷数据科学**的核心。

Feature Engineering

进行预测

在敏捷数据科学中进行预测有两种方法:

  • 回归

  • 分类

构建回归模型或分类模型完全取决于业务需求及其分析。连续变量的预测导致回归模型,而分类变量的预测导致分类模型。

回归

回归考虑包含特征的示例,从而产生数值输出。

分类

分类获取输入并产生分类结果。

**注意** - 定义统计预测输入并使机器能够学习的示例数据集称为“训练数据”。

使用 PySpark 提取特征

在本章中,我们将学习如何在敏捷数据科学中使用 PySpark 提取特征的应用。

Spark 概述

Apache Spark 可定义为一个快速实时处理框架。它进行计算以实时分析数据。Apache Spark 被引入作为实时流处理系统,也可以处理批量处理。Apache Spark 支持交互式查询和迭代算法。

Spark是用“Scala编程语言”编写的。

PySpark 可以被认为是 Python 与 Spark 的组合。PySpark 提供 PySpark shell,它将 Python API 链接到 Spark 核心并初始化 Spark 上下文。大多数数据科学家使用 PySpark 来跟踪特征,如前一章所述。

在这个例子中,我们将重点关注构建名为 counts 的数据集并将其保存到特定文件的转换。

text_file = sc.textFile("hdfs://...")
counts = text_file.flatMap(lambda line: line.split(" ")) \
   .map(lambda word: (word, 1)) \
   .reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("hdfs://...")

使用 PySpark,用户可以使用 Python 编程语言处理 RDD。内置库涵盖了数据驱动文档和组件的基础知识,这有助于实现这一点。

构建回归模型

逻辑回归是指用于预测分类因变量概率的机器学习算法。在逻辑回归中,因变量是二元变量,其数据编码为 1(真和假的布尔值)。

在本章中,我们将重点关注使用连续变量在 Python 中开发回归模型。线性回归模型的示例将侧重于从 CSV 文件中探索数据。

分类目标是预测客户是否会订阅(1/0)定期存款。

import pandas as pd
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt

plt.rc("font", size=14)
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import train_test_split

import seaborn as sns
sns.set(style="white")
sns.set(style="whitegrid", color_codes=True)
data = pd.read_csv('bank.csv', header=0)
data = data.dropna()
print(data.shape)
print(list(data.columns))

按照以下步骤使用 Anaconda Navigator 和“Jupyter Notebook”来实现上述代码:

**步骤 1** - 使用 Anaconda Navigator 启动 Jupyter Notebook。

Jupyter Notebook First

Jupyter Notebook Second

**步骤 2** - 上传 csv 文件以系统地获取回归模型的输出。

Jupyter Notebook Third

**步骤 3** - 创建一个新文件并执行上述代码行以获得所需的输出。

Jupyter Notebook Fourth

Jupyter Notebook Fifth

部署预测系统

在这个示例中,我们将学习如何创建和部署预测模型,该模型有助于使用 python 脚本预测房价。用于部署预测系统的重要的框架包括 Anaconda 和“Jupyter Notebook”。

按照以下步骤部署预测系统:

**步骤 1** - 实现以下代码以将 csv 文件中的值转换为关联值。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import mpl_toolkits

%matplotlib inline
data = pd.read_csv("kc_house_data.csv")
data.head()

上述代码生成以下输出:

Above Code Generates

**步骤 2** - 执行 describe 函数以获取 csv 文件属性中包含的数据类型。

data.describe()
Describe Function

**步骤 3** - 我们可以根据我们创建的预测模型的部署来删除关联值。

train1 = data.drop(['id', 'price'],axis=1)
train1.head()
Associated Values

**步骤 4** - 您可以根据记录可视化数据。这些数据可用于数据科学分析和白皮书的输出。

data.floors.value_counts().plot(kind='bar')

Data Science Analysis

敏捷数据科学 - SparkML

机器学习库也称为“SparkML”或“MLLib”,它包含常见的学习算法,包括分类、回归、聚类和协同过滤。

为什么要学习用于敏捷方法的 SparkML?

Spark 正在成为构建机器学习算法和应用程序的事实上的平台。开发人员在 Spark 上工作,以便在 Spark 框架中以可扩展且简洁的方式实现机器算法。我们将学习机器学习的概念、实用程序和算法以及此框架。敏捷方法始终选择能够提供快速结果的框架。

ML 算法

ML 算法包括常见的学习算法,例如分类、回归、聚类和协同过滤。

特征

它包括特征提取、转换、降维和选择。

管道

管道提供用于构建、评估和调整机器学习管道的工具。

流行算法

以下是一些流行的算法:

  • 基本统计

  • 回归

  • 分类

  • 推荐系统

  • 聚类

  • 降维

  • 特征提取

  • 优化

推荐系统

推荐系统是信息过滤系统的一个子类,它试图预测用户对给定项目的“评分”和“偏好”。

推荐系统包括各种过滤系统,使用方法如下:

协同过滤

它包括基于过去的行为以及其他用户做出的类似决策来构建模型。此特定过滤模型用于预测用户感兴趣的项目。

基于内容的过滤

它包括过滤项目的离散特征,以便推荐和添加具有类似属性的新项目。

在后续章节中,我们将重点关注使用推荐系统来解决特定问题并从敏捷方法的角度提高预测性能。

修复预测问题

在本章中,我们将重点关注在特定场景的帮助下解决预测问题。

假设一家公司希望根据通过在线申请表提供的客户详细信息自动执行贷款资格详细信息。详细信息包括客户姓名、性别、婚姻状况、贷款金额和其他必填详细信息。

详细信息记录在如下所示的 CSV 文件中:

Specific Scenario

执行以下代码来评估预测问题:

import pandas as pd
from sklearn import ensemble
import numpy as np

from scipy.stats import mode
from sklearn import preprocessing,model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder

#loading the dataset
data=pd.read_csv('train.csv',index_col='Loan_ID')
def num_missing(x):
   return sum(x.isnull())
 
#imputing the the missing values from the data
data['Gender'].fillna(mode(list(data['Gender'])).mode[0], inplace=True)
data['Married'].fillna(mode(list(data['Married'])).mode[0], inplace=True)
data['Self_Employed'].fillna(mode(list(data['Self_Employed'])).mode[0], inplace=True)

# print (data.apply(num_missing, axis=0))
# #imputing mean for the missing value
data['LoanAmount'].fillna(data['LoanAmount'].mean(), inplace=True)
mapping={'0':0,'1':1,'2':2,'3+':3}
data = data.replace({'Dependents':mapping})
data['Dependents'].fillna(data['Dependents'].mean(), inplace=True)
data['Loan_Amount_Term'].fillna(method='ffill',inplace=True)
data['Credit_History'].fillna(method='ffill',inplace=True)
print (data.apply(num_missing,axis=0))

#converting the cateogorical data to numbers using the label encoder
var_mod = ['Gender','Married','Education','Self_Employed','Property_Area','Loan_Status']
le = LabelEncoder()
for i in var_mod:
   le.fit(list(data[i].values))
   data[i] = le.transform(list(data[i]))
 
#Train test split
x=['Gender','Married','Education','Self_Employed','Property_Area','LoanAmount', 'Loan_Amount_Term','Credit_History','Dependents']
y=['Loan_Status']
print(data[x])
X_train,X_test,y_train,y_test=model_selection.train_test_split(data[x],data[y], test_size=0.2)

#
# #Random forest classifier
# clf=ensemble.RandomForestClassifier(n_estimators=100,
criterion='gini',max_depth=3,max_features='auto',n_jobs=-1)
clf=ensemble.RandomForestClassifier(n_estimators=200,max_features=3,min_samples
   _split=5,oob_score=True,n_jobs=-1,criterion='entropy')
	
clf.fit(X_train,y_train)
accuracy=clf.score(X_test,y_test)
print(accuracy)

输出

以上代码生成以下输出。

Specific Scenario Output

改进预测性能

本章,我们将重点构建一个模型,帮助预测学生的学习成绩,其中包含多个属性。重点在于展示学生考试不及格的结果。

流程

评估的目标值是 G3。此值可以被分箱并进一步分类为不及格和及格。如果 G3 值大于或等于 10,则学生通过考试。

示例

考虑以下示例,其中执行代码来预测学生的学习成绩:

import pandas as pd
""" Read data file as DataFrame """
df = pd.read_csv("student-mat.csv", sep=";")
""" Import ML helpers """
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.svm import LinearSVC # Support Vector Machine Classifier model
""" Split Data into Training and Testing Sets """
def split_data(X, Y):
 return train_test_split(X, Y, test_size=0.2, random_state=17)
""" Confusion Matrix """
def confuse(y_true, y_pred):
 cm = confusion_matrix(y_true=y_true, y_pred=y_pred)
 # print("\nConfusion Matrix: \n", cm)
  fpr(cm)
 ffr(cm)
""" False Pass Rate """
def fpr(confusion_matrix):
 fp = confusion_matrix[0][1]
 tf = confusion_matrix[0][0]
 rate = float(fp) / (fp + tf)
 print("False Pass Rate: ", rate)
""" False Fail Rate """
def ffr(confusion_matrix):
 ff = confusion_matrix[1][0]
 tp = confusion_matrix[1][1]
 rate = float(ff) / (ff + tp)
 print("False Fail Rate: ", rate)
 return rate
""" Train Model and Print Score """
def train_and_score(X, y):
 X_train, X_test, y_train, y_test = split_data(X, y)
 clf = Pipeline([
 ('reduce_dim', SelectKBest(chi2, k=2)),
 ('train', LinearSVC(C=100))
 ])
 scores = cross_val_score(clf, X_train, y_train, cv=5, n_jobs=2)
 print("Mean Model Accuracy:", np.array(scores).mean())
 clf.fit(X_train, y_train)
 confuse(y_test, clf.predict(X_test))
 print()
""" Main Program """
def main():
 print("\nStudent Performance Prediction")
 # For each feature, encode to categorical values
 class_le = LabelEncoder()
 for column in df[["school", "sex", "address", "famsize", "Pstatus", "Mjob",
"Fjob", "reason", "guardian", "schoolsup", "famsup", "paid", "activities",
"nursery", "higher", "internet", "romantic"]].columns:
 df[column] = class_le.fit_transform(df[column].values)
 # Encode G1, G2, G3 as pass or fail binary values
 for i, row in df.iterrows():
 if row["G1"] >= 10:
 df["G1"][i] = 1
 else:
 df["G1"][i] = 0
 if row["G2"] >= 10:
 df["G2"][i] = 1
 else:
 df["G2"][i] = 0
 if row["G3"] >= 10:
 df["G3"][i] = 1
 else:
 df["G3"][i] = 0
 # Target values are G3
 y = df.pop("G3")
 # Feature set is remaining features
 X = df
 print("\n\nModel Accuracy Knowing G1 & G2 Scores")
 print("=====================================")
 train_and_score(X, y)
 # Remove grade report 2
 X.drop(["G2"], axis = 1, inplace=True)
 print("\n\nModel Accuracy Knowing Only G1 Score")
 print("=====================================")
 train_and_score(X, y)
 # Remove grade report 1
 X.drop(["G1"], axis=1, inplace=True)
 print("\n\nModel Accuracy Without Knowing Scores")
 print("=====================================")
 train_and_score(X, y)
main()

输出

以上代码生成的输出如下所示

预测仅参考一个变量。参考一个变量,学生学习成绩预测如下所示:

Student Performance Prediction

利用敏捷方法和数据科学创造更好的场景

敏捷方法帮助组织适应变化,在市场中竞争并构建高质量的产品。据观察,随着客户需求变化的增加,组织在敏捷方法中日趋成熟。将数据与组织的敏捷团队进行编译和同步,对于根据所需组合汇总数据至关重要。

制定更好的计划

标准化的敏捷绩效完全取决于计划。有序的数据模式增强了组织进度效率、质量和响应能力。通过历史和实时场景保持数据一致性水平。

请参考下图了解数据科学实验周期:

Data Science Experiment Cycle

数据科学涉及对需求的分析,然后根据需求创建算法。一旦设计好算法并设置好环境,用户就可以创建实验并收集数据以进行更好的分析。

这种思想计算敏捷的最后一个冲刺,称为“行动”。

Ideology Computes

行动包括敏捷方法最后一个冲刺或阶段的所有强制性任务。可以通过故事卡片作为行动项来维护数据科学阶段(关于生命周期)的跟踪。

预测分析和大数据

未来规划完全取决于使用从分析中收集的数据定制数据报告。它还将包括对大数据分析的操作。借助大数据,可以有效地对离散的信息片段进行分析,对组织的指标进行切片和切块。分析总是被认为是更好的解决方案。

敏捷数据科学 - 敏捷的实施

敏捷开发过程中使用了各种方法。这些方法也可以用于数据科学研究过程。

下图显示了不同的方法:

Various Methodologies

Scrum( scrum )

在软件开发方面,Scrum 意味着用小型团队管理工作和管理特定项目,以揭示项目的优缺点。

水晶方法(Crystal methodologies)

水晶方法包括用于产品管理和执行的创新技术。使用此方法,团队可以以不同的方式进行类似的任务。水晶系列是最容易应用的方法之一。

动态软件开发方法 (Dynamic Software Development Method)

此交付框架主要用于在软件方法中实施当前的知识系统。

未来驱动开发 (Future driven development)

此开发生命周期的重点是项目中涉及的功能。它最适合领域对象建模、代码和功能开发的所有权。

精益软件开发 (Lean Software development)

此方法旨在以低成本提高软件开发速度,并将团队的注意力集中在为客户提供特定价值上。

极限编程 (Extreme Programming)

极限编程是一种独特的软件开发方法,它专注于提高软件质量。当客户不确定任何项目的功能时,这将非常有效。

敏捷方法正在数据科学领域扎根,它被认为是重要的软件方法。通过敏捷自组织,跨职能团队可以有效地一起工作。如前所述,敏捷开发有六个主要类别,每个类别都可以根据需求与数据科学结合。数据科学涉及用于统计洞察的迭代过程。敏捷有助于分解数据科学模块,并有助于有效地处理迭代和冲刺。

敏捷数据科学的过程是一种了解如何以及为什么实施数据科学模块的绝佳方法。它以创造性的方式解决问题。

广告