daru 0.0.3.1 → 0.0.4

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.
data/lib/daru/vector.rb CHANGED
@@ -1,36 +1,83 @@
1
- require_relative 'math/arithmetic/vector.rb'
2
- require_relative 'math/statistics/vector.rb'
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'maths/arithmetic/vector.rb'
4
+ require 'maths/statistics/vector.rb'
5
+ require 'plotting/vector.rb'
6
+ require 'accessors/array_wrapper.rb'
7
+ require 'accessors/nmatrix_wrapper.rb'
3
8
 
4
9
  module Daru
5
10
  class Vector
6
- include Daru::Math::Arithmetic::Vector
7
- include Daru::Math::Statistics::Vector
8
11
  include Enumerable
12
+ include Daru::Maths::Arithmetic::Vector
13
+ include Daru::Maths::Statistics::Vector
14
+ include Daru::Plotting::Vector
9
15
 
10
16
  def each(&block)
11
17
  @vector.each(&block)
12
18
  end
13
19
 
20
+ def map!(&block)
21
+ @vector.map!(&block)
22
+
23
+ self
24
+ end
25
+
26
+ def map(&block)
27
+ Daru::Vector.new @vector.map(&block), name: @name, index: @index, dtype: @dtype
28
+ end
29
+
30
+ alias_method :recode, :map
31
+
14
32
  attr_reader :name
15
33
  attr_reader :index
16
34
  attr_reader :size
17
-
18
- # Pass it name, source and index
35
+ attr_reader :dtype
36
+
37
+ # Create a Vector object.
38
+ # == Arguments
39
+ #
40
+ # @param source[Array,Hash] - Supply elements in the form of an Array or a Hash. If Array, a
41
+ # numeric index will be created if not supplied in the options. Specifying more
42
+ # index elements than actual values in *source* will insert *nil* into the
43
+ # surplus index elements. When a Hash is specified, the keys of the Hash are
44
+ # taken as the index elements and the corresponding values as the values that
45
+ # populate the vector.
46
+ #
47
+ # == Options
48
+ #
49
+ # * +:name+ - Name of the vector
50
+ #
51
+ # * +:index+ - Index of the vector
52
+ #
53
+ # == Usage
54
+ #
55
+ # vecarr = Daru::Vector.new [1,2,3,4], index: [:a, :e, :i, :o]
56
+ # vechsh = Daru::Vector.new({a: 1, e: 2, i: 3, o: 4})
19
57
  def initialize source, opts={}
20
- source = source || []
58
+ index = nil
59
+ if source.is_a?(Hash)
60
+ index = source.keys
61
+ source = source.values
62
+ else
63
+ index = opts[:index]
64
+ source = source || []
65
+ end
21
66
  name = opts[:name]
22
- index = opts[:index]
67
+ @dtype = opts[:dtype] || Array
23
68
 
24
69
  set_name name
25
70
 
26
71
  @vector =
27
- case source
28
- when Array
29
- source.dup
30
- when Range, Matrix
31
- source.to_a.dup
32
- else # NMatrix or MDArray
33
- source.dup
72
+ case
73
+ when @dtype == Array
74
+ Daru::Accessors::ArrayWrapper.new source.dup, self
75
+ when @dtype == NMatrix
76
+ Daru::Accessors::NMatrixWrapper.new source.dup, self
77
+ when @dtype == MDArray
78
+ Daru::Accessors::MDArrayWrapper.new source.dup
79
+ when @dtype == Range, Matrix
80
+ Daru::Accessors::ArrayWrapper.new source.to_a.dup, self
34
81
  end
35
82
 
36
83
  if index.nil?
@@ -39,23 +86,35 @@ module Daru
39
86
  @index = index.to_index
40
87
  end
41
88
  # TODO: Will need work for NMatrix/MDArray
42
- if @index.size >= @vector.size
89
+ if @index.size > @vector.size
90
+ self.coerce Array # NM with nils seg faults
43
91
  (@index.size - @vector.size).times { @vector << nil }
44
- else
92
+ elsif @index.size < @vector.size
45
93
  raise IndexError, "Expected index size >= vector size"
46
94
  end
47
95
 
48
96
  set_size
49
97
  end
50
98
 
99
+ # Get one or more elements with specified index.
100
+ #
101
+ # == Usage
102
+ # v[:one, :two] # => Daru::Vector with indexes :one and :two
103
+ # v[:one] # => Single element
51
104
  def [](index, *indexes)
52
105
  if indexes.empty?
53
- if @index.include? index
54
- @vector[@index[index]]
55
- elsif index.is_a?(Numeric)
56
- @vector[index]
106
+ case index
107
+ when Range
108
+ # range into vector
109
+ #
57
110
  else
58
- return nil
111
+ if @index.include? index
112
+ @vector[@index[index]]
113
+ elsif index.is_a?(Numeric)
114
+ @vector[index]
115
+ else
116
+ return nil
117
+ end
59
118
  end
60
119
  else
61
120
  indexes.unshift index
@@ -66,6 +125,8 @@ module Daru
66
125
  end
67
126
 
68
127
  def []=(index, value)
128
+ @vector = @vector.coerce(Array) if value.nil?
129
+
69
130
  if @index.include? index
70
131
  @vector[@index[index]] = value
71
132
  else
@@ -78,9 +139,14 @@ module Daru
78
139
  # Two vectors are equal if the have the exact same index values corresponding
79
140
  # with the exact same elements. Name is ignored.
80
141
  def == other
81
- @index == other.index and @size == other.size and
82
- @index.all? do |index|
83
- self[index] == other[index]
142
+ case other
143
+ when Daru::Vector
144
+ @index == other.index and @size == other.size and
145
+ @index.all? do |index|
146
+ self[index] == other[index]
147
+ end
148
+ else
149
+ # TODO: Compare against some other obj (string, number, etc.)
84
150
  end
85
151
  end
86
152
 
@@ -88,6 +154,15 @@ module Daru
88
154
  concat element
