HNHacker News
TopNewBestAskShowJobs

paddy_m

2,239 karma · joined April 9, 2008

Hacking on buckaroo the exploratory data analysis table widget for pandas and jupyter https://github.com/paddymul/buckaroo hnchat.com:yPQM3az7FbxcBqz4ZUyD hn@paddymullen.com
submissionscomments
paddy_m··on Show HN: Data Formulator – AI-powered data visualization from Microsoft Research
This looks good, especially the data ingest.

A couple of questions:

What type of data person are you aiming this tool to be useful for, data analyst, data scientist, or data engineer. I'm guessing data analyst who wants to use PyData instead of Tableau?

How data aware is your system? Is it sending dtypes of columns, and maybe actual values to the LLM?

How do you deal with python code gen and hallucinations?

Do you plan to make a jupyter extension with this tech?

paddy_m··on Hofstadter on Lisp (1983)
> Lisp needs braces

You're a troll, but I'll feed you. I adapted Peter Norvig's excellent lispy2.py [0] to read json. I call it JLisp [1].

Lispy2 is a scheme implementation, complete with macros that executes on top of python. I made it read json, really just replacing () with []. and defining symbols as {'symbol': 'symbol_name'}. I built it because it's easier to get a webapp to emit JSON then paren lisp. I also knew that building an interpreter on top of lisp meant that I wouldn't back myself into a corner. There is incredible power in the lisp, especially the ability to transform code.

[0] https://norvig.com/lispy2.html

[1] https://github.com/paddymul/buckaroo/blob/main/tests/unit/li... #tests for JLisp

paddy_m··on 'Shoe doping' changed marathon times in ways we still don't understand
Not on topic, but related. I made a video explaining my side project - Buckaroo for my less technical friends and family. In 6 minutes I give a high level overview of why data scientists use NumPy and Pandas, how they use Jupyter Notebooks, and why Buckaroo makes their life better. I'm proud of it. https://www.youtube.com/watch?v=pfAkz6L5rMI
paddy_m··on Do U.S. ports need more automation?
And NY Cabs were actually generally trustworthy. Cabs were absolutely worse everywhere else in the US, with many more shenanigans.
paddy_m··on Ask HN: What are you working on (September 2024)?
You're being a bit shy, I'll help :)

Matt Harrison wrote Effective Pandas, the guide to writing elegant pandas code and avoiding many common pitfalls. Keep up the good work

https://www.amazon.com/Effective-Pandas-Patterns-Manipulatio...

paddy_m··on Ask HN: What are you working on (September 2024)?
I'm using ag-grid for my project too. I did a bunch of work to make configuring it more declarative... so you can have pinned rows that read from a different data source for summary stats, so you can specify custom renderers for each column. how have you found ag-grid to use?

https://buckaroo-data.readthedocs.io/en/latest/examples/inde... I need to clean up those examples.

paddy_m··on Ask HN: What are you working on (September 2024)?
I am working on Buckaroo[1] - the data table for jupyter/dataframes that I have always wanted. Buckaroo combines a performant table capable of scrolling through 1000s of rows, with summary stats and histograms. All configurable and extensible by users. never type df.head() again. give it a try, I'm eager to hear feedback.

Recently I have been working on the low-code UI. I find myself looking up and typing the same pandas (and polars) incantations over and over again to explore and modify data. The low-code UI allows simple transforms of data (search, remove column outliers, show only outliers of a column, group by) to be perfromed with just clicks. You can also view the generated python code. This is powered by a json-flavored lisp interpreter, but users never have to type lisp code.

[1] https://github.com/paddymul/buckaroo

paddy_m··on Bento: Jupyter Notebooks at Meta
Also the Julia people wrote their own notebook system called Pluto. Which is so on brand for them. It might be technically better, but they miss out on the whole jupyter ecosystem, further isolating the language.
paddy_m··on The Symbolics Ivory Design and Verification Strategy (1987)
Thank you. I saw that there's a wealth of other docs from Symbolics at archive.org. I will spend some time exploring.

https://archive.org/search?query=creator%3A%22Symbolics%22

