BAT綜合總結(jié):數(shù)據(jù)分析 | 數(shù)據(jù)可視化圖表,BI工具構(gòu)建邏輯

一、數(shù)據(jù)可視化

1、基礎(chǔ)概念

數(shù)據(jù)可視化,是關(guān)于數(shù)據(jù)視覺表現(xiàn)形式的科學(xué)技術(shù)研究。其中,這種數(shù)據(jù)的視覺表現(xiàn)形式被定義為,一種以某種概要形式抽取出來的信息,包括相應(yīng)信息單位的各種屬性和變量。

如果說的實(shí)際貼切的話:系統(tǒng)開發(fā)中常見的數(shù)據(jù)報(bào)表統(tǒng)計(jì),將數(shù)據(jù)用圖表或表格的形式呈現(xiàn)出來,幫助運(yùn)營或者決策人員了解這些數(shù)據(jù)的規(guī)律或者價(jià)值,就是簡單的可視化應(yīng)用。

從開發(fā)角度來看,把系統(tǒng)中的核心數(shù)據(jù),用一定的手段進(jìn)行統(tǒng)計(jì),在借助一些精美的圖表樣式,展示出來,或者把一系列圖表組裝成一個(gè)數(shù)據(jù)大屏,格調(diào)十足。

但是從運(yùn)營人員的角度看,更多的是借助可視化數(shù)據(jù)分析業(yè)務(wù)場景,得到有價(jià)值的參考數(shù)據(jù),為后續(xù)的決策或者開展活動(dòng)提供指導(dǎo)。所以隨著業(yè)務(wù)線的不斷發(fā)展,對數(shù)據(jù)分析的要求越來越高,也就誕生現(xiàn)在比較常見的BI分析工具和BI分析師。

2、數(shù)據(jù)可視化價(jià)值

準(zhǔn)確高效直觀的傳遞傳遞數(shù)據(jù)中的規(guī)律和信息;

實(shí)時(shí)監(jiān)控系統(tǒng)各項(xiàng)數(shù)據(jù)指標(biāo),實(shí)現(xiàn)數(shù)據(jù)的自解釋;

基于可視化洞察數(shù)據(jù)規(guī)律,指定精準(zhǔn)的運(yùn)營策略;

3、基礎(chǔ)構(gòu)建原則

簡單的步驟如下:基于業(yè)務(wù)需求,完成可視化數(shù)據(jù)處理(收集,規(guī)則,定時(shí)任務(wù)等)。借助常用的圖表進(jìn)行組合展示,但是也有一些注意事項(xiàng)如下:

可視化的數(shù)據(jù)要關(guān)聯(lián)核心的有業(yè)務(wù)價(jià)值的數(shù)據(jù);

圖表的展現(xiàn)注意簡單,明了,圖表的本質(zhì)就是讓數(shù)據(jù)更直觀;

不要為了追求系統(tǒng)花哨,可以大批量添加圖表;

二、常用圖表設(shè)計(jì)

1、常見基礎(chǔ)圖表

柱狀圖

特點(diǎn):一般展現(xiàn)分組數(shù)據(jù),直觀展示各組數(shù)據(jù)差異,例如常見以每周,每月,或者不同客戶端劃分為軸的數(shù)據(jù)。

折線圖

特點(diǎn):重點(diǎn)展現(xiàn)數(shù)據(jù)的變化趨勢,常見以時(shí)間為軸,展示時(shí)間下的數(shù)據(jù)趨勢。

餅狀圖

特點(diǎn):不注重?cái)?shù)據(jù)明細(xì),強(qiáng)調(diào)數(shù)據(jù)中各項(xiàng)占總體的百分比,或者分布情況,注重模塊模塊之間的對比。

漏斗圖

特點(diǎn):強(qiáng)調(diào)數(shù)據(jù)之間的轉(zhuǎn)化關(guān)系和遞進(jìn)規(guī)律,經(jīng)典常見就是用戶瀏覽量,點(diǎn)擊量,到訂單支付數(shù)量。

組合圖

特點(diǎn):多種基礎(chǔ)圖表組合,某些特殊業(yè)務(wù)數(shù)據(jù),需要結(jié)合兩種圖或者更多種圖表,強(qiáng)調(diào)裝載該業(yè)務(wù)報(bào)表的關(guān)鍵組合信息。

2、數(shù)據(jù)大屏

顧名思義,放在大屏幕的報(bào)表,一般有多種豐富的業(yè)務(wù)數(shù)據(jù),自然需要多種報(bào)表展現(xiàn)形式,比較有立體感和視覺上的沖擊力。

絮叨一句:數(shù)據(jù)大屏在更多時(shí)候所追求的是讓人印象深刻,這才是最關(guān)鍵的,懂的都懂。

三、常用統(tǒng)計(jì)方式

1、SQL分析語句

在報(bào)表類業(yè)務(wù)中,經(jīng)常使用SQL分析語句,常用的幾個(gè)方法:

count:數(shù)據(jù)求和,求總數(shù),例如多少用戶;

sum:求和函數(shù),例如總銷量,總成本等;

