Tablesaw数据处理库入门教程:龙卷风数据分析实战
tablesaw Java dataframe and visualization library 项目地址: https://gitcode.com/gh_mirrors/tab/tablesaw
前言
Tablesaw是一个功能强大的Java数据分析库,它提供了类似Python中Pandas的数据处理能力。本教程将通过分析1950-2014年美国龙卷风数据的实际案例,带你快速掌握Tablesaw的核心功能。
数据准备
我们使用美国国家气象机构提供的龙卷风数据集,包含以下字段:
- 日期和时间
- 发生州
- 龙卷风等级(Enhanced Fujita Scale)
- 伤亡人数
- 经纬度坐标
- 影响长度和宽度
基础操作
1. 数据加载
Tablesaw可以自动推断CSV文件的列类型:
Table tornadoes = Table.read().csv("data/tornadoes_1950-2014.csv");
2. 元数据查看
查看数据结构是数据分析的第一步:
// 查看列名
tornadoes.columnNames();
// 查看数据规模
tornadoes.shape(); // 输出: 59945 rows X 11 cols
// 查看详细结构
tornadoes.structure().printAll();
3. 数据预览
快速查看前几行数据:
tornadoes.first(3);
数据处理
1. 列操作
Tablesaw提供了丰富的列操作方法:
// 添加月份列
StringColumn month = tornadoes.dateColumn("Date").month();
tornadoes.addColumns(month);
// 删除不需要的列
tornadoes.removeColumns("State No");
2. 数据排序
按死亡人数降序排列:
tornadoes.sortOn("-Fatalities");
3. 描述性统计
快速获取数值列的统计信息:
tornadoes.column("Fatalities").summary().print();
数据分析
1. 数据筛选
组合多个条件筛选数据:
Table result = tornadoes.where(
tornadoes.intColumn("Fatalities").isGreaterThan(0)
.and(tornadoes.dateColumn("Date").isInApril())
.and(tornadoes.intColumn("Width").isGreaterThan(300));
2. 分组聚合
按龙卷风等级分组计算伤亡中位数:
Table injuriesByScale = tornadoes.summarize("Injuries", median)
.by("Scale")
.sortOn("Scale");
3. 交叉分析
分析各州不同等级龙卷风的分布:
CrossTab.counts(tornadoes,
tornadoes.stringColumn("State"),
tornadoes.intColumn("Scale"))
.first(10);
实战案例:夏季龙卷风发生频率分析
// 筛选夏季数据
Table summer = tornadoes.where(
// 6月21日及以后
tornadoes.dateColumn("Date").month().isEqualTo("JUNE")
.and(tornadoes.dateColumn("Date").dayOfMonth().isGreaterThanOrEqualTo(21))
// 或7-8月
.or(tornadoes.dateColumn("Date").month().isIn("JULY", "AUGUST"))
// 或9月21日前
.or(tornadoes.dateColumn("Date").month().isEqualTo("SEPTEMBER")
.and(tornadoes.dateColumn("Date").dayOfMonth().isLessThan(22))));
// 计算日期差
summer = summer.sortAscendingOn("Date", "Time");
summer.addColumns(summer.dateColumn("Date").lag(1));
IntColumn delta = summer.dateColumn("Date lag(1)").daysUntil(summer.dateColumn("Date"));
summer.addColumns(delta);
// 按年分组计算平均间隔
Table summary = summer.summarize(delta, mean, count).by(summer.dateColumn("Date").year());
// 计算总体平均间隔
double avgInterval = summary.nCol(1).mean(); // 约0.59天
数据导出
将处理后的数据保存为CSV:
tornadoes.write().csv("processed_tornadoes.csv");
结语
通过本教程,我们学习了Tablesaw的核心功能,包括数据加载、清洗、转换和分析。Tablesaw的API设计简洁直观,特别适合Java开发者进行数据分析工作。在实际项目中,你可以结合这些基础操作构建更复杂的数据处理流程。
tablesaw Java dataframe and visualization library 项目地址: https://gitcode.com/gh_mirrors/tab/tablesaw
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考