⑴Tablesaw是一款可以对各类数据表进行处理的强大软件,基于Java语言开发,具有创建统计模型和可视化效果的能力,通过该软件用户可以各种可视化数据绘图,可以通过绘图的方式将表格数据直观的展示出来;Tablesaw功能丰富简单易用,内置强大稳定的数据框架和可视化库,可用于加载转换过滤和总结数据,对于经常处理各种表格数据的用户可下载这款软件进行使用,该软件支持各类数据可视化,可自由选择多种图形可视化显示,非常方便实用。
⑵从RDBMS,Excel,CSV,JSON,HTML或固定宽度文本文件导入数据,无论这些文件是本地文件还是远程文件(http,S等
⑶将数据导出到CSV,JSON,HTML或固定宽度文件。
⑷通过追加或合并表
⑸添加和删除列或行
⑹排序,分组,查询
⑺Tablesaw通过为Plot.ly JavaScript绘图库提供包装器来支持数据可视化。这是新库运行的一些示例。
⑻描述性统计:平均值,最小值,最大值,中位数,总和,乘积,标准差,方差,百分位数,几何平均值,偏度,峰度等。
⑼Plot.ly支持多种可视化类型。Tablesaw已经支持许多种,包括时间序列图,柱状图,D直方图,箱线图,折线图,面积图,散点图,D散点图,气泡图,排列图,饼图,和条形图。
⑽我们支持地块上的多种变体。例如,对于条形图,我们支持垂直和水平,一变量以及分组或堆叠的图表。
⑾我们不断增加对许多其他类型的支持,包括地理地图,树图,网络图,热图,数据图,分布图,D表面,D色带,风玫瑰图,三次图,D密度图,等高线图,树-地图,小提琴图,散点图矩阵等。
⑿我们提供了一个一致的Java
⒀API,用于使用构建器,键入安全枚举和其他Java功能来构造这些图,以最大程度地减少使用基于JavaScript的工具时的拼写和其他问题。
⒁这些地块具有单一,一致且专业的外观。
⒂每个图表都是交互式的。它们使用常见的交互式工具系列进行渲染,以进行保存,打印,平移,缩放,选择点等。
⒃支持的自定义范围非常广泛,包括字体,图例,自定义轴,尖峰,悬停效果等。您几乎总是可以得到所需的可视化效果。
⒄当您准备与更广阔的世界共享可视化效果时,可以在网页中使用输出
⒅注意:为了最大程度地减少核心库的大小,某些阅读器(当前为JSON,HTML表和Excel文件打包在单独的模块中。您需要将它们包括在项目中才能使用这些Table.read()方法。
⒆有关可用方法的列表,请参见DatadocReader的Javadoc Table.read()。
⒇文本文件(CSV,制表符分隔,固定宽度字段等
⒈大多数文本格式都被类似地对待。本节介绍了诸如CSV之类的矩形文本格式,但是许多信息也与JSON,Excel和HTML表有关。
⒉从磁盘上的CSV文件加载数据的最简单方法是使用:
⒊Table t = Table.read().file("myFile.csv");
⒋此方法为文件名以外的所有内容提供默认值。我们假设列之间用逗号分隔,并且文件中有一个标题行,我们用它来创建列名。如果一个或多个默认值不正确,则可以使用类CsvReadOptions自定义加载过程。
⒌您可以使用构建器创建选项对象:
⒍该头选项指示是否有在该文件的顶部的一行标题行。如果header为false,我们将所有行都视为数据。
⒎例如,如果要加载制表符分隔的文件,则分隔符选项允许您指定除逗号以外的分隔符。
⒏使用dateFormat可以提供一种读取日期的格式。文件中的所有日期都应使用相同的格式,并且该格式与java.time.format.DateTimeFormatter中定义的格式相同。
⒐创建表时,将基于从中加载文件的名称为其指定默认名称。您可以随时使用更改名称table.setName(aString);。表名称用于打印表及其相关信息。
⒑使用所有这些方法,Tablesaw会查看文件中每一列中的数据,并对类型进行疯狂的猜测。实际上,它查看数据样本并应用一些启发式方法。当然,数据集可能包含类型推断样本中遗漏的稀有值。如果发生这种情况,您可以设置选项sample(false)以在执行类型推断时考虑所有数据。
⒒如果似乎没有其他合适的方法,则将该列读取为StringColumn。通常,Tablesaw会正确处理,但有时需要一点帮助。
⒓指定每一列的数据类型
⒔通过一点帮助,我们意味着您可以通过将ColumnType对象的数组传递给read(。csv(方法来显式指定类型。例如:
⒕如果这看起来很麻烦,那么它确实具有一些优势。
⒖首先,由于系统无需推断列类型,因此减少了加载时间。如果文件很大,则节省的时间可能很长。
⒗其次,它使您可以完全控制列的类型。
⒘在某些情况下,您必须指定列类型,因为Tablesaw无法正确猜测。例如,如果文件中的时间编码为HHmm,以使中午显示为“
⒙”,则无法推断这意味着中午:,而不是整数。
⒚捷径:获取猜测的列类型
⒛如果表中有许多列,那么手工构建列类型数组可能很繁琐。为了帮助您,CsvReader提供了一些方法,这些方法可以以数组形式或字符串形式返回推断出的ColumnType。格式化字符串,使其类似于Java数组文字。即使读取文件失败,也可以使用此方法。
①请注意,返回的String是一个合法的数组文字,您可以粘贴到Java代码中:类型以逗号分隔,并且提供索引位置和列名,以便将它们解释为注释。您可以将其粘贴到您的代码中,然后对其进行编辑以修复任何不正确的列类型。
②指定列类型的另一个优点是,如果不需要,可以跳过某些列。您可以使用特殊的“ SKIP”列类型来阻止导入这些列,如下所示:
③在此示例中,第一列和最后一列均未加载。
④Tablesaw具有一组预定义的字符串,当从CSV文件读取时,它会解释为丢失的数据。它们是:“ NaN”,“ *”,“ NA”,“
⑤null”,当然还有空字符串“”。
⑥当遇到这些字符串之一时,它将被Tablesaw中特定于类型的丢失指示符替换。对于字符串,这是一个空字符串。对于双打,就是Double.NaN。有关更多信息,请参见JavaDoc
⑦for ColumnType。
⑧如果文件具有不支持的缺失值指示符(例如“-”,则可以在选项构建器中提供它。
⑨由于语言环境和多种可能的格式,因此导入日期和时间可能会比较棘手。与其他列类型一样,Tablesaw会尽力确定要表示的类型并将其正确导入。如果失败,则有两件事可以帮助您。首先是指定语言环境。语言环境还可以帮助处理数字格式。
⑩第二个是为每个时间列指定精确格式。
Ⅰ使用Stream API
Ⅱ当您在文件系统上存储了CSV文件时,以上所有示例都试图简化加载过程。加载CSV的一种更灵活的方法是使用Stream接口,该接口采用java.io.InputStream作为参数。
ⅢTable.read().csv(InputStream stream, String tableName);
Ⅳ它可以用来读取本地文件,也可以用来在S等网络中读取网络文件。这是如何使用它的一些示例。
Ⅴ从网站加载CSV:
Ⅵ从S加载CSV:
Ⅶ默认情况下,我们假设您的文件采用UTF-编码。如果文件使用其他编码,则加载过程会稍有不同。您需要在使用正确编码构造的FileInputStream上打开阅读器。这是一个例子。
Ⅷ从数据库查询结果创建表同样容易。在这种情况下,您无需指定列类型,因为它们是从数据库列类型推断出来的。
ⅨTable t = Table.read().db(ResultSet resultSet, String tableName);
Ⅹ这是一个更完整的示例,其中包括JDBC设置:
㈠从HTML,JSON,Excel导入
㈡Tablesaw支持从HTML,JSON和Excel导入数据。有关更多信息,请参见Javadoc中的Table.read(方法。您将需要添加相应的可选依赖项:
㈢条形图,饼图和帕累托图
㈣Tablesaw是Java数据科学平台,可以过滤和转换数据集。它还为可视化提供了广泛的支持。在此讨论中,我们将使用来自NOAA的Tornado数据集,该数据集可在Tablesaw项目的data文件夹中找到。
㈤尽管Tablesaw可以生成出版质量的图形,但这里的重点是探索性分析,其中内容和易用性比修饰更重要。在这里,我们重点介绍一些用于处理单变量数据的常见绘图类型:
㈥可以在类BarPieAndParetoExample.java中找到本文档中用于生成图表的所有代码。
㈦我们建议您打开该课程并继续学习。
㈧首先,我们加载并清理龙卷风数据集。我们使用Table.read(。csv(打开文件。
㈨接下来,我们清理文件。我们要使用比例列。龙卷风根据其风速被分配为从到的比例,但是我们的数据集缺少编码为-的缺失值,这将使图表消失。为了解决这个问题,我们将比例列中的每个-值设置为缺失值指标。然后,我们可以创建图。
㈩我们从无处不在的条形图开始。条形图通常显示已汇总为组的数据。要创建条形图,您需要做两件事:
一些类别将它们分组
我们首先根据龙卷风的强度计算与龙卷风有关的死亡人数。
然后我们绘制结果:
绘制平均值,中位数和其他汇总统计信息
在上面的示例中,我们创建了显示值总和的图。为此,我们首先在表上调用summary(,传入要汇总的列的名称,聚合函数sum,并应用子句by(来指定如何对数据进行分组。
在AggregationFunctions类中定义了许多聚合函数,例如sum,mean,median,standardDeviation,percentile(n,max,kurtosis等。我们可以使用任何聚合函数代替sum。在这里,我们将看一下平均值。
我们采用与上述相同的策略,使用汇总方法创建一个新表,该表收集每个“标度”值的平均受伤人数。一旦有了,我们就创建并显示情节
在有关高级绘图功能的下一部分中,我们将介绍如何创建堆叠和分组的条形图。
饼图被广泛批评和普遍存在。通常,条形图更易于解释,因此通常是首选。我们将被撤职,但是不提供饼图支持。此示例显示了一个饼图,该饼图显示的数据与上面的第一个条形图相同:
条形图上的一个简单变化是帕累托图。在下面的曲线图中,死亡人数是按美国州求和的,结果按照总数从高到低的顺序排序。示例代码中有详细信息。
创建气泡图的更多选项 (#) - 谢谢 rayeaster
修复对java.sql.Time的支持 (#) - 感谢 brainbytes。
允许在聚合时使用空切片 (#) - 谢谢 emillynge
修正ColumnType.pare中的NPE(#)
修正集的NPE(#)