Turi Create  4.0
item_frequency.hpp
1 /* Copyright © 2017 Apple Inc. All rights reserved.
2  *
3  * Use of this source code is governed by a BSD-3-clause license that can
4  * be found in the LICENSE.txt file or at https://opensource.org/licenses/BSD-3-Clause
5  */
6 #ifndef __TC_ITEM_FREQUENCY
7 #define __TC_ITEM_FREQUENCY
8 
9 #include <core/data/sframe/gl_sarray.hpp>
10 #include <core/storage/sframe_data/groupby_aggregate_operators.hpp>
11 #include <visualization/server/item_frequency.hpp>
12 #include <visualization/server/plot.hpp>
13 #include <visualization/server/vega_spec.hpp>
14 
15 #include "transformation.hpp"
16 
17 namespace turi {
18 namespace visualization {
19 
20 class item_frequency_result: public sframe_transformation_output,
22  public:
23  virtual void add_element_simple(const flexible_type& flex) override;
24  virtual void combine(const group_aggregate_value& other) override;
25  virtual std::string vega_column_data(bool sframe) const override;
26  virtual std::string vega_summary_data() const override;
27 
28  // also store and compute basic summary stats
29  groupby_operators::count m_count; // num rows
30  groupby_operators::count_distinct m_count_distinct; // num unique
31  groupby_operators::non_null_count m_non_null_count; // (inverse) num missing
32 };
33 
34 typedef transformation<gl_sarray, item_frequency_result> item_frequency_parent;
35 
36 class item_frequency : public item_frequency_parent {
37  public:
38  virtual std::vector<item_frequency_result> split_input(size_t num_threads) override;
39  virtual void merge_results(std::vector<item_frequency_result>& transformers) override;
40 };
41 
42 std::shared_ptr<Plot> plot_item_frequency(
43  const gl_sarray& sa, const flexible_type& xlabel, const flexible_type& ylabel,
44  const flexible_type& title);
45 
46 }} // turi::visualization
47 
48 #endif // __TC_ITEM_FREQUENCY