Class: Charty::VectorAdapters::DaruVectorAdapter

Inherits:
BaseAdapter
  • Object
show all
Defined in:
lib/charty/vector_adapters/daru_adapter.rb

Instance Attribute Summary

Attributes inherited from BaseAdapter

#data

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseAdapter

#==, adapter_name, #inverse_log_scale, #log_scale, #mean

Constructor Details

#initialize(data) ⇒ DaruVectorAdapter

Returns a new instance of DaruVectorAdapter.



10
11
12
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 10

def initialize(data)
  @data = check_data(data)
end

Class Method Details

.supported?(data) ⇒ Boolean

Returns:

  • (Boolean)


6
7
8
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 6

def self.supported?(data)
  defined?(Daru::Vector) && data.is_a?(Daru::Vector)
end

Instance Method Details

#[](key) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 46

def [](key)
  case key
  when Charty::Vector
    where(key)
  else
    data[key]
  end
end

#boolean?Boolean

Returns:

  • (Boolean)


84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 84

def boolean?
  case
  when numeric?, categorical?
    false
  else
    case first_nonnil
    when true, false
      true
    else
      false
    end
  end
end

#categoriesObject



101
102
103
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 101

def categories
  data.categories.compact if categorical?
end

#compare_data_equality(other) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 33

def compare_data_equality(other)
  case other
  when DaruVectorAdapter
    data == other.data
  when ArrayAdapter
    data.to_a == other.data
  when NArrayAdapter, NMatrixAdapter, NumpyAdapter, PandasSeriesAdapter
    other.compare_data_equality(self)
  else
    data == other.data.to_a
  end
end

#drop_naObject



132
133
134
135
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 132

def drop_na
  values = data.reject {|x| Util.missing?(x) }
  Charty::Vector.new(Daru::Vector.new(values))
end

#eq(val) ⇒ Object



137
138
139
140
141
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 137

def eq(val)
  Charty::Vector.new(data.eq(val).to_a,
                     index: data.index.to_a,
                     name: name)
end

#first_nonnilObject



80
81
82
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 80

def first_nonnil
  data.drop_while(&:nil?).first
end

#group_by(grouper) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 109

def group_by(grouper)
  case grouper
  when Daru::Vector
    if grouper.category?
      # TODO: A categorical Daru::Vector cannot perform group_by well
      grouper = Daru::Vector.new(grouper.to_a)
    end
    groups = grouper.group_by.groups
    groups.map { |g, indices|
      [g.first, Charty::Vector.new(data[*indices])]
    }.to_h
  when Charty::Vector
    case grouper.data
    when Daru::Vector
      return group_by(grouper.data)
    else
      return group_by(Daru::Vector.new(grouper.to_a))
    end
  else
    return group_by(Charty::Vector.new(grouper))
  end
end

#indexObject



16
17
18
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 16

def index
  DaruIndex.new(data.index)
end

#index=(new_index) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 20

def index=(new_index)
  case new_index
  when DaruIndex
    data.index = new_index.values
  when Index
    data.index = new_index.to_a
  else
    data.index = new_index
  end
end

#notnullObject



143
144
145
146
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 143

def notnull
  notnull_data = data.map {|x| ! Util.missing?(x) }
  Charty::Vector.new(notnull_data, index: data.index.to_a, name: name)
end

#percentile(q) ⇒ Object



158
159
160
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 158

def percentile(q)
  data.linear_percentile(q)
end

#stdev(population: false) ⇒ Object



150
151
152
153
154
155
156
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 150

def stdev(population: false)
  if population
    data.standard_deviation_sample
  else
    data.standard_deviation_population
  end
end

#unique_valuesObject



105
106
107
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 105

def unique_values
  data.uniq.to_a
end

#values_at(*indices) ⇒ Object



57
58
59
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 57

def values_at(*indices)
  indices.map {|i| data.at(i) }
end

#where(mask) ⇒ Object



61
62
63
64
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 61

def where(mask)
  masked_data, masked_index = where_in_array(mask)
  Charty::Vector.new(Daru::Vector.new(masked_data, index: masked_index), name: name)
end

#where_in_array(mask) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/charty/vector_adapters/daru_adapter.rb', line 66

def where_in_array(mask)
  mask = check_mask_vector(mask)
  masked_data = []
  masked_index = []
  mask.each_with_index do |f, i|
    case f
    when true, 1
      masked_data << data[i]
      masked_index << data.index.key(i)
    end
  end
  return masked_data, masked_index
end