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.
- 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
|
+
}
|