前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Byzer-yaml-visualiaztion 插件介绍

Byzer-yaml-visualiaztion 插件介绍

作者头像
用户2936994
发布2022-07-21 14:14:09
3750
发布2022-07-21 14:14:09
举报
文章被收录于专栏:祝威廉祝威廉

Byzer-yaml-visualization 是一款 Byzer 可视化插件。通过该插件,用户可以通过 YAML 配置文件描述图表。

安装部署

可使用如下命令安装(需要有网络):

代码语言:javascript
复制
!plugin app add - "byzer-yaml-visualization-3.0";

卸载:

代码语言:javascript
复制
!plugin app remove  "byzer-yaml-visualization-3.0";

卸载需要重启引擎

折线图

代码语言:javascript
复制
load delta.`demo.gapminder` as gapminder;

select * from gapminder where continent='Oceania' as gapminder2;

!visualize gapminder2 '''
runtime: 
   env: source /opt/miniconda3/bin/activate ray-1.12.0
   cache: false  
fig:
   line:       
      x: year
      y: lifeExp       
      color: country      
''';

柱状图

代码语言:javascript
复制
load delta.`demo.gapminder` as gapminder;

select * from gapminder where continent='Oceania' as gapminder2;

!visualize gapminder2 '''
runtime: 
   env: source /opt/miniconda3/bin/activate ray-1.12.0
   cache: false  
fig:
   bar:       
      x: year
      y: lifeExp       
      color: country      
''';

散点图

代码语言:javascript
复制
load delta.`demo.iris`as iris;

!visualize iris '''
runtime: 
   env: source /opt/miniconda3/bin/activate ray-1.12.0
   cache: false
control:
   ignoreSort: false   
fig:
   scatter:
      title: "花瓣图" 
      x: sepal_width
      y: sepal_length
      size: petal_length 
      color: species
      hover_data:
         - petal_width                    
      labels: 
         sepal_width: "花瓣宽度"
         sepal_length: "花瓣长度"
''';

饼图

代码语言:javascript
复制
load delta.`demo.gapminder` as gapminder;

select * from gapminder where continent='Europe' 
and year="2007"
as gapminder2;

select pop, if(pop < 2.e6,"Other countries",country)  as country from gapminder2
as gapminder3; 

!visualize gapminder3 '''
runtime: 
   env: source /opt/miniconda3/bin/activate ray-1.12.0
   cache: false  
fig:
   pie:
      title: "欧洲人口分布"       
      values: pop
      names: country
''';

泡泡图

代码语言:javascript
复制
load delta.`demo.gapminder` as gapminder;

select * from gapminder where year="2007"
as gapminder2;

!visualize gapminder2 '''
runtime: 
   env: source /opt/miniconda3/bin/activate ray-1.12.0
   cache: false  
fig:
   scatter:       
      x: gdpPercap
      y: lifeExp
      size: pop
      color: continent
      hover_name: country 
      log_x: True
      size_max: 60   
''';

地图类

代码语言:javascript
复制
load Rest.`https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json` 
as counties1;

select "counties" as key, cast(content as string) as value from counties1 as counties;

load Rest.`https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv` 
as fips1;


select explode(split(cast(content as string),"\n")) as content from fips1 as fips2;

select split(content,",")[0] as fips,cast(split(content,",")[1] as double) as unemp 
from fips2 where content != "fips,unemp"
as fips; 

!visualize fips '''
confFrom: counties
runtime: 
   env: source /opt/miniconda3/bin/activate ray-1.12.0
   cache: false
control:
   ignoreSort: True        
fig:
   choropleth_mapbox:        
      geojson:
         vv_type: jsonObj
         vv_value: counties  
      locations: fips
      color: unemp
      color_continuous_scale: "Viridis"
      range_color: 
         vv_type: code
         vv_value: "(0, 12)" 
      mapbox_style: "carto-positron"
      zoom: 3
      center: 
         lat: 37.0902
         lon: -95.7129
      opacity: 0.5
      labels:
         unemp: "失业率"   
''';

这个可视化略微复杂些,涉及到了变量引用。在 YAML 文件中,我们可以引用表中的数据。不过能够被引用的表的数据必须满足两个条件:

1. 表通过 confFrom 指定

2. 表的字段只能包含 key, value,并且都为字符串。在这个实例里, counties 表是符合这个要求的。

然后你就可以在 YAML 文件中通过如下方式引用 counties 表中 key 字段为 counties 对应的 value 字段的值。

代码语言:javascript
复制
geojson:
    vv_type: ref
    vv_value: counties

