当前位置: 首页 > news >正文

Spring Boot集成tablesaw插件快速入门

1 什么是tablesaw?

Tablesaw是一款Java的数据可视化库,主要包括两部分:

  • 数据解析库,主要用于加载数据,对数据进行操作(转化,过滤,汇总等),类比Python中的Pandas库;

  • 数据可视化库,将目标数据转化为可视化的图表,类比Python中的Matplotlib库。

与Pandas不同的是,Tablesaw中的表格以列(Column)为基本单位,因此大部分操作都是基于列进行的。当然也包括部分对行操作的函数,但是功能比较有限

1.1 tablesaw目录说明

  1. aggregate:maven 的项目父级项目,主要定义项目打包的配置。

  2. beakerx:tablesaw 库的注册中心,主要注册表和列。

  3. core:tablesaw 库的核心代码,主要是数据的加工处理操作:数据的追加,排序,分组,查询等。

  4. data:项目测试数据目录。

  5. docs:项目 MarkDown 文档目录。

  6. docs-src:项目文档源码目录,主要作用是生成 MarkDown 文档。

  7. excel:解析 excel 文件数据的子项目。

  8. html:解析 html 文件数据的子项目。

  9. json:解析 json 文件数据的子项目。

  10. jsplot:数据可视化的子项目,主要作用加载数据生成可视化图表。

  11. saw:tablesaw 读写图表数据的子项目。

2 环境准备

2.1 数据库安装

数据库安装这里不做详细阐述,小伙伴们可自行安装,在docker环境下可执行:

docker run --name docker-mysql-5.7 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7

2.2 数据库表初始化


create database springboot_demo;
create table user_info
(
user_id     varchar(64)          not null primary key,
username    varchar(100)         null ,
age         int(3)               null ,
gender      tinyint(1)           null ,
remark      varchar(255)         null ,
create_time datetime             null ,
create_id   varchar(64)          null ,
update_time datetime             null ,
update_id   varchar(64)          null ,
enabled     tinyint(1) default 1 null
);
INSERT INTO springboot_demo.user_info
(user_id, username, age, gender, remark, create_time, create_id, update_time, update_id, enabled)
VALUES('1', '1', 1, 1, '1', NULL, '1', NULL, NULL, 1);

3 代码demo

3.1 完成目标

利用tablesaw加工和处理二维数据,并且可视化

3.2 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springboot-demo</artifactId><groupId>com.wkf</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>tablesaw</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>tech.tablesaw</groupId><artifactId>tablesaw-core</artifactId><version>0.43.1</version></dependency><dependency><groupId>tech.tablesaw</groupId><artifactId>tablesaw-jsplot</artifactId><version>0.43.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency></dependencies>
</project>

3.3 application.yaml

server:port: 8088
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSourceurl: jdbc:mysql://127.0.0.1:3305/springboot_demo?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: 123456

3.4 读取csv数据

    @Beforepublic void before() {log.info("init some data");tornadoes = Table.read().csv("D:/gitProject/springboot-demo/tablesaw/src/main/resources/data/tornadoes_1950-2014.csv");}

3.5 打印列名

    @Testpublic void columnNames() {System.out.println(tornadoes.columnNames());}

运行效果:

在这里插入图片描述

3.6 查看shape

    @Testpublic void shape() {System.out.println(tornadoes.shape());}

运行效果:

在这里插入图片描述

3.7 查看表结构

    @Testpublic void structure() {System.out.println(tornadoes.structure().printAll());}

运行效果:

在这里插入图片描述

3.8 查看数据

    @Testpublic void show() {System.out.println(tornadoes);}

运行效果:

在这里插入图片描述

3.9 表结构过滤

    @Testpublic void structurefilter() {System.out.println( tornadoes.structure().where(tornadoes.structure().stringColumn("Column Type").isEqualTo("DOUBLE")));}

运行效果:

在这里插入图片描述

3.10 预览数据

	@Testpublic void previewdata() {System.out.println(tornadoes.first(3));}

运行效果:

在这里插入图片描述

3.11 列操作

    @Testpublic void ColumnOperate() {StringColumn month = tornadoes.dateColumn("Date").month();tornadoes.addColumns(month);System.out.println(tornadoes.first(3));tornadoes.removeColumns("State No");System.out.println(tornadoes.first(3));}

运行效果:

在这里插入图片描述

