Class: Nyaplot::DataFrame
- Inherits:
-
Object
- Object
- Nyaplot::DataFrame
show all
- Defined in:
- lib/nyaplot/data.rb
Overview
Ruby DataFrame for plotting
Constant Summary
collapse
- DEFAULT_OPTS =
{
:col_sep => ',',
:headers => true,
:converters => :numeric,
:header_converters => :symbol
}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(source, name = SecureRandom.uuid()) ⇒ DataFrame
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/nyaplot/data.rb', line 19
def initialize(source, name=SecureRandom.uuid())
@name = name
@rows = []
case
when source.is_a?(Array)
@rows = source
when source.is_a?(Hash)
keys = source.keys
len = source[keys[0]].length
(0..len-1).each do |i|
hash = {}
keys.each{|key| hash[key] = source[key][i]}
@rows.push(hash)
end
end
unless @rows.all? {|row| row.keys.all? {|el| el.is_a?(Symbol)}}
@rows.map! do |row|
row.inject({}) do |hash, (key, val)|
hash[key.to_sym]=val
hash
end
end
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
173
174
175
176
177
178
179
180
181
182
|
# File 'lib/nyaplot/data.rb', line 173
def method_missing(name, *args, &block)
if md = name.match(/(.+)\=/)
self.insert_column(name[/(.+)\=/].delete("="), args[0])
return
elsif column_labels.include?(name)
return self.column(name)
else
super(name, *args, &block)
end
end
|
Instance Attribute Details
#rows ⇒ Object
Returns the value of attribute rows.
17
18
19
|
# File 'lib/nyaplot/data.rb', line 17
def rows
@rows
end
|
Class Method Details
.from_csv(*args) {|csv| ... } ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/nyaplot/data.rb', line 48
def self.from_csv(*args)
path = args.shift
opts = DEFAULT_OPTS
if args.size > 0 && args.first.is_a?(Hash)
opts = opts.merge(args.shift)
else
opts[:col_sep] = args.shift if args.size > 0
opts[:headers] = args.shift if args.size > 0
end
csv = CSV.open(path, "r", opts)
yield csv if block_given?
rows = []
csv.each do |row|
hash = {}
row.each_with_index do |el,i|
next if el[0].nil? && el[1].nil?
hash[el[0].to_sym] = el[1]
end
rows << hash
end
self.new(rows)
end
|
Instance Method Details
#[](name) ⇒ Object
The alias method for DataFrame#column
165
166
167
|
# File 'lib/nyaplot/data.rb', line 165
def [](name)
return self.column(name)
end
|
#column(name) ⇒ Object
Access column using its label
104
105
106
107
108
|
# File 'lib/nyaplot/data.rb', line 104
def column(name)
id = name.is_a?(Symbol) ? name : name.to_sym
column = @rows.map{|row| row[id]}
return Series.new(name, column)
end
|
#column_labels ⇒ Object
169
170
171
|
# File 'lib/nyaplot/data.rb', line 169
def column_labels
@rows[0].keys
end
|
#delete_column(name) ⇒ Object
96
97
98
99
100
101
|
# File 'lib/nyaplot/data.rb', line 96
def delete_column(name)
name = name.is_a?(Symbol) ? name : name.to_sym
@rows.each do |row|
row.delete(name)
end
end
|
#each_column(&block) ⇒ Object
125
126
127
128
129
|
# File 'lib/nyaplot/data.rb', line 125
def each_column(&block)
self.column_labels.each do |label|
block.call(column(label).to_a)
end
end
|
#each_row(&block) ⇒ Object
131
132
133
134
135
|
# File 'lib/nyaplot/data.rb', line 131
def each_row(&block)
@rows.each do |row|
block.call(row)
end
end
|
#filter(&block) ⇒ Object
Filtering row out using recieved block
77
78
79
|
# File 'lib/nyaplot/data.rb', line 77
def filter(&block)
DataFrame.new(@rows.select(&block))
end
|
#filter!(&block) ⇒ Object
destructive version of DataFrame#filter
82
83
84
|
# File 'lib/nyaplot/data.rb', line 82
def filter!(&block)
@rows.select!(&block)
end
|
#insert_column(name, arr) ⇒ Object
91
92
93
94
|
# File 'lib/nyaplot/data.rb', line 91
def insert_column(name, arr)
name = name.is_a?(Symbol) ? name : name.to_sym
arr.each_with_index{|val, i| @rows[i][name]=val}
end
|
#insert_row(row, index = @rows.length) ⇒ Object
113
114
115
|
# File 'lib/nyaplot/data.rb', line 113
def insert_row(row, index=@rows.length)
@rows.insert(index, row)
end
|
#name ⇒ String
87
88
89
|
# File 'lib/nyaplot/data.rb', line 87
def name
@name
end
|
#row(index) ⇒ Object
117
118
119
|
# File 'lib/nyaplot/data.rb', line 117
def row(index)
@rows[index]
end
|
#to_html(threshold = 15) ⇒ Object
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
# File 'lib/nyaplot/data.rb', line 137
def to_html(threshold = 15)
html = '<table>'
unless @rows[0].nil?
html += '<tr>'
@rows[0].each {|key, val| html.concat('<th>' + key.to_s + '</th>')}
html += '</tr>'
end
@rows.each_with_index do |row, i|
next if i > threshold && i < @rows.length-1
html += '<tr>'
row.each{|key, val| html.concat('<td>' + val.to_s + '</td>')}
html += '</tr>'
if i == threshold
html += '<tr>'
row.length.times {html.concat('<td>...</td>')}
html += '</tr>'
end
end
html += '</table>'
end
|
#to_json(*args) ⇒ Object
121
122
123
|
# File 'lib/nyaplot/data.rb', line 121
def to_json(*args)
@rows.to_json
end
|
#to_s ⇒ Object
160
161
162
|
# File 'lib/nyaplot/data.rb', line 160
def to_s
to_html
end
|