daru 0.0.3.1 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
+ }