本章概述了本书中使用的用例和数据集,同时提供了有关在进一步学习和实践中找到数据源的信息。您还将了解数据类型以及批处理和流处理数据之间的区别。您将通过使用Google的免费基于浏览器的开源Jupyter Notebook进行数据预处理的实际操作来进行实践。本章最后还包括了一个关于如何使用GitHub创建本书中选定项目的数据存储库的部分。
本书中使用的用例和数据集概述
希望您选择了我们的书,不是从数学或算法的角度来学习机器学习,而是采用基于项目的方法。我们选择的用例旨在通过不同领域的实际真实数据教授您机器学习。有关医疗保健、零售、能源、电信和金融的使用案例。有关客户流失的用例可以应用于任何领域。如果您有一些数据预处理经验,每个用例项目都可以独立存在,所以可以随时跳到您需要学习的部分来提升自己的技能。表2-1显示了每个部分、其用例、领域以及它是无代码还是低代码。
1.零售:产品定价
本节以一个旨在说明数据在决策中的作用的用例开始。在这个用例中,您负责一家制造雨伞的公司的市场营销,业务目标是增加销售额。如果您降低现有雨伞的售价,您能预测将销售多少把雨伞吗?图2-1显示了可能影响降价策略以增加销售的数据元素。
2.医疗保健:心脏病宣传活动
在这个用例中,您是一名医疗保健顾问,获得了美国35岁以上人口心脏病死亡率的数据。目标是分析心脏病死亡率数据,并提出心脏病预防活动的可能用例。例如,一个可能的用例是跟踪心脏病死亡率随时间的趋势,或者开发和验证用于预测心脏病死亡率的模型。这个数据集包含脏数据。某些字段存在缺失值。一个字段缺失。在处理这些问题时,您将学会将数据导入Python Jupyter Notebook,分析数据,并纠正脏数据元素。图2-2显示了对您的分析有贡献的数据元素。
3.能源:公用事业宣传活动
在这个用例中,您是一家公用事业公司的业务分析师。您的任务是开发一个定位高电能消耗社区的营销和宣传计划。数据已经经过预处理。您没有机器学习背景或任何编程知识。您选择使用AutoML作为您的机器学习框架。图2-3显示了对您的模型有贡献的数据元素。
4.保险:广告媒体渠道销售预测
在这个部分,您是一个团队的一员,负责为一家保险公司制定媒体战略。团队希望开发一个机器学习模型,以基于不同媒体渠道的广告支出来预测销售额。您的任务是进行探索性数据分析,并构建和训练模型。您没有机器学习背景或任何编程知识。您选择使用AutoML作为您的机器学习框架。图2-4显示了对您的模型有贡献的数据元素。
5.金融:欺诈检测
在这个项目中,您的目标是构建一个模型,以预测财务交易是否属于欺诈或合法。您的新公司是一家为数十万用户提供移动支付服务的公司。欺诈交易相对较少,并且通常会被其他保护机制捕获。然而,不幸的事实是,其中一些交易正在通过安全网并对用户产生负面影响。本节中的数据集包含模拟用户行为和欺诈交易的交易数据。您没有机器学习背景或任何编程知识。您选择使用AutoML作为您的机器学习框架。图2-5显示了对您的模型有贡献的数据元素。
6.能源:电力生产预测
在这个项目中,您的目标是根据发电厂附近的天气条件来预测联合循环电厂(CCPP)的净每小时电能输出。本节中的数据集包含从2006年到2011年六年间从CCPP收集的数据点,当时发电厂以全负荷运行。数据以每小时的频率进行汇总,尽管数据集中没有提供有关记录的天气条件和能源生产的确切小时。从实际角度看,这意味着您将无法将数据视为序列或时间序列数据,其中您使用先前记录的信息来预测未来记录。您具有一些SQL(结构化查询语言)知识,来自处理数据库的经验。您选择使用Google的BigQuery Machine Learning作为您的机器学习框架。图2-6显示了对您的模型有贡献的数据元素。
7.电信:客户流失预测
在这个项目中,您的目标是预测电信公司的客户流失。客户流失被定义为客户的流失率,或者换句话说,客户选择停止使用服务的比率。电信公司通常以每月费率或年度合同销售其产品,因此在这里的流失将代表客户在下个月取消其订阅或合同。数据集包含数值变量和分类变量,其中变量取自一组离散的可能性。您具有一些Python知识,并且认为AutoML非常强大,但也希望学习低代码解决方案,以便更多地控制您的模型。您选择使用scikit-learn和Keras作为机器学习框架。图2-7显示了对您的模型有贡献的数据元素。
汽车:提高自定义模型性能
在这个项目中(作为机器学习团队的新成员),您的目标是提高一个用于预测二手车拍卖价格的机器学习模型的性能。初始模型是一个scikit-learn中的线性回归模型,不完全符合您的业务目标。最终,您将探索使用scikit-learn、Keras和BigQuery ML中的工具来提高您的模型性能。用于训练线性回归模型的训练、验证和测试数据集已经以CSV文件的形式提供给您。这些数据集已经进行了清理(缺失和不正确的值已经得到了适当的修复),并且还提供了用于构建scikit-learn线性回归模型的代码。图2-8显示了对您的模型有贡献的数据元素。
数据和文件类型
数据确实是第一步,因此让我们来了解一些有关数据的基本术语和概念。如果您已经熟悉定量数据和定性数据之间的区别;结构化、半结构化和非结构化数据之间的区别;以及批处理和流式数据之间的区别,那么可以跳过到"GitHub和Google Colab概述",在那里您可以开始在GitHub上创建Jupyter Notebook。
定量数据和定性数据
在数据分析中,您将处理两种类型的数据:定量数据和定性数据。如果数据可以被计数或测量,并具有数值值,那么它是定量数据。定量数据可以告诉您有多少、有多少、或有多频繁,例如,有多少人访问了网站以查看产品目录?公司今年财年创收多少?制造雨伞把手的机器多频繁出现故障?
与定量数据不同,定性数据不能被测量或计数,可以包括几乎任何非数值数据。它是描述性的,以语言而不是数字的形式表达。为什么在机器学习中这个区别很重要?如果您有定性数据,那么您需要对其进行预处理,使其变成定量数据,因为您不能将定性数据输入机器学习模型。您将在后续章节中学习如何处理一些定性数据。
结构化、非结构化和半结构化数据
数据可以分为三种类型:结构化数据、非结构化数据和半结构化数据。 结构化数据是已经被格式化和转换成明确定义的数据模型的信息。数据模型是一种组织和结构化数据的方式,以便它可以容易理解和操作。数据模型被用于各种应用,包括数据库、软件应用和数据仓库。结构化数据是非常有组织的。表2-2显示了第4章"广告媒体渠道销售预测"用例中使用的模式和数据类型。请注意,有列名和列类型。有四列数值(定量)数据供AutoML模型使用。
以下是一些结构化数据的示例:
- 客户记录
- 产品库存
- 财务数据
- 交易日志
- 网站分析数据
- 日志文件
非结构化数据是指数据没有结构或表格化,也没有特定的格式。以下是一些非结构化数据的示例:
- 社交媒体帖子
- 聊天记录(文本)
- 视频
- 照片
- 网页
- 音频文件
半结构化数据是介于结构化数据和非结构化数据之间的一种结构化数据类型。它没有表格化的数据模型,但可以包含数据集中记录和字段的标签和语义标记。半结构化数据实质上是结构化和非结构化数据的组合。视频可能包含与日期或位置相关的元标记,但其中的信息没有结构。 以下是一些半结构化数据的示例: CSV、XML、JSON文件 HTML 电子邮件(电子邮件被认为是半结构化数据,因为它们有一定的结构,但不像结构化数据那样多。电子邮件通常包含标题、正文和附件。标题包含有关发件人、收件人和消息日期的信息。消息的正文包含消息的文本。)
数据文件类型
你刚刚了解了不同类型的数据,提到了几种文件类型。有许多不同类型的数据文件格式,每种都有自己的用途。表2-3显示了一些最常见的数据文件类型。
数据如何处理
数据处理有两种主要方式:批处理和实时处理。批处理是一种数据处理方式,数据在一段时间内收集,然后在以后的某个时间进行处理。这是大型数据集的常见数据处理方式,因为批处理数据可以比实时处理更高效。实时处理是一种数据处理方式,数据在收集后立即进行处理。这是需要快速处理数据的应用程序的常见数据处理方式,如欺诈检测或股票交易。
数据处理的频率也可以有所不同。连续处理是一种数据处理方式,数据在收集时连续进行处理。这是需要实时处理数据的应用程序的常见数据处理方式。定期处理是一种数据处理方式,数据按照规律的时间间隔进行处理。这是一些不需要实时处理数据的应用程序的常见数据处理方式,如财务报告。
数据处理的方式和频率取决于应用程序的具体需求。例如,需要处理大型数据集的应用程序可能使用批处理,而需要实时处理数据的应用程序可能使用实时处理。表2-4总结了数据处理的不同方式和频率。
批处理数据和流数据是两种不同的数据类型,它们的处理方式也不同。 批处理数据是一种在一段时间内收集数据,然后在以后的某个时间进行处理的数据。
流数据是在接收到数据时立即进行处理的数据。 批处理数据需要在处理、存储、分析和输入到ML模型之前先收集数据批次。
流数据持续流入,可以在生成时立即处理、存储、分析和采取行动。流数据可以来自多种分布式来源,具有多种不同的格式。
简而言之,流数据是连续生成并实时产生的数据。这种类型的数据可用于训练可以实时进行预测的ML模型。例如,可以使用流数据模型来检测欺诈或预测客户流失。
GitHub和Google的Colab概述
这一部分讨论了如何设置Jupyter Notebook和GitHub项目存储库。GitHub存储库可以保存您的数据集和您创建的低代码项目笔记本,比如本书中提到的Jupyter Notebook。
使用GitHub创建数据存储库供您的项目使用
GitHub是一个代码存储库,您可以免费存储Jupyter笔记本和实验原始数据。让我们开始吧!
1.注册一个新的GitHub帐户
GitHub为个人和组织提供个人帐户。创建个人帐户时,它将作为您在GitHub.com上的身份。创建个人帐户时,您必须选择该帐户的计费计划。
2.设置您项目的GitHub仓库
要设置您的第一个GitHub存储库,请参阅书的GitHub存储库中第2章"使用GitHub创建项目数据存储库"的完整步骤。您也可以参考GitHub文档中有关如何创建存储库的说明。 为您的存储库输入一个简短且易记的名称,例如"low-code book projects"。说明是可选的,但在这个练习中,请输入"Low-code AI book projects"。选择存储库的可见性 - 在这种情况下,默认设置为"Public",这意味着互联网上的任何人都可以看到此存储库。图2-10显示了您的设置应该是什么样子。
请让GitHub创建一个README.md文件。这是您可以为项目编写长描述的地方。保留其他默认设置:.gitignore允许您选择不跟踪的文件,而许可证告诉其他人可以做什么,以及不能做什么与您的代码。最后,GitHub提醒您正在在您的个人帐户中创建一个公共存储库。完成后,点击"创建存储库"。图2-11显示了页面应该是什么样子。
使用Google的Colaboratory进行低代码AI项目
多年前,如果您想学习Python,必须下载Python解释器并在计算机上安装它。对于初学者来说,这可能是一项令人望而却步的任务,因为它需要了解如何安装软件和配置计算机。如今,学习Python有很多方式,而无需在计算机上安装任何东西。您可以使用在线集成开发环境(IDE),允许您在Web浏览器中编写和运行Python代码。您还可以使用云端Python环境,提供Python解释器和启动所需的所有库。
这些在线和云端资源使学习Python变得比以往更容易,无论您的经验水平或技术专长如何。以下是使用在线和云端资源学习Python的一些好处:
- 无需安装
您可以立即开始学习Python,无需下载或安装任何软件。
- 随时随地访问
只要有互联网连接,您可以从任何地方使用在线和云端资源学习Python。
- 价格合理
在线和云端资源通常是免费或非常经济实惠的。
- 易于使用
在线和云端资源旨在易于使用,即使对初学者也是如此。
使用Google的Colaboratory(Colab),您可以构建您的低代码Python Jupyter Notebook。Colab是一个托管的Jupyter Notebook服务,无需设置即可使用,同时提供了计算资源,包括图形处理单元(GPU)。Colab在您的Web浏览器中运行,允许您编写和执行Python代码。Colab笔记本存储在Google Drive中,可以类似于共享Google文档或表格的方式共享。
Google Colaboratory是免费使用的,无需注册任何帐户或付费订阅。您可以与他人分享您的笔记本并一起完成项目。
1.创建一个Colaboratory Python Jupyter Notebook
前往Colab创建一个新的Python Jupyter笔记本。图2-13显示了主屏幕。
在标题栏中为笔记本命名,如图2-14(A)所示,并展开以显示目录(B)。然后点击+ Code按钮(C)添加一个用于放置代码的单元格。+ Text按钮允许您添加文本,如文档说明。
2.使用Pandas导入库和数据集
一旦您添加了代码单元格,您需要导入所需的任何库。在这个简单的示例中,您只需要导入Pandas。在单元格中键入import pandas as pd并通过单击箭头运行它,如图2-15所示。
Pandas库用于数据分析。通常,当您导入一个库时,您希望提供一种方法,以便每次都不必写出Pandas这些词。因此,pd是Pandas的一个简称(或别名)。这个别名通常是按照惯例使用的,用来缩短模块和子模块的名称。
这个数据集来自data.gov网站,标题是"美国成年人心脏病死亡数据"(图2-16)。
滚动页面直到您看到图2-17所示的部分。现在,有两种方法可以将文件导入到您的Jupyter Notebook中。您可以将文件下载到您的桌面,然后导入它,或者您可以使用URL。让我们使用URL方法。点击图2-17中显示的逗号分隔值文件,它会将您带到图2-18中显示的URL下载页面。
复制图2-18上网站中显示的URL。然后,前往您的Google Colab笔记本,输入图2-19中显示的代码到一个新的单元格(A)。通过单击箭头(B)运行该单元格。
您已编写了用于将数据集导入Pandas DataFrame的代码。Pandas DataFrame是一种用于以表格格式存储数据的二维数据结构,类似于电子表格。
现在,添加代码以显示DataFrame的前五行(或头部)。添加一个新的单元格,输入heart_df.head()到该单元格,然后运行该单元格。代码和输出如图2-20所示。
添加一个新的代码单元格。键入heart_df.info()并运行该单元格,以查看有关DataFrame的信息。.info()方法会为您提供有关数据集的信息。这些信息包括列数、列标签、列数据类型、内存使用情况、范围索引以及每列中的单元格数(非空值)。图2-21显示了输出。确切的值可能因下载数据的时间而异。
从.info()的输出中,您有15列字符串对象(这是定性数据)和4列数值列(定量数据)。将int64视为没有小数点的数字(例如,25),将float64视为带有小数点的数字(25.5)。
数据验证
作为最佳实践,验证从URL导入的任何数据,尤其是如果有CSV文件格式可以进行比较的情况。如果数据集页面列出了有关数据的更多元数据,比如列数和列名,你可以避免后续的步骤。但不幸的是,这就是处理数据的性质!
现在,返回到data.gov页面,将CSV文件下载到你的计算机。你要验证你下载的文件是否与从URL导入的文件匹配。
你可以通过将下载的文件上传到你的Colab笔记本,然后将该文件读入Pandas DataFrame来执行此操作。在你的第2章笔记本中,扩展目录以选择所示的文件夹(A)。然后,要上传文件,请选择上箭头文件夹(B)。
当你上传文件时,你会看到图2-23所示的警告消息。该警告基本上指出,如果运行时终止(如果你关闭Colab,可能会发生这种情况),则不会保存任何上传的文件。请注意,运行时为程序提供了运行所需的环境。
在上传后,刷新你的笔记本浏览器标签,并展开以查看目录。你的屏幕应如图2-24所示。
请注意文件名有多长 - 通过右键单击文件并将其重命名为heart.csv来重命名。你的屏幕应如图2-25所示。
在重命名文件后,您的屏幕应如图2-26所示。
因此,您已将文件重命名为heart.csv。现在,您需要复制文件的路径,如图2-27所示。为什么呢?因为您需要将确切的位置作为参数输入到Pandas read_csv方法中。右键单击heart.csv文件以获取路径。
添加一个代码单元格,输入以下代码。确保将文件路径粘贴在/content/heart.csv两个单引号之间。运行单元格并查看输出:
ini
heart_df = pd.read_csv('/content/heart.csv', error_bad_lines=False,
engine="python")
heart_df.head()
在新的单元格中输入heart_df.info()。运行该单元格以查看DataFrame的信息。将图2-21中的总列数与图2-28进行比较。图2-21有19列,而图2-28有20列。这意味着通过上传文件,添加了一个"Year"列。 "Year" 列的数据类型不是数值 - 它包含数字,但这些数字是用来排列和排序的,而不是用来计算的。图2-28表明您的机器学习用例中出现了首个脏数据案例。
在一个新单元格中输入heart_df.isnull().sum()
,如图2-29所示。运行该单元格。是否有任何空值?空值是表示缺少值的值。这是您第二个脏数据案例!您的三列中有空值。您将在后续章节中学习如何处理缺失的值。由于您目前没有一个具体的用例,您可能会想知道是否真的需要所有这些特征。请注意,特征是用于训练模型的输入数据。然后,模型使用这些特征进行预测。您将在后续章节中学习有关特征选择的内容。
您的数据质量问题是什么?
- 缺失值
大多数算法不接受缺失值。因此,当我们在数据集中看到缺失值时,可能会倾向于只是"删除所有具有缺失值的行"。但是,您可以使用不同的方法来处理缺失值,如下面的说明所述。
尽管 Pandas 会使用 NaN(不是数字)来填充空白处,但我们应该以某种方式处理它们。书中稍后会详细介绍这一点。
- 数据类型不正确
年份显示为 int64 数据类型,而应该是字符串对象,您需要将其视为定性的分类特征。
- 分类列
有很多字符串对象特征,它们不是数值型的。不能将这些特征值直接输入到机器学习模型中。这些特征需要进行独热编码,您将在后续章节中了解到这一点。
4.进行一些探索性数据分析
在结束本节之前,让我们来看一下探索数据的一些简单方法。想要查看特征 "Stratification2" 中的所有唯一值吗?在新的单元格中输入 "heart_df.Stratification2.unique()",如图2-30所示。运行该单元格。
让我们使用Seaborn的小提琴图来可视化这个特征。Seaborn是一个用于创建统计图形的Python库。你可以在同一个单元格中编写所有内容,如图2-31所示。这段代码使用Data_Value特征作为x轴,Stratification2作为y轴。请注意,Data_Value特征表示每个地区和群体中心脏病的发病率,如图2-32所示。
"长尾" 表示该特定特征的数据中有更多的离群值。小提琴的大体积表示中心脏病病例按种族分布的情况。
在以后的章节中,您将执行更多的数据分析并学习数据预处理。现在,将您的笔记本保存到 GitHub。在 Colab 菜单中,单击"文件" > "在 GitHub 中保存副本",如图2-33所示。
图2-34显示了设置。在"存储库"下拉菜单中,选择要保存笔记本的存储库。在"分支"下,选择"Notebooks"(您之前创建的)。保持默认选项"包括到 Colaboratory 的链接"。这将在 GitHub 中显示一个链接,允许您直接从 GitHub 打开您的笔记本。
在Colab将笔记本复制到GitHub后,它会直接带您转到GitHub,如图2-35所示。
刷新仓库的屏幕。您应该会看到您的Colab Jupyter笔记本,如图2-36所示。
总结
本章概述了书中使用的用例和数据集。您了解了数据类型以及结构化、半结构化和非结构化数据以及批处理和流处理数据之间的区别。您通过一个免费的基于浏览器的Python Jupyter Notebook和GitHub进行了实际操作。您发现脏数据很棘手,可能会影响数据类型和将数据导入到ML模型中。
在下一章中,您将了解ML框架,并将使用AutoML。您将获得一个经过预处理的数据集,您所需要做的就是将数据集上传到AutoML框架中,而无需编写任何代码,便可以构建和训练一个预测模型。