daru 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +0 -0
- data/Gemfile +0 -1
- data/History.txt +35 -0
- data/README.md +178 -198
- data/daru.gemspec +5 -7
- data/lib/daru.rb +10 -2
- data/lib/daru/accessors/array_wrapper.rb +36 -198
- data/lib/daru/accessors/nmatrix_wrapper.rb +60 -209
- data/lib/daru/core/group_by.rb +183 -0
- data/lib/daru/dataframe.rb +615 -167
- data/lib/daru/index.rb +17 -16
- data/lib/daru/io/io.rb +5 -12
- data/lib/daru/maths/arithmetic/dataframe.rb +72 -8
- data/lib/daru/maths/arithmetic/vector.rb +19 -6
- data/lib/daru/maths/statistics/dataframe.rb +103 -2
- data/lib/daru/maths/statistics/vector.rb +102 -61
- data/lib/daru/monkeys.rb +8 -0
- data/lib/daru/multi_index.rb +199 -0
- data/lib/daru/plotting/dataframe.rb +24 -24
- data/lib/daru/plotting/vector.rb +14 -15
- data/lib/daru/vector.rb +402 -98
- data/lib/version.rb +1 -1
- data/notebooks/grouping_splitting_pivots.ipynb +529 -0
- data/notebooks/intro_with_music_data_.ipynb +104 -119
- data/spec/accessors/wrappers_spec.rb +36 -0
- data/spec/core/group_by_spec.rb +331 -0
- data/spec/dataframe_spec.rb +1237 -475
- data/spec/fixtures/sales-funnel.csv +18 -0
- data/spec/index_spec.rb +10 -21
- data/spec/io/io_spec.rb +4 -14
- data/spec/math/arithmetic/dataframe_spec.rb +66 -0
- data/spec/math/arithmetic/vector_spec.rb +45 -4
- data/spec/math/statistics/dataframe_spec.rb +91 -1
- data/spec/math/statistics/vector_spec.rb +32 -6
- data/spec/monkeys_spec.rb +10 -1
- data/spec/multi_index_spec.rb +216 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/vector_spec.rb +505 -57
- metadata +21 -15
@@ -2,7 +2,7 @@
|
|
2
2
|
"metadata": {
|
3
3
|
"language": "ruby",
|
4
4
|
"name": "",
|
5
|
-
"signature": "sha256:
|
5
|
+
"signature": "sha256:addeb041adfc32646a8288884b7c282421a0dd0465fcc24cfd498525d636ee08"
|
6
6
|
},
|
7
7
|
"nbformat": 3,
|
8
8
|
"nbformat_minor": 0,
|
@@ -37,7 +37,7 @@
|
|
37
37
|
"\n",
|
38
38
|
"\tvar script = d3.select(\"head\")\n",
|
39
39
|
"\t .append(\"script\")\n",
|
40
|
-
"\t .attr(\"src\", \"
|
40
|
+
"\t .attr(\"src\", \"http://cdn.rawgit.com/domitry/Nyaplotjs/master/release/nyaplot.js\")\n",
|
41
41
|
"\t .attr(\"async\", true);\n",
|
42
42
|
"\n",
|
43
43
|
"\tscript[0][0].onload = script[0][0].onreadystatechange = function(){\n",
|
@@ -59,35 +59,35 @@
|
|
59
59
|
"output_type": "pyout",
|
60
60
|
"prompt_number": 1,
|
61
61
|
"text": [
|
62
|
-
"\"if(window['d3'] === undefined ||\\n window['Nyaplot'] === undefined){\\n var path = {\\\"d3\\\":\\\"http://d3js.org/d3.v3.min\\\"};\\n\\n\\n\\n var shim = {\\\"d3\\\":{\\\"exports\\\":\\\"d3\\\"}};\\n\\n require.config({paths: path, shim:shim});\\n\\n\\nrequire(['d3'], function(d3){window['d3']=d3;console.log('finished loading d3');\\n\\n\\tvar script = d3.select(\\\"head\\\")\\n\\t .append(\\\"script\\\")\\n\\t .attr(\\\"src\\\", \\\"
|
62
|
+
"\"if(window['d3'] === undefined ||\\n window['Nyaplot'] === undefined){\\n var path = {\\\"d3\\\":\\\"http://d3js.org/d3.v3.min\\\"};\\n\\n\\n\\n var shim = {\\\"d3\\\":{\\\"exports\\\":\\\"d3\\\"}};\\n\\n require.config({paths: path, shim:shim});\\n\\n\\nrequire(['d3'], function(d3){window['d3']=d3;console.log('finished loading d3');\\n\\n\\tvar script = d3.select(\\\"head\\\")\\n\\t .append(\\\"script\\\")\\n\\t .attr(\\\"src\\\", \\\"http://cdn.rawgit.com/domitry/Nyaplotjs/master/release/nyaplot.js\\\")\\n\\t .attr(\\\"async\\\", true);\\n\\n\\tscript[0][0].onload = script[0][0].onreadystatechange = function(){\\n\\n\\n\\t var event = document.createEvent(\\\"HTMLEvents\\\");\\n\\t event.initEvent(\\\"load_nyaplot\\\",false,false);\\n\\t window.dispatchEvent(event);\\n\\t console.log('Finished loading Nyaplotjs');\\n\\n\\t};\\n\\n\\n});\\n}\\n\""
|
63
63
|
]
|
64
64
|
},
|
65
65
|
{
|
66
66
|
"html": [
|
67
|
-
"<table><tr><th></th><th>
|
67
|
+
"<table><tr><th></th><th>artid</th><th>artname</th><th>timestamp</th><th>traid</th><th>traname</th><th>userid</th></tr><tr><td>0</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:55:00Z</td><td>0138547f-374d-49d4-8f1c-9b2c8b5c65c0</td><td>X-Ray Eyes</td><td>user_000705</td></tr><tr><td>1</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:51:28Z</td><td>22ce9a32-3510-4c8e-8151-c044a62eb4fd</td><td>Hard Times</td><td>user_000705</td></tr><tr><td>2</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:46:55Z</td><td>22ce9a32-3510-4c8e-8151-c044a62eb4fd</td><td>Hard Times</td><td>user_000705</td></tr><tr><td>3</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:42:17Z</td><td>c386b85f-1bfe-4038-b323-cb8229ab2f8b</td><td>Magic Touch</td><td>user_000705</td></tr><tr><td>4</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:37:53Z</td><td>8ec9b4f8-2d1b-4616-9ae4-4711ca328fc3</td><td>Charisma</td><td>user_000705</td></tr><tr><td>5</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:33:37Z</td><td>ff47d82e-313d-4bd0-8e61-fe61124a361b</td><td>Dirty Livin'</td><td>user_000705</td></tr><tr><td>6</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:29:39Z</td><td>3621800b-87b7-43c6-b6a3-47ea4b658407</td><td>Sure Know Something</td><td>user_000705</td></tr><tr><td>7</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:24:46Z</td><td>91cc5010-e65b-4f49-94b5-1deed61cfcc7</td><td>2,000 Man</td><td>user_000705</td></tr><tr><td>8</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03T12:20:17Z</td><td>daa13e72-9056-476f-b431-335b2c26842d</td><td>I Was Made For Lovin' You</td><td>user_000705</td></tr><tr><td>9</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T12:16:20Z</td><td>1895c79d-ae5f-40bf-bc18-83fdcd8d2842</td><td>Burning Of The Midnight Lamp</td><td>user_000705</td></tr><tr><td>10</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T12:12:35Z</td><td>1ae3c250-7b16-49d4-9c71-0928724eecce</td><td>Gypsy Eyes</td><td>user_000705</td></tr><tr><td>11</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T12:08:26Z</td><td>fca63fe0-c9e6-4347-92b7-21f6cf79226c</td><td>Come On, Part 1</td><td>user_000705</td></tr><tr><td>12</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T12:04:59Z</td><td>36beb31d-ed74-4a49-832f-a4a38dc96bab</td><td>Long Hot Summer Night</td><td>user_000705</td></tr><tr><td>13</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T12:02:08Z</td><td>4ad6064e-7d54-49a2-a134-320a1612ee27</td><td>Little Miss Strange</td><td>user_000705</td></tr><tr><td>14</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T11:47:07Z</td><td>40ffef8e-b851-473a-a239-08685eab22b0</td><td>Voodoo Chile</td><td>user_000705</td></tr><tr><td>15</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T11:44:43Z</td><td>feb64d01-6e05-4974-bb44-0046deca1bdb</td><td>Crosstown Traffic</td><td>user_000705</td></tr><tr><td>16</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T11:42:35Z</td><td>7f9b462a-8ac5-472d-a5aa-716b3b3d169c</td><td>Have You Ever Been (To Electric Ladyland)</td><td>user_000705</td></tr><tr><td>17</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03T11:41:13Z</td><td>88b57468-8d58-4310-b135-c94620fcfbc1</td><td>...And The Gods Made Love</td><td>user_000705</td></tr><tr><td>18</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T09:24:28Z</td><td>788878e0-8965-489e-86e3-add4c1f3d134</td><td>Line Of Best Fit</td><td>user_000705</td></tr><tr><td>19</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T09:19:58Z</td><td>7cfc403d-18e7-4b8e-b0c4-1864ca393fbb</td><td>Fake Frowns</td><td>user_000705</td></tr><tr><td>20</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T09:15:03Z</td><td>34a2d7ad-6b3a-4cfc-b4ca-edfc55a6685b</td><td>Amputations</td><td>user_000705</td></tr><tr><td>21</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T09:11:21Z</td><td>99db2ed6-4493-481c-ac20-54ad323cb04b</td><td>The Face That Launched 1000 Shits</td><td>user_000705</td></tr><tr><td>22</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T09:07:44Z</td><td>269084ba-3065-4b43-a733-f491e618b26a</td><td>Sleep Spent</td><td>user_000705</td></tr><tr><td>23</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T09:03:54Z</td><td>96fac269-5308-4aee-827f-d01a66674694</td><td>Pictures In An Exhibition</td><td>user_000705</td></tr><tr><td>24</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T08:59:34Z</td><td>c29440d9-03e6-4e18-91d6-ef8bf1e1ca32</td><td>Your Bruise</td><td>user_000705</td></tr><tr><td>25</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T08:56:55Z</td><td>ed55b695-976e-4898-8fde-51a8e3b0e262</td><td>Champagne From A Paper Cup</td><td>user_000705</td></tr><tr><td>26</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T08:49:07Z</td><td>c5238d6d-9b04-496c-8674-4ea7a07aecd6</td><td>President Of What?</td><td>user_000705</td></tr><tr><td>27</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02T08:44:34Z</td><td>bf59dfef-03a8-4270-9456-50df79da56c2</td><td>Bend To Squares</td><td>user_000705</td></tr><tr><td>28</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-01T19:08:37Z</td><td>788878e0-8965-489e-86e3-add4c1f3d134</td><td>Line Of Best Fit</td><td>user_000705</td></tr><tr><td>29</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-01T19:04:07Z</td><td>7cfc403d-18e7-4b8e-b0c4-1864ca393fbb</td><td>Fake Frowns</td><td>user_000705</td></tr><tr><td>30</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-01T18:59:12Z</td><td>34a2d7ad-6b3a-4cfc-b4ca-edfc55a6685b</td><td>Amputations</td><td>user_000705</td></tr><tr><td>31</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-01T18:55:30Z</td><td>99db2ed6-4493-481c-ac20-54ad323cb04b</td><td>The Face That Launched 1000 Shits</td><td>user_000705</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr></table>"
|
68
68
|
],
|
69
69
|
"metadata": {},
|
70
70
|
"output_type": "pyout",
|
71
71
|
"prompt_number": 1,
|
72
72
|
"text": [
|
73
73
|
"\n",
|
74
|
-
"#<Daru::DataFrame:
|
75
|
-
"
|
76
|
-
" 0
|
77
|
-
" 1
|
78
|
-
" 2
|
79
|
-
" 3
|
80
|
-
" 4
|
81
|
-
" 5
|
82
|
-
" 6
|
83
|
-
" 7
|
84
|
-
" 8
|
85
|
-
" 9
|
86
|
-
" 10
|
87
|
-
" 11
|
88
|
-
" 12
|
89
|
-
" 13
|
90
|
-
" 14
|
74
|
+
"#<Daru::DataFrame:86461610 @name = ae5b6be9-f08c-4e79-a0f3-ead8016fd7ee @size = 2500>\n",
|
75
|
+
" artid artname timestamp traid traname userid \n",
|
76
|
+
" 0 e1f1e33e-2 Kiss 2009-05-03 0138547f-3 X-Ray Eyes user_00070 \n",
|
77
|
+
" 1 e1f1e33e-2 Kiss 2009-05-03 22ce9a32-3 Hard Times user_00070 \n",
|
78
|
+
" 2 e1f1e33e-2 Kiss 2009-05-03 22ce9a32-3 Hard Times user_00070 \n",
|
79
|
+
" 3 e1f1e33e-2 Kiss 2009-05-03 c386b85f-1 Magic Touc user_00070 \n",
|
80
|
+
" 4 e1f1e33e-2 Kiss 2009-05-03 8ec9b4f8-2 Charisma user_00070 \n",
|
81
|
+
" 5 e1f1e33e-2 Kiss 2009-05-03 ff47d82e-3 Dirty Livi user_00070 \n",
|
82
|
+
" 6 e1f1e33e-2 Kiss 2009-05-03 3621800b-8 Sure Know user_00070 \n",
|
83
|
+
" 7 e1f1e33e-2 Kiss 2009-05-03 91cc5010-e 2,000 Man user_00070 \n",
|
84
|
+
" 8 e1f1e33e-2 Kiss 2009-05-03 daa13e72-9 I Was Made user_00070 \n",
|
85
|
+
" 9 33b3c323-7 The Jimi H 2009-05-03 1895c79d-a Burning Of user_00070 \n",
|
86
|
+
" 10 33b3c323-7 The Jimi H 2009-05-03 1ae3c250-7 Gypsy Eyes user_00070 \n",
|
87
|
+
" 11 33b3c323-7 The Jimi H 2009-05-03 fca63fe0-c Come On, P user_00070 \n",
|
88
|
+
" 12 33b3c323-7 The Jimi H 2009-05-03 36beb31d-e Long Hot S user_00070 \n",
|
89
|
+
" 13 33b3c323-7 The Jimi H 2009-05-03 4ad6064e-7 Little Mis user_00070 \n",
|
90
|
+
" 14 33b3c323-7 The Jimi H 2009-05-03 40ffef8e-b Voodoo Chi user_00070 \n",
|
91
91
|
" ... ... ... ... ... ... ... \n"
|
92
92
|
]
|
93
93
|
}
|
@@ -112,26 +112,26 @@
|
|
112
112
|
"prompt_number": 2,
|
113
113
|
"text": [
|
114
114
|
"\n",
|
115
|
-
"#<Daru::Vector:
|
116
|
-
"
|
117
|
-
"
|
118
|
-
"
|
119
|
-
"
|
120
|
-
"
|
121
|
-
"
|
122
|
-
"
|
123
|
-
"
|
124
|
-
"
|
125
|
-
"
|
126
|
-
"
|
127
|
-
"
|
128
|
-
"
|
129
|
-
"
|
130
|
-
"
|
131
|
-
"
|
132
|
-
"
|
133
|
-
"
|
134
|
-
"
|
115
|
+
"#<Daru::Vector:85988150 @name = timestamp @size = 2500 >\n",
|
116
|
+
" timestamp\n",
|
117
|
+
" 0 2009-05-03T12:55:00Z\n",
|
118
|
+
" 1 2009-05-03T12:51:28Z\n",
|
119
|
+
" 2 2009-05-03T12:46:55Z\n",
|
120
|
+
" 3 2009-05-03T12:42:17Z\n",
|
121
|
+
" 4 2009-05-03T12:37:53Z\n",
|
122
|
+
" 5 2009-05-03T12:33:37Z\n",
|
123
|
+
" 6 2009-05-03T12:29:39Z\n",
|
124
|
+
" 7 2009-05-03T12:24:46Z\n",
|
125
|
+
" 8 2009-05-03T12:20:17Z\n",
|
126
|
+
" 9 2009-05-03T12:16:20Z\n",
|
127
|
+
" 10 2009-05-03T12:12:35Z\n",
|
128
|
+
" 11 2009-05-03T12:08:26Z\n",
|
129
|
+
" 12 2009-05-03T12:04:59Z\n",
|
130
|
+
" 13 2009-05-03T12:02:08Z\n",
|
131
|
+
" 14 2009-05-03T11:47:07Z\n",
|
132
|
+
" 15 2009-05-03T11:44:43Z\n",
|
133
|
+
" 16 2009-05-03T11:42:35Z\n",
|
134
|
+
" ... ...\n"
|
135
135
|
]
|
136
136
|
}
|
137
137
|
],
|
@@ -152,30 +152,30 @@
|
|
152
152
|
"outputs": [
|
153
153
|
{
|
154
154
|
"html": [
|
155
|
-
"<table><tr><th></th><th>
|
155
|
+
"<table><tr><th></th><th>artid</th><th>artname</th><th>timestamp</th><th>traid</th><th>traname</th><th>userid</th></tr><tr><td>0</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:55:00 +0530</td><td>0138547f-374d-49d4-8f1c-9b2c8b5c65c0</td><td>X-Ray Eyes</td><td>user_000705</td></tr><tr><td>1</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:51:28 +0530</td><td>22ce9a32-3510-4c8e-8151-c044a62eb4fd</td><td>Hard Times</td><td>user_000705</td></tr><tr><td>2</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:46:55 +0530</td><td>22ce9a32-3510-4c8e-8151-c044a62eb4fd</td><td>Hard Times</td><td>user_000705</td></tr><tr><td>3</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:42:17 +0530</td><td>c386b85f-1bfe-4038-b323-cb8229ab2f8b</td><td>Magic Touch</td><td>user_000705</td></tr><tr><td>4</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:37:53 +0530</td><td>8ec9b4f8-2d1b-4616-9ae4-4711ca328fc3</td><td>Charisma</td><td>user_000705</td></tr><tr><td>5</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:33:37 +0530</td><td>ff47d82e-313d-4bd0-8e61-fe61124a361b</td><td>Dirty Livin'</td><td>user_000705</td></tr><tr><td>6</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:29:39 +0530</td><td>3621800b-87b7-43c6-b6a3-47ea4b658407</td><td>Sure Know Something</td><td>user_000705</td></tr><tr><td>7</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:24:46 +0530</td><td>91cc5010-e65b-4f49-94b5-1deed61cfcc7</td><td>2,000 Man</td><td>user_000705</td></tr><tr><td>8</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>2009-05-03 12:20:17 +0530</td><td>daa13e72-9056-476f-b431-335b2c26842d</td><td>I Was Made For Lovin' You</td><td>user_000705</td></tr><tr><td>9</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 12:16:20 +0530</td><td>1895c79d-ae5f-40bf-bc18-83fdcd8d2842</td><td>Burning Of The Midnight Lamp</td><td>user_000705</td></tr><tr><td>10</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 12:12:35 +0530</td><td>1ae3c250-7b16-49d4-9c71-0928724eecce</td><td>Gypsy Eyes</td><td>user_000705</td></tr><tr><td>11</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 12:08:26 +0530</td><td>fca63fe0-c9e6-4347-92b7-21f6cf79226c</td><td>Come On, Part 1</td><td>user_000705</td></tr><tr><td>12</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 12:04:59 +0530</td><td>36beb31d-ed74-4a49-832f-a4a38dc96bab</td><td>Long Hot Summer Night</td><td>user_000705</td></tr><tr><td>13</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 12:02:08 +0530</td><td>4ad6064e-7d54-49a2-a134-320a1612ee27</td><td>Little Miss Strange</td><td>user_000705</td></tr><tr><td>14</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 11:47:07 +0530</td><td>40ffef8e-b851-473a-a239-08685eab22b0</td><td>Voodoo Chile</td><td>user_000705</td></tr><tr><td>15</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 11:44:43 +0530</td><td>feb64d01-6e05-4974-bb44-0046deca1bdb</td><td>Crosstown Traffic</td><td>user_000705</td></tr><tr><td>16</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 11:42:35 +0530</td><td>7f9b462a-8ac5-472d-a5aa-716b3b3d169c</td><td>Have You Ever Been (To Electric Ladyland)</td><td>user_000705</td></tr><tr><td>17</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>2009-05-03 11:41:13 +0530</td><td>88b57468-8d58-4310-b135-c94620fcfbc1</td><td>...And The Gods Made Love</td><td>user_000705</td></tr><tr><td>18</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 09:24:28 +0530</td><td>788878e0-8965-489e-86e3-add4c1f3d134</td><td>Line Of Best Fit</td><td>user_000705</td></tr><tr><td>19</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 09:19:58 +0530</td><td>7cfc403d-18e7-4b8e-b0c4-1864ca393fbb</td><td>Fake Frowns</td><td>user_000705</td></tr><tr><td>20</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 09:15:03 +0530</td><td>34a2d7ad-6b3a-4cfc-b4ca-edfc55a6685b</td><td>Amputations</td><td>user_000705</td></tr><tr><td>21</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 09:11:21 +0530</td><td>99db2ed6-4493-481c-ac20-54ad323cb04b</td><td>The Face That Launched 1000 Shits</td><td>user_000705</td></tr><tr><td>22</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 09:07:44 +0530</td><td>269084ba-3065-4b43-a733-f491e618b26a</td><td>Sleep Spent</td><td>user_000705</td></tr><tr><td>23</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 09:03:54 +0530</td><td>96fac269-5308-4aee-827f-d01a66674694</td><td>Pictures In An Exhibition</td><td>user_000705</td></tr><tr><td>24</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 08:59:34 +0530</td><td>c29440d9-03e6-4e18-91d6-ef8bf1e1ca32</td><td>Your Bruise</td><td>user_000705</td></tr><tr><td>25</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 08:56:55 +0530</td><td>ed55b695-976e-4898-8fde-51a8e3b0e262</td><td>Champagne From A Paper Cup</td><td>user_000705</td></tr><tr><td>26</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 08:49:07 +0530</td><td>c5238d6d-9b04-496c-8674-4ea7a07aecd6</td><td>President Of What?</td><td>user_000705</td></tr><tr><td>27</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-02 08:44:34 +0530</td><td>bf59dfef-03a8-4270-9456-50df79da56c2</td><td>Bend To Squares</td><td>user_000705</td></tr><tr><td>28</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-01 19:08:37 +0530</td><td>788878e0-8965-489e-86e3-add4c1f3d134</td><td>Line Of Best Fit</td><td>user_000705</td></tr><tr><td>29</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-01 19:04:07 +0530</td><td>7cfc403d-18e7-4b8e-b0c4-1864ca393fbb</td><td>Fake Frowns</td><td>user_000705</td></tr><tr><td>30</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-01 18:59:12 +0530</td><td>34a2d7ad-6b3a-4cfc-b4ca-edfc55a6685b</td><td>Amputations</td><td>user_000705</td></tr><tr><td>31</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>2009-05-01 18:55:30 +0530</td><td>99db2ed6-4493-481c-ac20-54ad323cb04b</td><td>The Face That Launched 1000 Shits</td><td>user_000705</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr></table>"
|
156
156
|
],
|
157
157
|
"metadata": {},
|
158
158
|
"output_type": "pyout",
|
159
159
|
"prompt_number": 3,
|
160
160
|
"text": [
|
161
161
|
"\n",
|
162
|
-
"#<Daru::DataFrame:
|
163
|
-
"
|
164
|
-
" 0
|
165
|
-
" 1
|
166
|
-
" 2
|
167
|
-
" 3
|
168
|
-
" 4
|
169
|
-
" 5
|
170
|
-
" 6
|
171
|
-
" 7
|
172
|
-
" 8
|
173
|
-
" 9
|
174
|
-
" 10
|
175
|
-
" 11
|
176
|
-
" 12
|
177
|
-
" 13
|
178
|
-
" 14
|
162
|
+
"#<Daru::DataFrame:88577360 @name = ae5b6be9-f08c-4e79-a0f3-ead8016fd7ee @size = 2500>\n",
|
163
|
+
" artid artname timestamp traid traname userid \n",
|
164
|
+
" 0 e1f1e33e-2 Kiss 2009-05-03 0138547f-3 X-Ray Eyes user_00070 \n",
|
165
|
+
" 1 e1f1e33e-2 Kiss 2009-05-03 22ce9a32-3 Hard Times user_00070 \n",
|
166
|
+
" 2 e1f1e33e-2 Kiss 2009-05-03 22ce9a32-3 Hard Times user_00070 \n",
|
167
|
+
" 3 e1f1e33e-2 Kiss 2009-05-03 c386b85f-1 Magic Touc user_00070 \n",
|
168
|
+
" 4 e1f1e33e-2 Kiss 2009-05-03 8ec9b4f8-2 Charisma user_00070 \n",
|
169
|
+
" 5 e1f1e33e-2 Kiss 2009-05-03 ff47d82e-3 Dirty Livi user_00070 \n",
|
170
|
+
" 6 e1f1e33e-2 Kiss 2009-05-03 3621800b-8 Sure Know user_00070 \n",
|
171
|
+
" 7 e1f1e33e-2 Kiss 2009-05-03 91cc5010-e 2,000 Man user_00070 \n",
|
172
|
+
" 8 e1f1e33e-2 Kiss 2009-05-03 daa13e72-9 I Was Made user_00070 \n",
|
173
|
+
" 9 33b3c323-7 The Jimi H 2009-05-03 1895c79d-a Burning Of user_00070 \n",
|
174
|
+
" 10 33b3c323-7 The Jimi H 2009-05-03 1ae3c250-7 Gypsy Eyes user_00070 \n",
|
175
|
+
" 11 33b3c323-7 The Jimi H 2009-05-03 fca63fe0-c Come On, P user_00070 \n",
|
176
|
+
" 12 33b3c323-7 The Jimi H 2009-05-03 36beb31d-e Long Hot S user_00070 \n",
|
177
|
+
" 13 33b3c323-7 The Jimi H 2009-05-03 4ad6064e-7 Little Mis user_00070 \n",
|
178
|
+
" 14 33b3c323-7 The Jimi H 2009-05-03 40ffef8e-b Voodoo Chi user_00070 \n",
|
179
179
|
" ... ... ... ... ... ... ... \n"
|
180
180
|
]
|
181
181
|
}
|
@@ -186,111 +186,96 @@
|
|
186
186
|
"cell_type": "code",
|
187
187
|
"collapsed": false,
|
188
188
|
"input": [
|
189
|
-
"
|
190
|
-
"
|
191
|
-
"# Populate a hash which has artist names as keys with corresponding values set to the number of times the name of the artist\n",
|
192
|
-
"# has appeared.\n",
|
193
|
-
"artists = df.artname.uniq\n",
|
194
|
-
"artists.each do |artist|\n",
|
195
|
-
" artist_counts[artist] = df.artname.count(artist)\n",
|
196
|
-
"end\n",
|
197
|
-
"\n",
|
198
|
-
"# Since indexes are stored as symbols, convert each artist name to camel_case\n",
|
199
|
-
"a= artist_counts.to_a.each do |name_val_pair|\n",
|
200
|
-
" name_val_pair[0] = name_val_pair[0].downcase.split(' ').join('_')\n",
|
201
|
-
"end\n",
|
202
|
-
"counts = Daru::Vector.new Hash[a], name: :counts"
|
189
|
+
"# Group by artist name and call 'size' to see the number of rows each artist populates.\n",
|
190
|
+
"artists = df.group_by(:artname).size"
|
203
191
|
],
|
204
192
|
"language": "python",
|
205
193
|
"metadata": {},
|
206
194
|
"outputs": [
|
207
195
|
{
|
208
196
|
"html": [
|
209
|
-
"<table><tr><th> </th><th>
|
197
|
+
"<table><tr><th> </th><th>size</th></tr><tr><td>3 Doors Down</td><td>3</td></tr><tr><td>A Perfect Circle</td><td>1</td></tr><tr><td>A. R. Rahman</td><td>231</td></tr><tr><td>Abba</td><td>1</td></tr><tr><td>Aditi Singh Sharma</td><td>3</td></tr><tr><td>Aerosmith</td><td>1</td></tr><tr><td>Air</td><td>1</td></tr><tr><td>Akurat</td><td>1</td></tr><tr><td>Alanis Morissette</td><td>5</td></tr><tr><td>Alice Cooper</td><td>2</td></tr><tr><td>Alice In Chains</td><td>1</td></tr><tr><td>Alison Krauss</td><td>1</td></tr><tr><td>Altamiro Carrilho</td><td>1</td></tr><tr><td>Alvin Youngblood Hart</td><td>3</td></tr><tr><td>America</td><td>1</td></tr><tr><td>Amit Trivedi</td><td>20</td></tr><tr><td>Amon Amarth</td><td>1</td></tr><tr><td>Anathema</td><td>4</td></tr><tr><td>Andrea Bocelli</td><td>16</td></tr><tr><td>Andrea Bocelli;Christina Aquilera</td><td>2</td></tr><tr><td>Andrea Bocelli;Kenny G</td><td>2</td></tr><tr><td>Andrea Bocelli;Mario Reyes</td><td>1</td></tr><tr><td>Andrew Lloyd Webber</td><td>1</td></tr><tr><td>Anton Maiden</td><td>2</td></tr><tr><td>Antsy Pants</td><td>2</td></tr><tr><td>Apocalyptica</td><td>9</td></tr><tr><td>Archive</td><td>1</td></tr><tr><td>Arctic Monkeys</td><td>1</td></tr><tr><td>Aretha Franklin</td><td>4</td></tr><tr><td>Asia</td><td>1</td></tr><tr><td>Audioslave</td><td>1</td></tr><tr><td>Aurelio Fierro</td><td>1</td></tr><tr><td>...</td><td>...</td></tr></table>"
|
210
198
|
],
|
211
199
|
"metadata": {},
|
212
200
|
"output_type": "pyout",
|
213
|
-
"prompt_number":
|
201
|
+
"prompt_number": 7,
|
214
202
|
"text": [
|
215
203
|
"\n",
|
216
|
-
"#<Daru::Vector
|
217
|
-
"
|
218
|
-
"
|
219
|
-
"
|
220
|
-
"
|
221
|
-
"
|
222
|
-
"
|
223
|
-
"
|
224
|
-
"
|
225
|
-
"
|
226
|
-
"
|
227
|
-
"
|
228
|
-
"
|
229
|
-
"
|
230
|
-
"
|
231
|
-
"
|
232
|
-
"
|
233
|
-
"
|
234
|
-
"
|
235
|
-
"
|
204
|
+
"#<Daru::Vector:88196900 @name = size @size = 376 >\n",
|
205
|
+
" size\n",
|
206
|
+
" 3 Doors Down 3\n",
|
207
|
+
" A Perfect Circle 1\n",
|
208
|
+
" A. R. Rahman 231\n",
|
209
|
+
" Abba 1\n",
|
210
|
+
" Aditi Singh Sharma 3\n",
|
211
|
+
" Aerosmith 1\n",
|
212
|
+
" Air 1\n",
|
213
|
+
" Akurat 1\n",
|
214
|
+
" Alanis Morissette 5\n",
|
215
|
+
" Alice Cooper 2\n",
|
216
|
+
" Alice In Chains 1\n",
|
217
|
+
" Alison Krauss 1\n",
|
218
|
+
" Altamiro Carrilho 1\n",
|
219
|
+
"Alvin Youngblood Har 3\n",
|
220
|
+
" America 1\n",
|
221
|
+
" Amit Trivedi 20\n",
|
222
|
+
" Amon Amarth 1\n",
|
223
|
+
" ... ...\n"
|
236
224
|
]
|
237
225
|
}
|
238
226
|
],
|
239
|
-
"prompt_number":
|
227
|
+
"prompt_number": 7
|
240
228
|
},
|
241
229
|
{
|
242
230
|
"cell_type": "code",
|
243
231
|
"collapsed": false,
|
244
232
|
"input": [
|
245
|
-
"
|
233
|
+
"artists.max_index"
|
246
234
|
],
|
247
235
|
"language": "python",
|
248
236
|
"metadata": {},
|
249
237
|
"outputs": [
|
250
238
|
{
|
251
239
|
"html": [
|
252
|
-
"<table><tr><th> </th><th>
|
240
|
+
"<table><tr><th> </th><th>size</th></tr><tr><td>A. R. Rahman</td><td>231</td></tr></table>"
|
253
241
|
],
|
254
242
|
"metadata": {},
|
255
243
|
"output_type": "pyout",
|
256
|
-
"prompt_number":
|
244
|
+
"prompt_number": 14,
|
257
245
|
"text": [
|
258
246
|
"\n",
|
259
|
-
"#<Daru::Vector:
|
260
|
-
"
|
261
|
-
"
|
247
|
+
"#<Daru::Vector:86142110 @name = size @size = 1 >\n",
|
248
|
+
" size\n",
|
249
|
+
"A. R. Rahman 231\n"
|
262
250
|
]
|
263
251
|
}
|
264
252
|
],
|
265
|
-
"prompt_number":
|
253
|
+
"prompt_number": 14
|
266
254
|
},
|
267
255
|
{
|
268
256
|
"cell_type": "code",
|
269
257
|
"collapsed": false,
|
270
258
|
"input": [
|
271
|
-
"top_ten =
|
272
|
-
"\n",
|
273
|
-
"hsh = {}\n",
|
259
|
+
"top_ten = artists.sort(ascending: false)[0..10]\n",
|
274
260
|
"\n",
|
275
|
-
"top_ten.
|
276
|
-
"
|
277
|
-
"
|
278
|
-
"\n",
|
279
|
-
"
|
280
|
-
"
|
281
|
-
"ten.plot type: :bar, width: 1120, height: 300"
|
261
|
+
"top_ten.plot type: :bar do |plt| \n",
|
262
|
+
" plt.width 1120 \n",
|
263
|
+
" plt.height 500\n",
|
264
|
+
" plt.legend true\n",
|
265
|
+
" plt.rotate_x_label 20\n",
|
266
|
+
"end"
|
282
267
|
],
|
283
268
|
"language": "python",
|
284
269
|
"metadata": {},
|
285
270
|
"outputs": [
|
286
271
|
{
|
287
272
|
"html": [
|
288
|
-
"<div id='vis-
|
273
|
+
"<div id='vis-5ee90e94-e93a-4506-817f-b036c2a9a7f6'></div>\n",
|
289
274
|
"<script>\n",
|
290
275
|
"(function(){\n",
|
291
276
|
" var render = function(){\n",
|
292
|
-
" var model = {\"panes\":[{\"diagrams\":[{\"type\":\"bar\",\"options\":{\"x\":\"data0\",\"y\":\"data1\"},\"data\":\"
|
293
|
-
" Nyaplot.core.parse(model, '#vis-
|
277
|
+
" var model = {\"panes\":[{\"diagrams\":[{\"type\":\"bar\",\"options\":{\"x\":\"data0\",\"y\":\"data1\"},\"data\":\"252f4b57-0e4e-4358-ab33-8ca341895f4e\"}],\"options\":{\"width\":1120,\"height\":500,\"legend\":true,\"rotate_x_label\":20,\"xrange\":[\"A. R. Rahman\",\"Death Cab For Cutie\",\"Pink Floyd\",\"The Rolling Stones\",\"Opeth\",\"The Beatles\",\"The Cranberries\",\"Cat Stevens\",\"Howard Shore\",\"Nick Drake\",\"Metallica\"],\"yrange\":[0,231]}}],\"data\":{\"252f4b57-0e4e-4358-ab33-8ca341895f4e\":[{\"data0\":\"A. R. Rahman\",\"data1\":231},{\"data0\":\"Death Cab For Cutie\",\"data1\":206},{\"data0\":\"Pink Floyd\",\"data1\":158},{\"data0\":\"The Rolling Stones\",\"data1\":91},{\"data0\":\"Opeth\",\"data1\":89},{\"data0\":\"The Beatles\",\"data1\":67},{\"data0\":\"The Cranberries\",\"data1\":61},{\"data0\":\"Cat Stevens\",\"data1\":57},{\"data0\":\"Howard Shore\",\"data1\":56},{\"data0\":\"Nick Drake\",\"data1\":51},{\"data0\":\"Metallica\",\"data1\":48}]},\"extension\":[]}\n",
|
278
|
+
" Nyaplot.core.parse(model, '#vis-5ee90e94-e93a-4506-817f-b036c2a9a7f6');\n",
|
294
279
|
" };\n",
|
295
280
|
" if(window['Nyaplot']==undefined){\n",
|
296
281
|
" window.addEventListener('load_nyaplot', render, false);\n",
|
@@ -303,13 +288,13 @@
|
|
303
288
|
],
|
304
289
|
"metadata": {},
|
305
290
|
"output_type": "pyout",
|
306
|
-
"prompt_number":
|
291
|
+
"prompt_number": 17,
|
307
292
|
"text": [
|
308
|
-
"#<Nyaplot::Frame:
|
293
|
+
"#<Nyaplot::Frame:0xa1c1614 @properties={:panes=>[#<Nyaplot::Plot:0xa1c2488 @properties={:diagrams=>[#<Nyaplot::Diagram:0xa1c190c @properties={:type=>:bar, :options=>{:x=>\"data0\", :y=>\"data1\"}, :data=>\"252f4b57-0e4e-4358-ab33-8ca341895f4e\"}, @xrange=[:\"A. R. Rahman\", :\"Death Cab For Cutie\", :\"Pink Floyd\", :\"The Rolling Stones\", :Opeth, :\"The Beatles\", :\"The Cranberries\", :\"Cat Stevens\", :\"Howard Shore\", :\"Nick Drake\", :Metallica], @yrange=[0, 231]>], :options=>{:width=>1120, :height=>500, :legend=>true, :rotate_x_label=>20, :xrange=>[:\"A. R. Rahman\", :\"Death Cab For Cutie\", :\"Pink Floyd\", :\"The Rolling Stones\", :Opeth, :\"The Beatles\", :\"The Cranberries\", :\"Cat Stevens\", :\"Howard Shore\", :\"Nick Drake\", :Metallica], :yrange=>[0, 231]}}>], :data=>{\"252f4b57-0e4e-4358-ab33-8ca341895f4e\"=>#<Nyaplot::DataFrame:0xa1c2154 @name=\"252f4b57-0e4e-4358-ab33-8ca341895f4e\", @rows=[{:data0=>:\"A. R. Rahman\", :data1=>231}, {:data0=>:\"Death Cab For Cutie\", :data1=>206}, {:data0=>:\"Pink Floyd\", :data1=>158}, {:data0=>:\"The Rolling Stones\", :data1=>91}, {:data0=>:Opeth, :data1=>89}, {:data0=>:\"The Beatles\", :data1=>67}, {:data0=>:\"The Cranberries\", :data1=>61}, {:data0=>:\"Cat Stevens\", :data1=>57}, {:data0=>:\"Howard Shore\", :data1=>56}, {:data0=>:\"Nick Drake\", :data1=>51}, {:data0=>:Metallica, :data1=>48}]>}, :extension=>[]}>"
|
309
294
|
]
|
310
295
|
}
|
311
296
|
],
|
312
|
-
"prompt_number":
|
297
|
+
"prompt_number": 17
|
313
298
|
}
|
314
299
|
],
|
315
300
|
"metadata": {}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper.rb'
|
2
|
+
|
3
|
+
describe Daru::Accessors::NMatrixWrapper do
|
4
|
+
before :each do
|
5
|
+
stub_context = Object.new
|
6
|
+
@nm_wrapper = Daru::Accessors::NMatrixWrapper.new([1,2,3,4,5], stub_context, :float32)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "checks for actual NMatrix creation" do
|
10
|
+
expect(@nm_wrapper.data.class).to eq(NMatrix)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "checks the actual size of the NMatrix object" do
|
14
|
+
expect(@nm_wrapper.data.size).to eq(10)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "checks that @size is the number of elements in the vector" do
|
18
|
+
expect(@nm_wrapper.size).to eq(5)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "checks for underlying NMatrix data type" do
|
22
|
+
expect(@nm_wrapper.data.dtype).to eq(:float32)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "resizes" do
|
26
|
+
@nm_wrapper.resize(100)
|
27
|
+
|
28
|
+
expect(@nm_wrapper.size).to eq(5)
|
29
|
+
expect(@nm_wrapper.data.size).to eq(100)
|
30
|
+
expect(@nm_wrapper.data).to eq(NMatrix.new [100], [1,2,3,4,5])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe Daru::Accessors::ArrayWrapper do
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,331 @@
|
|
1
|
+
require 'spec_helper.rb'
|
2
|
+
|
3
|
+
describe Daru::Core::GroupBy do
|
4
|
+
before do
|
5
|
+
@df = Daru::DataFrame.new({
|
6
|
+
a: %w{foo bar foo bar foo bar foo foo},
|
7
|
+
b: %w{one one two three two two one three},
|
8
|
+
c: [1 ,2 ,3 ,1 ,3 ,6 ,3 ,8],
|
9
|
+
d: [11 ,22 ,33 ,44 ,55 ,66 ,77 ,88]
|
10
|
+
})
|
11
|
+
|
12
|
+
@sl_group = @df.group_by(:a)
|
13
|
+
@dl_group = @df.group_by([:a, :b])
|
14
|
+
@tl_group = @df.group_by([:a,:b,:c])
|
15
|
+
|
16
|
+
@sl_index = Daru::Index.new([:bar, :foo])
|
17
|
+
@dl_multi_index = Daru::MultiIndex.new([
|
18
|
+
[:bar, :one],
|
19
|
+
[:bar, :three],
|
20
|
+
[:bar, :two],
|
21
|
+
[:foo, :one],
|
22
|
+
[:foo, :three],
|
23
|
+
[:foo, :two]
|
24
|
+
])
|
25
|
+
@tl_multi_index = Daru::MultiIndex.new([
|
26
|
+
[:bar, :one , 2],
|
27
|
+
[:bar, :three, 1],
|
28
|
+
[:bar, :two , 6],
|
29
|
+
[:foo, :one , 1],
|
30
|
+
[:foo, :one , 3],
|
31
|
+
[:foo, :three, 8],
|
32
|
+
[:foo, :two , 3]
|
33
|
+
])
|
34
|
+
end
|
35
|
+
|
36
|
+
context "#initialize" do
|
37
|
+
it "groups by a single tuple" do
|
38
|
+
expect(@sl_group.groups).to eq({
|
39
|
+
['bar'] => [1,3,5],
|
40
|
+
['foo'] => [0,2,4,6,7]
|
41
|
+
})
|
42
|
+
end
|
43
|
+
|
44
|
+
it "groups by a double layer hierarchy" do
|
45
|
+
expect(@dl_group.groups).to eq({
|
46
|
+
['foo', 'one'] => [0,6],
|
47
|
+
['bar', 'one'] => [1],
|
48
|
+
['foo', 'two'] => [2,4],
|
49
|
+
['bar', 'three'] => [3],
|
50
|
+
['bar', 'two'] => [5],
|
51
|
+
['foo', 'three'] => [7]
|
52
|
+
})
|
53
|
+
end
|
54
|
+
|
55
|
+
it "groups by a triple layer hierarchy" do
|
56
|
+
expect(@tl_group.groups).to eq({
|
57
|
+
['bar', 'one' , 2] => [1],
|
58
|
+
['bar', 'three', 1] => [3],
|
59
|
+
['bar', 'two' , 6] => [5],
|
60
|
+
['foo', 'one' , 1] => [0],
|
61
|
+
['foo', 'one' , 3] => [6],
|
62
|
+
['foo', 'three', 8] => [7],
|
63
|
+
['foo', 'two' , 3] => [2,4]
|
64
|
+
})
|
65
|
+
end
|
66
|
+
|
67
|
+
it "raises error if a non-existent vector is passed as args" do
|
68
|
+
expect {
|
69
|
+
@df.group_by([:a, :ted])
|
70
|
+
}.to raise_error
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "#size" do
|
75
|
+
it "returns a vector containing the size of each group" do
|
76
|
+
expect(@dl_group.size).to eq(Daru::Vector.new([1,1,1,2,1,2], index: @dl_multi_index))
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "#get_group" do
|
81
|
+
it "returns the whole sub-group for single layer grouping" do
|
82
|
+
expect(@sl_group.get_group(['bar'])).to eq(Daru::DataFrame.new({
|
83
|
+
a: ['bar', 'bar', 'bar'],
|
84
|
+
b: ['one', 'three', 'two'],
|
85
|
+
c: [2,1,6],
|
86
|
+
d: [22,44,66]
|
87
|
+
}, index: [1,3,5]
|
88
|
+
))
|
89
|
+
end
|
90
|
+
|
91
|
+
it "returns the whole sub-group for double layer grouping" do
|
92
|
+
expect(@dl_group.get_group(['bar', 'one'])).to eq(Daru::DataFrame.new({
|
93
|
+
a: ['bar'],
|
94
|
+
b: ['one'],
|
95
|
+
c: [2],
|
96
|
+
d: [22]
|
97
|
+
}, index: [1]
|
98
|
+
))
|
99
|
+
|
100
|
+
puts @dl_group.get_group(["foo", "one"]).inspect
|
101
|
+
end
|
102
|
+
|
103
|
+
it "returns the whole sub-group for triple layer grouping" do
|
104
|
+
expect(@tl_group.get_group(['foo','two',3])).to eq(Daru::DataFrame.new({
|
105
|
+
a: ['foo', 'foo'],
|
106
|
+
b: ['two', 'two'],
|
107
|
+
c: [3,3],
|
108
|
+
d: [33,55]
|
109
|
+
}, index: [2,4]
|
110
|
+
))
|
111
|
+
end
|
112
|
+
|
113
|
+
it "raises error for incomplete specification" do
|
114
|
+
expect {
|
115
|
+
@tl_group.get_group(['foo'])
|
116
|
+
}.to raise_error
|
117
|
+
end
|
118
|
+
|
119
|
+
it "raises error for over specification" do
|
120
|
+
expect {
|
121
|
+
@sl_group.get_group(['bar', 'one'])
|
122
|
+
}.to raise_error
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "#aggregate" do
|
127
|
+
pending
|
128
|
+
end
|
129
|
+
|
130
|
+
context "#mean" do
|
131
|
+
it "computes mean of the numeric columns of a single layer group" do
|
132
|
+
expect(@sl_group.mean).to eq(Daru::DataFrame.new({
|
133
|
+
:c => [3.0, 3.6],
|
134
|
+
:d => [44.0, 52.8]
|
135
|
+
}, index: @sl_index
|
136
|
+
))
|
137
|
+
end
|
138
|
+
|
139
|
+
it "computes mean of the numeric columns of a double layer group" do
|
140
|
+
expect(@dl_group.mean).to eq(Daru::DataFrame.new({
|
141
|
+
c: [2,1,6,2,8,3],
|
142
|
+
d: [22,44,66,44,88,44]
|
143
|
+
}, index: @dl_multi_index))
|
144
|
+
end
|
145
|
+
|
146
|
+
it "computes mean of the numeric columns of a triple layer group" do
|
147
|
+
expect(@tl_group.mean).to eq(Daru::DataFrame.new({
|
148
|
+
d: [22,44,66,11,77,88,44]
|
149
|
+
}, index: @tl_multi_index
|
150
|
+
))
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context "#sum" do
|
155
|
+
it "calculates the sum of the numeric columns of a single layer group" do
|
156
|
+
expect(@sl_group.sum).to eq(Daru::DataFrame.new({
|
157
|
+
c: [9, 18],
|
158
|
+
d: [132, 264]
|
159
|
+
}, index: @sl_index
|
160
|
+
))
|
161
|
+
end
|
162
|
+
|
163
|
+
it "calculates the sum of the numeric columns of a double layer group" do
|
164
|
+
expect(@dl_group.sum).to eq(Daru::DataFrame.new({
|
165
|
+
c: [2,1,6,4,8,6],
|
166
|
+
d: [22,44,66,88,88,88]
|
167
|
+
}, index: @dl_multi_index))
|
168
|
+
end
|
169
|
+
|
170
|
+
it "calculates the sum of the numeric columns of a triple layer group" do
|
171
|
+
expect(@tl_group.sum).to eq(Daru::DataFrame.new({
|
172
|
+
d: [22,44,66,11,77,88,88]
|
173
|
+
}, index: @tl_multi_index))
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context "#product" do
|
178
|
+
it "calculates product for single layer groups" do
|
179
|
+
# TODO
|
180
|
+
end
|
181
|
+
|
182
|
+
it "calculates product for double layer groups" do
|
183
|
+
# TODO
|
184
|
+
end
|
185
|
+
|
186
|
+
it "calculates product for triple layer groups" do
|
187
|
+
# TODO
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context "#count" do
|
192
|
+
it "counts the number of elements in a single layer group" do
|
193
|
+
expect(@sl_group.count).to eq(Daru::DataFrame.new({
|
194
|
+
b: [3,5],
|
195
|
+
c: [3,5],
|
196
|
+
d: [3,5]
|
197
|
+
}, index: @sl_index))
|
198
|
+
end
|
199
|
+
|
200
|
+
it "counts the number of elements in a double layer group" do
|
201
|
+
expect(@dl_group.count).to eq(Daru::DataFrame.new({
|
202
|
+
c: [1,1,1,2,1,2],
|
203
|
+
d: [1,1,1,2,1,2]
|
204
|
+
}, index: @dl_multi_index))
|
205
|
+
end
|
206
|
+
|
207
|
+
it "counts the number of elements in a triple layer group" do
|
208
|
+
expect(@tl_group.count).to eq(Daru::DataFrame.new({
|
209
|
+
d: [1,1,1,1,1,1,2]
|
210
|
+
}, index: @tl_multi_index))
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context "#std" do
|
215
|
+
it "calculates sample standard deviation for single layer groups" do
|
216
|
+
# TODO
|
217
|
+
end
|
218
|
+
|
219
|
+
it "calculates sample standard deviation for double layer groups" do
|
220
|
+
# TODO
|
221
|
+
end
|
222
|
+
|
223
|
+
it "calculates sample standard deviation for triple layer groups" do
|
224
|
+
# TODO
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
context "#max" do
|
229
|
+
it "calculates max value for single layer groups" do
|
230
|
+
# TODO
|
231
|
+
end
|
232
|
+
|
233
|
+
it "calculates max value for double layer groups" do
|
234
|
+
# TODO
|
235
|
+
end
|
236
|
+
|
237
|
+
it "calculates max value for triple layer groups" do
|
238
|
+
# TODO
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
context "#min" do
|
243
|
+
it "calculates min value for single layer groups" do
|
244
|
+
# TODO
|
245
|
+
end
|
246
|
+
|
247
|
+
it "calculates min value for double layer groups" do
|
248
|
+
# TODO
|
249
|
+
end
|
250
|
+
|
251
|
+
it "calculates min value for triple layer groups" do
|
252
|
+
# TODO
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
context "#median" do
|
257
|
+
it "calculates median for single layer groups" do
|
258
|
+
# TODO
|
259
|
+
end
|
260
|
+
|
261
|
+
it "calculates median for double layer groups" do
|
262
|
+
# TODO
|
263
|
+
end
|
264
|
+
|
265
|
+
it "calculates median for triple layer groups" do
|
266
|
+
# TODO
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
context "#head" do
|
271
|
+
it "returns first n rows of each single layer group" do
|
272
|
+
expect(@sl_group.head(2)).to eq(Daru::DataFrame.new({
|
273
|
+
a: ['bar', 'bar','foo','foo'],
|
274
|
+
b: ['one', 'three','one', 'two'],
|
275
|
+
c: [2, 1, 1, 3],
|
276
|
+
d: [22, 44, 11, 33]
|
277
|
+
}, index: [1,3,0,2]))
|
278
|
+
end
|
279
|
+
|
280
|
+
it "returns first n rows of each double layer group" do
|
281
|
+
expect(@dl_group.head(2)).to eq(Daru::DataFrame.new({
|
282
|
+
a: ['bar','bar','bar','foo','foo','foo','foo','foo'],
|
283
|
+
b: ['one','three','two','one','one','three','two','two'],
|
284
|
+
c: [2,1,6,1,3,8,3,3],
|
285
|
+
d: [22,44,66,11,77,88,33,55]
|
286
|
+
}, index: [1,3,5,0,6,7,2,4]))
|
287
|
+
end
|
288
|
+
|
289
|
+
it "returns first n rows of each triple layer group" do
|
290
|
+
expect(@tl_group.head(1)).to eq(Daru::DataFrame.new({
|
291
|
+
a: ['bar','bar','bar','foo','foo','foo','foo'],
|
292
|
+
b: ['one','three','two','one','one','three','two'],
|
293
|
+
c: [2,1,6,1,3,8,3],
|
294
|
+
d: [22,44,66,11,77,88,33]
|
295
|
+
}, index: [1,3,5,0,6,7,2]))
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
context "#tail" do
|
300
|
+
it "returns last n rows of each single layer group" do
|
301
|
+
expect(@sl_group.tail(1)).to eq(Daru::DataFrame.new({
|
302
|
+
a: ['bar','foo'],
|
303
|
+
b: ['two', 'three'],
|
304
|
+
c: [6,8],
|
305
|
+
d: [66,88]
|
306
|
+
}, index: [5,7]))
|
307
|
+
end
|
308
|
+
|
309
|
+
it "returns last n rows of each double layer group" do
|
310
|
+
expect(@dl_group.tail(2)).to eq(Daru::DataFrame.new({
|
311
|
+
a: ['bar','bar','bar','foo','foo','foo','foo','foo'],
|
312
|
+
b: ['one','three','two','one','one','three','two','two'],
|
313
|
+
c: [2,1,6,1,3,8,3,3],
|
314
|
+
d: [22,44,66,11,77,88,33,55]
|
315
|
+
}, index: [1,3,5,0,6,7,2,4]))
|
316
|
+
end
|
317
|
+
|
318
|
+
it "returns last n rows of each triple layer group" do
|
319
|
+
expect(@tl_group.tail(1)).to eq(Daru::DataFrame.new({
|
320
|
+
a: ['bar','bar','bar','foo','foo','foo','foo'],
|
321
|
+
b: ['one','three','two','one','one','three','two'],
|
322
|
+
c: [2,1,6,1,3,8,3],
|
323
|
+
d: [22,44,66,11,77,88,55]
|
324
|
+
}, index: [1,3,5,0,6,7,4]))
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
context "#[]" do
|
329
|
+
pending
|
330
|
+
end
|
331
|
+
end
|