diff --git a/.gitignore b/.gitignore index 4e37226..649b8e9 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,5 @@ fabric.properties # End of https://www.gitignore.io/api/intellij *.zip +.sass-cache +.ipynb_checkpoints diff --git a/DataPreprocessor.ipynb b/DataPreprocessor.ipynb new file mode 100644 index 0000000..0c3426d --- /dev/null +++ b/DataPreprocessor.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# Data Preprocessor\n", + "In this notebook I will preprocess the data for visualisation in d3.js" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Load data\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "invalid type comparison", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'crypto-markets.csv'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'date'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_datetime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'date'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'%Y-%m-%d'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'coerce'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'date'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(self, other, axis)\u001b[0m\n\u001b[1;32m 859\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 860\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0merrstate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'ignore'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 861\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mna_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 862\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_scalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 863\u001b[0m raise TypeError('Could not compare %s type with Series' %\n", + "\u001b[0;32m/usr/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36mna_op\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m 772\u001b[0m \u001b[0;31m# integer comparisons\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 773\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_datetimelike_v_numeric\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 774\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"invalid type comparison\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 775\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 776\u001b[0m \u001b[0;31m# numpy does not like comparisons vs None\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: invalid type comparison" + ] + } + ], + "source": [ + "data = pd.read_csv('crypto-markets.csv')\n", + "data['date'] = pd.to_datetime(data['date'], format='%Y-%m-%d', errors='coerce')\n", + "\n", + "data[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "# Create volume chart\n", + "vol = data.groupby(['date'])['date','volume'].sum()\n", + "vol = vol[vol['volume'] != 0]\n", + "vol.to_csv('volume.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "# bar chart\n", + "bar = data[['date', 'volume', 'coin']].copy()\n", + "all_bar = bar[['volume', 'coin']]\n", + "\n", + "not_top2 = all_bar.groupby('coin').sum().sort_values('volume', ascending=False).index[10:]\n", + "bar['coin'] = bar['coin'].replace(not_top2, 'other')" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [], + "source": [ + "bar_proc = bar.groupby([bar['date'].dt.to_period('M'), 'coin'])" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nauJ/Acz2XLpusNoKAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bar_result = bar_proc.sum()\n", + "bar_result = bar_result.unstack(level=-1)\n", + "bar_result.columns = bar_result.columns.droplevel(0)\n", + "\n", + "\n", + "plt.cla()\n", + "bar_result.plot.bar(stacked=True)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [], + "source": [ + "bar_result.to_csv('volume_per_coin_per_month.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/index.html b/index.html index e79f6bc..5bf3c49 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,6 @@ + Getting Started @@ -26,13 +37,14 @@

Crypto

Currencies

-
-
-
+

Volume of trades over the years

-
+
+

Market composition of the 10 biggest coins

