目录

Agile Data Science - 快速指南

Agile Data Science - Introduction

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

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

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

敏捷数据科学按以下原则组织 -

连续迭代

此过程涉及使用创建表,图表,报告和预测进行连续迭代。 构建预测模型将需要多次迭代特征工程,并提取和生成洞察力。

中间产出

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

原型实验

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

整合数据

软件开发生命周期包括不同的阶段,数据必不可少 -

  • customers

  • developers, and

  • 这生意

数据的整合为更好的前景和产出铺平了道路。

金字塔数据值

金字塔数据值

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

最顶层涉及有效驱动数据值的操作。 这种实现的最好例证是“人工智能”。

Agile Data Science - Methodology Concepts

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

有12条原则详细描述了敏捷方法 -

客户满意度

最重要的是通过早期和持续交付有价值的软件来关注需求的客户。

欢迎新的变化

在软件开发期间可以接受更改。 敏捷流程旨在满足客户的竞争优势。

交付 (Delivery)

在一到四周的时间内向客户提供工作软件。

协作(Collaboration)

业务分析师,质量分析师和开发人员必须在项目的整个生命周期中协同工作。

动机(Motivation)

项目应该设计有一个有动力的个人部落。 它提供了一个支持个人团队成员的环境。

个人对话

面对面交谈是向开发团队和开发团队内部发送信息的最有效和最有效的方法。

衡量进展

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

保持稳定的步伐

敏捷过程的重点是可持续发展。 业务,开发人员和用户应该能够与项目保持一致的步伐。

监控(Monitoring)

必须始终关注技术卓越和良好的设计,以增强敏捷功能。

简约(Simplicity)

敏捷过程使一切变得简单,并使用简单的术语来衡量未完成的工作。

Self-organized terms

敏捷团队应该是自我组织的,并且应该与最佳架构保持独立; 要求和设计来自自组织团队。

审查工作

定期审查工作非常重要,这样团队才能反思工作进展情况。 及时审查该模块将提高绩效。

Daily Stand-up

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

无论办公地点如何,无论如何建立敏捷团队,每日站立都是一种强制性做法。

每日站立的功能列表如下 -

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

  • 站立应包括有关状态更新的讨论。

  • 本次会议的与会者通常希望尽快结束会议。

用户故事

故事通常是一个要求,用简单的语言用少量句子表达,应该在迭代中完成。 用户故事应包括以下特征 -

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

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

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

  • 在定义故事时接受产品所有者的接受。

敏捷Scrum模型

什么是Scrum?

Scrum可以被视为敏捷方法的一个子集。 它是一个轻量级的过程,包括以下功能 -

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

  • 它是一个“轻量级”过程,意味着过程保持尽可能小,以在指定的给定持续时间内最大化生产输出。

与传统敏捷方法的其他方法相比,Scrum流程以其区分过程而闻名。 它分为以下三类 -

  • Roles

  • Artifacts

  • Time Boxes

角色定义了整个过程中包含的团队成员及其角色。 Scrum团队由以下三个角色组成 -

  • Scrum Master

  • Product Owner

  • Team

Scrum工件提供了每个成员应该注意的关键信息。 该信息包括产品,计划的活动和完成的活动的详细信息。 Scrum框架中定义的人工制品如下 -

  • Product backlog

  • Sprint backlog

  • Burn down chart

  • Increment

时间框是为每次迭代计划的用户故事。 这些用户故事有助于描述构成Scrum文物一部分的产品功能。 产品待办事项是用户故事列表。 这些用户故事按优先顺序排列并转发给用户会议,以决定应该采用哪一个。

为什么选择Scrum Master?

Scrum Master与团队的每个成员进行交互。 现在让我们看看Scrum Master与其他团队和资源的互动。

产品拥有者

