Java 中tableaw 实战教程

java中tableaw库通过简单的API实现过滤、连接、绘制和操作表格数据。支持CSV,数据库,Excel等数据源。

安装依赖

tableaw是用于分析表格数据的开源Java库,构建在Java 8流之上。它可以从GitHub下载,也可以作为Maven或Gradle项目的依赖项添加。撰写本文时的最新版本是0.43.1。

使用Maven添加tableaw:

    <dependency><groupId>tech.tablesaw</groupId><artifactId>tablesaw-core</artifactId><version>0.43.1</version></dependency>

Gradle依赖:

implementation 'tech.tablesaw:tablesaw-core:0.43.1'

现在我们准备开始在Java代码中使用Tablesaw。

tableaw简介

tableaw是Randall Griffith在2016年创建的,它提供了一个简单的API来处理Java中的表格数据,类似于Python中的Pandas。它由Anthropic维护,并在Apache 2.0许可下可用。

该库提供了两个主要结构-表和列-用于处理表格数据。Table表示具有多个已命名列的完整数据集,而Column提供在单个列上操作的api。tableaw在底层使用Java 8流来优化数据处理。

tableaw的一些关键特性和功能包括:

  • 从CSV,数据库,Excel, HTML等导入数据
  • 过滤,抽样,聚合,分组和连接数据
  • 添加/删除/重新排序的列
  • 处理缺失值
  • 执行数学,文本,日期/时间和统计功能
  • 创建图表和数据可视化
  • 将数据导出为各种格式

接下来,我们将通过一些实际操作的示例来说明如何使用Tablesaw。

创建表

通过编程增加列方式创建表:

Table table = Table.create("MyTable").addColumns(Column.create("id", IntColumn.create()),Column.create("name", StringColumn.create()),Column.create("age", IntColumn.create()));	

然后从外部数据源导入数据:

Table table = Table.read().csv("data.csv");

增加或删除列:

table.addColumns(Column.create("salary", FloatColumn.create()));
table.removeColumns("id");

列的顺序可以调整:

table.columnOrder("age", "name", "salary");

查询和过滤

tablesaw支持sql语法查询表:

Table results = table.selectWhere(table.intColumn("age").isGreaterThan(30));

这里过滤age大于30的记录,也支持分组聚合数据:

Table summary = 
table.summarize("age", table.intColumn("age").average()).by("department");

这里计算每个department分组的平均年龄。

数学方法

double[] numbers = {1, 2, 3, 4};
DoubleColumn nc = DoubleColumn.create("nc", numbers);
System.out.println(nc.print());
double stdDev = nc.standardDeviation();

连接和合并

表格支持纵向合并(增加列),横向合并(增加行):

Table joined = table1.concat(table2); // adds rowsTable wide = table1.join(table2); // adds columns

对于基于键的连接,Tablesaw支持内部连接、左外连接、右外连接和全外连接:

Table innerJoin = table1.innerJoin(table2, "id");Table leftJoin = table1.leftOuterJoin(table2, "id");

转换数据

tableaw提供了许多转换列数据的选项,包括:

sortAscending()和sortdescent () map()应用函数set()来更改值removeMissing()来过滤行bin()到桶/离散logN()和其他数学函数lowerCase(), upperCase(), trim()用于文本

  • sortAscending()sortDescending() 排序数据
  • lowerCase(), upperCase(), trim()对文本进行处理
StringColumn s = StringColumn.create("sc", new String[] {"foo", "bar", "baz", "foobarbaz"});
StringColumn s2 = s.copy();
s2 = s2.replaceFirst("foo", "bar");
s2 = s2.upperCase();
s2 = s2.padEnd(5, 'x'); // put 4 x chars at the end of each string
s2 = s2.substring(1, 5);// this returns a measure of the similarity (levenshtein distance) between two columns
DoubleColumn distance = s.distance(s2);
  • map() 支持函数映射转换
DoubleColumn other = DoubleColumn.create("other", new Double[] {10.0, 20.0, 30.0, 40.0});
DoubleColumn newColumn = other.multiply(4);
System.out.println(newColumn.print());

数据结果:

Column: other * 4.0
40
80
120
160
  • set() 函数改变值
  • removeMissing() 过滤行
  • bin() to 分桶或散列
  • logN() 及其他数学函数