paddy_m··on How we made Jupyter notebooks load faster
The two can coexist. store libraries in python code that is versioned and deployed properly. Notebooks with their data ingest, code, then output should read cleanly. Making the ingest and code readable is the job of library writers. A clean and elegantly coded notebook with inline outputs is a substantively different experience than searching all over the place for the correct browser window that corresponds to the output from a given piece of code.
paddy_m··on How we made Jupyter notebooks load faster
Another issue is that jupyter, pandas, and polars don't take displaying tabular data seriously. Just have a better default table display widget. Look at ipydatagrid, perspective, or buckaroo (my project) for examples of how it could be done better.
paddy_m··on How we made Jupyter notebooks load faster
Ooh. That's a nice utility funtion that I will write soon. We tend to look at requirements as something we hope the package manager gets right, and then we ignore at runtime, but there are a bunch of errors we could avoid if we verified at runtime. Sometimes when writing a library you have to have different code paths for different versions.

Something like `if check_versions(pandas__gt="2.0.0", pandas__lt="3.0.0"):`

paddy_m··on How we made Jupyter notebooks load faster
I take it that's supposed to be the pre-loading page to just look at the requests, not a full working UI?

After cursory googling I couldn't find one, do you have a public notebook gallery?

paddy_m··on How we made Jupyter notebooks load faster
Impressive work. I love jupyter, but it's a bear to work on.

What mix of JS packages do you see? Could that be built into one uber package?

paddy_m··on Police cannot seize property indefinitely after an arrest, federal court rules
I once heard of a behavioral economics paper that said you can reliably predict a judge's ruling on a legal or ethics matter based on what is best for the legal profession.
paddy_m··on Firefox Sidebar and Vertical tabs: try them out
I love the mozilla UI for restoring all tabs after a crash. I wish I could see that regularly.
paddy_m··on Glisp: Graphical Lisp
I built something somewhat similar where I manipulate pandas dataframes through a gui [1]. The gui emits json-flavored lisp [2] (replaced parens with json square braces) which is then interpreted through two interpreters which have the same functions loaded in. One interpreter modifies the dataframe, the other emits python code that performs the exact same manipulation, so you can copy and paste the python code. The user never sees JLisp, but it is there under the covers.

This works hand in hand with autocleaning that looks at a dataframe and suggests jlisp cleaning commands.

[1] https://youtu.be/GPl6_9n31NE?si=JJPtk6K6FNX0sboi&t=603 [2] jlisp.py, based on Peter Norvig's lispy with a reader modified to accept JSON

paddy_m··on Do Skis Get Blunt?
I'm in a ski share house in the northeast. Last winter I organized a ski tuning clinic put on by the local ski shop that does race tunes. I thought that only the expert nerdy skiers in the house would be interested, but everyone was fascinated. Most of the attendees won't tune their own skis, but they will know what to look for in their skis, and when to take them in.

Also, in the north east, tuned skis absolutely matter, whatever level you are. My wife has been learning to ski and had trouble with ice. So I put on her beginner skis, and said, ahh no wonder, went back and tuned them. Then I put her on my slalom skis because she didn't trust her skis to initiate a turn (slalom skis are famously quick to initiate), and she could turn them quickly. Then I tuned one edge of each slalom ski with a more aggressive tune, but she could swap back to regular if she wanted. Finally, she was skidding her turns too much, so I put her on my GS skis, which forced her to patiently start the turn then follow it through. She now has a good idea of when she's having trouble with the ski shape, the conditions or the ski tune after 35 total days of skiing.

If you put a beginner or intermediate on race skis, make sure the tune is mellow enough. Slalom skis at 0.5 and 86, will hunt when not turning, and can grab an edge throwing you to the ground. At the steeper angles (86/87 vs 88/89) it is much harder to skid the ski for speed control. When you head out with a beginner, you can always bring a diamond stone and detune the tip/tail, on the mountain even. They will notice the difference and appreciate it.

paddy_m··on PySheets – Spreadsheet UI for Python
In the docs for my own project in this space, I created a whole related projects page. I figured if someone makes it to my docs, and buckaroo doesn't solve their problem, they should find something that does help them.

