Class: PubliSci::DataSet::ORM::DataCube

Inherits:
Object
  • Object
show all
Extended by:
Analyzer, PubliSci::Dataset::DataCube, Query, RDFParser
Includes:
Analyzer, PubliSci::Dataset::DataCube, Metadata::Generator, Query, RDFParser
Defined in:
lib/publisci/dataset/ORM/data_cube_orm.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PubliSci::Dataset::DataCube

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

Methods included from Metadata::Generator

#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

#dimensionsObject

Returns the value of attribute dimensions.



17
18
19
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 17

def dimensions
  @dimensions
end

#labelsObject

Returns the value of attribute labels.



16
17
18
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 16

def labels
  @labels
end

#measuresObject

Returns the value of attribute measures.



18
19
20
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 18

def measures
  @measures
end

#metaObject

Returns the value of attribute meta.



20
21
22
# File 'lib/publisci/dataset/ORM/data_cube_orm.rb', line 20

def meta
  @meta
end

#obsObject

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/

  # puts get_hashes(execute_from_file('dimension_ranges.rq',graph))
  dimensions = Hash[get_hashes(execute_from_file('dimension_ranges.rq',graph),"to_s").map{|solution|
    #TODO coded properties should be found via SPARQL queries
    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

  # simple_observations = observation_hash(obs,true)

  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

#authorObject



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

#dateObject



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

#descriptionObject



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

#publishersObject



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

#subjectsObject



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_hObject



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_n3Object



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

  #create labels if not specified
  unless @labels.is_a?(Array) && @labels.size == @obs.size
    if @labels.is_a? Symbol
      #define some automatic labeling methods
    else
      @labels = (1..@obs.size).to_a.map(&:to_s)
    end
  end
  data = {}


  #collect observation 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,
    }
    # puts basic(fields,@generator_options)
    str += "\n" + basic(fields)
  end
  str
end