数据可视化

tableaw通过为Plot.ly提供包装器来支持数据可视化。plot() 方法与JSPlot库集成,以生成直方图、散点图和条形图等可视化效果。以下是新库的几个示例。

图1

table.plot().histogram("age", 50);

绘图可以自定义,保存到文件中,并显示在Swing/JavaFX窗口中。

输入和输出

tableaw支持读写各种文件格式:

  • CSV, TSV
  • Excel (XLSX)
  • HTML tables
  • JSON
  • Databases via JDBC

并支持导出为PDF、Markdown和Excel等格式。

Table table = Table.read().csv("data.csv");table.write().csv("output.csv");

高级功能

tableaw的一些更高级的功能包括:

  • 通过过滤、插入处理缺失数据
  • 大型数据集的多线程并行处理
  • 文本分析功能,如词干提取,n-grams
  • 具有日期/时间列的时间序列分析
  • 创建子表和采样

总结

tableaw提供了一个简单而强大的API,用于分析和操作Java中的表格数据。tableaw具有类似sql的语法,支持连接和聚合、文件导入/导出、绘图集成等功能,是处理表格数据的绝佳选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jvm-46-jvm Thread Dump 线程的信息获取+可视分析化工具 FastThread

拓展阅读 JVM FULL GC 生产问题 I-多线程通用实现 JVM FULL GC 生产问题 II-如何定位内存泄露&#xff1f; 线程通用实现 JVM FULL GC 生产问题 III-多线程执行队列的封装实现&#xff0c;进一步抽象 jvm-44-jvm 内存性能分析工具 Eclipse Memory Analyzer Tool (MAT) / 内…

手机上怎么拍证件照,操作简单且尺寸颜色标准的方法

在数字化时代&#xff0c;手机已成为我们日常生活中不可或缺的一部分。它不仅是通讯工具&#xff0c;更是我们拍摄证件照的便捷利器。然而&#xff0c;目前证件照制作工具鱼龙混杂&#xff0c;很多打着免费名号的拍照软件背后却存在着泄漏用户信息、照片制作不规范导致无法使用…

PHP使用RabbitMQ(正常连接与开启SSL验证后的连接)

代码中包含了PHP在一般情况下使用方法和RabbitMQ开启了SSL验证后的使用方法&#xff08;我这边消费队列是使用接口请求的方式&#xff0c;每次只从中取出一条&#xff09; 安装amqp扩展 PHP使用RabbitMQ前&#xff0c;需要安装amqp扩展&#xff0c;之前文章中介绍了Windows环…

【Go 基础】channel

Go 基础 channel 什么是channel&#xff0c;为什么它可以做到线程安全 Go 的设计思想就是&#xff1a;不要通过共享内存来通信&#xff0c;而是通过通信来共享内存。 前者就是传统的加锁&#xff0c;后者就是 channel。也即&#xff0c;channel 的主要目的就是在多任务间传递…

系统监控——分布式链路追踪系统

摘要 本文深入探讨了分布式链路追踪系统的必要性与实施细节。随着软件架构的复杂化&#xff0c;传统的日志分析方法已不足以应对问题定位的需求。文章首先解释了链路追踪的基本概念&#xff0c;如Trace和Span&#xff0c;并讨论了其基本原理。接着&#xff0c;文章介绍了SkyWa…

【查询目录】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

dell电脑开不了机怎么回事?戴尔电脑无法开机解决方法

dell戴尔电脑开不了机&#xff0c;这是很多使用dell电脑用户常遇到的问题。这种故障情况是由多种原因引起&#xff0c;包括硬件故障、软件问题或电源问题等等。dell电脑开不了机怎么办呢&#xff1f;下面便为大家介绍一下相关解决修复方法&#xff0c;帮助用户解决戴尔电脑无法…

ansible自动化运维(二)ad-hoc模式

目录 Ansible模块&#xff08;ad-hoc模式&#xff09; 1.command模块&#xff1a;远程执行命令 2.shell 模块&#xff1a;远程执行命令&#xff0c;支持管道&#xff0c;重定向 3.Raw模块&#xff1a;先登录&#xff0c;再执行&#xff0c;最后退出 4.Script模块&#xff…

深入解析级联操作与SQL完整性约束异常的解决方法