Scrum Master以下列方式与产品所有者进行交互 -

  • 寻找技术来实现用户故事的有效产品积压并对其进行管理。

  • 帮助团队了解清晰简洁的产品积压项目的需求。

  • 具体环境的产品规划。

  • 确保产品所有者知道如何提高产品价值。

  • 在需要时促进Scrum事件。

Scrum团队

Scrum Master以多种方式与团队互动 -

  • 在Scrum采用中指导组织。

  • 规划特定组织的Scrum实现。

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

  • 与其他团队的Scrum Masters合作,提高指定团队的Scrum应用程序的有效性。

组织(Organization)

Scrum Master以多种方式与组织进行交互。 下面提到了一些 -

  • 教练和Scrum团队与自组织交互,并包含交叉功能的特征。

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

Scrum的好处

Scrum帮助客户,团队成员和利益相关者进行协作。 它包括时间框架方法和产品所有者的持续反馈,确保产品处于工作状态。 Scrum为项目的不同角色提供了好处。

客户 (Customer)

短期或迭代的持续时间较短,用户故事按优先级设计,并在sprint计划中进行处理。 它确保满足每个sprint交付,客户要求。 如果没有,则记录要求并计划并采用冲刺。

组织(Organization)

在Scrum和Scrum大师的帮助下,组织可以专注于开发用户故事所需的工作,从而减少工作量超负荷并避免返工(如果有的话)。 这也有助于提高开发团队的效率和客户满意度。 这种方法也有助于增加市场潜力。

产品经理

产品经理的主要职责是确保产品质量得到保持。 在Scrum Masters的帮助下,可以轻松地促进工作,收集快速响应并吸收更改(如果有的话)。 产品经理还会根据每个sprint中的客户要求验证所设计的产品是否一致。

开发团队

凭借时间框架性质并在较短的时间内保持冲刺,开发团队变得热情地看到工作得到了反映和正确交付。 工作产品在每次迭代后递增每个级别,或者我们可以将它们称为“sprint”。 为每个sprint设计的用户故事成为客户优先级,为迭代增加了更多价值。

结论 (Conclusion)

Scrum是一个高效的框架,您可以在其中开发团队协作软件。 它完全基于敏捷原则设计。 ScrumMaster以各种可能的方式帮助和合作Scrum团队。 他的行为就像一位私人教练,可以帮助您坚持设计计划并按照计划执行所有活动。 ScrumMaster的权威永远不应该超越这个过程。 他/她应该有能力管理每一种情况。

Agile Data Science - Data Science Process

在本章中,我们将了解理解该过程所需的数据科学过程和术语。

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

数据科学过程

数据科学是一个跨学科的领域,包括科学方法,过程和系统,其中的类别包括机器学习,数学和统计知识与传统研究。 它还包括黑客技能和实质性专业知识的组合。 数据科学从数学,统计学,信息科学和计算机科学,数据挖掘和预测分析中汲取原则。

构成数据科学团队一部分的不同角色如下所述 -

客户(Customers)

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

业务发展

这个数据科学团队可以通过第一手资料或通过创建登录页面和促销活动来签署早期客户。 业务开发团队提供产品的价值。

产品经理

产品经理重视创造最佳产品,这在市场上很有价值。

互动设计师

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

数据科学家

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

研究人员(Researchers)

正如名称所示,研究人员参与研究活动。 他们解决了数据科学家无法做到的复杂问题。 这些问题涉及机器学习和统计模块的强烈关注和时间。

适应变化

数据科学的所有团队成员都需要适应新的变化并根据需求开展工作。 应采用敏捷方法和数据科学进行若干改动,如下所述 -

  • 选择通才而不是专家。

  • 小团队优先于大型团队。

  • 使用高级工具和平台。

  • 持续和迭代地共享中间工作。

Note

在敏捷数据科学团队中,一个由通才组成的小团队使用可扩展的高级工具,并通过迭代将数据细化为越来越高的价值状态。

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

  • 设计师提供CSS。

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

  • 数据科学家应该致力于研究和构建Web服务,包括Web应用程序。

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

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