89
155
  end
90
156
 
157
+ def push element
158
+ concat element
159
+ end
160
+
161
+ def re_index new_index
162
+
163
+ end
164
+
165
+ # Append an element to the vector by specifying the element and index
91
166
  def concat element, index=nil
92
167
  raise IndexError, "Expected new unique index" if @index.include? index
93
168
 
@@ -102,18 +177,30 @@ module Daru
102
177
  end
103
178
  end
104
179
 
105
- @size += 1
106
-
107
180
  @vector[@index[index]] = element
181
+
182
+ set_size
183
+ end
184
+
185
+ def coerce dtype
186
+ begin
187
+ @vector = @vector.coerce @dtype
188
+ @dtype = dtype
189
+ rescue StandardError => e
190
+ puts "Cannot convert to #{dtype} because of data type mismatch. #{e}"
191
+ end
192
+
193
+ self
108
194
  end
109
195
 
196
+ # Delete an element by value
110
197
  def delete element
111
198
  self.delete_at index_of(element)
112
199
  end
113
200
 
201
+ # Delete element by index
114
202
  def delete_at index
115
203
  idx = named_index_for index
116
-
117
204
  @vector.delete_at @index[idx]
118
205
 
119
206
  if @index.index_class == Integer
@@ -125,10 +212,38 @@ module Daru
125
212
  set_size
126
213
  end
127
214
 
215
+ # Get index of element
128
216
  def index_of element
129
- @index.key @vector.index(element) #calling Array#index
217
+ @index.key @vector.index(element)
218
+ end
219
+
220
+ # Keep only unique elements of the vector alongwith their indexes.
221
+ def uniq
222
+ uniq_vector = @vector.uniq
223
+ new_index = uniq_vector.inject([]) do |acc, element|
224
+ acc << index_of(element)
225
+ acc
226
+ end
227
+
228
+ Daru::Vector.new uniq_vector, name: @name, index: new_index, dtype: @dtype
229
+ end
230
+
231
+ # def sort ascending=true
232
+ # if ascending
233
+
234
+ # end
235
+ # end
236
+
237
+ def is_valid? value
238
+ !self[index_of(value)].nil?
239
+ end
240
+
241
+ # Returns *true* if an index exists
242
+ def has_index? index
243
+ @index.include? index
130
244
  end
131
245
 
246
+ # Convert to hash. Hash keys are indexes and values are the correspoding elements
132
247
  def to_hash
133
248
  @index.inject({}) do |hsh, index|
134
249
  hsh[index] = self[index]
@@ -136,19 +251,20 @@ module Daru
136
251
  end
137
252
  end
138
253
 
254
+ # Return an array
139
255
  def to_a
140
256
  @vector.to_a
141
257
  end
142
258
 
259
+ # Convert the hash from to_hash to json
143
260
  def to_json *args
144
261
  self.to_hash.to_json
145
262
  end
146
263
 
147
- def to_html threshold=15
264
+ # Convert to html for iruby
265
+ def to_html threshold=30
148
266
  name = @name || 'nil'
149
-
150
267
  html = '<table>' + '<tr><th> </th><th>' + name.to_s + '</th></tr>'
151
-
152
268
  @index.each_with_index do |index, num|
153
269
  html += '<tr><td>' + index.to_s + '</td>' + '<td>' + self[index].to_s + '</td></tr>'
154
270
 
@@ -157,7 +273,6 @@ module Daru
157
273
  break
158
274
  end
159
275
  end
160
-
161
276
  html += '</table>'
162
277
 
163
278
  html
@@ -167,43 +282,44 @@ module Daru
167
282
  to_html
168
283
  end
169
284
 
285
+ # Over rides original inspect for pretty printing in irb
170
286
  def inspect spacing=10, threshold=15
171
287
  longest = [@name.to_s.size,
172
288
  @index.to_a.map(&:to_s).map(&:size).max,
173
- @vector .map(&:to_s).map(&:size).max].max
289
+ @vector .map(&:to_s).map(&:size).max,
290
+ 'nil'.size].max
174
291
 
175
292
  content = ""
176
293
  longest = spacing if longest > spacing
177
294
  name = @name || 'nil'
178
295
  formatter = "\n%#{longest}.#{longest}s %#{longest}.#{longest}s"
179
-
180
- content += "\n#<" + self.class.to_s + ":" + self.object_id.to_s + " @name = " + name.to_s + " @size = " + size.to_s + " >"
296
+ content += "\n#<" + self.class.to_s + ":" + self.object_id.to_s + " @name = " + name.to_s + " @size = " + size.to_s + " >"
181
297
 
182
298
  content += sprintf formatter, "", name
183
299
  @index.each_with_index do |index, num|
184
300
  content += sprintf formatter, index.to_s, (self[index] || 'nil').to_s
185
-
186
301
  if num > threshold
187
302
  content += sprintf formatter, '...', '...'
188
303
  break
189
304
  end
190
305
  end
191
-
192
306
  content += "\n"
193
307
 
194
308
  content
195
309
  end
196
310
 
197
- def compact!
311
+ # def compact!
198
312
  # TODO: Compact and also take care of indexes
199
313
  # @vector.compact!
200
314
  # set_size
201
- end
315
+ # end
202
316
 
317
+ # Give the vector a new name
203
318
  def rename new_name
204
319
  @name = new_name.to_sym
205
320
  end
206
321
 
322
+ # Duplicate elements and indexes
207
323
  def dup
208
324
  Daru::Vector.new @vector.dup, name: @name, index: @index.dup
209
325
  end
@@ -214,6 +330,16 @@ module Daru
214
330
 
215
331
  alias_method :dv, :daru_vector
216
332
 
333
+ def method_missing(name, *args, &block)
334
+ if name.match(/(.+)\=/)
335
+ self[name] = args[0]
336
+ elsif has_index?(name)
337
+ self[name]
338
+ else
339
+ super(name, *args, &block)
340
+ end
341
+ end
342
+
217
343
  private