目录 前言1. 外键约束与级联操作概述1.1 什么是外键约束1.2 级联操作的实际应用场景 2. 错误分析&#xff1a;SQLIntegrityConstraintViolationException2.1 错误场景描述2.2 触发错误的根本原因 3. 解决方法及优化建议3.1 数据库级别的解决方案3.2 应用层的解决方案 4. 友好提…

windows平台使用C#创建系统服务

使用 C# 在 Windows 平台创建和管理系统服务 在 Windows 平台上&#xff0c;系统服务&#xff08;Windows Service&#xff09;是一种运行在后台、无需用户交互的应用程序。系统服务广泛应用于长期任务处理、网络监听、后台调度等场景。本文将详细介绍如何使用 C# 创建一个 Win…

Spring Cloud Alibaba 之 “Sentinel”

从网上下载好sentinel-dashboard-1.6.3.jar&#xff0c;然后执行 java -jar sentinel-dashboard-1.6.3.jar,执行成功之后在浏览器输入localhost:8080&#xff0c;Sentinel的登录名和密码都是sentinel,登陆成功之后看到只有一个首页。 接下来开始整合Spring Cloud Alibaba Sen…

web移动端、pc端获取浏览器指纹-fingerprintjs插件(类似mac地址)

主要还是使用fingerprintjs插件 安装 npm install fingerprintjs/fingerprintjs引入&#xff08;这里封装成公共js&#xff09; import FingerprintJS from fingerprintjs/fingerprintjs;/*** 获取用户的浏览器指纹* returns visitorId 这是一个唯一标识符&#xff0c;可以被…

把用tab/空格 分割表示的文本转为json 脚本

比如如下文本&#xff1a; Timestamp : Sat Nov 16 18:28:46 2024 Driver Version : 560.35.03 CUDA Version : 12.560.35.03 Attached GPUs : 3 N/A …

常见Linux命令(详解)

文章目录 常见Linux命令文件目录类命令pwd 打印当前目录的绝对路径ls 列出目录内容cd 切换路径mkdir 建立目录rmdir 删除目录touch 创建空文件cp 复制文件或目录rm 移除文件或者目录mv 移动文件与目录或重命名cat 查看文件内容more 文件分屏查看器less 分屏显示文件内容head 显…

C语言:数组长度与数组排序

1、数组长度 在实际编程中&#xff0c;有时数组的长度不能提前确定&#xff0c;如果这个变化范围小&#xff0c;那么使用常量表达式定义一个足够大的数组就可以&#xff0c;如果这个变化范围很大&#xff0c;就可能会浪费内存&#xff0c;这时就可以使用变长数组。请看下面的代…

前端热门面试题目——React、Node

img 标签的 srcset 属性的作用 srcset 属性允许开发者为不同设备或分辨率提供多个图像选项&#xff0c;优化加载的图片以适应设备的屏幕大小和分辨率。这提高了性能和用户体验。 示例&#xff1a; <img src"default.jpg" srcset"small.jpg 480w, medium.j…

数据结构初阶1 时间复杂度和空间复杂度

本章重点 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度OJ练习 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢&#xff1f;比如对于以下斐波那契数列&#xff1a; long long Fib(int N) { if(N < 3) return 1;return Fib(N-1) Fib(N-2); }斐…

计算机网络复习4——网络层

两种服务之争 路由器在网络层、数据链路层、物理层 网际协议IP IP解决了异构网络互联问题 网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。 #网络层四个协议 网际协议IP ( Internet Protocol) 地址解析协议ARP(Address Resolution Protocol) 网际控制报文协议ICMP(…

【C语言】数学挑战(小Z和跳跳棋)

相信你是最棒哒&#xff01;&#xff01;&#xff01; 文章目录 一、重礼仪的贪心小Z 题目代码 二、跳跳棋 题目代码&#xff1a; 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可仅供参考 一、重礼仪的贪心小Z 问题描述 小Z最近在研究一种倒酒礼仪“步步…

qt QPrinter详解

1、概述 QPrinter类是Qt框架中用于打印输出的绘图设备。它表示打印出来的一系列页面&#xff0c;并提供了一组附加功能来管理特定于设备的特性&#xff0c;比如方向和分辨率。QPrinter可以生成PDF文档&#xff0c;也可以将内容发送到打印机进行实际打印。它继承自QPagedPaintD…