group-by:分組統(tǒng)計(jì),分組結(jié)果就是軸標(biāo)識(shí);

average:平均值計(jì)算,例如平均每天銷量;

業(yè)務(wù)類的報(bào)表雖然復(fù)雜,但是報(bào)表相關(guān)的數(shù)據(jù)接口相對而言簡單,基于一些基礎(chǔ)的統(tǒng)計(jì)SQL,生成報(bào)表數(shù)據(jù)。

2、基礎(chǔ)案例

產(chǎn)品和緯度表

CREATETABLE`vc_product_info`(

`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主鍵ID',

`product_sort`varchar(20)DEFAULT''COMMENT'產(chǎn)品分類',

`product_name`varchar(50)DEFAULT''COMMENT'產(chǎn)品名稱',

`inventory`int(11)DEFAULT'0'COMMENT'庫存剩余',

`price`decimal(10,2)DEFAULT'0.00'COMMENT'單價(jià)',

`total_sales`int(11)DEFAULT'0'COMMENT'銷售總量',

`sales_amount`decimal(10,2)DEFAULT'0.00'COMMENT'銷售總額',

`create_time`datetimeDEFAULTNULLCOMMENT'創(chuàng)建時(shí)間',

PRIMARYKEY(`id`)

)ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='產(chǎn)品信息表';

CREATETABLE`vc_product_detail`(

`id`INT(11)NOTNULLAUTO_INCREMENTCOMMENT'主鍵ID',

`product_id`INT(11)NOTNULLCOMMENT'產(chǎn)品ID',

`place_origin`VARCHAR(50)DEFAULT''COMMENT'產(chǎn)品產(chǎn)地',

`weight`DECIMAL(10,2)DEFAULT'0.00'COMMENT'重量',

`color`VARCHAR(50)DEFAULT''COMMENT'顏色',

`high_praise`INT(11)DEFAULT'0'COMMENT'好評(píng)數(shù)量',

`low_praise`INT(11)DEFAULT'0'COMMENT'差評(píng)數(shù)量',

`create_time`datetimeDEFAULTNULLCOMMENT'創(chuàng)建時(shí)間',

PRIMARYKEY(`id`)

)ENGINE=INNODBDEFAULTCHARSET= utf8COMMENT='產(chǎn)品維度表';

基礎(chǔ)查詢語句

<!-- 商品種類 -->

SELECT COUNT(product_name) FROM vc_product_info

<!-- 銷售總額度 -->

SELECT SUM(sales_amount) FROM vc_product_info

<!-- 分組求和 -->

SELECT product_sort,SUM(sales_amount) FROM vc_product_info GROUP BY product_sort

<!-- 平均單價(jià) -->

SELECT AVG(price) FROM vc_product_info

四、自定義工具

1、數(shù)據(jù)集

數(shù)據(jù)集概念

DataSet是一個(gè)數(shù)據(jù)的集合,通常以列表形式出現(xiàn)。每一列代表一個(gè)特定變量。每一行都對應(yīng)于某一成員的數(shù)據(jù)集的問題。在統(tǒng)計(jì)分析的業(yè)務(wù)中,通常稱為大寬表,方便業(yè)務(wù)分析。

數(shù)據(jù)集生成

視圖方式

基于視圖的方式,生成一個(gè)單表的數(shù)據(jù)集,方便簡化操作。該方式不提倡,視圖在大部分公司里是禁止使用的,這里只是單純演示。

基于上述產(chǎn)品信息表和維度表,通過視圖手段生成數(shù)據(jù)集,單純?yōu)榱撕喕瘶I(yè)務(wù)分析的操作難度,因?yàn)槎啾砺?lián)合簡化成感覺上的單表。

CREATEORREPLACE

VIEWdata_set_viewASSELECT

t1.*, t2.place_origin,

t2.weight,

t2.color,

t2.high_praise,

t2.low_praise

FROM vc_product_info t1

LEFTJOINvc_product_detail t2ONt1.id = t2.product_id

任務(wù)方式

通過定時(shí)任務(wù),獲取要分析的數(shù)據(jù)結(jié)構(gòu),不斷注入到分析表中,這是業(yè)務(wù)開發(fā)中最常見的報(bào)表數(shù)據(jù)集生成方式,有的甚至通過定時(shí)任務(wù)直接統(tǒng)計(jì)出報(bào)表需要的數(shù)據(jù),不適應(yīng)于大數(shù)據(jù)場景。

離線或?qū)崟r(shí)計(jì)算

通過大數(shù)據(jù)分析手段,離線計(jì)算或者實(shí)時(shí)計(jì)算,獲取業(yè)務(wù)報(bào)表數(shù)據(jù),注入OLAP實(shí)時(shí)分析計(jì)算庫,使用大數(shù)據(jù)分析場景。

2、定制化BI工具

BI工具可以快速對業(yè)務(wù)數(shù)據(jù)進(jìn)行有效的整合,快速準(zhǔn)確的提供報(bào)表并提出決策依據(jù),幫助企業(yè)做出明智的業(yè)務(wù)經(jīng)營決策。商業(yè)智能的概念最早在1996年提出。當(dāng)時(shí)將商業(yè)智能定義為一類由數(shù)據(jù)倉庫(或數(shù)據(jù)集市)、查詢報(bào)表、數(shù)據(jù)分析、數(shù)據(jù)挖掘、數(shù)據(jù)備份和恢復(fù)等部分組成的、以幫助企業(yè)決策為目的技術(shù)及其應(yīng)用。

基本搭建思路:

管理數(shù)據(jù)源,建立數(shù)據(jù)表之間關(guān)系,維護(hù)特定數(shù)據(jù)集;

創(chuàng)建可拖拉拽的報(bào)告面板,用來承載單個(gè)圖表組合;

封裝不同的圖表的處理邏輯,規(guī)則展示,關(guān)聯(lián)數(shù)據(jù)集字段;

封裝圖表樣式,例如大小、顏色、背景、交互等可配置;

圖表關(guān)聯(lián)分析數(shù)據(jù)集,報(bào)告面板組合多個(gè)圖表生成報(bào)告;

實(shí)際的開發(fā)過程是非常復(fù)雜的,管理各個(gè)業(yè)務(wù)線的數(shù)據(jù)源,聯(lián)合分析,適配各種圖表規(guī)范和樣式,都是一個(gè)十分漫長的過程。

3、基礎(chǔ)案例

接口入?yún)?/b>

承接上述業(yè)務(wù)場景,這里參數(shù)都需要?jiǎng)討B(tài)傳入,例如操作的:數(shù)據(jù)集、圖表、參數(shù)歸屬軸、或者業(yè)務(wù)產(chǎn)品參數(shù)等。

@RestController

publicclassDefineController{

@Resource

privateDataSetService dataSetService ;

/**

? ? * 自定義可視化報(bào)告入?yún)?/p>

? ? */

@GetMapping("/getDefChart")

publicMap> getDefChart (){

List chartParamList =newArrayList<>() ;

chartParamList.add(newChartParam("X",1,"data_set_view","product_sort")) ;

chartParamList.add(newChartParam("X",1,"data_set_view","product_name")) ;

chartParamList.add(newChartParam("Y",2,"data_set_view","high_praise")) ;

chartParamList.add(newChartParam("Y",2,"data_set_view","low_praise")) ;

chartParamList.add(newChartParam("Z",3,"data_set_view","inventory",1)) ;

chartParamList.add(newChartParam("Z",3,"data_set_view","total_sales",1)) ;

returndataSetService.analyData(chartParamList);

}

}

參數(shù)解析

根據(jù)各種動(dòng)態(tài)參數(shù),解析查詢條件,獲取查詢結(jié)果。

@Service

publicclassDataSetServiceImplimplementsDataSetService{

@Resource

privateDataSetMapperdataSetMapper;

// 分析任務(wù)劃分

? ? @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 風(fēng)格數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? taskCount(dataMap.get(dataType));

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? case 2: // Sum 風(fēng)格數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? taskSum(dataMap.get(dataType));

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? case 3: // Percent 風(fēng)格數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? taskPercent(dataMap.get(dataType));

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? default:

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return dataMap ;

? ? }

? ? // Count 數(shù)據(jù)執(zhí)行

? ? private void taskCount (List<ChartParam> chartParamList){

? ? ? ? for (ChartParam chartParam:chartParamList){

? ? ? ? ? ? chartParam.setResultNum(dataSetMapper.taskCount(chartParam.getColumnName(),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? chartParam.getTableName()));

? ? ? ? }

? ? }

? ? // Sum 數(shù)據(jù)執(zhí)行

? ? private void taskSum (List<ChartParam> chartParamList){

? ? ? ? for (ChartParam chartParam:chartParamList){

? ? ? ? ? ? chartParam.setResultNum(dataSetMapper.taskSum(chartParam.getColumnName(),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? chartParam.getTableName()));

? ? ? ? }

? ? }

? ? // Percent 數(shù)據(jù)執(zhí)行

? ? private void taskPercent (List<ChartParam> chartParamList){

? ? ? ? for (ChartParam chartParam:chartParamList){

? ? ? ? ? ? chartParam.setResultNum(dataSetMapper.taskPercent(chartParam.getColumnName(),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? chartParam.getTableName(),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? chartParam.getProductId()));

? ? ? ? }

? ? }

}

總結(jié)一句:數(shù)據(jù)可視化工具建設(shè)是個(gè)漫長過程,不僅僅可以分析自己公司的業(yè)務(wù),也可以作為開放BI工具產(chǎn)生價(jià)值。

文章結(jié)束了,分享給大家一些Java架構(gòu)師的學(xué)習(xí)教程(僅展示部分圖片)。需要的小伙伴記得添加W?:bjmsb07 免費(fèi)獲取奧!

感謝大家的閱讀,看到最后了,希望大家給小編個(gè)關(guān)注,多多轉(zhuǎn)發(fā)收藏哈。咱們下一篇不見不散!需要資料的小伙伴記得添加W?:bjmsb07 免費(fèi)獲取奧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容