Class: PubliSci::DataSet::ORM::DataCube
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
abbreviate_known, code_lists, component_gen, component_specifications, concept_codes, data_structure_definition, dataset, defaults, dimension_properties, encode_data, generate, generate_resources, measure_properties, observations, prefixes, vocabulary
Methods included from RDFParser
add_node, bnode_value, encode_value, get_ary, get_hashes, is_complex?, is_uri?, load_string, observation_hash, sanitize, sanitize_hash, strip_prefixes, strip_uri, to_literal, to_resource, turtle_indent
Methods included from Analyzer
check_integrity, dirty?, recommend_range, recommend_range_strings
Methods included from Query
execute, execute_from_file, property_names, property_values, row_names, vocabulary
#activity, #basic, #defaults, #metadata_help, #org_metadata, #process, #provenance, #r2rdf_metadata
Constructor Details
#initialize(options = {}, do_parse = true) ⇒ DataCube
Returns a new instance of DataCube.
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 22
def initialize(options={},do_parse = true)
@dimensions = {}
@measures = []
@obs = []
@generator_options = {}
@options = {}
@meta = {}
parse_options options if do_parse
end
|
Instance Attribute Details
#dimensions ⇒ Object
Returns the value of attribute dimensions.
17
18
19
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 17
def dimensions
@dimensions
end
|
#labels ⇒ Object
Returns the value of attribute labels.
16
17
18
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 16
def labels
@labels
end
|
#measures ⇒ Object
Returns the value of attribute measures.
18
19
20
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 18
def measures
@measures
end
|
Returns the value of attribute meta.
20
21
22
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 20
def meta
@meta
end
|
#obs ⇒ Object
Returns the value of attribute obs.
19
20
21
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 19
def obs
@obs
end
|
Class Method Details
.load(graph, options = {}, verbose = false) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 34
def self.load(graph,options={},verbose=false)
graph = load_string(graph) unless graph =~ /^http/
dimensions = Hash[get_hashes(execute_from_file('dimension_ranges.rq',graph),"to_s").map{|solution|
if solution[:range].split('/')[-2] == "code"
type = :coded
else
type = solution[:range].to_s
end
[solution[:dimension], {type: type}]
}]
puts "dimensions: #{dimensions}" if verbose
codes = execute_from_file('code_resources.rq',graph).to_h.map{|sol|
[sol[:dimension].to_s, sol[:codeList].to_s, sol[:class].to_s]
}
puts "codes: #{codes}" if verbose
measures = execute_from_file('measures.rq',graph).to_h.map{|m| m[:measure].to_s}
puts "measures: #{measures}" if verbose
name = execute_from_file('dataset.rq',graph).to_h.first[:label]
puts "dataset: #{name}" if verbose
obs = execute_from_file('observations.rq',graph)
observations = observation_hash(obs)
puts "observations: #{observations}" if verbose
labels = execute_from_file('observation_labels.rq', graph)
labels = Hash[labels.map{|sol|
[sol[:observation].to_s, sol[:label].to_s]
}]
new_opts = {
measures: measures,
dimensions: dimensions,
observations: observations.values,
name: name,
labels: labels.values,
codes: codes
}
options = options.merge(new_opts)
puts "creating #{options}" if verbose
self.new(options)
end
|
Instance Method Details
#add_dimension(name, type = :coded) ⇒ Object
163
164
165
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 163
def add_dimension(name, type=:coded)
@dimensions[name.to_s] = {type: type}
end
|
#add_measure(name) ⇒ Object
167
168
169
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 167
def add_measure(name)
@measures << name
end
|
#add_observation(data) ⇒ Object
171
172
173
174
175
176
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 171
def add_observation(data)
data = Hash[data.map{|k,v| [k.to_s, v]}]
obs = Observation.new(data)
check_integrity([obs.data],@dimensions.keys,@measures) if @options[:validate_each]
@obs << obs
end
|
#add_publisher(label, uri) ⇒ Object
198
199
200
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 198
def add_publisher(label,uri)
publishers << {label: label, uri: uri}
end
|
#add_subject(id) ⇒ Object
202
203
204
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 202
def add_subject(id)
subject << id
end
|
#author ⇒ Object
206
207
208
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 206
def author
@meta[:creator] ||= ""
end
|
#author=(author) ⇒ Object
210
211
212
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 210
def author=(author)
@meta[:creator] = author
end
|
#date ⇒ Object
222
223
224
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 222
def date
@meta[:date] ||= "#{Time.now.day}-#{Time.now.month}-#{Time.now.year}"
end
|
#date=(date) ⇒ Object
226
227
228
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 226
def date=(date)
@meta[:date] = date
end
|
#description ⇒ Object
214
215
216
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 214
def description
@meta[:description] ||= ""
end
|
#description=(description) ⇒ Object
218
219
220
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 218
def description=(description)
@meta[:description] = description
end
|
#insert(observation) ⇒ Object
178
179
180
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 178
def insert(observation)
@obs << observation
end
|
#parse_options(options) ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 87
def parse_options(options)
if options[:dimensions]
options[:dimensions].each{|name,details|
add_dimension(name, details[:type] || :coded)
}
end
if options[:measures]
options[:measures].each{|m| @measures << m}
end
if options[:observations]
options[:observations].each{|obs_data| add_observation obs_data}
end
@generator_options = options[:generator_options] if options[:generator_options]
@options[:skip_metadata] = options[:skip_metadata] if options[:skip_metadata]
if options[:name]
@name = options[:name]
else
raise "No dataset name specified!"
end
if options[:validate_each]
@options[:validate_each] = options[:validate_each]
end
if options[:labels]
@labels = options[:labels]
end
if options[:codes]
@codes = options[:codes]
end
end
|
#publishers ⇒ Object
182
183
184
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 182
def publishers
@meta[:publishers] ||= []
end
|
#publishers=(publishers) ⇒ Object
186
187
188
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 186
def publishers=(publishers)
@meta[:publishers] = publishers
end
|
#subjects ⇒ Object
190
191
192
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 190
def subjects
@meta[:subject] ||= []
end
|
#subjects=(subjects) ⇒ Object
194
195
196
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 194
def subjects=(subjects)
@meta[:subject]=subjects
end
|
#to_h ⇒ Object
230
231
232
233
234
235
236
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 230
def to_h
{
measures: @measures,
dimensions: @dimensions,
observations: @obs.map{|o| o.data}
}
end
|
#to_n3 ⇒ Object
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 124
def to_n3
unless @labels.is_a?(Array) && @labels.size == @obs.size
if @labels.is_a? Symbol
else
@labels = (1..@obs.size).to_a.map(&:to_s)
end
end
data = {}
check_integrity(@obs.map{|o| o.data}, @dimensions.keys, @measures)
@obs.map{|obs|
(@measures | @dimensions.keys).map{ |component|
(data[component] ||= []) << obs.data[component]
}
}
@codes = @dimensions.map{|d,v| d if v[:type] == :coded}.compact unless @codes
str = generate(@measures, @dimensions.keys, @codes, data, @labels, @name, @generator_options)
unless @options[:skip_metadata]
fields = {
publishers: publishers(),
subject: subjects(),
author: author(),
description: description(),
date: date(),
var: @name,
}
str += "\n" + basic(fields)
end
str
end
|