daru 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|