3.12 排序

    @Testpublic void sort() {tornadoes.sortOn("-Fatalities");System.out.println(tornadoes.first(20));}

运行效果:

在这里插入图片描述

3.13 summary

    @Testpublic void summary() {System.out.println( tornadoes.column("Fatalities").summary().print());}

运行效果:

在这里插入图片描述

3.14 数据过滤

    @Testpublic void filter() {Table result = tornadoes.where(tornadoes.intColumn("Fatalities").isGreaterThan(0));result = tornadoes.where(result.dateColumn("Date").isInApril());result =tornadoes.where(result.intColumn("Width").isGreaterThan(300) // 300 yards.or(result.doubleColumn("Length").isGreaterThan(10))); // 10 milesresult = result.select("State", "Date");System.out.println(result);}

运行效果:

在这里插入图片描述

3.15 写入文件

    @Testpublic void write() {tornadoes.write().csv("rev_tornadoes_1950-2014-test.csv");}

3.16 从mysql读取数据

    @Resourceprivate JdbcTemplate jdbcTemplate;@Testpublic void dataFromMySql() {Table table = jdbcTemplate.query("SELECT  user_id,username,age from user_info", resultSet -> {return Table.read().db(resultSet);});System.out.println(table);}

运行效果:

在这里插入图片描述

3.17 数据可视化

package com.wkf.tablesaw;import tech.tablesaw.api.Table;
import tech.tablesaw.plotly.Plot;
import tech.tablesaw.plotly.api.BubblePlot;
import tech.tablesaw.plotly.components.Figure;import java.io.IOException;/*** @author wuKeFan* @date 2024-06-13 09:57:07*/
public class BubbleExample {public static void main(String[] args) throws IOException {Table wines = Table.read().csv("D:/gitProject/springboot-demo/tablesaw/src/main/resources/data/tornadoes_1950-2014.csv");Table champagne =wines.where(wines.stringColumn("wine type").isEqualTo("Champagne & Sparkling").and(wines.stringColumn("region").isEqualTo("California")));Figure figure =BubblePlot.create("Average retail price for champagnes by year and rating",champagne, // table namex"highest pro score", // x variable column name"year", // y variable column name"Mean Retail" // bubble size);Plot.show(figure);}}

结果如下图:

在这里插入图片描述

4 代码仓库

https://github.com/363153421/springboot-demo/tree/master/tablesaw

相关文章:

  • 2024广东省职业技能大赛云计算赛项实战——Ceph集群部署
  • 微信小程序-scroll-view实现上拉加载和下拉刷新
  • 细说MCU定时器中断的实现方法
  • Java18新特性(极简)
  • 在Linux/Ubuntu/Debian中使用SSH连接远程服务器VPS
  • curl命令使用
  • 活出属于自己的人生
  • VScode基本使用
  • 使用 Netty 自定义解码器处理粘包和拆包问题详解
  • 【HiveSQL】join关联on和where的区别及效率对比
  • 【总线】AXI4第三课时:握手机制
  • 磁力搜索器,解读新一代的搜索引擎方式,磁力王、磁力猫等引擎的异同及原理
  • Java学习 (四) 面向对象--类与方法
  • 工业 UI 风格,展现独特魅力
  • 从零开始:使用ChatGPT快速创作引人入胜的博客内容
  • JS 中的深拷贝与浅拷贝
  • 「译」Node.js Streams 基础
  • C++入门教程(10):for 语句
  • CentOS6 编译安装 redis-3.2.3
  • co.js - 让异步代码同步化
  • CODING 缺陷管理功能正式开始公测
  • css布局,左右固定中间自适应实现
  • Git的一些常用操作
  • HTTP中GET与POST的区别 99%的错误认识
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python十分钟制作属于你自己的个性logo
  • springboot_database项目介绍
  • SSH 免密登录
  • v-if和v-for连用出现的问题
  • 反思总结然后整装待发
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 码农张的Bug人生 - 见面之礼
  • 前端
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 《天龙八部3D》Unity技术方案揭秘
  • !$boo在php中什么意思,php前戏
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #nginx配置案例
  • #NOIP 2014#Day.2 T3 解方程
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (42)STM32——LCD显示屏实验笔记
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (一)Docker基本介绍
  • (转)memcache、redis缓存
  • (转)详解PHP处理密码的几种方式
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .aanva
  • .bashrc在哪里,alias妙用
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions