Class: WorldbankAsDataframe::Commodities
- Inherits:
-
Object
- Object
- WorldbankAsDataframe::Commodities
- Defined in:
- lib/worldbank_as_dataframe/commodities.rb
Instance Attribute Summary collapse
-
#tag ⇒ Object
readonly
Returns the value of attribute tag.
Instance Method Summary collapse
- #fetch(start: nil, fin: nil) ⇒ Object
-
#initialize(series = nil, options = {}) ⇒ Commodities
constructor
A new instance of Commodities.
Constructor Details
#initialize(series = nil, options = {}) ⇒ Commodities
Returns a new instance of Commodities.
9 10 11 |
# File 'lib/worldbank_as_dataframe/commodities.rb', line 9 def initialize(series = nil, ={}) @tag = series end |
Instance Attribute Details
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
7 8 9 |
# File 'lib/worldbank_as_dataframe/commodities.rb', line 7 def tag @tag end |
Instance Method Details
#fetch(start: nil, fin: nil) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/worldbank_as_dataframe/commodities.rb', line 13 def fetch(start: nil, fin: nil) doc = SimpleXlsxReader.parse(URI.open('https://thedocs.worldbank.org/en/doc/5d903e848db1d1b83e0ec8f744e55570-0350012021/related/CMO-Historical-Data-Monthly.xlsx')) ary = doc.sheets.detect{|sht| sht.name == 'Monthly Prices'}.rows.to_a[4..-1] ary[0][0] = 'Timestamps' ary.map!{|a| a.reverse.drop_while(&:nil?).reverse } ary[1].length.times {|i| ary[1][i] = [ary[0][i], ary[1][i]].compact.join(' ') } ary = ary[1..-1] dat = ary[1..-1] cols = ary[0] dat.each{|a| dt = a[0].split('M'); a[0] = Date.new(dt[0].to_i, dt[1].to_i, 1).to_date } dat.each{|row| row.map!{|c| c.in?(["…","..."]) ? nil : c }} df = Polars::DataFrame.new(dat.transpose, columns: cols) df = df.filter(Polars.col('Timestamps') >= start.to_date) unless start.nil? df = df.filter(Polars.col('Timestamps') <= fin.to_date) unless fin.nil? unless @tag.nil? cols = cols.map{|c| (/#{tag.downcase}/ =~ c.downcase).nil? ? nil : c }.compact df = df.select(['Timestamps', cols].flatten) if (cols.length>0) end df end |