天天看點

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址

一、資料可視化

1、基礎概念

資料可視化,是關于資料視覺表現形式的科學技術研究。其中,這種資料的視覺表現形式被定義為,一種以某種概要形式抽取出來的資訊,包括相應資訊機關的各種屬性和變量。

如果說的實際貼切的話:系統開發中常見的資料報表統計,将資料用圖表或表格的形式呈現出來,幫助營運或者決策人員了解這些資料的規律或者價值,就是簡單的可視化應用。

從開發角度來看,把系統中的核心資料,用一定的手段進行統計,在借助一些精美的圖表樣式,展示出來,或者把一系列圖表組裝成一個資料大屏,格調十足。

但是從營運人員的角度看,更多的是借助可視化資料分析業務場景,得到有價值的參考資料,為後續的決策或者開展活動提供指導。是以随着業務線的不斷發展,對資料分析的要求越來越高,也就誕生現在比較常見的BI分析工具和BI分析師。

2、資料可視化價值

  • 準确高效直覺的傳遞傳遞資料中的規律和資訊;
  • 實時監控系統各項資料名額,實作資料的自解釋;
  • 基于可視化洞察資料規律,指定精準的營運政策;

3、基礎建構原則

簡單的步驟如下:基于業務需求,完成可視化資料處理(收集,規則,定時任務等)。借助常用的圖表進行組合展示,但是也有一些注意事項如下:

  • 可視化的資料要關聯核心的有業務價值的資料;
  • 圖表的展現注意簡單,明了,圖表的本質就是讓資料更直覺;
  • 不要為了追求系統花哨,可以大批量添加圖表;

二、常用圖表設計

1、常見基礎圖表

柱狀圖

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址

特點:一般展現分組資料,直覺展示各組資料差異,例如常見以每周,每月,或者不同用戶端劃分為軸的資料。

折線圖

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址

特點:重點展現資料的變化趨勢,常見以時間為軸,展示時間下的資料趨勢。

餅狀圖

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址

特點:不注重資料明細,強調資料中各項占總體的百分比,或者分布情況,注重子產品子產品之間的對比。

漏鬥圖

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址

特點:強調資料之間的轉化關系和遞進規律,經典常見就是使用者浏覽量,點選量,到訂單支付數量。

組合圖

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址

特點:多種基礎圖表組合,某些特殊業務資料,需要結合兩種圖或者更多種圖表,強調裝載該業務報表的關鍵組合資訊。

2、資料大屏

顧名思義,放在大螢幕的報表,一般有多種豐富的業務資料,自然需要多種報表展現形式,比較有立體感和視覺上的沖擊力。

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址

絮叨一句:資料大屏在更多時候所追求的是讓人印象深刻,這才是最關鍵的,懂的都懂。

三、常用統計方式

1、SQL分析語句

在報表類業務中,經常使用SQL分析語句,常用的幾個方法:

  • count:資料求和,求總數,例如多少使用者;
  • sum:求和函數,例如總銷量,總成本等;
  • group-by:分組統計,分組結果就是軸辨別;
  • average:平均值計算,例如平均每天銷量;

業務類的報表雖然複雜,但是報表相關的資料接口相對而言簡單,基于一些基礎的統計SQL,生成報表資料。

2、基礎案例

産品和緯度表

CREATE TABLE `vc_product_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `product_sort` varchar(20) DEFAULT '' COMMENT '産品分類',
  `product_name` varchar(50) DEFAULT '' COMMENT '産品名稱',
  `inventory` int(11) DEFAULT '0' COMMENT '庫存剩餘',
  `price` decimal(10,2) DEFAULT '0.00' COMMENT '單價',
  `total_sales` int(11) DEFAULT '0' COMMENT '銷售總量',
  `sales_amount` decimal(10,2) DEFAULT '0.00' COMMENT '銷售總額',
  `create_time` datetime DEFAULT NULL COMMENT '建立時間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='産品資訊表';

CREATE TABLE `vc_product_detail` (
    `id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
    `product_id` INT (11) NOT NULL COMMENT '産品ID',
    `place_origin` VARCHAR (50) DEFAULT '' COMMENT '産品産地',
    `weight` DECIMAL (10, 2) DEFAULT '0.00' COMMENT '重量',
    `color` VARCHAR (50) DEFAULT '' COMMENT '顔色',
    `high_praise` INT (11) DEFAULT '0' COMMENT '好評數量',
    `low_praise` INT (11) DEFAULT '0' COMMENT '差評數量',
    `create_time` datetime DEFAULT NULL COMMENT '建立時間',
    PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '産品次元表';           

基礎查詢語句

<mapper namespace="com.visual.chart.mapper.ProductInfoMapper">

    <!-- 商品種類 -->
    <select id="countNum" resultType="java.lang.Integer">
        SELECT COUNT(product_name) FROM vc_product_info
    </select>

    <!-- 銷售總額度 -->
    <select id="sumAll" resultType="java.lang.Double">
        SELECT SUM(sales_amount) FROM vc_product_info
    </select>

    <!-- 分組求和 -->
    <select id="groupSum" resultType="java.util.Map">
        SELECT product_sort,SUM(sales_amount) FROM vc_product_info GROUP BY product_sort
    </select>

    <!-- 平均單價 -->
    <select id="average" resultType="java.lang.Double">
        SELECT AVG(price) FROM vc_product_info
    </select>
</mapper>           

四、自定義工具

1、資料集

資料集概念

DataSet是一個資料的集合,通常以清單形式出現。每一列代表一個特定變量。每一行都對應于某一成員的資料集的問題。在統計分析的業務中,通常稱為大寬表,友善業務分析。

