一押框、數(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)獲取奧!