Tidy Viewer (tv) is a cross-platform csv pretty printer that uses column styling to maximize viewer enjoyment.
The following install options are available
.deb
installThe following will install from the crates.io source. For convenience add the alas alias tv='tidy-viewer'
to bashrc.
sh
cargo install tidy-viewer
sudo cp /home/$USER/.cargo/bin/tidy-viewer /usr/local/bin/.
echo "alias tv='tidy-viewer'" >> ~/.bashrc
source ~/.bashrc
sh
wget tidy-viewer_<VERSION>_amd64.deb
sudo dpkg -i target/debian/tidy-viewer_<VERSION>_amd64.deb
echo "alias tv='tidy-viewer'" >> ~/.bashrc
source ~/.bashrc
Kindly maintained by @yigitsever
sh
paru -S tidy-viewer
We currently cut releases for the following architectures. Download from the release page.
The instuctions for all of the above are very similar with the following general steps.
tar -xvzf <RELEASE_FILE_NAME>
cd
into uncompressed foldertidy-viewer
After the above steps I would highly reccomend you make an alias for tidy-viewer
as shown for other builds.
sudo snap install --edge tidy-viewer
tidy-viewer --help
Have some fun with the following datasets!
```sh
wget https://raw.githubusercontent.com/tidyverse/ggplot2/master/data-raw/diamonds.csv
cat diamonds.csv | tv ```
```sh wget https://raw.githubusercontent.com/tidyverse/dplyr/master/data-raw/starwars.csv
tv starwars.csv ```
sh
wget https://raw.githubusercontent.com/joanby/python-ml-course/master/datasets/pigeon-race/pigeon-racing.csv
cat pigeon-racing.csv | tv
The first three digits represent > 99.9% the value of a number. -- GNU-R Pillar
tv
uses the same significant figure (sigfig) rules that the R package pillar
uses.
The purpose of the sigfig rules in tv
is to guide the eye to the most important information in a number. This section defines terms and the decision tree used in the calculation of the final value displayed.
```text ┌─────┐ ┌─────┐ ─┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ┌┐ │ │ │ └─────┘ └┘ └─────┘ ──┴─ │ │ │ │ └────────┘ ▲ └────────────────┘ left hand side │ right hand side (lhs) │ (rhs)
decimal
```
left hand side (lhs): digits on the left hand side of the decimal.
right hand side (rhs): digits on the right hand side of the decimal.
```text
┌─────┐ ┌─────┐ ─┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ┌┐ │ │ │ │ │ └─────┘ └┘ └─────┘ ──┴─ └─────┘
│ │ │ │ └─────────────────────┘ └───────┘ leading 0s trailing 0s ``` leading 0s: 0s to the left of a non-zero.
trailing 0s: 0s to the right of a non-zero. The zeros in 500m are trailing as well as the 0s in 0.500km.
```text ─┐ ┌─────┐ ─┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ┌┐ │ ──┴─ └─────┘ └┘ ──┴─
│ │
└────────┘
fractional digit(s)
```
fractional digits: Digits on the rhs of the decimal. The represent the non-integer part of a number.
There are only 4 outputs possible. The significant figures to display are set by the user. Assume sigfig = 3
:
12345.0 -> 12345
): If no fractional digits are present and lhs >= sigfig then return lhs1234.5 -> 1234.
): If fractional digits are present and lhs >= sigfig then return lhs with point. This is to let the user know that some decimal dust is beyond the main mass of the number.1.2345 -> 1.23
): If fractional digits are present and lhs < sigfig return the first three digits of the number.0.00001 -> 0.00001
): This is reserved for values with leading 0s in the rhs.```text
if lhs == 0: n = ((floor(log10(abs(x))) + 1 - sigfig) r =(10^n) * round(x / (10^n)) return r // (0.12345 -> 0.123) else: if log10(lhs) + 1 > sigfig: if rhs > 0: //concatenate: //(lhs) //(point) //(123.45 -> 123.) else: //concatenate: //(lhs) //(1234.0 -> 1234) //(100.0 -> 100) else: //concatenate: //(lhs) //(point) //sigfig - log10(lhs) from rhs //(12.345 -> 12.3) //(1.2345 -> 1.23) ```
tv
is a good compliment to command line data manipulation tools. I have listed some tools that I like to use with tv.
xsv - Command line csv data manipulation. [Rust | CLI]
csvtk - Command line csv data manipulation. [Go | CLI]
tsv-utils - Command line csv data manipulation toolkit. [D | CLI]
q - Command line csv data manipulation query-like. [Python | CLI]
miller - Command line data manipulation, statistics, and more. [C | CLI]
VisiData - An interactive terminal user interface that is built to explore and wrangle data. [Python | TUI]
column
Comes standard with linux. To get similar functionality run column file.csv -ts,
Though column
is similar I do think there are some reasons tv
is a better tool.
NA
values are very important! Viewers should have their attention drawn to these empty cells. In the image below NA
values are not only invisible, but it seems to be causing incorrect alignment in other columns.
In cases where the terminal width can't fit all of the columns in a dataframe, column will try to smush data on the rows below. This results in an unpleasant viewing experience.
tv
can automatically tell when there will be too many columns to print. When this occurs it will only print the columns that fit in the terminal and mention the extras in the footer below the table.
tv --help
```txt tv 0.0.20 Tidy Viewer (tv) is a csv pretty printer that uses column styling to maximize viewer enjoyment.✨✨📺✨✨
Example Usage:
wget https://raw.githubusercontent.com/tidyverse/ggplot2/master/data-raw/diamonds.csv
cat diamonds.csv | head -n 35 | tv
USAGE: tv [FLAGS] [OPTIONS] [FILE]
FLAGS: -d, --debug-mode Print object details to make it easier for the maintainer to find and resolve bugs. -h, --help Prints help information -V, --version Prints version information
OPTIONS:
-c, --color
-n, --number of rows to output <row-display> Show how many rows to display. [default: 25]
-t, --title <title> Add a title to your tv. Example 'Test Data' [default: NA]
-u, --upper-column-width <upper-column-width> The upper (maxiumum) width of columns. [default: 20]
ARGS:
pillar - R's tibble like formatting. Fantastic original work by Kirill Müller and Hadley Wickham. tv
makes an attempt to port their ideas to the terminal.