Agile Tools and Installation

在本章中,我们将了解不同的Agile工具及其安装。 敏捷方法的开发堆栈包括以下一组组件 -

事件 (Events)

事件是发生或与其功能和时间戳一起记录的事件。

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

Collectors

收集者是事件聚合器。 他们以系统的方式收集事件,以存储和汇总庞大的数据,将其排队等待实时工作人员采取行动。

分布式文件

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

Web应用服务器

Web应用程序服务器通过可视化将数据作为JSON通过可视化实现,而开销最小。 这意味着Web应用程序服务器有助于测试和部署使用敏捷方法创建的项目。

现代浏览器

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

当地环境设置

为了管理数据集,我们将专注于python的Anaconda框架,其中包括用于管理excel,csv和更多文件的工具。 安装Anaconda框架的仪表板如下所示。 它也被称为“Anaconda Navigator” -

管理数据集

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

jupyter框架

Agile Data Science - Data Processing in Agile

在本章中,我们将重点关注结构化,半结构化和非结构化数据之间的区别。

结构化数据

结构化数据涉及以行和列的形式存储在表格中的SQL格式的数据。 它包括一个关系密钥,它被映射到预先设计的字段中。 结构化数据用于更大规模。

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

Semi-structured data

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

非结构化数据

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

卫星图像

上述金字塔结构特别关注数据量和分散的比率。

准结构化数据在非结构化数据和半结构化数据之间显示为类型。 在本教程中,我们将重点关注半结构化数据,这有助于敏捷方法论和数据科学研究。

半结构化数据没有正式的数据模型,但具有明显的自描述模式和结构,由其分析开发。

Agile Data Science - SQL versus NoSQL

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

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

差异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将数据模型定义为应用程序模型。

比较节目

MongoDB安装

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

Mongodb FirstMongodb第二Mongodb第三Mongodb FourthMongodb Fifth

NoSQL and Dataflow programming

有时候数据以关系格式不可用,我们需要在NoSQL数据库的帮助下保持事务性。

在本章中,我们将重点介绍NoSQL的数据流。 我们还将通过敏捷和数据科学的结合来了解它的运作方式。

使用NoSQL敏捷的主要原因之一是在市场竞争中提高速度。 以下原因显示NoSQL如何最适合敏捷软件方法 -

更少的障碍

改变模型,即使在敏捷开发的情况下,目前正在经历中流也会产生一些实际成本。 使用NoSQL,用户使用聚合数据而不是浪费时间来规范化数据。 重点是完成某项工作并实现模型完美数据的目标。

提高可扩展性

每当组织创建产品时,它就会更加关注其可扩展性。 NoSQL以其可扩展性而闻名,但在设计具有水平可伸缩性时效果更好。

能够利用数据

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

NoSQL的数据流

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

以下是架构的不同要求 -

  • 应列出用户标识。

  • 每个用户都必须至少拥有一项技能。

  • 应妥善维护每个用户体验的详细信息。

用户体验

用户表使用3个单独的表进行标准化 -

  • Users

  • 用户技能

  • 用户体验

在查询数据库时复杂性增加,并且随着标准化的增加而注意到时间消耗,这对于敏捷方法是不利的。 可以使用NoSQL数据库设计相同的模式,如下所述 -

复杂性增加

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

Collecting and Displaying Records

在本章中,我们将重点介绍JSON结构,它构成了“敏捷方法论”的一部分。 MongoDB是一种广泛使用的NoSQL数据结构,可以轻松地收集和显示记录。

JSON结构

Step 1

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

指定数据模型

Step 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

Step 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

Agile Data Science - Data Visualization

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

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

考虑以下有效数据可视化指南 -

  • 按常规比例定位数据。

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

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

  • 使用饼图显示比例。

  • Sunburst可视化对于分层图更有效。

