Here we get Bitcoin (BTC) data from 1/1/2020 until now:
my @ts = cryptocurrency-data('BTC', dates => (DateTime.new(2020, 1, 1, 0, 0, 0), now), props => <DateTime Close>,
format => 'dataset'):!cache-all;
When we request the data to be returned as “dataset” then the result is an array of hashes. When we request the data to be returned as “timeseries” the result is an array of pairs (sorted by date.)
Here are BTC values for the last week (at the point of retrieval):
Using D3.js via Raku is a good answer of the question “How to do data-driven visualizations with Raku?”
I used to (or tried to use) the alternatives outlined in the following sub-sections.
The package “SVG::Plot” is a good illustration that a Raku visualization system can be build “from scratch”, but it is way too much work to develop “SVG::Plot” to have all features needed for informative plots. (Various plot labels, grid lines, etc.)
Its main advantage is that “it can be used anywhere.” Occasionally, I find it very useful, but it is just a crutch, not a real plotting solution.
For example, it is hard to have informative time series plotted with “Text::Plot”. In support of that statement see this time series plot done with Mathematica for the number of IRC Raku channel posts per week in the last three years (by certain known posters):
That is why!
When I do data analysis I want to be able to:
Make nice and informative plots
Use concise plot specifications
Quickly do the required setup
Claim easy reproducibility and portability of the related documents
Here is an example bubble plot made in Jupyter:
Why I did not implement this a year ago?
I do not like Jupyter much, and I mostly stay away from it. That is why, 1.5 years ago when I read the code of “Jupyter::Kernel” I did not try to comprehend the magics. (I was interested in sand-boxing Raku.)
Refactoring via re-implementation in Python
Here is a bar chart example:
Random mandalas and scribbles
Another way to “challenge” the package design and implementation is to (try to) implement functions that draw random mandalas, [AAv2], and random scribbles.
Implementing the corresponding functions required to:
Have optional axes specification
The refactoring for 2. was required in order to have multiple plots in one Jupyter cell. Also, it was fairly involved, although, it is “just” for gluing the main, core plotting parts.
I wanted to do as much as possible on the Raku side:
The random points generation and “arrangement” is done in Raku
The plotting is done with D3.js
Remark: The algorithms for drawing, say, Bezier curves through the random points are far from trivial and D3.js does this very nicely.
Here is an example of random mandala generation:
Here is an example of random scribbles generation: