undatum:用于数据处理的命令行工具。为 JSON 行和 BSON 带来 CSV 的简单性
项目描述
undatum(发音为un-da-tum)是一个命令行数据处理工具。它的目标是让 CLI 与大型数据集的交互尽可能简单。它提供了一个简单的undatum命令,允许转换、拆分、计算频率、统计数据并验证 CSV、JSON 行、BSON 文件中的数据。
<nav class="contents" id="contents" role="doc-toc">内容
1主要特点
针对 CSV、JSON 行和 BSON 文件的常见数据操作
内置数据过滤
支持ZIP、XZ、GZ、BZ2压缩数据
CSV、JSONl、BSON、XML、XLS、XLSX、Parquet 文件类型之间的转换
低内存占用
支持压缩数据集
高级统计计算
日期/日期时间字段自动识别
数据验证
文档
测试覆盖率
2安装
2.1 macOS
在 macOS 上,undatum 可以通过Homebrew安装 (推荐):
$ brew install undatum
MacPorts端口也可用:
$ port install undatum
2.2 Linux
大多数 Linux 发行版都提供了一个可以使用系统包管理器安装的包,例如:
# Debian, Ubuntu, etc.
$ apt install undatum
# Fedora
$ dnf install undatum
# CentOS, RHEL, ...
$ yum install undatum
# Arch Linux
$ pacman -S undatum
2.3窗户等
一种通用的安装方法(适用于 Windows、Mac OS X、Linux 等,并且始终提供最新版本)是使用 pip:
# Make sure we have an up-to-date version of pip and setuptools:
$ pip install --upgrade pip setuptools
$ pip install --upgrade undatum
(如果由于某种原因 pip安装失败,您可以尝试easy_install undatum作为后备。)
2.4 Python版本
需要 Python 3.6 或更高版本。
3用法
概要:
$ undatum [flags] [command] inputfile
另请参阅undatum --help。
3.1例子
$ undatum headers examples/ausgovdir.jsonl
分析文件并生成统计数据命令:
$ undatum stats examples/ausgovdir.jsonl
从govdomains 存储库中获取俄罗斯联邦政府域列表中字段 GovSystem 的值的 频率命令
$ undatum frequency examples/feddomains.csv --fields GovSystem
使用item.type字段的uniq 命令获取所有唯一值
$ undatum uniq --fields item.type examples/ausgovdir.jsonl
在标签项上将命令从 XML 转换为 JSON 行文件:
$ undatum convert --tagname item examples/ausgovdir.xml examples/ausgovdir.jsonl
根据验证规则ru.org.inn和数据文件中的字段VendorINN使用validate 命令验证数据。输出仅为统计信息:
$ undatum validate -r ru.org.inn --mode stats --fields VendorINN examples/roszdravvendors_final.jsonl > inn_stats.json
根据验证规则ru.org.inn和数据文件中的字段VendorINN使用validate 命令验证数据。输出所有无效记录:
$ undatum validate -r ru.org.inn --mode invalid --fields VendorINN examples/roszdravvendors_final.jsonl > inn_invalid.json
4 个命令
4.1频率指令
字段值频率计算器。返回特定字段的频率表。此命令默认自动检测 CSV 文件的分隔符和编码以及 JSON 行文件的编码。您可以通过提供“-d”分隔符和“-e”编码参数来覆盖它。
获取俄罗斯联邦政府域列表中字段GovSystem的值的频率
$ undatum frequency examples/feddomains.csv --fields GovSystem
4.2 uniq 命令
返回特定字段的所有唯一文件。接受带有逗号分隔字段的参数字段以获取其唯一值。提供单个字段名称以获取该字段的唯一值或提供字段列表以获取组合的唯一值。此命令默认自动检测 CSV 文件的分隔符和编码以及 JSON 行文件的编码。您可以覆盖它提供“-d”分隔符和“-e”编码参数
返回所选 JSONl 文件中字段区域的所有唯一值
$ undatum uniq --fields region examples/reestrgp_final.jsonl
返回所选 JSONl 文件中字段状态和区域的所有唯一组合
$ undatum uniq --fields status,region examples/reestrgp_final.jsonl
4.3转换指令
将数据从一种格式转换为另一种格式。支持最常见的数据文件支持转换:
XML 到 JSON 行
CSV 到 JSON 行
XLS 到 JSON 行
XLSX 到 JSON 行
XLS 转 CSV
CSV 转 BSON
XLS 转 BSON
JSON 行到 CSV
CSV 转实木复合地板
到 Parquet 的 JSON 行
XML 和 JSON 行之间的转换需要带有标记名称的标记标记名,标记名称应转换为单个 JSON 记录。
将带有名为item的标签的 XML ausgovdir.xml 转换为 ausgovdir.jsonl
$ undatum convert --tagname item examples/ausgovdir.xml examples/ausgovdir.jsonl
将 JSON 行文件 roszdravvendors_final.jsonl 转换为 CSV 文件 roszdravvendors_final.csv
$ undatum convert examples/roszdravvendors_final.jsonl examples/roszdravvendors_final.csv
将 CSV 文件 feddomains.csv 转换为 Parquet 文件 feddomains.parquet
$ undatum convert examples/feddomains.csv examples/feddomains.parquet
4.4验证命令
验证命令用于检查字段的每个值是否符合验证规则,例如验证电子邮件或 url 的规则。
当前支持的规则:
common.email - 检查值是否为电子邮件
common.url - 检查值是否为 url
ru.org.inn - 检查值是否为俄罗斯组织 INN 标识符
ru.org.ogrn - 检查是否为俄罗斯组织 OGRN 标识符
根据验证规则ru.org.inn和数据文件中的字段VendorINN使用validate 命令验证数据。输出所有无效记录:
$ undatum validate -r ru.org.inn --mode invalid --fields VendorINN examples/roszdravvendors_final.jsonl > inn_invalid.json
4.5标题命令
返回文件的字段名。支持 CSV、JSON、BSON 文件类型。对于 CSV 文件,它采用文件的第一行,对于 JSON 行和 BSON 文件,它处理作为限制参数提供的记录数,默认值为 10000。此命令默认自动检测 CSV 文件的分隔符和编码以及 JSON 行文件的编码。您可以覆盖它提供“-d”分隔符和“-e”编码参数
返回具有前 10 000 条记录的 JSON 行文件的标题(默认值)
$ undatum headers examples/ausgovdir.jsonl
使用前 50 000 条记录返回 JSON 行文件的标题
$ undatum headers --limit 50000 examples/ausgovdir.jsonl
4.6统计命令
收集有关数据集中数据的统计信息。支持 BSON、CSV 和 JSON 行文件类型。
返回包含以下数据的表:
键- 键的名称
ftype - 具有此键的值的数据类型
is_dictkey - 如果为真,则将此键标识为字典值
is_uniq - 如果为 True,则标识为唯一字段
n_uniq - 唯一值的数量
share_uniq - 所有值中唯一值的份额
minlen - 字段的最小长度
maxlen - 字段的最大长度
avglen - 字段的平均长度
返回 JSON 行文件的统计信息
$ undatum stats examples/ausgovdir.jsonl
分析 JSON 行文件并验证每个字段是否为日期字段,检测日期格式:
$ undatum stats --checkdates examples/ausgovdir.jsonl
4.7分析命令
分析数据格式并提供人类可读的信息。
$ undatum analyze examples/ausgovdir.jsonl
返回值将包括:
文件名 - 文件名
文件类型——文件的类型,可以是:jsonl、xml、csv、json、bson
编码 - 文件编码
Delimiter - CSV 文件的文件分隔符
文件大小 - 文件大小,字节
对象计数 - 文件中的对象数
字段 - 文件字段列表
也适用于 XML 和 JSON 文件:
多表存在 - True 或 False,如果 XML 文件中有多个数据表
完整数据键 - XML 文件中数据键(带有对象列表的字段)的完整路径
短数据键 - XML 文件中包含对象的字段的最终名称
对于 JSON 文件:JSON 类型 - 可以是“对象列表”、“带键的对象列表”和“单个对象” 对于 XML、JSON 行和 JSON 文件:是平面表吗?- 如果表格是平面的并且可以转换为 CSV,则为 True,如果不可转换,则为 False 对于 CSV 和 JSON 行:行数 - 文件中的行数
4.8拆分命令
根据记录数或字段值将数据集拆分为多个数据集。如果数据集应按块大小规则拆分,则块大小参数-c用于设置块大小。如果数据集应按字段值拆分,则使用–fields参数。
将数据集拆分为 10000 个记录块,处理文件名,如 filename_1.jsonl、filename_2.jsonl,其中文件名是原始文件的名称,扩展名除外。
$ undatum split -c 10000 examples/ausgovdir.jsonl
根据字段 item.type 将数据集拆分为文件数”,生成文件 filename_value1.jsonl、filename_value2.jsonl 等有 *[filename] - ausgovdir 和[value1] - item.type字段中的某些唯一值
$ undatum split --fields item.type examples/ausgovdir.jsonl
4.9选择命令
从文件中选择或重新排序列。支持 CSV、JSON 行、BSON
从 ausgovdir.jsonl返回列item.title和item.type
$ undatum select --fields item.title,item.type examples/ausgovdir.jsonl
从 ausgovdir.jsonl返回列item.title和item.type并将结果存储为 selected.jsonl
$ undatum select --fields item.title,item.type -o selected.jsonl examples/ausgovdir.jsonl
4.10展平命令
展平数据记录。将它们写为每行一个值
将所有列作为展平键、值返回
$ undatum flatten examples/ausgovdir.jsonl
5高级
5.1过滤
您可以通过对任何支持的命令使用过滤器属性来过滤任何文件记录的值。
返回使用item.type值作为角色过滤的 item.title 和 item.type 列。注意:键应该用“`”括起来,文本值用“'”括起来。
$ undatum select --fields item.title,item.type --filter "`item.type` == 'role'" examples/ausgovdir.jsonl
5.2数据容器
有时,为了保持内存使用尽可能低以处理巨大的数据文件。这些文件位于 .zip、.gz、.bz2 或 .tar.gz 文件等压缩容器中。 undatum可以处理内存占用很小的压缩文件,但它可能会减慢文件处理速度。
从 subs_dump_1.zip 文件中的 subs_dump_1.jsonl 文件返回标头。需要参数–format-in来强制输入文件类型。
$ undatum headers --format-in jsonl subs_dump_1.zip
从 XZ 压缩文件 data.jsonl.xz 中提取字段 countryCode 的唯一值。需要参数–format-in来强制输入文件类型。
$ undatum uniq -f countryCode --format-in jsonl data.jsonl.xz
5.3日期检测
JSON、JSON 行和 CSV 文件不支持日期和日期时间数据类型。如果您手动准备数据,则可以在 JSON 模式中定义日期时间,例如。B 但是如果数据是外部的,则需要识别这些字段。
undatum 通过具有自动日期检测能力的qddate python 库支持日期识别。
$ undatum stats --checkdates examples/ausgovdir.jsonl
6数据类型
JSONl
JSON 行是 CSV 和 JSON 文件的替代品,具有 JSON 的灵活性和逐行处理数据的能力,无需将所有内容加载到内存中。