Class: Quandl::Data::Format
- Inherits:
-
Object
- Object
- Quandl::Data::Format
- Defined in:
- lib/quandl/data/format.rb
Class Method Summary collapse
- .csv_to_array(data) ⇒ Object
- .data_has_rows?(data) ⇒ Boolean
- .data_missing_rows?(data) ⇒ Boolean
- .date_format?(data) ⇒ Boolean
- .date_strings_to_date(data) ⇒ Object
- .date_strings_to_jd(data) ⇒ Object
- .dates_to_jd(data) ⇒ Object
- .guess_csv_delimiter(data) ⇒ Object
- .hash_to_array(data) ⇒ Object
-
.jd_strings_to_jd(data) ⇒ Object
DATES TO JULIAN #.
-
.jds_to_date(data) ⇒ Object
DATES TO DATE #.
- .parse(data) ⇒ Object
- .parse_date_string(row, index = nil) ⇒ Object protected
- .parse_jd(row, index = nil) ⇒ Object protected
- .parse_jd_string(row, index = nil) ⇒ Object protected
- .recognized_date?(value) ⇒ Boolean
- .to_date(data) ⇒ Object
- .to_jd(data) ⇒ Object
-
.values_to_float(data) ⇒ Object
VALUES TO FLOAT #.
Class Method Details
.csv_to_array(data) ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/quandl/data/format.rb', line 21 def csv_to_array(data) if data.is_a?(String) data = data.gsub('\n', "\n") data = CSV.parse( data, {col_sep: guess_csv_delimiter(data) } ) end data end |
.data_has_rows?(data) ⇒ Boolean
182 183 184 |
# File 'lib/quandl/data/format.rb', line 182 def data_has_rows?(data) data.is_a?(Array) && data[0].is_a?(Array) && data[0][0].present? end |
.data_missing_rows?(data) ⇒ Boolean
178 179 180 |
# File 'lib/quandl/data/format.rb', line 178 def data_missing_rows?(data) !data_has_rows?(data) end |
.date_format?(data) ⇒ Boolean
74 75 76 77 78 79 80 81 82 |
# File 'lib/quandl/data/format.rb', line 74 def date_format?(data) value = data[0][0] # julian date? return :date if value.is_a?(Date) return :jd if value.is_a?(Integer) return :date_string if value.is_a?(String) && value =~ /^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/ return :jd_string if value.kind_of?(String) && value.numeric? return :unknown end |
.date_strings_to_date(data) ⇒ Object
147 148 149 150 151 152 153 154 155 156 |
# File 'lib/quandl/data/format.rb', line 147 def date_strings_to_date(data) # skip when already formatted correctly return data if data_missing_rows?(data) || data[0][0].is_a?(Date) # otherwise cast string jds to int output = [] data.each_with_index do |row, index| output << parse_date_string(row, index) end output end |
.date_strings_to_jd(data) ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/quandl/data/format.rb', line 120 def date_strings_to_jd(data) # skip when already formatted correctly return data if data_missing_rows?(data) || data[0][0].is_a?(Date) # otherwise cast string jds to int output = [] data.each_with_index do |row, index| row = parse_date_string(row, index) row[0] = row[0].jd output << row end output end |
.dates_to_jd(data) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/quandl/data/format.rb', line 84 def dates_to_jd(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 row = row.dup # string to date date = row[0] date = Date.parse(row[0]) if row[0].is_a?(String) # date to julian row[0] = date.jd if date.respond_to?(:jd) # save result result[index] = row end # all done result end |
.guess_csv_delimiter(data) ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/quandl/data/format.rb', line 29 def guess_csv_delimiter(data) data = data.to_s line_end = data.to_s.index("\n") first_line = line_end.nil? ? data : data[0..line_end].to_s return "\t" unless first_line.index("\t").nil? "," end |
.hash_to_array(data) ⇒ Object
16 17 18 19 |
# File 'lib/quandl/data/format.rb', line 16 def hash_to_array(data) data = data.collect{|k,v| [k] + v } if data.kind_of?(Hash) data end |
.jd_strings_to_jd(data) ⇒ Object
DATES TO JULIAN #
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/quandl/data/format.rb', line 109 def jd_strings_to_jd(data) # skip when already formatted correctly return data if data_missing_rows?(data) || data[0][0].is_a?(Integer) # otherwise cast string jds to int output = [] data.each_with_index do |row, index| output << parse_jd_string(row, index) end output end |
.jds_to_date(data) ⇒ Object
DATES TO DATE #
138 139 140 141 142 143 144 145 |
# File 'lib/quandl/data/format.rb', line 138 def jds_to_date(data) return data if data_missing_rows?(data) || data[0][0].is_a?(Date) output = [] data.each_with_index do |row, index| output << parse_jd(row, index) end output end |
.parse(data) ⇒ Object
7 8 9 10 11 12 13 14 |
# File 'lib/quandl/data/format.rb', line 7 def parse(data) return [] if data.blank? data = hash_to_array(data) data = csv_to_array(data) data = values_to_float(data) data = to_date(data) data.dup end |
.parse_date_string(row, index = nil) ⇒ Object (protected)
211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/quandl/data/format.rb', line 211 def parse_date_string(row, index=nil) row = row.dup # extract date date = row[0] # split date into parts date_values = date.split('-').collect(&:to_i) # ensure valid raise unless date_values.count == 3 # add to row row[0] = Date.new( *date_values ) row rescue => e raise_date_string_error!(row, index, e) end |
.parse_jd(row, index = nil) ⇒ Object (protected)
189 190 191 192 193 194 195 196 197 198 |
# File 'lib/quandl/data/format.rb', line 189 def parse_jd(row, index=nil) # parse jd_string row = parse_jd_string(row, index) # jd to date row[0] = Date.jd( row[0] ) # onwards row rescue => e raise_jd_error!(row, index, e) end |
.parse_jd_string(row, index = nil) ⇒ Object (protected)
200 201 202 203 204 205 206 207 208 209 |
# File 'lib/quandl/data/format.rb', line 200 def parse_jd_string(row, index=nil) row = row.dup row[0] = row[0].to_i # dont allow dates that are before 0000 raise if row[0] <= 1721058 # onwards row rescue => e raise_jd_string_error!(row, index, e) end |
.recognized_date?(value) ⇒ Boolean
68 69 70 71 72 |
# File 'lib/quandl/data/format.rb', line 68 def recognized_date?( value ) return true if value.is_a?(Date) return true if value.is_a?(String) && value =~ /^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/ false end |
.to_date(data) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/quandl/data/format.rb', line 37 def to_date(data) return data if data_missing_rows?(data) # guess the current date format format = date_format?(data) # convert dates to Date case format when :date then return data when :date_string then return date_strings_to_date( data ) when :jd, :jd_string then return jds_to_date( data ) when :unknown then raise_date_parse_error!( data[0] ) end # return data data end |
.to_jd(data) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/quandl/data/format.rb', line 52 def to_jd(data) return data if data_missing_rows?(data) # guess the current date format format = date_format?(data) # convert dates to Date case format when :jd then return data when :jd_string then return jd_strings_to_jd( data ) when :date then return dates_to_jd( data ) when :date_string then return date_strings_to_jd( data ) when :unknown then raise_date_parse_error!( data[0] ) end # return data data end |
.values_to_float(data) ⇒ Object
VALUES TO FLOAT #
163 164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/quandl/data/format.rb', line 163 def values_to_float(data) # skip unless value is a string return data if data_missing_rows?(data) || data[0][1].is_a?(Float) # 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 |