# Browsing dataframes and other tables?

**URL:** <https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720>\
**Category:** Data\
**Created:** [July 29, 2018, 7:39am UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720 "2018-07-29T07:39:08Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [July 29, 2018, 7:39am UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/1 "2018-07-29T07:39:08Z")

</div>

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](https://github.com/rafaqz/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?

---

<div class="post-metadata">

**Author:** ![yakir12](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yakir12/32/297_2.png) [@yakir12](https://discourse.julialang.org/u/yakir12)\
**Post date:** [July 29, 2018, 8:58am UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/2 "2018-07-29T08:58:45Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![yakir12](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yakir12/32/297_2.png) [@yakir12](https://discourse.julialang.org/u/yakir12)\
**Post date:** [July 29, 2018, 9:11am UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/3 "2018-07-29T09:11:19Z")

</div>

And love the flatten.jl! Announce it!

---

<div class="post-metadata">

**Author:** ![piever](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/piever/32/1815_2.png) [@piever](https://discourse.julialang.org/u/piever)\
**Post date:** [July 29, 2018, 10:11am UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/4 "2018-07-29T10:11:13Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [July 29, 2018, 2:14pm UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/5 "2018-07-29T14:14:55Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [July 29, 2018, 2:19pm UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/6 "2018-07-29T14:19:15Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![piever](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/piever/32/1815_2.png) [@piever](https://discourse.julialang.org/u/piever)\
**Post date:** [July 29, 2018, 3:18pm UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/7 "2018-07-29T15:18:47Z")

</div>

> [@Raf](#):
>
> 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!

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:

```julia
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](https://github.com/JuliaGizmos/WebIO.jl/issues/156) but it should be solved reasonably soon (rdeits already has a PR to fix it).

Is that too slow for your use case?

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [July 29, 2018, 3:42pm UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/8 "2018-07-29T15:42:09Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![ValdarT](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/valdart/32/24146_2.png) [@ValdarT](https://discourse.julialang.org/u/ValdarT)\
**Post date:** [July 29, 2018, 6:46pm UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/9 "2018-07-29T18:46:23Z")

</div>

Perhaps [TableView](https://github.com/JuliaComputing/TableView.jl)? It is meant for `JuliaDB` not `DataFrames` but it is super easy to convert with [IterableTables](https://github.com/queryverse/IterableTables.jl).

Example:

```julia
# 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))

```

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [July 30, 2018, 3:13am UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/10 "2018-07-30T03:13:23Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [July 30, 2018, 3:43am UTC](https://discourse.julialang.org/t/browsing-dataframes-and-other-tables/12720/11 "2018-07-30T03:43:21Z")

</div>

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