目录

整体概览

一般来说,一个BI项目大体上个分为6个阶段:

  • RS传递
  • TS传递
  • 开发
  • SIT
  • UAT
  • 上线
    在这里插入图片描述

先简单介绍一下我之前的开发环境:

  • 用到的后台开发工具包括:oracle,plsql,datastage,controlM。
  • 涉及到的前台开发工具包括:Tableau,JS。

然后会用一个模拟的实例去简单的这六个阶段是如何进行的。

RS传递

RS传递的根本目的:是需求分析师根据业务的需求,把这次要实现什么样的内容进行传递。

模拟例子:
  业务想要对股票进行分析,实现的效果如草图。

在这里插入图片描述
左边是所有当天各个股票的涨幅,开盘价,收盘价,最高价等信息。
点击后可以在右边查看当前股票的K线图,默认以60分钟为一根K线。

当然,这个草图是自己用画图工具画的,实际中,会有专门设计高保真页面的人员。

如何是实现这个东西,就是需求分析师和架构设计之间要沟通的事情,如何去实现,展示效果细节敲定种种事情确定后。这一阶段就会输出一个文档,RS文档。

TS传递

  到了TS阶段,那就要去确定数据从哪里来,数据如何流到展现层,数据应该如何展示。

还是模拟项目:
  草图上面,是所在项目组的数据库架构,在遵守数据库架构的基础上,下面即我们当前模拟项目的数据流图,数据源从API接口里获取,然后用DS同步到EDW层保存明细数据,后DS同步到DM展示层,做相关处理后,提供相关数据到前台进行展示。

一般这种数据流图,都是用Visual画图,方便高效简洁。

  因为工具有限,数据源的获取就通过python调用市面上普遍的一些股票数据的接口。然后在项目中,会通过DS,Kettle或者其他的一些ETL工具进行抽数。
在这里插入图片描述
除了数据流图,一般TS阶段还要输出mapping文档,用来管理表结构,字段之间的映射关系等等。
因为手头上没有比较好的模板,就不贴图了。直接用oracle的表结构看把。

在这里插入图片描述
TS阶段,暂定了数据源,数据流,数据同步方案,以及表结构。那么具体的实现就是由开发人员进行开发的。

开发

到了开发阶段,基本上就是实际方案落地了。

  • 第一步,数据源获取。
    通过python调用接口。
    参考:baostock证券宝
import baostock as bs
import pandas as pd

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag

"""
参数含义: 
code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
fields:指示简称,支持多指标输入,以半角逗号分隔,填写内容作为返回类型的列。详细指标列表见历史行情指标参数章节,日线与分钟线参数不同。此参数不可为空;
start:开始日期(包含),格式“YYYY-MM-DD”,为空时取2015-01-01;
end:结束日期(包含),格式“YYYY-MM-DD”,为空时取最近一个交易日;
frequency:数据类型,默认为d,日k线;d=日k线、w=周、m=月、5=5分钟、15=15分钟、30=30分钟、60=60分钟k线数据,不区分大小写;指数没有分钟线数据;周线每周最后一个交易日才可以获取,月线每月最后一个交易日才可以获取。
adjustflag:复权类型,默认不复权:3;1:后复权;2:前复权。已支持分钟线、日线、周线、月线前后复权。 BaoStock提供的是涨跌幅复权算法复权因子,具体介绍见:复权因子简介或者BaoStock复权因子简介。
"""
rs = bs.query_history_k_data_plus("sh.601398",
     #"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
    "date,time,code,open,high,low,close,volume,amount,adjustflag",
    start_date='2019-06-01', end_date='2019-12-31',
    frequency="60", # 分钟线
    adjustflag="3")
print('query_history_k_data_plus respond error_code:'+rs.error_code)
print('query_history_k_data_plus respond  error_msg:'+rs.error_msg)

#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)

#### 结果集输出到csv文件 ####
result.to_csv("1_K_hour.csv", index=False)
print(result)

#### 登出系统 ####
bs.logout()
  • 第二步,建立落地表,并通过ETL工具装载数据。
    DS或者kettle等ETL工具,将保存的CSV格式数据抽到你的oracle数据库里。
    真实场景则是,通过ETL工具,从生产线上获取数据,或者从一些别的数据库获取。
    • 在这里因为没有相关的工具。直接就建表往里面插数即可。
    • 建了两个表,一个是股票数据1H的数据表,一个是股票数据日表。
-- Create table
create table DMTEST.DM_TEST_STOCK_DAY
(
  date_time   DATE,
  code        VARCHAR2(20),
  open        NUMBER,
  high        NUMBER,
  low         NUMBER,
  close       NUMBER,
  preclose    NUMBER,
  volume      NUMBER,
  amount      NUMBER,
  adjustflag  NUMBER,
  turn        NUMBER,
  tradestatus NUMBER,
  pctchg      NUMBER,
  isst        NUMBER
);
-- Create table
create table DMTEST.DM_TEST_STOCK_HOUR
(
  date_time  DATE,
  hour       NUMBER,
  code       VARCHAR2(20),
  open       NUMBER,
  high       NUMBER,
  low        NUMBER,
  close      NUMBER,
  volume     NUMBER,
  amount     NUMBER,
  adjustflag NUMBER
);
  • 其中插入的数据

在这里插入图片描述

  • 第三步,通过SP或者视图等能够存放加工逻辑的形式,把数据源进行处理,并整理到DM层去。
    • 像对应的股票的时表数据,就可以对股票编码的格式进行转换,对时间的格式进行转换。
    • 还可以计算5,10,20,30,100日的移动平均线等等。

因为家用电脑,没有必要整多个数据库,就当此时的表已经是最后展现使用的表。

  • 第四步,通过工具或者JS进行数据的展示,这个阶段一般来说都是有专门的前台开发人员。

因为本身前台能力有限,只能做比较简单的展示和交互。在这里主要用帆软进行简单的演示。

  • 交互的效果为:点击查询后,能够查询对应时间的股票价格,在这里可以展示股票的日涨幅。

在这里插入图片描述

  • 然后点击具体的股票后,可以查看对应的K线图。(PS:因为官网下载的帆软工具个人的最新版是没有K线图的,要自己额外下载插件包,故在这里用折线图显示)

有时间的话,可以好好弄一下这个图标。现在太丑了…

在这里插入图片描述

  • 其中参数的传导,主要靠帆软工具的事件触发,改变图标的全局参数来使K线图展示数据进行变化。
  • 具体的设置如下:

在这里插入图片描述

SIT

测试阶段,自己测试。

UAT

测试阶段,业务测试。

上线

都通过后,就可以上生产了。

执行计划

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