此时 geojson 的值就会到表 counties 中去找,找到key 为 counties 的值。此时值为字符串。

在本例中, vv_type 是个特殊类型 jsonObj

代码语言:javascript
复制
geojson:
    vv_type: jsonObj
    vv_value: counties

此时 geojson 的值会是 json object 对象。

另外一个值得一提时,这里引入了一个区间表达:

代码语言:javascript
复制
range_color: 
    vv_type: code
    vv_value: "(0, 12)" 

在这段 YAML 代码中,实际上 range_color 的值会被翻译成一个区间。

更多示例

等我填完。。。。

额外一些内容

Excel 数据使用示例

代码语言:javascript
复制
load excel.`./example-data/excel/user-behavior.xlsx` 
where header="true" as user_behavior;

select cast(datatime as date) as day,
       sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,
       count(distinct user_id) as uv
from user_behavior
group by cast(datatime as date)
order by day as day_pv_uv;

!visualize day_pv_uv '''
fig:
    bar:
       title: "日PV/UV柱状图" 
       x: day
       y: 
        - pv
        - uv            
       labels: 
           day: "日期"           
''';

YAML 格式详解

YAML中的顶级元数有三个: 1. runtime 配置运行时。 YAML 文件会被转化为 Python 代码执行,所以runtime 其实是配置 Python环境。 2. control 控制图表的一些生成行为,比如是生成html还是image,数据是不是再需要一次排序等等 3. fig 描绘生成什么样的图表,该图表的配置是什么

runtime

runtime 下只有一层子元数,常见配置如下。

1. env 指定需要使用的 Python环境。 2. cache 图表结果是不是要缓存,如果你在其他cell要引用这个图标结果,需要设置为true。默认设置为false 即可。 3. output 将图表转化为一个表引用,方便后续 SQL 使用。默认可以不用配置。 4. runIn 在哪个类型节点执行。 driver/executor 。推荐 driver。

control

1. ignoreSort 默认为true. 系统会对 X 轴字段进行默认进行排序 2. format 默认为 html。 如果需要生成图片,可以设置为 `image`

fig

1. http://fig.xxx 其中 xxx 为图标类型。支持 line,bar 2. fig.xxx.title 图表标题 3. fig.xxx.x X 轴。 支持字符串或者数组配置 4. fig.xxx.y Y 轴。 支持字符串或者数组配置 5. fig.xxx.labels 改动图标中的一些名称。 默认为字典

一个较为完整的配置如下:

代码语言:javascript
复制
runtime: 
   env: source /opt/miniconda3/bin/activate ray-1.12.0
   cache: false
   output: jack
control:
   ignoreSort: false
   format: image   
fig:
    bar:
       title: "日PV/UV柱状图" 
       x: day
       y: 
        - pv
        - uv            
       labels: 
           day: "日期"

如何生成图片并且保存到文件系统或者上传

下面是一段示例代码:

代码语言:javascript
复制
load excel.`./example-data/excel/user-behavior.xlsx` 
where header="true" as user_behavior;

select cast(datatime as date) as day,
       sum(case when behavior_type = 'pv' then 1 else 0 end) as pv,
       count(distinct user_id) as uv
from user_behavior
group by cast(datatime as date)
order by day as day_pv_uv;

!visualize day_pv_uv '''
runtime: 
   env: source /opt/miniconda3/bin/activate ray-1.12.0
   cache: false
   output: jack
control:
   ignoreSort: false
   format: image   
fig:
    bar:
       title: "日PV/UV柱状图" 
       x: day
       y: 
        - pv
        - uv            
       labels: 
           day: "日期"           
''';

select unbase64(content) as content, "wow.png" as fileName from jack as imageTable;

save overwrite imageTable as image.`/tmp/images` 
where imageColumn="content" 
and fileName="fileName";

-- !fs -ls /tmp/images;

save overwrite command as Rest.`YOUR_UPLOAD_URL` 
where `config.method`="post"
and `header.content-type`="multipart/form-data"345
and `form.file-path`="/tmp/images/wow.png"
and `form.file-name`="wow.png";

值得注意的是,图片默认被经过 base64 编码,所以我们需要先解码,解码完成后,你可以使用 image 数据源将图片保存到文件系统,然后通过 Rest 数据源上传到某个服务中。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装部署
  • 折线图
  • 柱状图
  • 散点图
  • 饼图
  • 泡泡图
  • 地图类
  • 更多示例
  • 额外一些内容
  • Excel 数据使用示例
  • YAML 格式详解
  • runtime
  • control
  • fig
  • 如何生成图片并且保存到文件系统或者上传
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档