Browsing dataframes and other tables?


#1

How are people browsing their dataframes and other kinds of tables?

I have sets of model parameter data to explore with my supervisors (auto-generated with Flatten.jl which I’m very excited about!). The columns are things like lists of Distributions.jl distributions, Unitful.jl units, string descriptions, fieldname symbols, etc. But all of these have to show meaningful information.

Is there a solution that basically prints something like what is printed in the REPL with show(dataframe), but scrollable horizontally and vertically, and a little more presentable?


#2

Not exactly what you want but very similar: https://github.com/piever/TableWidgets.jl


#3

And love the flatten.jl! Announce it!


#4

TableWidgets (requires InteractBase master) is definitely WIP (and more focused around JuliaDB tables, though I could see how much I can support general tables with IterableTables - or you can convert to JuliaDB tables and then visualize). TableWidgets.displaytable should already give you a scrollable html table you can visualize in WebIO friendly environments. dataeditor (or a different name if I can think of one) allows a textbox to preprocess it with JuliaDB / JuliaDBMeta and addfilter allows to create/remove filters graphically to select rows. I’m still finalizing a framework to make these operations easily composable.

If you want to create a WebIO GUI for these visualizations, you could give this a try. Let me know if you have ideas for widgets that are generally useful and I’m missing.


#5

I’ll have a look at TableWidgets, that does sound like a solution, especially if you get an IterableTables interface happening! Eventually something that just visualises most datatables would be a killer feature for julia. You are really on a roll right now with the interfaces!

A total aside but one thing I’ve been meaning to request is some kind of html5 canvas widget, I need to print and update visualisations of matrices to a html canvas somehow, and its too slow routing through a plotting package, and too clunky using images or video. But its probably a lot of work!


#6

Flatten.jl is mostly rdeits work from a while ago, but the integration with MetaFields.jl does seem to be promising for converting all kinds of nested things to flat things… But I think they both need a month or two for corner cases to settle out.


#7

In the long term I think the ideal solution would be a WebGL backend for Makie (though that’s a lot of work). PlotlyJS may be a bit slow for this but I haven’t tested.

OTOH, I thought using Images would just work. Have you tried something like:

using Images, InteractBulma, Blink
const stack = Images.Gray.(rand(1000, 1000, 100))
ui = @manipulate throttle = 0.1 for i in 1:100
    [view(stack, :, :, i)]
end

Note that unfortunately you need to put the image in a length 1 array for this to work, because of this issue but it should be solved reasonably soon (rdeits already has a PR to fix it).

Is that too slow for your use case?


#8

WebGL would be amazing. Or WASM + WebGL to just run it all it the browser…

And maybe your example will just work anyway! That would be perfect.


#9

Perhaps TableView? It is meant for JuliaDB not DataFrames but it is super easy to convert with IterableTables.

Example:

# install if needed
# Pkg.clone("https://github.com/JuliaComputing/TableView.jl.git")

using TableView, DataFrames, RDatasets, IterableTables

iris = dataset("datasets", "iris");

TableView.showtable(JuliaDB.table(iris), rows=1:nrow(iris))

#10

The problem I had trying TableView is that a lot of types just show up as [object Object], such as Distributions.jl distributions. And those are the things that really matter!


#11

@piever TableWidgets is great. Seems to work fine with any table type I throw at it.