xvsy is a ggplot2 inspired tool for visualizing, exploring and analyzing datasets. It is designed to handle even very large datasets with hundreds of columns. It may be accessed via a browser-based graphical interface, a JSON api, or from within clojure.
Play around with these xvsy visualizations:
Also read the blog post on finding the best frequent flyer program for a walk-through analysis.
(qspec :diamonds :point
:aes [(x CARAT)
(color CUT :id :no-group true)
(size 2)
(y PRICE :id)]
:where [["<" :CARAT 3]])(qspec :diamonds :dodged-bar
:aes [(x CARAT :bin :lower 0 :upper 5.5 :nbins 55)
(y (non-factor "AVG(PRICE / CARAT)") :sql)])Start a xvsy plotting server on your machine to explore the diamonds dataset. Detailed instructions with in the diamonds example project
git clone https://github.com/dvdt/xvsy.git
cd xvsy && lein install && cd example/diamonds && lein ring server
Download and run an uberjar
wget http://davetsao.com/xvsy/diamonds-0.1.0-SNAPSHOT-standalone.jar
PORT=3000 java -cp diamonds-0.1.0-SNAPSHOT-standalone.jar clojure.main -m diamonds.handler
Now open http://localhost:3000 in your favorite web browser.
At it's core, xvsy is:
- A domain specific language (i.e. grammar of graphics) for declaratively specifying plots
- A grammar of graphics to SQL translator for executing plot queries against a database.
- Special care is taken to ensure plotting semantics can easily be translated to map/reduce.
- Ideal for column oriented databases.
- Tested against H2 and Google Big Query. Other databases supported by Korma like Postgres and MYSQL should also work.
- A SVG based plot generator for query results.
When using the grammar of graphics writer's block (data scientist's block?) can be addressed by writing syntactically correct but semantically meaningless statements, just to get the creative juices flowing. I've implemented a browser-based UI (in React) to facilitate forming plot specifications. It is designed to make syntax errors impossble--even a rat randomly clicking on the screen will always generate valid plots on the underlying data.
Changing colors, font sizes, etc. is interactive and simple! In Chrome, right-click Inspect Element over the plot element to be modified and attach your own CSS or custom SVG.
I started this side project to 1) learn the grammar of graphics and 2) learn clojure. Along the way, I also started using React. Nothing here was ever meant to be production code. Use at your own risk.
Copyright © 2015 David Tsao