+ +
diff --git a/index.js b/index.js index 341c246..d7eb757 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,11 @@ let intro_svg; +function type(d, i, columns) { + for (i = 1, t = 0; i < columns.length; ++i) t += d[columns[i]] = +d[columns[i]]; + d.total = t; + return d; +} + function make_intro_svg() { "use strict"; let maxValue; @@ -8,11 +14,11 @@ function make_intro_svg() { top: 20, right: 20, bottom: 30, - left: 50 + left: 200 }; - let width = 960 - margin.left - margin.right; - let height = 500 - margin.top - margin.bottom; + let width = 1320 - margin.left - margin.right; + let height = 600 - margin.top - margin.bottom; let x = d3.scaleTime().range([0, width]); let y = d3.scaleLinear().range([height, 0]); @@ -32,8 +38,6 @@ function make_intro_svg() { .append('g') .attr('transform', `translate(${margin.left},${margin.top})`); - console.log(x); - d3.csv('volume.csv', function (d) { return { date: new Date(d.date), @@ -48,11 +52,11 @@ function make_intro_svg() { "use strict"; x.domain(d3.extent(data, d => d.date)); maxValue = d3.max(data, d=> d.volume); - y.domain([0, 1000000000]); + y.domain([0, maxValue]); dataArea = intro_svg.append('path') .data([data]) - .attr('class', 'area') + .attr('class', 'area hidden') .attr('d', area); dataLine = intro_svg.append('path') @@ -60,6 +64,11 @@ function make_intro_svg() { .attr('class', 'line') .attr('d', valueline); + let totalLength = dataArea.node().getTotalLength(); + + dataLine.attr("stroke-dasharray", totalLength + " " + totalLength).attr("stroke-dashoffset", totalLength); + dataArea.attr("stroke-dasharray", totalLength + " " + totalLength).attr("stroke-dashoffset", totalLength); + intro_svg.append('g') .attr("transform", `translate(0, ${height})`) .call(d3.axisBottom(x)); @@ -71,27 +80,98 @@ function make_intro_svg() { .call(yAxis); } - d3.select("#growth1").on('impress:stepenter', function () { - y.domain([0, 1000000000]); - - yAxisG - .call(yAxis); - dataArea - .attr('d', yAxis); - dataLine - .attr('d', yAxis); - }); - d3.select("#growth").on('impress:stepenter', function () { - y.domain([0, maxValue]); - - yAxisG - .call(yAxis); - dataArea - .attr('d', yAxis); - dataLine - .attr('d', yAxis); + dataLine.transition().ease(d3.easeLinear).duration(10000).attr('stroke-dashoffset', 0) + .on('end', function () { + dataArea.classed('hidden', false); + }); }); } -make_intro_svg(); \ No newline at end of file +function make_bar_chart() { + let margin = {top: 20, right: 60, bottom: 60, left: 40}; + + let width = 1320 - margin.left - margin.right; + let height = 600 - margin.top - margin.bottom; + + let svg = d3.select("svg#composition"), + g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + + svg.attr('width', width + margin.left + margin.bottom) + .attr('height', height + margin.top + margin.bottom); + + let x = d3.scaleBand() + .rangeRound([0, width - margin.right]) + .padding(0.1) + .align(0.1); + + let y = d3.scaleLinear() + .rangeRound([height, 0]); + + let z = d3.scaleOrdinal() + .range(["#e6194b", "#3cb44b", "#ffe119", "#0082c8", "#f58231", "#911eb4", "#46f0f0", "#f032e6", "#d2f53c", + "#fabebe", "#008080", "#e6beff", "#aa6e28", "#fffac8", "#800000", "#aaffc3", "#808000", "#ffd8b1", + "#000080", "#808080", "#FFFFFF", "#000000"]); + + let stack = d3.stack() + .offset(d3.stackOffsetExpand); + + d3.csv("volume_per_coin_per_month.csv", type, function(error, data) { + if (error) throw error; + + x.domain(data.map(function(d) { return d.date; })); + z.domain(data.columns.slice(1)); + + let serie = g.selectAll(".serie") + .data(stack.keys(data.columns.slice(1))(data)) + .enter().append("g") + .attr("class", "serie") + .attr("fill", function(d) { return z(d.key); }); + + serie.selectAll("rect") + .data(function(d) { return d; }) + .enter().append("rect") + .attr("x", function(d) { return x(d.data.date); }) + .attr("y", function(d) { return y(d[1]); }) + .attr("height", function(d) { return y(d[0]) - y(d[1]); }) + .attr("width", x.bandwidth()); + + g.append("g") + .attr("class", "axis axis--x") + .attr("transform", "translate(0," + height + ")") + .call(d3.axisBottom(x)) + .selectAll("text") + .attr("y", 0) + .attr("x", 9) + .attr("dy", ".35em") + .attr("transform", "rotate(90)") + .style("text-anchor", "start"); + + g.append("g") + .attr("class", "axis axis--y") + .call(d3.axisLeft(y).ticks(10, "%")); + + let legend = serie.append("g") + .attr("class", "legend") + .attr("transform", function(d) { + d = d[d.length - 1]; + return "translate(" + (x(d.data.date) + x.bandwidth()) + "," + ((y(d[0]) + y(d[1])) / 2) + ")"; + }); + + legend.append("line") + .attr("x1", -6) + .attr("x2", 6) + .attr("stroke", "#000"); + + legend.append("text") + .attr("x", 9) + .attr("dy", "0.35em") + .attr("fill", "#000") + .style("font", "10px sans-serif") + .text(function(d) { return d.key; }); + }); +} + +make_intro_svg(); + +make_bar_chart(); diff --git a/style.css b/style.css index a2aaab8..81a019a 100644 --- a/style.css +++ b/style.css @@ -24,8 +24,8 @@ body { .step { position: relative; display: block; - width: 900px; - height: 700px; + width: 1200px; + height: 900px; margin: 20px auto; padding: 40px 60px; text-shadow: 0 2px 2px rgba(0, 10, 0, 0.5); @@ -147,4 +147,4 @@ body.impress-mouse-timeout { font-size: 10px; opacity: 0.6; } -/*# sourceMappingURL=style.cssmap */ +/*# sourceMappingURL=style.css.map */ diff --git a/style.css.map b/style.css.map index 03bbdd2..96edc37 100644 --- a/style.css.map +++ b/style.css.map @@ -1,7 +1,7 @@ { "version": 3, -"mappings": "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", -"sources": ["style2.sass"], +"mappings": "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", +"sources": ["style.sass"], "names": [], -"file": "style2.css" +"file": "style.css" } \ No newline at end of file diff --git a/style.sass b/style.sass index 59c24fa..107d8ab 100644 --- a/style.sass +++ b/style.sass @@ -31,8 +31,8 @@ body position: relative display: block - width: 900px - height: 700px + width: 1200px + height: 900px margin: 20px auto padding: 40px 60px diff --git a/volume.csv b/volume.csv index 20777f8..e315c86 100644 --- a/volume.csv +++ b/volume.csv @@ -1,247 +1,4 @@ date,volume -2013-04-28,0.0 -2013-04-29,0.0 -2013-04-30,0.0 -2013-05-01,0.0 -2013-05-02,0.0 -2013-05-03,0.0 -2013-05-04,0.0 -2013-05-05,0.0 -2013-05-06,0.0 -2013-05-07,0.0 -2013-05-08,0.0 -2013-05-09,0.0 -2013-05-10,0.0 -2013-05-11,0.0 -2013-05-12,0.0 -2013-05-13,0.0 -2013-05-14,0.0 -2013-05-15,0.0 -2013-05-16,0.0 -2013-05-17,0.0 -2013-05-18,0.0 -2013-05-19,0.0 -2013-05-20,0.0 -2013-05-21,0.0 -2013-05-22,0.0 -2013-05-23,0.0 -2013-05-24,0.0 -2013-05-25,0.0 -2013-05-26,0.0 -2013-05-27,0.0 -2013-05-28,0.0 -2013-05-29,0.0 -2013-05-30,0.0 -2013-05-31,0.0 -2013-06-01,0.0 -2013-06-02,0.0 -2013-06-03,0.0 -2013-06-04,0.0 -2013-06-05,0.0 -2013-06-06,0.0 -2013-06-07,0.0 -2013-06-08,0.0 -2013-06-09,0.0 -2013-06-10,0.0 -2013-06-11,0.0 -2013-06-12,0.0 -2013-06-13,0.0 -2013-06-14,0.0 -2013-06-15,0.0 -2013-06-16,0.0 -2013-06-17,0.0 -2013-06-18,0.0 -2013-06-19,0.0 -2013-06-20,0.0 -2013-06-21,0.0 -2013-06-22,0.0 -2013-06-23,0.0 -2013-06-24,0.0 -2013-06-25,0.0 -2013-06-26,0.0 -2013-06-27,0.0 -2013-06-28,0.0 -2013-06-29,0.0 -2013-06-30,0.0 -2013-07-01,0.0 -2013-07-02,0.0 -2013-07-03,0.0 -2013-07-04,0.0 -2013-07-05,0.0 -2013-07-06,0.0 -2013-07-07,0.0 -2013-07-08,0.0 -2013-07-09,0.0 -2013-07-10,0.0 -2013-07-11,0.0 -2013-07-12,0.0 -2013-07-13,0.0 -2013-07-14,0.0 -2013-07-15,0.0 -2013-07-16,0.0 -2013-07-17,0.0 -2013-07-18,0.0 -2013-07-19,0.0 -2013-07-20,0.0 -2013-07-21,0.0 -2013-07-22,0.0 -2013-07-23,0.0 -2013-07-24,0.0 -2013-07-25,0.0 -2013-07-26,0.0 -2013-07-27,0.0 -2013-07-28,0.0 -2013-07-29,0.0 -2013-07-30,0.0 -2013-07-31,0.0 -2013-08-01,0.0 -2013-08-02,0.0 -2013-08-03,0.0 -2013-08-04,0.0 -2013-08-05,0.0 -2013-08-06,0.0 -2013-08-07,0.0 -2013-08-08,0.0 -2013-08-09,0.0 -2013-08-10,0.0 -2013-08-11,0.0 -2013-08-12,0.0 -2013-08-13,0.0 -2013-08-14,0.0 -2013-08-15,0.0 -2013-08-16,0.0 -2013-08-17,0.0 -2013-08-18,0.0 -2013-08-19,0.0 -2013-08-20,0.0 -2013-08-21,0.0 -2013-08-22,0.0 -2013-08-23,0.0 -2013-08-24,0.0 -2013-08-25,0.0 -2013-08-26,0.0 -2013-08-27,0.0 -2013-08-28,0.0 -2013-08-29,0.0 -2013-08-30,0.0 -2013-08-31,0.0 -2013-09-01,0.0 -2013-09-02,0.0 -2013-09-03,0.0 -2013-09-04,0.0 -2013-09-05,0.0 -2013-09-06,0.0 -2013-09-07,0.0 -2013-09-08,0.0 -2013-09-09,0.0 -2013-09-10,0.0 -2013-09-11,0.0 -2013-09-12,0.0 -2013-09-13,0.0 -2013-09-14,0.0 -2013-09-15,0.0 -2013-09-16,0.0 -2013-09-17,0.0 -2013-09-18,0.0 -2013-09-19,0.0 -2013-09-20,0.0 -2013-09-21,0.0 -2013-09-22,0.0 -2013-09-23,0.0 -2013-09-24,0.0 -2013-09-25,0.0 -2013-09-26,0.0 -2013-09-27,0.0 -2013-09-28,0.0 -2013-09-29,0.0 -2013-09-30,0.0 -2013-10-01,0.0 -2013-10-02,0.0 -2013-10-03,0.0 -2013-10-04,0.0 -2013-10-05,0.0 -2013-10-06,0.0 -2013-10-07,0.0 -2013-10-08,0.0 -2013-10-09,0.0 -2013-10-10,0.0 -2013-10-11,0.0 -2013-10-12,0.0 -2013-10-13,0.0 -2013-10-14,0.0 -2013-10-15,0.0 -2013-10-16,0.0 -2013-10-17,0.0 -2013-10-18,0.0 -2013-10-19,0.0 -2013-10-20,0.0 -2013-10-21,0.0 -2013-10-22,0.0 -2013-10-23,0.0 -2013-10-24,0.0 -2013-10-25,0.0 -2013-10-26,0.0 -2013-10-27,0.0 -2013-10-28,0.0 -2013-10-29,0.0 -2013-10-30,0.0 -2013-10-31,0.0 -2013-11-01,0.0 -2013-11-02,0.0 -2013-11-03,0.0 -2013-11-04,0.0 -2013-11-05,0.0 -2013-11-06,0.0 -2013-11-07,0.0 -2013-11-08,0.0 -2013-11-09,0.0 -2013-11-10,0.0 -2013-11-11,0.0 -2013-11-12,0.0 -2013-11-13,0.0 -2013-11-14,0.0 -2013-11-15,0.0 -2013-11-16,0.0 -2013-11-17,0.0 -2013-11-18,0.0 -2013-11-19,0.0 -2013-11-20,0.0 -2013-11-21,0.0 -2013-11-22,0.0 -2013-11-23,0.0 -2013-11-24,0.0 -2013-11-25,0.0 -2013-11-26,0.0 -2013-11-27,0.0 -2013-11-28,0.0 -2013-11-29,0.0 -2013-11-30,0.0 -2013-12-01,0.0 -2013-12-02,0.0 -2013-12-03,0.0 -2013-12-04,0.0 -2013-12-05,0.0 -2013-12-06,0.0 -2013-12-07,0.0 -2013-12-08,0.0 -2013-12-09,0.0 -2013-12-10,0.0 -2013-12-11,0.0 -2013-12-12,0.0 -2013-12-13,0.0 -2013-12-14,0.0 -2013-12-15,0.0 -2013-12-16,0.0 -2013-12-17,0.0 -2013-12-18,0.0 -2013-12-19,0.0 -2013-12-20,0.0 -2013-12-21,0.0 -2013-12-22,0.0 -2013-12-23,0.0 -2013-12-24,0.0 -2013-12-25,0.0 -2013-12-26,0.0 2013-12-27,82069214.0 2013-12-28,49102600.0 2013-12-29,33722418.0 diff --git a/volume_per_coin_per_month.csv b/volume_per_coin_per_month.csv new file mode 100644 index 0000000..549551e --- /dev/null +++ b/volume_per_coin_per_month.csv @@ -0,0 +1,48 @@ +date,BitShares,Bitcoin,Bitcoin Cash,Dash,Ethereum,Ethereum Classic,Litecoin,Qtum,Ripple,Tether,other +2013-12,,139984800.0,,,,,73386570.0,,484853.0,,20439603.0 +2014-01,,1153386500.0,,,,,512458650.0,,2556261.0,,316346937.0 +2014-02,,1269686300.0,,1160788.0,,,252221180.0,,3010033.0,,252506972.0 +2014-03,,763979330.0,,2036689.0,,,352637290.0,,3957661.0,,152508424.0 +2014-04,,789304230.0,,4433342.0,,,228787160.0,,6581780.0,,150602073.0 +2014-05,,503299100.0,,61202911.0,,,99453302.0,,16548406.0,,95333382.0 +2014-06,,721873150.0,,34785510.0,,,81951390.0,,5348269.0,,133334613.0 +2014-07,1537927.0,450725750.0,,11043043.0,,,94495482.0,,8306288.0,,78121363.0 +2014-08,24159394.0,694524490.0,,7773973.0,,,132978595.0,,7582193.0,,52681393.0 +2014-09,19251612.0,696572150.0,,4841240.0,,,82662825.0,,9776712.0,,100695968.0 +2014-10,8291936.0,902994450.0,,2595558.0,,,120987520.0,,7166996.0,,61601304.0 +2014-11,8080891.0,659733360.0,,3813987.0,,,102499340.0,,29228626.0,,56736801.0 +2014-12,6383386.0,553102310.0,,1826130.0,,,71412500.0,,66809767.0,,57789978.0 +2015-01,5790094.0,1098811900.0,,1697883.0,,,99981256.0,,43380373.0,,67453394.0 +2015-02,3590307.0,711518700.0,,4519991.0,,,51523802.0,,20921878.0,12.0,22246969.0 +2015-03,3035617.0,959098300.0,,7757762.0,,,55267985.0,,35716645.0,278991.0,19353212.0 +2015-04,1822058.0,672338700.0,,3749983.0,,,34766786.0,,15391396.0,634383.0,16254505.0 +2015-05,2789397.0,568122600.0,,1955501.0,,,42990806.0,,18297059.0,353074.0,75496818.0 +2015-06,2841249.0,629780200.0,,2247535.0,,,119591644.0,,15896274.0,2671427.0,160369612.0 +2015-07,1886158.0,999892200.0,,3702306.0,,,385836650.0,,15074103.0,2386954.0,113513965.0 +2015-08,2040044.0,905192300.0,,2120603.0,40375231.0,,116032840.0,,10414486.0,1436434.0,97257686.0 +2015-09,8185042.0,603623900.0,,1467816.0,19920655.0,,49180300.0,,12300980.0,1484595.0,56772569.0 +2015-10,6056875.0,953279500.0,,1615985.0,19815600.0,,66466263.0,,12339800.0,1977271.0,49731249.0 +2015-11,3382123.0,2177623400.0,,1910150.0,25989045.0,,135804380.0,,12175336.0,3220336.0,48489751.0 +2015-12,2522528.0,2096250000.0,,2473568.0,14436832.0,,89443960.0,,37887299.0,2112647.0,40048977.0 +2016-01,5966266.0,1990880300.0,,9193855.0,99427369.0,,94961890.0,,20090306.0,1788135.0,116915328.0 +2016-02,6251316.0,1876238700.0,,3841983.0,350388940.0,,47292165.0,,25743896.0,3622335.0,99648766.0 +2016-03,27849050.0,2332852800.0,,12936454.0,911491280.0,,38536977.0,,24004891.0,5753109.0,190280112.0 +2016-04,6186289.0,1811475200.0,,8324348.0,503439580.0,,65797878.0,,21524624.0,6798157.0,85794206.0 +2016-05,3953021.0,2234432800.0,,8820119.0,866285490.0,,102670010.0,,15843898.0,24858458.0,135209479.0 +2016-06,10087429.0,4749702800.0,,13279951.0,1179208430.0,,188500720.0,,57012719.0,51090603.0,312353951.0 +2016-07,12023969.0,3454186200.0,,10618195.0,851472180.0,293055300.0,105277610.0,,22900464.0,28629458.0,268690210.0 +2016-08,12534363.0,2686220200.0,,40881308.0,507070300.0,581698340.0,83652350.0,,28975007.0,45068932.0,459958785.0 +2016-09,5158732.0,2004401400.0,,18101858.0,347623070.0,84077245.0,62830982.0,,96112558.0,26136702.0,628039417.0 +2016-10,2854832.0,2115443800.0,,23540851.0,311770270.0,44282688.0,83556300.0,,92834093.0,18317797.0,373315484.0 +2016-11,2665978.0,2635773100.0,,30321284.0,263548890.0,23103568.0,81387580.0,,60944653.0,29524784.0,344691117.0 +2016-12,2326324.0,3556763800.0,,56139879.0,388060700.0,61626920.0,164804910.0,,55858911.0,34218109.0,353995029.0 +2017-01,3239314.0,5143971700.0,,92380810.0,521748480.0,66866942.0,274656140.0,,39156759.0,106403615.0,486972009.0 +2017-02,2339587.0,4282761200.0,,91120440.0,467166760.0,37611839.0,149051010.0,,23637113.0,85492340.0,407382330.0 +2017-03,12889667.0,10872456000.0,,1059310430.0,4324810300.0,255602630.0,489000040.0,,220573420.0,631852200.0,1344849697.0 +2017-04,42193324.0,9757448000.0,,518009040.0,3154319700.0,514273000.0,2678262100.0,,1109643780.0,627975470.0,2701133044.0 +2017-05,429436130.0,34261857000.0,,921691700.0,14679954800.0,3225613100.0,6499161800.0,42001830.0,5788513300.0,2083012200.0,9688590953.0 +2017-06,3707167100.0,44478141000.0,,1513357000.0,34410801000.0,5438127300.0,13602595000.0,622968620.0,6264710700.0,3086254100.0,14872077005.0 +2017-07,1906913800.0,32619957000.0,6769350.0,1391381100.0,31034420000.0,4501486200.0,10712661700.0,433805260.0,3796232800.0,3692802800.0,8856206272.0 +2017-08,1339153300.0,63548017000.0,17120742800.0,1876818100.0,33197514000.0,2489664500.0,7363653600.0,2033757900.0,9021628800.0,4443483200.0,20262134476.0 +2017-09,871825680.0,55700949000.0,11313133000.0,1527726800.0,24310300000.0,5421110100.0,15971605100.0,3619483500.0,3693570800.0,6281031900.0,17114834981.0 +2017-10,149892530.0,34701438000.0,5105023000.0,754841700.0,9155628000.0,775898300.0,3410080200.0,1305457100.0,5986936100.0,3202831400.0,9198050669.0