資料集生成

視圖方式

基于視圖的方式,生成一個單表的資料集,友善簡化操作。該方式不提倡,視圖在大部分公司裡是禁止使用的,這裡隻是單純示範。

基于上述産品資訊表和次元表,通過視圖手段生成資料集,單純為了簡化業務分析的操作難度,因為多表聯合簡化成感覺上的單表。

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址
CREATE OR REPLACE 
VIEW data_set_view AS SELECT
    t1.*, t2.place_origin,
    t2.weight,
    t2.color,
    t2.high_praise,
    t2.low_praise
FROM vc_product_info t1
LEFT JOIN vc_product_detail t2 ON t1.id = t2.product_id           

任務方式

通過定時任務,擷取要分析的資料結構,不斷注入到分析表中,這是業務開發中最常見的報表資料集生成方式,有的甚至通過定時任務直接統計出報表需要的資料,不适應于大資料場景。

離線或實時計算

通過大資料分析手段,離線計算或者實時計算,擷取業務報表資料,注入OLAP實時分析計算庫,使用大資料分析場景。

2、定制化BI工具

資料分析 | 資料可視化圖表,BI工具建構邏輯一、資料可視化二、常用圖表設計三、常用統計方式四、自定義工具五、源代碼位址

BI工具可以快速對業務資料進行有效的整合,快速準确的提供報表并提出決策依據,幫助企業做出明智的業務經營決策。商業智能的概念最早在1996年提出。當時将商業智能定義為一類由資料倉庫(或資料集市)、查詢報表、資料分析、資料挖掘、資料備份和恢複等部分組成的、以幫助企業決策為目的技術及其應用。

基本搭建思路:

  • 管理資料源,建立資料表之間關系,維護特定資料集;
  • 建立可拖拉拽的報告面闆,用來承載單個圖表組合;
  • 封裝不同的圖表的處理邏輯,規則展示,關聯資料集字段;
  • 封裝圖表樣式,例如大小、顔色、背景、互動等可配置;
  • 圖表關聯分析資料集,報告面闆組合多個圖表生成報告;

實際的開發過程是非常複雜的,管理各個業務線的資料源,聯合分析,适配各種圖表規範和樣式,都是一個十分漫長的過程。

3、基礎案例

接口入參

承接上述業務場景,這裡參數都需要動态傳入,例如操作的:資料集、圖表、參數歸屬軸、或者業務産品參數等。

@RestController
public class DefineController {

    @Resource
    private DataSetService dataSetService ;
    /**
     * 自定義可視化報告入參
     */
    @GetMapping("/getDefChart")
    public Map<Integer, List<ChartParam>> getDefChart (){
        List<ChartParam> chartParamList = new ArrayList<>() ;
        chartParamList.add(new ChartParam("X",1,"data_set_view","product_sort")) ;
        chartParamList.add(new ChartParam("X",1,"data_set_view","product_name")) ;
        chartParamList.add(new ChartParam("Y",2,"data_set_view","high_praise")) ;
        chartParamList.add(new ChartParam("Y",2,"data_set_view","low_praise")) ;
        chartParamList.add(new ChartParam("Z",3,"data_set_view","inventory",1)) ;
        chartParamList.add(new ChartParam("Z",3,"data_set_view","total_sales",1)) ;
        return dataSetService.analyData(chartParamList);
    }
}           

參數解析

根據各種動态參數,解析查詢條件,擷取查詢結果。

@Service
public class DataSetServiceImpl implements DataSetService {

    @Resource
    private DataSetMapper dataSetMapper ;
    // 分析任務劃分
    @Override
    public Map<Integer, List<ChartParam>> analyData(List<ChartParam> chartParamList) {
        Map<Integer, List<ChartParam>> dataMap = chartParamList.stream()
                                                 .collect(Collectors
                                                 .groupingBy(ChartParam::getDataType));
        for (Integer dataType:dataMap.keySet()){
            switch (dataType){
                case 1: // Count 風格資料
                    taskCount(dataMap.get(dataType));
                    break;
                case 2: // Sum 風格資料
                    taskSum(dataMap.get(dataType));
                    break;
                case 3: // Percent 風格資料
                    taskPercent(dataMap.get(dataType));
                    break;
                default:
                    break;
            }
        }
        return dataMap ;
    }
    // Count 資料執行
    private void taskCount (List<ChartParam> chartParamList){
        for (ChartParam chartParam:chartParamList){
            chartParam.setResultNum(dataSetMapper.taskCount(chartParam.getColumnName(),
                                                            chartParam.getTableName()));
        }
    }
    // Sum 資料執行
    private void taskSum (List<ChartParam> chartParamList){
        for (ChartParam chartParam:chartParamList){
            chartParam.setResultNum(dataSetMapper.taskSum(chartParam.getColumnName(),
                                                          chartParam.getTableName()));
        }
    }
    // Percent 資料執行
    private void taskPercent (List<ChartParam> chartParamList){
        for (ChartParam chartParam:chartParamList){
            chartParam.setResultNum(dataSetMapper.taskPercent(chartParam.getColumnName(),
                                                              chartParam.getTableName(),
                                                              chartParam.getProductId()));
        }
    }
}           

總結一句:資料可視化工具建設是個漫長過程,不僅僅可以分析自己公司的業務,也可以作為開放BI工具産生價值。

五、源代碼位址

GitHub·位址
https://github.com/cicadasmile/data-manage-parent
GitEE·位址
https://gitee.com/cicadasmile/data-manage-parent