敏捷需要一种简单的脚本语言来实现数据可视化,而数据科学则需要协作“Python”是数据可视化的建议语言。

例子1 (Example 1)

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

演示数据可视化

请考虑以下代码来理解这一点 -

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()

输出 (Output)

上面的代码生成以下输出 -

代码生成

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

例子2 (Example 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()

输出 (Output)

上面的代码生成以下输出 -

代码生成第二

Agile Data Science - Data Enrichment

数据丰富是指用于增强,改进和改进原始数据的一系列过程。 它指的是有用的数据转换(原始数据到有用信息)。 数据丰富过程的重点是使数据成为现代企业或企业的宝贵数据资产。

最常见的数据丰富过程包括通过使用特定的决策算法来纠正数据库中的拼写错误或印刷错误。 数据丰富工具为简单数据表添加有用信息。

考虑以下代码进行单词拼写纠正 -

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”。 单词与文本文件中包含的单词匹配,并相应地打印相应的结果。

输出 (Output)

上面的代码将生成以下输出 -

代码将生成

Agile Data Science - Working with Reports

在本章中,我们将学习报告创建,这是敏捷方法的一个重要模块。 Agile sprints图表由可视化创建的页面成为完整的报告。 通过报告,图表变为交互式,静态页面变为动态和网络相关数据。 数据值金字塔报告阶段的特征如下所示 -

敏捷Sprint图表页面

我们将更加注重创建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文件”,如下所示 -

逗号分隔值

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

  • 它非常友好,易于手动编辑。
  • 它很容易实现和解析。
  • 可以在所有应用程序中处理CSV。
  • 处理起来更小,更快。
  • CSV遵循标准格式。
  • 它为数据科学家提供了直接的模式。

Agile Data Science - Role of Predictions

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

第四层

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

预测的作用包括以下内容 -

  • 预测有助于预测。 一些预测基于统计推断。 一些预测是基于权威人士的意见。

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

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

预测分析

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

预测分析需要培训数据。 训练有素的数据包括独立和相关的功能。 依赖特征是用户试图预测的值。 独立功能是根据相关功能描述我们想要预测的内容的功能。

特征研究称为特征工程; 这对于做出预测至关重要。 数据可视化和探索性数据分析是特征工程的一部分; 这些构成了Agile data science的核心。

特色工程

做出预测

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

  • Regression

  • Classification

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

回归(Regression)

回归考虑包含要素的示例,从而产生数字输出。

分类(Classification)

分类采用输入并产生分类分类。

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

Extracting features with 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。 内置库涵盖了数据驱动文档和组件的基础知识,有助于实现这一目标。

Building a Regression Model

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

在本章中,我们将重点介绍使用连续变量在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”实现上述代码 -

Step 1 - 使用Anaconda Navigator启动Jupyter笔记本。

Jupyter笔记本首先

Jupyter笔记本第二

Step 2 - 上传csv文件以系统方式获得回归模型的输出。

Jupyter笔记本第三

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

Jupyter笔记本第四

Jupyter笔记本第五

Deploying a predictive system

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

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

Step 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()

上面的代码生成以下输出 -

以上代码生成

Step 2 - 执行describe函数以获取csv文件的归属中包含的数据类型。

data.describe()
描述功能

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

train1 = data.drop(['id', 'price'],axis=1)
train1.head()
相关价值观

Step 4 - 您可以根据记录可视化数据。 该数据可用于数据科学分析和白皮书输出。

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

数据科学分析

Agile Data Science - SparkML

机器学习库也称为“SparkML”或“MLLib”,由常用的学习算法组成,包括分类,回归,聚类和协同过滤。

为什么要学习SparkML for Agile?

Spark正在成为构建机器学习算法和应用程序的事实平台。 开发人员使用Spark在Spark框架中以可扩展和简洁的方式实现机器算法。 我们将通过该框架学习机器学习,其实用程序和算法的概念。 敏捷总是选择一个框架,它可以提供简短快速的结果。

ML算法

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

特性 (Features)

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

Pipelines

管道提供了构建,评估和调整机器学习管道的工具。

流行的算法

以下是一些流行的算法 -

  • 基本统计

  • Regression

  • Classification

  • 推荐系统

  • Clustering

  • 维度降低

  • 特征提取

  • Optimization

推荐系统

推荐系统是信息过滤系统的子类,其寻求用户对给定项目建议的“评级”和“偏好”的预测。

推荐系统包括各种过滤系统,使用如下 -

协同过滤

它包括根据过去的行为建立模型以及其他用户做出的类似决策。 该特定过滤模型用于预测用户有兴趣接受的项目。

基于内容的过滤

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

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

Fixing Prediction Problem

在本章中,我们将着重于在特定场景的帮助下修复预测问题。

考虑到公司希望根据在线申请表提供的客户详细信息自动化贷款资格详情。 详细信息包括客户姓名,性别,婚姻状况,贷款金额和其他强制性细节。

详细信息记录在CSV文件中,如下所示 -

具体情景

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

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)

