从文件获取数据
Kotlin Notebook, 结合 Kotlin DataFrame 库, 让你能够处理非结构化数据和结构化数据. 这样的组合提供了一种灵活性, 能够将非结构化数据, 例如来自 TXT 文件的数据, 转换为结构化数据集.
对于数据转换, 你可以使用各种方法, 例如 .add(), .split(), .convert(), 和 .parse(). 此外, 这个工具集还能够获取和操作来自各种结构化文件格式的数据, 包括 CSV, JSON, XLS, Parquet, 和 Apache Arrow. 关于所有支持的格式, 请参见 DataFrame 文档.
在这篇向导中, 你会通过多个示例, 学习如何获取, 优化(Refine), 并处理数据.
开始前的准备工作
Kotlin Notebook 需要使用 Kotlin Notebook plugin, IntelliJ IDEA 默认捆绑并启用了这个插件.
如果无法使用 Kotlin Notebook 功能, 请确认启用了 plugin. 详情请参见 设置环境.
要遵循本教程进行操作, 需要执行以下步骤:
创建一个 新的 Kotlin Notebook.
导入 Kotlin DataFrame:
%use dataframe
获取数据
要在 Kotlin Notebook 中从文件获取数据, 请使用 DataFrame.read() 函数:
DataFrame.read() 函数会根据文件扩展名和内容自动检测输入格式.
你也可以传入其他参数, 来控制 DataFrame 库读取输入数据的方式. 例如, 下面的代码为 CSV 文件指定自定义分隔符(;):
显示数据
在你的 Notebook 中得到了数据之后, 你可以显示它. 最简单的方法是将数据保存在变量中, 然后返回它:
这段代码将你的文件中的数据显示为一个交互式表格:

你可以使用这个视图来检查值, 查看列名, 并很容易的了解数据集状态.
检查数据结构
要深入了解你的数据的结构或模式, 请对你的 DataFrame 变量使用 .schema() 函数.
例如, 运行 jsonDf.schema(), 会列出你的 JSON 数据集中每个列的类型:

在 Kotlin Notebook 中, 你也可以使用自动完成功能. 通过这个功能, 你能够快速访问和操作你的 DataFrame 的属性. 载入你的数据之后, 只需要输入 DataFrame 变量, 后面跟一个点号(.), 就可以看到可以访问的列以及它们的类型的列表.

优化数据(Refine Data)
Kotlin DataFrame 提供了各种操作来优化你的数据集. 例如, 分组, 过滤, 更新, 或者 添加新的列. 这些函数对于数据分析非常重要, 让你能够高效的组织, 清理, 并转换你的数据.
例如, 我们来看看 movies.csv 数据集. 它在同一个单元格中存储了电影名称和发布年份. 我们的目的是要优化这个数据集, 以便于分析:
装载数据
使用
.read()函数将文件装载到DataFrame中:val movies = DataFrame.read("movies.csv")添加列
从
title列中抽取发布年份, 添加一个新的year列:val moviesWithYear = movies .add("year") { "\\d{4}".toRegex() .findAll(title) .lastOrNull() ?.value ?.toInt() ?: -1 } moviesWithYear更新值
从电影标题中删除发布年份, 更新
title列:val moviesTitle = moviesWithYear .update("title") { "\\s*\\(\\d{4}\\)\\s*$".toRegex().replace(title, "") } moviesTitle以上代码将电影标题保留在一个列中, 并将发布年份移到另一个列.
过滤行
要只关注特定的数据, 请使用
.filter()函数. 例如, 要只保留 1986 年之后发布的电影, 请运行以下代码:val newMovies = moviesTitle.filter { year >= 1996 } newMovies删除列
要删除不需要的列, 请使用
.remove()函数:val refinedMovies = newMovies.remove { movieID } refinedMovies
我们来比较一下, 下面是优化之前的数据集:

下面是优化后的数据集:

导出数据
在 Kotlin Notebook 中优化数据之后, 你可以轻松的导出处理后的数据.
你可以使用各种 .write() 函数来实现这个目的. 它支持保存为各种格式, 包括 CSV, JSON, XLS, XLSX, Apache Arrow, 甚至还有 HTML 表格. 关于所有支持的格式, 请参见 DataFrame 文档. 在共享你的发现, 创建报表, 或者将你的数据用于进一步分析时, 这会非常有用.
例如, 我们将结果保存为以下几种文件:
保存为 JSON 文件, 使用
.writeJson()函数:refinedMovies.writeJson("movies.json")保存为 CSV 文件, 使用
.writeCsv()函数:refinedMovies.writeCsv("movies.csv")保存为 Apache Arrow 文件, 使用
.writeArrowIPC()和.writeArrowFeather()函数:refinedMovies.writeArrowIPC("movies.arrow") refinedMovies.writeArrowFeather("movies.feather")
你也可以使用 .toStandaloneHTML() 函数, 在浏览器中打开一个独立的 HTML 表格:
下一步做什么
学习使用 Kandy 库 进行数据可视化
阅读 在 Kotlin Notebook 中使用 Kandy 进行数据可视化, 学习数据可视化的更多知识
关于 Kotlin 中用于数据科学和分析的工具和资源的广泛的概述, 请参见 用于数据分析的 Kotlin 和 Java 库