218
344
 
219
345
  def named_index_for index
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Daru
2
- VERSION = "0.0.3.1"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -0,0 +1,318 @@
1
+ {
2
+ "metadata": {
3
+ "language": "ruby",
4
+ "name": "",
5
+ "signature": "sha256:794011062017b04876efde12342e70893e5949f7c6324687b38447382892e1df"
6
+ },
7
+ "nbformat": 3,
8
+ "nbformat_minor": 0,
9
+ "worksheets": [
10
+ {
11
+ "cells": [
12
+ {
13
+ "cell_type": "code",
14
+ "collapsed": false,
15
+ "input": [
16
+ "require 'daru'\n",
17
+ "\n",
18
+ "df = Daru::DataFrame.from_csv '/home/sameer/github_repos/daru/spec/fixtures/music_data.tsv', col_sep: \"\\t\""
19
+ ],
20
+ "language": "python",
21
+ "metadata": {},
22
+ "outputs": [
23
+ {
24
+ "html": [
25
+ "<script type='text/javascript'>if(window['d3'] === undefined ||\n",
26
+ " window['Nyaplot'] === undefined){\n",
27
+ " var path = {\"d3\":\"http://d3js.org/d3.v3.min\"};\n",
28
+ "\n",
29
+ "\n",
30
+ "\n",
31
+ " var shim = {\"d3\":{\"exports\":\"d3\"}};\n",
32
+ "\n",
33
+ " require.config({paths: path, shim:shim});\n",
34
+ "\n",
35
+ "\n",
36
+ "require(['d3'], function(d3){window['d3']=d3;console.log('finished loading d3');\n",
37
+ "\n",
38
+ "\tvar script = d3.select(\"head\")\n",
39
+ "\t .append(\"script\")\n",
40
+ "\t .attr(\"src\", \"https://rawgit.com/domitry/Nyaplotjs/master/release/nyaplot.js\")\n",
41
+ "\t .attr(\"async\", true);\n",
42
+ "\n",
43
+ "\tscript[0][0].onload = script[0][0].onreadystatechange = function(){\n",
44
+ "\n",
45
+ "\n",
46
+ "\t var event = document.createEvent(\"HTMLEvents\");\n",
47
+ "\t event.initEvent(\"load_nyaplot\",false,false);\n",
48
+ "\t window.dispatchEvent(event);\n",
49
+ "\t console.log('Finished loading Nyaplotjs');\n",
50
+ "\n",
51
+ "\t};\n",
52
+ "\n",
53
+ "\n",
54
+ "});\n",
55
+ "}\n",
56
+ "</script>"
57
+ ],
58
+ "metadata": {},
59
+ "output_type": "pyout",
60
+ "prompt_number": 1,
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\\\", \\\"https://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
+ ]
64
+ },
65
+ {
66
+ "html": [
67
+ "<table><tr><th></th><th>userid</th><th>timestamp</th><th>artid</th><th>artname</th><th>traid</th><th>traname</th></tr><tr><td>0</td><td>user_000705</td><td>2009-05-03T12:55:00Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>0138547f-374d-49d4-8f1c-9b2c8b5c65c0</td><td>X-Ray Eyes</td></tr><tr><td>1</td><td>user_000705</td><td>2009-05-03T12:51:28Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>22ce9a32-3510-4c8e-8151-c044a62eb4fd</td><td>Hard Times</td></tr><tr><td>2</td><td>user_000705</td><td>2009-05-03T12:46:55Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>22ce9a32-3510-4c8e-8151-c044a62eb4fd</td><td>Hard Times</td></tr><tr><td>3</td><td>user_000705</td><td>2009-05-03T12:42:17Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>c386b85f-1bfe-4038-b323-cb8229ab2f8b</td><td>Magic Touch</td></tr><tr><td>4</td><td>user_000705</td><td>2009-05-03T12:37:53Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>8ec9b4f8-2d1b-4616-9ae4-4711ca328fc3</td><td>Charisma</td></tr><tr><td>5</td><td>user_000705</td><td>2009-05-03T12:33:37Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>ff47d82e-313d-4bd0-8e61-fe61124a361b</td><td>Dirty Livin'</td></tr><tr><td>6</td><td>user_000705</td><td>2009-05-03T12:29:39Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>3621800b-87b7-43c6-b6a3-47ea4b658407</td><td>Sure Know Something</td></tr><tr><td>7</td><td>user_000705</td><td>2009-05-03T12:24:46Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>91cc5010-e65b-4f49-94b5-1deed61cfcc7</td><td>2,000 Man</td></tr><tr><td>8</td><td>user_000705</td><td>2009-05-03T12:20:17Z</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>daa13e72-9056-476f-b431-335b2c26842d</td><td>I Was Made For Lovin' You</td></tr><tr><td>9</td><td>user_000705</td><td>2009-05-03T12:16:20Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>1895c79d-ae5f-40bf-bc18-83fdcd8d2842</td><td>Burning Of The Midnight Lamp</td></tr><tr><td>10</td><td>user_000705</td><td>2009-05-03T12:12:35Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>1ae3c250-7b16-49d4-9c71-0928724eecce</td><td>Gypsy Eyes</td></tr><tr><td>11</td><td>user_000705</td><td>2009-05-03T12:08:26Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>fca63fe0-c9e6-4347-92b7-21f6cf79226c</td><td>Come On, Part 1</td></tr><tr><td>12</td><td>user_000705</td><td>2009-05-03T12:04:59Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>36beb31d-ed74-4a49-832f-a4a38dc96bab</td><td>Long Hot Summer Night</td></tr><tr><td>13</td><td>user_000705</td><td>2009-05-03T12:02:08Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>4ad6064e-7d54-49a2-a134-320a1612ee27</td><td>Little Miss Strange</td></tr><tr><td>14</td><td>user_000705</td><td>2009-05-03T11:47:07Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>40ffef8e-b851-473a-a239-08685eab22b0</td><td>Voodoo Chile</td></tr><tr><td>15</td><td>user_000705</td><td>2009-05-03T11:44:43Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>feb64d01-6e05-4974-bb44-0046deca1bdb</td><td>Crosstown Traffic</td></tr><tr><td>16</td><td>user_000705</td><td>2009-05-03T11:42:35Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>7f9b462a-8ac5-472d-a5aa-716b3b3d169c</td><td>Have You Ever Been (To Electric Ladyland)</td></tr><tr><td>17</td><td>user_000705</td><td>2009-05-03T11:41:13Z</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>88b57468-8d58-4310-b135-c94620fcfbc1</td><td>...And The Gods Made Love</td></tr><tr><td>18</td><td>user_000705</td><td>2009-05-02T09:24:28Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>788878e0-8965-489e-86e3-add4c1f3d134</td><td>Line Of Best Fit</td></tr><tr><td>19</td><td>user_000705</td><td>2009-05-02T09:19:58Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>7cfc403d-18e7-4b8e-b0c4-1864ca393fbb</td><td>Fake Frowns</td></tr><tr><td>20</td><td>user_000705</td><td>2009-05-02T09:15:03Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>34a2d7ad-6b3a-4cfc-b4ca-edfc55a6685b</td><td>Amputations</td></tr><tr><td>21</td><td>user_000705</td><td>2009-05-02T09:11:21Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>99db2ed6-4493-481c-ac20-54ad323cb04b</td><td>The Face That Launched 1000 Shits</td></tr><tr><td>22</td><td>user_000705</td><td>2009-05-02T09:07:44Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>269084ba-3065-4b43-a733-f491e618b26a</td><td>Sleep Spent</td></tr><tr><td>23</td><td>user_000705</td><td>2009-05-02T09:03:54Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>96fac269-5308-4aee-827f-d01a66674694</td><td>Pictures In An Exhibition</td></tr><tr><td>24</td><td>user_000705</td><td>2009-05-02T08:59:34Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>c29440d9-03e6-4e18-91d6-ef8bf1e1ca32</td><td>Your Bruise</td></tr><tr><td>25</td><td>user_000705</td><td>2009-05-02T08:56:55Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>ed55b695-976e-4898-8fde-51a8e3b0e262</td><td>Champagne From A Paper Cup</td></tr><tr><td>26</td><td>user_000705</td><td>2009-05-02T08:49:07Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>c5238d6d-9b04-496c-8674-4ea7a07aecd6</td><td>President Of What?</td></tr><tr><td>27</td><td>user_000705</td><td>2009-05-02T08:44:34Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>bf59dfef-03a8-4270-9456-50df79da56c2</td><td>Bend To Squares</td></tr><tr><td>28</td><td>user_000705</td><td>2009-05-01T19:08:37Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>788878e0-8965-489e-86e3-add4c1f3d134</td><td>Line Of Best Fit</td></tr><tr><td>29</td><td>user_000705</td><td>2009-05-01T19:04:07Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>7cfc403d-18e7-4b8e-b0c4-1864ca393fbb</td><td>Fake Frowns</td></tr><tr><td>30</td><td>user_000705</td><td>2009-05-01T18:59:12Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>34a2d7ad-6b3a-4cfc-b4ca-edfc55a6685b</td><td>Amputations</td></tr><tr><td>31</td><td>user_000705</td><td>2009-05-01T18:55:30Z</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>99db2ed6-4493-481c-ac20-54ad323cb04b</td><td>The Face That Launched 1000 Shits</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr></table>"
68
+ ],
69
+ "metadata": {},
70
+ "output_type": "pyout",
71
+ "prompt_number": 1,
72
+ "text": [
73
+ "\n",
74
+ "#<Daru::DataFrame:89549790 @name = 59f7207f-059f-4bb8-8315-2c7625c19dd2 @size = 2500>\n",
75
+ " userid timestamp artid artname traid traname \n",
76
+ " 0 user_00070 2009-05-03 e1f1e33e-2 Kiss 0138547f-3 X-Ray Eyes \n",
77
+ " 1 user_00070 2009-05-03 e1f1e33e-2 Kiss 22ce9a32-3 Hard Times \n",
78
+ " 2 user_00070 2009-05-03 e1f1e33e-2 Kiss 22ce9a32-3 Hard Times \n",
79
+ " 3 user_00070 2009-05-03 e1f1e33e-2 Kiss c386b85f-1 Magic Touc \n",
80
+ " 4 user_00070 2009-05-03 e1f1e33e-2 Kiss 8ec9b4f8-2 Charisma \n",
81
+ " 5 user_00070 2009-05-03 e1f1e33e-2 Kiss ff47d82e-3 Dirty Livi \n",
82
+ " 6 user_00070 2009-05-03 e1f1e33e-2 Kiss 3621800b-8 Sure Know \n",
83
+ " 7 user_00070 2009-05-03 e1f1e33e-2 Kiss 91cc5010-e 2,000 Man \n",
84
+ " 8 user_00070 2009-05-03 e1f1e33e-2 Kiss daa13e72-9 I Was Made \n",
85
+ " 9 user_00070 2009-05-03 33b3c323-7 The Jimi H 1895c79d-a Burning Of \n",
86
+ " 10 user_00070 2009-05-03 33b3c323-7 The Jimi H 1ae3c250-7 Gypsy Eyes \n",
87
+ " 11 user_00070 2009-05-03 33b3c323-7 The Jimi H fca63fe0-c Come On, P \n",
88
+ " 12 user_00070 2009-05-03 33b3c323-7 The Jimi H 36beb31d-e Long Hot S \n",
89
+ " 13 user_00070 2009-05-03 33b3c323-7 The Jimi H 4ad6064e-7 Little Mis \n",
90
+ " 14 user_00070 2009-05-03 33b3c323-7 The Jimi H 40ffef8e-b Voodoo Chi \n",
91
+ " ... ... ... ... ... ... ... \n"
92
+ ]
93
+ }
94
+ ],
95
+ "prompt_number": 1
96
+ },
97
+ {
98
+ "cell_type": "code",
99
+ "collapsed": false,
100
+ "input": [
101
+ "df.timestamp.map! { |ts| ts += \"+5:30\"}"
102
+ ],
103
+ "language": "python",
104
+ "metadata": {},
105
+ "outputs": [
106
+ {
107
+ "html": [
108
+ "<table><tr><th> </th><th>timestamp</th></tr><tr><td>0</td><td>2009-05-03T12:55:00Z+5:30</td></tr><tr><td>1</td><td>2009-05-03T12:51:28Z+5:30</td></tr><tr><td>2</td><td>2009-05-03T12:46:55Z+5:30</td></tr><tr><td>3</td><td>2009-05-03T12:42:17Z+5:30</td></tr><tr><td>4</td><td>2009-05-03T12:37:53Z+5:30</td></tr><tr><td>5</td><td>2009-05-03T12:33:37Z+5:30</td></tr><tr><td>6</td><td>2009-05-03T12:29:39Z+5:30</td></tr><tr><td>7</td><td>2009-05-03T12:24:46Z+5:30</td></tr><tr><td>8</td><td>2009-05-03T12:20:17Z+5:30</td></tr><tr><td>9</td><td>2009-05-03T12:16:20Z+5:30</td></tr><tr><td>10</td><td>2009-05-03T12:12:35Z+5:30</td></tr><tr><td>11</td><td>2009-05-03T12:08:26Z+5:30</td></tr><tr><td>12</td><td>2009-05-03T12:04:59Z+5:30</td></tr><tr><td>13</td><td>2009-05-03T12:02:08Z+5:30</td></tr><tr><td>14</td><td>2009-05-03T11:47:07Z+5:30</td></tr><tr><td>15</td><td>2009-05-03T11:44:43Z+5:30</td></tr><tr><td>16</td><td>2009-05-03T11:42:35Z+5:30</td></tr><tr><td>17</td><td>2009-05-03T11:41:13Z+5:30</td></tr><tr><td>18</td><td>2009-05-02T09:24:28Z+5:30</td></tr><tr><td>19</td><td>2009-05-02T09:19:58Z+5:30</td></tr><tr><td>20</td><td>2009-05-02T09:15:03Z+5:30</td></tr><tr><td>21</td><td>2009-05-02T09:11:21Z+5:30</td></tr><tr><td>22</td><td>2009-05-02T09:07:44Z+5:30</td></tr><tr><td>23</td><td>2009-05-02T09:03:54Z+5:30</td></tr><tr><td>24</td><td>2009-05-02T08:59:34Z+5:30</td></tr><tr><td>25</td><td>2009-05-02T08:56:55Z+5:30</td></tr><tr><td>26</td><td>2009-05-02T08:49:07Z+5:30</td></tr><tr><td>27</td><td>2009-05-02T08:44:34Z+5:30</td></tr><tr><td>28</td><td>2009-05-01T19:08:37Z+5:30</td></tr><tr><td>29</td><td>2009-05-01T19:04:07Z+5:30</td></tr><tr><td>30</td><td>2009-05-01T18:59:12Z+5:30</td></tr><tr><td>31</td><td>2009-05-01T18:55:30Z+5:30</td></tr><tr><td>...</td><td>...</td></tr></table>"
109
+ ],
110
+ "metadata": {},
111
+ "output_type": "pyout",
112
+ "prompt_number": 2,
113
+ "text": [
114
+ "\n",
115
+ "#<Daru::Vector:89548390 @name = timestamp @size = 2500 >\n",
116
+ " timestamp\n",
117
+ " 0 2009-05-03\n",
118
+ " 1 2009-05-03\n",
119
+ " 2 2009-05-03\n",
120
+ " 3 2009-05-03\n",
121
+ " 4 2009-05-03\n",
122
+ " 5 2009-05-03\n",
123
+ " 6 2009-05-03\n",
124
+ " 7 2009-05-03\n",
125
+ " 8 2009-05-03\n",
126
+ " 9 2009-05-03\n",
127
+ " 10 2009-05-03\n",
128
+ " 11 2009-05-03\n",
129
+ " 12 2009-05-03\n",
130
+ " 13 2009-05-03\n",
131
+ " 14 2009-05-03\n",
132
+ " 15 2009-05-03\n",
133
+ " 16 2009-05-03\n",
134
+ " ... ...\n"
135
+ ]
136
+ }
137
+ ],
138
+ "prompt_number": 2
139
+ },
140
+ {
141
+ "cell_type": "code",
142
+ "collapsed": false,
143
+ "input": [
144
+ "require 'date'\n",
145
+ "df = df.map_rows do |row|\n",
146
+ " row[:timestamp] = DateTime.strptime(row[:timestamp], '%Y-%m-%dT%H:%M:%SZ%z').to_time\n",
147
+ " row\n",
148
+ "end"
149
+ ],
150
+ "language": "python",
151
+ "metadata": {},
152
+ "outputs": [
153
+ {
154
+ "html": [
155
+ "<table><tr><th></th><th>userid</th><th>timestamp</th><th>artid</th><th>artname</th><th>traid</th><th>traname</th></tr><tr><td>0</td><td>user_000705</td><td>2009-05-03 12:55:00 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>0138547f-374d-49d4-8f1c-9b2c8b5c65c0</td><td>X-Ray Eyes</td></tr><tr><td>1</td><td>user_000705</td><td>2009-05-03 12:51:28 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>22ce9a32-3510-4c8e-8151-c044a62eb4fd</td><td>Hard Times</td></tr><tr><td>2</td><td>user_000705</td><td>2009-05-03 12:46:55 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>22ce9a32-3510-4c8e-8151-c044a62eb4fd</td><td>Hard Times</td></tr><tr><td>3</td><td>user_000705</td><td>2009-05-03 12:42:17 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>c386b85f-1bfe-4038-b323-cb8229ab2f8b</td><td>Magic Touch</td></tr><tr><td>4</td><td>user_000705</td><td>2009-05-03 12:37:53 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>8ec9b4f8-2d1b-4616-9ae4-4711ca328fc3</td><td>Charisma</td></tr><tr><td>5</td><td>user_000705</td><td>2009-05-03 12:33:37 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>ff47d82e-313d-4bd0-8e61-fe61124a361b</td><td>Dirty Livin'</td></tr><tr><td>6</td><td>user_000705</td><td>2009-05-03 12:29:39 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>3621800b-87b7-43c6-b6a3-47ea4b658407</td><td>Sure Know Something</td></tr><tr><td>7</td><td>user_000705</td><td>2009-05-03 12:24:46 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>91cc5010-e65b-4f49-94b5-1deed61cfcc7</td><td>2,000 Man</td></tr><tr><td>8</td><td>user_000705</td><td>2009-05-03 12:20:17 +0530</td><td>e1f1e33e-2e4c-4d43-b91b-7064068d3283</td><td>Kiss</td><td>daa13e72-9056-476f-b431-335b2c26842d</td><td>I Was Made For Lovin' You</td></tr><tr><td>9</td><td>user_000705</td><td>2009-05-03 12:16:20 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>1895c79d-ae5f-40bf-bc18-83fdcd8d2842</td><td>Burning Of The Midnight Lamp</td></tr><tr><td>10</td><td>user_000705</td><td>2009-05-03 12:12:35 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>1ae3c250-7b16-49d4-9c71-0928724eecce</td><td>Gypsy Eyes</td></tr><tr><td>11</td><td>user_000705</td><td>2009-05-03 12:08:26 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>fca63fe0-c9e6-4347-92b7-21f6cf79226c</td><td>Come On, Part 1</td></tr><tr><td>12</td><td>user_000705</td><td>2009-05-03 12:04:59 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>36beb31d-ed74-4a49-832f-a4a38dc96bab</td><td>Long Hot Summer Night</td></tr><tr><td>13</td><td>user_000705</td><td>2009-05-03 12:02:08 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>4ad6064e-7d54-49a2-a134-320a1612ee27</td><td>Little Miss Strange</td></tr><tr><td>14</td><td>user_000705</td><td>2009-05-03 11:47:07 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>40ffef8e-b851-473a-a239-08685eab22b0</td><td>Voodoo Chile</td></tr><tr><td>15</td><td>user_000705</td><td>2009-05-03 11:44:43 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>feb64d01-6e05-4974-bb44-0046deca1bdb</td><td>Crosstown Traffic</td></tr><tr><td>16</td><td>user_000705</td><td>2009-05-03 11:42:35 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>7f9b462a-8ac5-472d-a5aa-716b3b3d169c</td><td>Have You Ever Been (To Electric Ladyland)</td></tr><tr><td>17</td><td>user_000705</td><td>2009-05-03 11:41:13 +0530</td><td>33b3c323-77c2-417c-a5b4-af7e6a111cc9</td><td>The Jimi Hendrix Experience</td><td>88b57468-8d58-4310-b135-c94620fcfbc1</td><td>...And The Gods Made Love</td></tr><tr><td>18</td><td>user_000705</td><td>2009-05-02 09:24:28 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>788878e0-8965-489e-86e3-add4c1f3d134</td><td>Line Of Best Fit</td></tr><tr><td>19</td><td>user_000705</td><td>2009-05-02 09:19:58 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>7cfc403d-18e7-4b8e-b0c4-1864ca393fbb</td><td>Fake Frowns</td></tr><tr><td>20</td><td>user_000705</td><td>2009-05-02 09:15:03 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>34a2d7ad-6b3a-4cfc-b4ca-edfc55a6685b</td><td>Amputations</td></tr><tr><td>21</td><td>user_000705</td><td>2009-05-02 09:11:21 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>99db2ed6-4493-481c-ac20-54ad323cb04b</td><td>The Face That Launched 1000 Shits</td></tr><tr><td>22</td><td>user_000705</td><td>2009-05-02 09:07:44 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>269084ba-3065-4b43-a733-f491e618b26a</td><td>Sleep Spent</td></tr><tr><td>23</td><td>user_000705</td><td>2009-05-02 09:03:54 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>96fac269-5308-4aee-827f-d01a66674694</td><td>Pictures In An Exhibition</td></tr><tr><td>24</td><td>user_000705</td><td>2009-05-02 08:59:34 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>c29440d9-03e6-4e18-91d6-ef8bf1e1ca32</td><td>Your Bruise</td></tr><tr><td>25</td><td>user_000705</td><td>2009-05-02 08:56:55 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>ed55b695-976e-4898-8fde-51a8e3b0e262</td><td>Champagne From A Paper Cup</td></tr><tr><td>26</td><td>user_000705</td><td>2009-05-02 08:49:07 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>c5238d6d-9b04-496c-8674-4ea7a07aecd6</td><td>President Of What?</td></tr><tr><td>27</td><td>user_000705</td><td>2009-05-02 08:44:34 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>bf59dfef-03a8-4270-9456-50df79da56c2</td><td>Bend To Squares</td></tr><tr><td>28</td><td>user_000705</td><td>2009-05-01 19:08:37 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>788878e0-8965-489e-86e3-add4c1f3d134</td><td>Line Of Best Fit</td></tr><tr><td>29</td><td>user_000705</td><td>2009-05-01 19:04:07 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>7cfc403d-18e7-4b8e-b0c4-1864ca393fbb</td><td>Fake Frowns</td></tr><tr><td>30</td><td>user_000705</td><td>2009-05-01 18:59:12 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>34a2d7ad-6b3a-4cfc-b4ca-edfc55a6685b</td><td>Amputations</td></tr><tr><td>31</td><td>user_000705</td><td>2009-05-01 18:55:30 +0530</td><td>0039c7ae-e1a7-4a7d-9b49-0cbc716821a6</td><td>Death Cab For Cutie</td><td>99db2ed6-4493-481c-ac20-54ad323cb04b</td><td>The Face That Launched 1000 Shits</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr></table>"
156
+ ],
157
+ "metadata": {},
158
+ "output_type": "pyout",
159
+ "prompt_number": 3,
160
+ "text": [
161
+ "\n",
162
+ "#<Daru::DataFrame:90310500 @name = 59f7207f-059f-4bb8-8315-2c7625c19dd2 @size = 2500>\n",
163
+ " userid timestamp artid artname traid traname \n",
164
+ " 0 user_00070 2009-05-03 e1f1e33e-2 Kiss 0138547f-3 X-Ray Eyes \n",
165
+ " 1 user_00070 2009-05-03 e1f1e33e-2 Kiss 22ce9a32-3 Hard Times \n",
166
+ " 2 user_00070 2009-05-03 e1f1e33e-2 Kiss 22ce9a32-3 Hard Times \n",
167
+ " 3 user_00070 2009-05-03 e1f1e33e-2 Kiss c386b85f-1 Magic Touc \n",
168
+ " 4 user_00070 2009-05-03 e1f1e33e-2 Kiss 8ec9b4f8-2 Charisma \n",
169
+ " 5 user_00070 2009-05-03 e1f1e33e-2 Kiss ff47d82e-3 Dirty Livi \n",
170
+ " 6 user_00070 2009-05-03 e1f1e33e-2 Kiss 3621800b-8 Sure Know \n",
171
+ " 7 user_00070 2009-05-03 e1f1e33e-2 Kiss 91cc5010-e 2,000 Man \n",
172
+ " 8 user_00070 2009-05-03 e1f1e33e-2 Kiss daa13e72-9 I Was Made \n",
173
+ " 9 user_00070 2009-05-03 33b3c323-7 The Jimi H 1895c79d-a Burning Of \n",
174
+ " 10 user_00070 2009-05-03 33b3c323-7 The Jimi H 1ae3c250-7 Gypsy Eyes \n",
175
+ " 11 user_00070 2009-05-03 33b3c323-7 The Jimi H fca63fe0-c Come On, P \n",
176
+ " 12 user_00070 2009-05-03 33b3c323-7 The Jimi H 36beb31d-e Long Hot S \n",
177
+ " 13 user_00070 2009-05-03 33b3c323-7 The Jimi H 4ad6064e-7 Little Mis \n",
178
+ " 14 user_00070 2009-05-03 33b3c323-7 The Jimi H 40ffef8e-b Voodoo Chi \n",
179
+ " ... ... ... ... ... ... ... \n"
180
+ ]
181
+ }
182
+ ],
183
+ "prompt_number": 3
184
+ },
185
+ {
186
+ "cell_type": "code",
187
+ "collapsed": false,
188
+ "input": [
189
+ "artist_counts = {}\n",
190
+ "\n",
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"
203
+ ],
204
+ "language": "python",
205
+ "metadata": {},
206
+ "outputs": [
207
+ {
208
+ "html": [
209
+ "<table><tr><th> </th><th>counts</th></tr><tr><td>kiss</td><td>19</td></tr><tr><td>the_jimi_hendrix_experience</td><td>39</td></tr><tr><td>death_cab_for_cutie</td><td>206</td></tr><tr><td>the_rolling_stones</td><td>91</td></tr><tr><td>the_who</td><td>45</td></tr><tr><td>pink_floyd</td><td>158</td></tr><tr><td>o.s.t.r.</td><td>1</td></tr><tr><td>nickel_creek</td><td>1</td></tr><tr><td>black_sabbath</td><td>3</td></tr><tr><td>w.a.s.p.</td><td>1</td></tr><tr><td>wishbone_ash</td><td>1</td></tr><tr><td>leonard_cohen</td><td>1</td></tr><tr><td>jefferson_airplane</td><td>10</td></tr><tr><td>syd_barrett</td><td>2</td></tr><tr><td>sniff_'n'_the_tears</td><td>1</td></tr><tr><td>jean_sibelius</td><td>1</td></tr><tr><td>the_doors</td><td>7</td></tr><tr><td>renaissance</td><td>1</td></tr><tr><td>marillion</td><td>2</td></tr><tr><td>anathema</td><td>4</td></tr><tr><td>jimi_hendrix</td><td>3</td></tr><tr><td>riverside</td><td>2</td></tr><tr><td>jethro_tull</td><td>1</td></tr><tr><td>the_alan_parsons_project</td><td>1</td></tr><tr><td>eric_clapton</td><td>8</td></tr><tr><td>red_sparowes</td><td>1</td></tr><tr><td>liquid_tension_experiment</td><td>2</td></tr><tr><td>dire_straits</td><td>16</td></tr><tr><td>rio_reiser</td><td>1</td></tr><tr><td>primus</td><td>1</td></tr><tr><td>andrew_lloyd_webber</td><td>1</td></tr><tr><td>focus</td><td>5</td></tr><tr><td>...</td><td>...</td></tr></table>"
210
+ ],
211
+ "metadata": {},
212
+ "output_type": "pyout",
213
+ "prompt_number": 4,
214
+ "text": [
215
+ "\n",
216
+ "#<Daru::Vector:-624202978 @name = counts @size = 376 >\n",
217
+ " counts\n",
218
+ " kiss 19\n",
219
+ "the_jimi_h 39\n",
220
+ "death_cab_ 206\n",
221
+ "the_rollin 91\n",
222
+ " the_who 45\n",
223
+ "pink_floyd 158\n",
224
+ " o.s.t.r. 1\n",
225
+ "nickel_cre 1\n",
226
+ "black_sabb 3\n",
227
+ " w.a.s.p. 1\n",
228
+ "wishbone_a 1\n",
229
+ "leonard_co 1\n",
230
+ "jefferson_ 10\n",
231
+ "syd_barret 2\n",
232
+ "sniff_'n'_ 1\n",
233
+ "jean_sibel 1\n",
234
+ " the_doors 7\n",
235
+ " ... ...\n"
236
+ ]
237
+ }
238
+ ],
239
+ "prompt_number": 4
240
+ },
241
+ {
242
+ "cell_type": "code",
243
+ "collapsed": false,
244
+ "input": [
245
+ "counts.max :vector"
246
+ ],
247
+ "language": "python",
248
+ "metadata": {},
249
+ "outputs": [
250
+ {
251
+ "html": [
252
+ "<table><tr><th> </th><th>counts</th></tr><tr><td>a._r._rahman</td><td>231</td></tr></table>"
253
+ ],
254
+ "metadata": {},
255
+ "output_type": "pyout",
256
+ "prompt_number": 5,
257
+ "text": [
258
+ "\n",
259
+ "#<Daru::Vector:106370640 @name = counts @size = 1 >\n",
260
+ " counts\n",
261
+ "a._r._rahm 231\n"
262
+ ]
263
+ }
264
+ ],
265
+ "prompt_number": 5
266
+ },
267
+ {
268
+ "cell_type": "code",
269
+ "collapsed": false,
270
+ "input": [
271
+ "top_ten = counts.sort[-10..-1]\n",
272
+ "\n",
273
+ "hsh = {}\n",
274
+ "\n",
275
+ "top_ten.each do |count|\n",
276
+ " hsh[counts.index_of(count)] = count\n",
277
+ "end\n",
278
+ "\n",
279
+ "ten = Daru::Vector.new hsh\n",
280
+ "\n",
281
+ "ten.plot type: :bar, width: 1120, height: 300"
282
+ ],
283
+ "language": "python",
284
+ "metadata": {},
285
+ "outputs": [
286
+ {
287
+ "html": [
288
+ "<div id='vis-2d129c89-0b03-4c0a-832b-d699e419e9a4'></div>\n",
289
+ "<script>\n",
290
+ "(function(){\n",
291
+ " var render = function(){\n",
292
+ " var model = {\"panes\":[{\"diagrams\":[{\"type\":\"bar\",\"options\":{\"x\":\"data0\",\"y\":\"data1\"},\"data\":\"a44501de-509e-411f-b01e-4f5b27d9dcda\"}],\"options\":{\"width\":1120,\"height\":300,\"x_label\":\"\",\"y_label\":\"\",\"xrange\":[\"nick_drake\",\"howard_shore\",\"cat_stevens\",\"the_cranberries\",\"the_beatles\",\"opeth\",\"the_rolling_stones\",\"pink_floyd\",\"death_cab_for_cutie\",\"a._r._rahman\"],\"yrange\":[0,231]}}],\"data\":{\"a44501de-509e-411f-b01e-4f5b27d9dcda\":[{\"data0\":\"nick_drake\",\"data1\":51},{\"data0\":\"howard_shore\",\"data1\":56},{\"data0\":\"cat_stevens\",\"data1\":57},{\"data0\":\"the_cranberries\",\"data1\":61},{\"data0\":\"the_beatles\",\"data1\":67},{\"data0\":\"opeth\",\"data1\":89},{\"data0\":\"the_rolling_stones\",\"data1\":91},{\"data0\":\"pink_floyd\",\"data1\":158},{\"data0\":\"death_cab_for_cutie\",\"data1\":206},{\"data0\":\"a._r._rahman\",\"data1\":231}]},\"extension\":[]}\n",
293
+ " Nyaplot.core.parse(model, '#vis-2d129c89-0b03-4c0a-832b-d699e419e9a4');\n",
294
+ " };\n",
295
+ " if(window['Nyaplot']==undefined){\n",
296
+ " window.addEventListener('load_nyaplot', render, false);\n",
297
+ "\treturn;\n",
298
+ " } else {\n",
299
+ " render();\n",
300
+ " }\n",
301
+ "})();\n",
302
+ "</script>\n"
303
+ ],
304
+ "metadata": {},
305
+ "output_type": "pyout",
306
+ "prompt_number": 6,
307
+ "text": [
308
+ "#<Nyaplot::Frame:0xb597e0f4 @properties={:panes=>[#<Nyaplot::Plot:0xb597f828 @properties={:diagrams=>[#<Nyaplot::Diagram:0xb597e360 @properties={:type=>:bar, :options=>{:x=>\"data0\", :y=>\"data1\"}, :data=>\"a44501de-509e-411f-b01e-4f5b27d9dcda\"}, @xrange=[:nick_drake, :howard_shore, :cat_stevens, :the_cranberries, :the_beatles, :opeth, :the_rolling_stones, :pink_floyd, :death_cab_for_cutie, :\"a._r._rahman\"], @yrange=[0, 231]>], :options=>{:width=>1120, :height=>300, :x_label=>\"\", :y_label=>\"\", :xrange=>[:nick_drake, :howard_shore, :cat_stevens, :the_cranberries, :the_beatles, :opeth, :the_rolling_stones, :pink_floyd, :death_cab_for_cutie, :\"a._r._rahman\"], :yrange=>[0, 231]}}>], :data=>{\"a44501de-509e-411f-b01e-4f5b27d9dcda\"=>#<Nyaplot::DataFrame:0xb597f134 @name=\"a44501de-509e-411f-b01e-4f5b27d9dcda\", @rows=[{:data0=>:nick_drake, :data1=>51}, {:data0=>:howard_shore, :data1=>56}, {:data0=>:cat_stevens, :data1=>57}, {:data0=>:the_cranberries, :data1=>61}, {:data0=>:the_beatles, :data1=>67}, {:data0=>:opeth, :data1=>89}, {:data0=>:the_rolling_stones, :data1=>91}, {:data0=>:pink_floyd, :data1=>158}, {:data0=>:death_cab_for_cutie, :data1=>206}, {:data0=>:\"a._r._rahman\", :data1=>231}]>}, :extension=>[]}>"
309
+ ]
310
+ }
311
+ ],
312
+ "prompt_number": 6
313
+ }
314
+ ],
315
+ "metadata": {}
316
+ }
317
+ ]
318
+ }