https://buckaroo-data.readthedocs.io/en/latest/articles/rela...

paddy_m··on PySheets – Spreadsheet UI for Python
I created buckaroo [1] as a better dataframe viewer for jupyter with built in summary stats. It's built to bring a better dataframe experience to people already using pandas/polars. All of it is extensible [2] so that you can customize stats and transformations to your workflow.

[1] https://github.com/paddymul/buckaroo

[2] https://youtu.be/GPl6_9n31NE

paddy_m··on Monowheels: Vehicles with Insufficient Wheels
Also the Ultimate Wheel. A unicycle without a seat.

https://www.youtube.com/watch?v=8WRzqlh3728

paddy_m··on The design philosophy of Great Tables
Buckaroo started as a lowcode UI with an accompanying table. The low code UI lets you click on columns and perform actions (drop, fillNA, groupby). The dataframe is then modified, AND python code to perform the same action is emitted. Controlling the lowcode UI through keyboard shortcuts should be fairly straightforward.

The other feature I have played with in this area is auto-cleaning. Auto-cleaning looks at individual columns and emits cleaning commands to the low-code UI. Different cleaning strategies can be implemented and toggled through.

Buckaroo takes the view that being opinionated is good, so long as you can toggle through opinions to get the right combination of cleaning, display, or post-processing that you are looking for quickly. All of the features of buckaroo are also built to be easily extendable by users.

This feature saw very little use, so I haven't developed it much (I had to disable it after some refactorings). The lowcode UI is demonstrated at the end of the youtube video linked above.

paddy_m··on The design philosophy of Great Tables
Past a certain table size, the JS libraries will use less memory. DOM elements take a lot of memory. Libraries like ag-grid only render a small portion of the total table at a time.

The next performance gain web tables comes from using a binary encoding instead of JSON, particularly arrow. Perspective uses arrow (in addition to rendering to canvas).

IME building buckaroo on top of ag-grid, I can render the table with up to about 300k elements very performantly with just JSON. Rendering speed is a non factor because only 50 rows are rendered at a time. Moving to arrow-js should be about 3 times faster for the entire system (python serialize, js deserialize, js render). Beyond 900k elements, you really want to lazily load from the server as the user scrolls. The memory usage for just the data in the browser tends to slow things down. (I am working on a library and benchmark for different serialization techniques).

paddy_m··on The design philosophy of Great Tables
Why do you want to render to canvas?

Perspective seems to be the most performant html table. It is more focused on extremely fast updates than styling, although it looks good.

Glide is a newcomer that also renders to canvas.

https://github.com/finos/perspective

https://github.com/glideapps/glide-data-grid

paddy_m··on The design philosophy of Great Tables
It's not AI generated. I have tracked the PR as they have worked on it. From what I have seen, the library has declarative elements that are similar to the grammar of graphics.
paddy_m··on The design philosophy of Great Tables
Great tables has done some really nice work on python/jupyter tables. It looks like they are almost building a "grammar of tables" similar to a grammar of graphics. More projects should write about their philosophy and aims like this.

I have built a different table library for jupyter called buckaroo. My approach has been different. Buckaroo aims to allow you to interactively cycle through different formats and post-processing functions to quickly glean important insights from a table while working interactively. I took the view that I type the same commands over and over to perform rudimentary exploratory data analysis, those commands and insights should be built into a table.

Great tables seems built so that you can manually format a table for presentation.

https://github.com/paddymul/buckaroo

https://youtu.be/GPl6_9n31NE

paddy_m··on Python Cloudflare Workers
Glad to see it includes numpy (and presumably pandas). Getting those to work in constrained serverless environments can be a huge pain.
paddy_m··on Baltimore's Key Bridge struck by cargo ship, collapses
There were tugs two tugs helping depart the dock and turn, until about 43 seconds in the video. 5:08 AM real time
paddy_m··on Baltimore's Key Bridge struck by cargo ship, collapses
an outboard? that is very very different because you control the direction of thrust also.
paddy_m··on Baltimore's Key Bridge struck by cargo ship, collapses
The local sailor/professional mariner bar in Newport will be interesting tonight!
← PreviousPage 6 of 21Next →