使用 ML.NET DataFrames 和 ScottPlot 进行探索性数据分析(EDA)

目录

创建 Polyglot Notebook

加载数据

数据概览

数据可视化

结论


探索性数据分析(EDA)是机器学习中的一个重要步骤,它可以帮助我们了解数据的分布、关系和异常值,从而为后续的建模和预测提供指导。

在这篇文章中,我将介绍如何使用 ML.NET DataFrames 和 ScottPlot 进行 EDA,一起探索著名的泰坦尼克号数据集。

这个数据集包含了泰坦尼克号上乘客的信息,以及他们是否在船沉没时幸存下来。我们可以在这里下载:https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv

创建 Polyglot Notebook

首先,我们需要安装 Polyglot Notebooks,它是一个 Visual Studio Code 扩展。Notebooks 非常适合于数据科学家和机器学习工程师,可以让我们在同一个笔记本中编写代码、查看数据、绘制图表、编写文档,而不需要切换到其他工具。

我们可以在 VS Code 中搜索并安装 Polyglot Notebooks 扩展:

图片

安装好扩展后,我们就可以创建一个新的 Polyglot Notebook 文件,并选择 C# 作为默认的代码语言。

图片

加载数据

在开始编写代码之前,我们需要添加一些 NuGet 包,来使用 ML.NET DataFrames 和 ScottPlot 的功能。

我们可以在笔记本中使用 #r "nuget:..." 命令来添加 NuGet 包。我们需要添加以下三个包:

  • Microsoft.Data.Analysis: 提供 ML.NET DataFrames 的 API

  • ScottPlot: 提供绘图的 API

#r "nuget: Microsoft.Data.Analysis"
#r "nuget:ScottPlot"

安装好这些包后,我们就可以开始编写代码了。

我们首先使用 ML.NET DataFrames 加载泰坦尼克号数据集,并显示前5行数据:

using Microsoft.Data.Analysis;

var df = DataFrame.LoadCsv("titanic.csv");

df.Head(5)

图片

数据概览

我们可以使用 df.Info() 查看数据的概览信息,包括数据类型、行数、列数、缺失值等。

对于任何数据,我们最好从这里开始,了解数据的基本情况。

图片

可以看到,这个数据集包含 8 列,每列数据类型分别是Single(数字)和String(字符串)。并且每列的长度一样,代表每列数据应该没有null值。

我们还可以使用 df.Description() 查看数字类型列的值范围,包括最大、最小和均值。

图片

从这里我们可以发现一些有趣的事实:

  • 平均年龄是 29.47 岁,最小年龄是 0.42 岁(可能是婴儿),最大年龄是 80 岁。

  • 平均费用是 32.30 美元,最低费用是 0 美元(可能是免费乘客),最高费用是 512.33 美元(可能是豪华舱)。

  • 平均幸存率是 0.38,也就是说只有三分之一的人活了下来。

你还可以使用 ML.NET DataFrames 提供的其他方法,了解数据集的更多情况,比如数据中的唯一值。

图片

数据可视化

接下来,我们使用 ScottPlot 绘制图表,来更好地了解数据。

我们首先需要配置 ScottPlot:

using Microsoft.DotNet.Interactive.Formatting;
Formatter.Register(typeof(ScottPlot.Plot), (p, w) => 
    w.Write(((ScottPlot.Plot)p).GetImageHtml()), HtmlFormatter.MimeType);

然后就可以可视化数据中的唯一值:

图片

我们还可以使用散点图,观察一下Age(年龄)Fare(费用)的相关性:

图片

从这个图表我们可以看出:

  • 大部分人的费用都小于100,有钱人集中在20-50岁之间。

  • 费用和年龄没有明显的线性关系,但是有一些离群值,比如费用超过500的人和年龄超过70的人。

结论

本文介绍了如何使用 ML.NET DataFrames 和 ScottPlot 进行 EDA 的基础知识。

通过 EDA,我们可以了解数据的基本情况、分布和关系,从而为后续的建模和预测提供指导。

ML.NET DataFrames 和 ScottPlot 是两个非常强大和方便的工具,可以让我们在 C# 中轻松地处理和可视化数据。

如果你想了解更多关于 ML.NET DataFrames 和 ScottPlot 的用法,请查看官方文档。

引入地址