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.
- checksums.yaml +4 -4
- data/History.txt +16 -0
- data/README.md +83 -23
- data/daru.gemspec +7 -0
- data/lib/daru/accessors/array_wrapper.rb +248 -0
- data/lib/daru/accessors/nmatrix_wrapper.rb +252 -0
- data/lib/daru/dataframe.rb +171 -72
- data/lib/daru/index.rb +29 -5
- data/lib/daru/io/io.rb +1 -1
- data/lib/daru/{math → maths}/arithmetic/dataframe.rb +1 -1
- data/lib/daru/maths/arithmetic/vector.rb +75 -0
- data/lib/daru/{math → maths}/statistics/dataframe.rb +1 -1
- data/lib/daru/maths/statistics/vector.rb +147 -0
- data/lib/daru/monkeys.rb +16 -10
- data/lib/daru/plotting/dataframe.rb +47 -0
- data/lib/daru/plotting/vector.rb +41 -0
- data/lib/daru/vector.rb +166 -40
- data/lib/version.rb +1 -1
- data/notebooks/intro_with_music_data_.ipynb +318 -0
- data/spec/dataframe_spec.rb +528 -472
- data/spec/fixtures/music_data.tsv +2501 -0
- data/spec/index_spec.rb +8 -0
- data/spec/io/io_spec.rb +1 -0
- data/spec/math/statistics/vector_spec.rb +144 -3
- data/spec/vector_spec.rb +165 -148
- metadata +32 -6
- data/lib/daru/math/arithmetic/vector.rb +0 -71
- data/lib/daru/math/statistics/vector.rb +0 -9
data/lib/daru/vector.rb
CHANGED
@@ -1,36 +1,83 @@
|
|
1
|
-
|
2
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
67
|
+
@dtype = opts[:dtype] || Array
|
23
68
|
|
24
69
|
set_name name
|
25
70
|
|
26
71
|
@vector =
|
27
|
-
case
|
28
|
-
when Array
|
29
|
-
source.dup
|
30
|
-
when
|
31
|
-
source.
|
32
|
-
|
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
|
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
|
-
|
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
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
106
|
+
case index
|
107
|
+
when Range
|
108
|
+
# range into vector
|
109
|
+
#
|
57
110
|
else
|
58
|
-
|
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
|
-
|
82
|
-
|
83
|
-
|
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)
|
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
|
-
|
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
|
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
@@ -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
|
+
}
|