输出 (Output)

上面的代码生成以下输出。

特定场景输出

Improving Prediction Performance

在本章中,我们将重点关注构建一个模型,该模型有助于预测学生的表现,其中包含许多属性。 重点是在考试中显示学生的失败结果。

过程 Process

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

例子 (Example)

考虑以下示例,其中执行代码以预​​测学生的表现 -

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()

输出 (Output)

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

仅参考一个变量来处理预测。 参考一个变量,学生表现预测如下所示 -

学生表现预测

Creating better scene with agile and data science

敏捷方法可帮助组织适应变化,在市场中竞争并构建高质量的产品。 据观察,组织使用敏捷方法成熟,客户需求的变化也在增加。 与敏捷的组织团队一起编译和同步数据对于按照所需的投资组合汇总数据非常重要。

制定更好的计划

标准化的敏捷性能完全取决于计划。 有序的数据模式赋予组织进步的生产力,质量和响应能力。 使用历史和实时方案维护数据一致性级别。

考虑下图来了解数据科学实验周期 -

数据科学实验周期

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

这种意识形态计算了敏捷的最后一个冲刺,称为“行动”。

意识形态计算

Actions涉及最后一个sprint或敏捷方法级别的所有强制任务。 数据科学阶段(关于生命周期)的轨迹可以用故事卡作为行动项目来维持。

预测分析和大数据

规划的未来完全在于使用从分析中收集的数据定制数据报告。 它还将包括大数据分析操作。 在大数据的帮助下,可以通过切片和切割组织的指标来有效地分析离散的信息。 分析始终被视为更好的解决方案。

Agile Data Science - Implementation of Agile

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

下面给出的流程图显示了不同的方法 -

各种方法

Scrum

在软件开发术语中,scrum意味着管理小团队的工作和特定项目的管理,以揭示项目的优势和劣势。

水晶方法论

Crystal方法包括产品管理和执行的创新技术。 通过这种方法,团队可以以不同的方式执行类似的任务。 Crystal系列是最容易应用的方法之一。

动态软件开发方法

该交付框架主要用于以软件方法实现当前知识系统。

未来的发展

该开发生命周期的重点是项目涉及的功能。 它最适用于域对象建模,代码和所有权的功能开发。

精益软件开发

该方法旨在以低成本提高软件开发速度,并使团队专注于为客户提供特定价值。

极限编程

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

敏捷方法正在数据科学流中扎根,它被认为是重要的软件方法论。 通过敏捷的自组织,跨职能团队可以以有效的方式协同工作。 如上所述,敏捷开发有六个主要类别,每个类别都可以根据需求使用数据科学进行流式处理。 数据科学涉及统计见解的迭代过程。 敏捷有助于打破数据科学模块,并有助于以有效的方式处理迭代和冲刺。

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

↑回到顶部↑
WIKI教程 @2018