Class: Quandl::Operation::Parse
- Inherits:
-
Object
- Object
- Quandl::Operation::Parse
- Defined in:
- lib/quandl/operation/parse.rb
Class Method Summary collapse
- .csv(data) ⇒ Object
- .data_has_rows?(data) ⇒ Boolean
- .data_missing_rows?(data) ⇒ Boolean
- .date_to_julian(data) ⇒ Object
- .julian_string_to_integer(data) ⇒ Object
- .julian_to_date(data) ⇒ Object
- .perform(data) ⇒ Object
- .sort(data, order = :asc) ⇒ Object
- .sort_asc(data) ⇒ Object
- .sort_desc(data) ⇒ Object
- .sort_order?(data) ⇒ Boolean
- .unknown_date_format_to_julian(data) ⇒ Object
- .values_to_float(data) ⇒ Object
Class Method Details
.csv(data) ⇒ Object
20 21 22 23 24 |
# File 'lib/quandl/operation/parse.rb', line 20 def csv(data) data = CSV.parse( data ) if data.is_a?(String) data = values_to_float(data) data end |
.data_has_rows?(data) ⇒ Boolean
119 120 121 |
# File 'lib/quandl/operation/parse.rb', line 119 def data_has_rows?(data) data.is_a?(Array) && data[0].is_a?(Array) && data[0][0].present? end |
.data_missing_rows?(data) ⇒ Boolean
115 116 117 |
# File 'lib/quandl/operation/parse.rb', line 115 def data_missing_rows?(data) !data_has_rows?(data) end |
.date_to_julian(data) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/quandl/operation/parse.rb', line 57 def date_to_julian(data) return data if data_missing_rows?(data) || data[0][0].is_a?(Integer) # dont alter by reference result = [] # for each row data.each_with_index do |row, index| # copy nrow = row.dup # string to date date = nrow[0] date = Date.parse(nrow[0]) if nrow[0].is_a?(String) # date to julian nrow[0] = date.jd if date.respond_to?(:jd) # save result result[index] = nrow end # all done result end |
.julian_string_to_integer(data) ⇒ Object
94 95 96 97 98 99 |
# File 'lib/quandl/operation/parse.rb', line 94 def julian_string_to_integer(data) # skip when already formatted correctly return data if data_missing_rows?(data) || data[0][0].is_a?(Integer) || data[0][0].is_a?(Date) # otherwise cast string jds to int data.collect{|r| r[0] = r[0].to_i; r } end |
.julian_to_date(data) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/quandl/operation/parse.rb', line 77 def julian_to_date(data) return data if data_missing_rows?(data) || data[0][0].is_a?(Date) # dont alter by reference result = [] # for each row data.each_with_index do |row, index| # copy nrow = row.dup # parse date nrow[0] = Date.jd( nrow[0].to_i ) unless nrow[0].is_a?(Date) # save result result[index] = nrow end # all done result end |
.perform(data) ⇒ Object
10 11 12 13 14 15 16 17 18 |
# File 'lib/quandl/operation/parse.rb', line 10 def perform(data) return [] if data.blank? t1 = Time.now data = csv(data) data = unknown_date_format_to_julian(data) # data = sort(data) Quandl::Logger.debug "#{self.name}.perform (#{t1.elapsed.microseconds}ms)" if t1.elapsed.microseconds > 1 data end |
.sort(data, order = :asc) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'lib/quandl/operation/parse.rb', line 26 def sort(data, order = :asc) # ascending case order when :asc then data = sort_asc(data) when :desc then data = sort_desc(data) end data end |
.sort_asc(data) ⇒ Object
40 41 42 |
# File 'lib/quandl/operation/parse.rb', line 40 def sort_asc(data) data.sort_by{|r| r[0] } end |
.sort_desc(data) ⇒ Object
44 45 46 |
# File 'lib/quandl/operation/parse.rb', line 44 def sort_desc(data) data.sort_by{|r| r[0] }.reverse end |
.sort_order?(data) ⇒ Boolean
35 36 37 38 |
# File 'lib/quandl/operation/parse.rb', line 35 def sort_order?(data) return :none if data.blank? || data[0].blank? || data[1].blank? data[0][0] > data[1][0] ? :desc : :asc end |
.unknown_date_format_to_julian(data) ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/quandl/operation/parse.rb', line 48 def unknown_date_format_to_julian(data) return data if data_missing_rows?(data) date = data[0][0] # formatted like: "2013-06-18" return date_to_julian(data) if date.is_a?(String) && date =~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/ # formatted like: "2456463" return julian_string_to_integer(data) end |
.values_to_float(data) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/quandl/operation/parse.rb', line 101 def values_to_float(data) # skip unless value is a string return data if data_missing_rows?(data) || !data[0][1].is_a?(String) # cast values to float data.collect do |row| new_row = [row[0]] row[1..-1].each_with_index do |value, index| value = value.to_f if value.is_a?(String) new_row[index + 1] = value end new_row end end |