• Tableau 合集2:Table Extension通过python做词云图


    目录:

    一、前言

    听说前几天Tableau更新了,有一个新的功能Table Extension,可以方便处理数据表,特别是对Python、R等第三方工具做了更好的支持。
    过往Tableau只能在原有数据表上新增计算列或通过数据源筛选期删减行数据,但却不能通过对数据进行处理,然后新增行数,Table Extension便可以通过扩展实现该功能,这方面比较经典的应用应该非词云图莫属了。
    以往版本,如果要做词云图,一般是有一个数据表,然后通过Python对表中的相关文本进行分词处理,再保存为新的数据表,再将新数据表拉到Tableau进行词云图制作(其实这样子直接在Python画词云图更便捷!)。
    现在通过Table Extension,便可以在Tableau上更好地进行词云图绘制了。(当然,它的功能远不止于此,各种算法也可以驾驭。)

    二、配置环境

    2.1 下载安装Tableau 2022.3

    Tableau 2022.3版本 下载链接点此
    image.png
    image.png
    下载完,安装。
    安装过程中可能会出现一个错误1310:无法写入xxx.dll文件,需要确认对该目录有访问权限(忘截图了,大概意思就是这个)。
    解决方法:把360先退出,安装完再打开。

    2.2 安装Tabpy

    Tabpy是联通Tableau和Python的工具。
    安装之前要确保有Python环境!!!
    打开命令提示符或终端,Windows直接敲以下代码回车,Mac使用pip3

    pip install tabpy
    
    • 1

    image.png

    2.3 测试连接

    **一定要打开Tabpy才可以连接!**打开方式如下,在命令提示符或终端输入tabpy回车即可。
    这个跟通过终端调出jupyter notebook类似,打开之后,每一步操作都会在命令提示符或终端打印出来。
    image.png
    打开tabpy之后,切换到Tableau,按以下步骤
    image.png
    接下来会弹出一个窗口,输入一下信息,然后点击测试连接,连通之后点击保存,然后关掉。

    主机名:127.0.0.1或localhost
    端口:9004
    
    • 1
    • 2

    image.png
    image.png

    三、数据准备和处理

    3.1 准备数据

    3.1.1 源数据获取

    数据来源:五部门关于印发《虚拟现实与行业应用融合发展行动计划(2022—2026年)》的通知
    处理之后的数据资源链接见文末。
    数据结构如下:

    在这里插入图片描述


    打开tableau 2022.3,打开文件。
    image.png
    由于只有一个工作表,默认帮我拖到应用区了。这里可以看到多了一个新表扩展程序的按钮,双击点它。
    注意:此时应用区已经有一张表,新增表扩展程序表需要编辑关联关系。(本文3.4 节针对相关内容有做补充)

    在这里插入图片描述


    双击后界面如下:
    image.png
    接下来把Sheet1表拖到【将工作表拖到此处】,然后会出现以下界面:

    1、是添加数据表的地方,可以进行多表关联;
    2、是脚本代码,用于处理数据;
    3、可以选择对应的表单查看表结构,也可以选择关系,编辑处理前后字段间关系的,由于扩展表是第二个应用表,所以需要和第一个应用表Sheet1确认关联关系之后就可以在输出表刷新查看数据预览
    4、是查看输入表和输出表数据的地方。

    在这里插入图片描述

    3.1.2 脚本测试

    官方的推荐脚本return _arg1,接下来在脚本处敲入以下代码,点击应用。

    print(type(_arg1))
    print(_arg1)
    return _arg1
    
    • 1
    • 2
    • 3

    应用之后可以看到界面有一些变化如下图,此时说明代码输出是有效的,因为下图红框左边展示了表扩展程序生成的数据结构。另外两个print()的内容可以在命令提示符或终端查看。
    image.png

    看看终端,数据正常输出,**_arg1**是一个字典类型,采用的是列存储,键是列名,值是每一列的值。(其实这一点在官方的API文档中有说明,在《第四节 拓展》补充)
    注:由于我使用的数据比较长,可能比较难看出来,小伙伴们可以拿一个比较简单的数据集测试,方便看打印结果。(在《第四节 拓展》有提供另外的建表方式,也可以进行打印测试)
    image.png

    3.1.3 错误代码03D52C7A处理

    补充:在你在点击立即更新之后可能会报错,错误代码:03D52C7A(如下)。
    image.png

    Unexpected Error
    内部错误 - 发生意外错误,无法完成操作。
    错误代码:03D52C7A:

    这时点击刷新数据源按钮即可修复。按钮在保存按钮旁边,如下图。
    image.png

    3.2 处理数据-分词

    接下来开始处理一下数据集。
    将内容通过结巴分词切割一下,保留名词、动词和形容词,然后应用查看下结果。

    import pandas as pd         # 使用pandas来进行数据处理
    import jieba.posseg as psg  # 使用jieba进行文本分词
    
    # 将_arg1转为DataFrame,以便后续处理
    df_input = pd.DataFrame.from_dict(_arg1)
    
    
    # 定义分词函数
    def values_cut(arg):
        # 只保留 名词、动词、形容词 这三种词性的词汇
        result = [x.word for x in psg.cut(arg) if x.flag in ['n','v','a']]
        return result
    
    
    df_input['内容分词'] = df_input['内容'].map(lambda x : values_cut(x)) # 调用分词函数对歌词字段进行分词
    df_middle = df_input[['顺序编号', '内容分词']]                        # 只取顺序编号和内容分词,以避免数据冗余。
    df_middle = df_middle.explode('内容分词')[['顺序编号', '内容分词']]   # 对分词后的列表进行行扩展,每个词作为一行数据
    
    df_return = df_middle.to_dict(orient='list')  # 将 DataFrame 转为 dict 形式({"列名1":["列值1","列值2"], "列名2":["列值1","列值2"]})
    return df_return
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    image.png
    注:要先设置关联关系,然后点输出表>立即更新更新数据。

    3.3 可视化

    这时候可以在工作表查看一下分词后的可视化结果。
    image.png
    不得不说,重点特别突出,就是讲虚拟现实的,强调应用!重视通过技术、内容打造沉浸式的体验,同时也有一条支持链,政府鼓励支持企业创新,教研机构支持人才输出,企业支持技术迭代、推广,推动虚拟现实技术和各行业、领域融合发展。
    可以分别筛选一级标题,查看各标题有什么侧重点。

    3.4 补充:扩展多表

    关掉表扩展程序界面(下图红框提示内容),返回上一级。
    image.png
    可以看到,此处显示是Sheet1和表扩展程序表两个表的关联。(可以分别双击任意一个表继续编辑)
    image.png
    还记得开头讲的,打开该Excel文件之后,由于只有一个工作表,于是就自动给我添加到应用区了,所以我使用的第一个表就是Sheet1,再添加其他表时便需要设置关联关系。
    如果有多个工作表(不会默认添加到应用区),或者把Sheet1从工作区移除(保持应用区没有表),然后双击新表扩展程序,此时显示的就只是表扩展程序表(作为第一个表)。在新增表扩展程序表的过程中,也就不会有关联关系的操作了,通过脚本处理之后,数据直接输出。
    注:每新增一张表,都需要编辑关联关系。
    image.png

    再建表扩展程序表。
    如果还需要再添加一张表扩展程序表,单击非扩展表,然后便可双击“新表扩展程序”新增第二张扩展数据表。
    image.png

    四、拓展

    4.1 表计算(table calculations)和表扩展(Table Extensions)

    拓展部分想讲点Tableau表扩展的工作原理,讲工作原理前,必须先搞清楚两个词:表计算(table calculations)和表扩展(Table Extensions
    我一开始没有注意这两个概念,导致中间走了一些弯路,因为表计算有长篇大论,而表扩展的资料少之又少,在没有意识到二者差异前,越看越糊涂!
    表计算是之前老版本支持的和Python“通话”的工具,目前有8个和Python“通话”的函数:SCRIPT_BOOL、SCRIPT_INT、SCRIPT_REAL、SCRIPT_STR、MODEL_EXTENSION_BOOL、MODEL_EXTENSION_INT、MODEL_EXTENSION_REAL、MODEL_EXTENSION_STR。这8个在哪里使用的呢?在“工作表”界面,右击字段,创建>计算字段,然后搜索对应的函数名,便可以看到对应的函数,具体应用此处就先不展开(其实也还没有仔细研究过)。
    本文重点讲的是表扩展,是2022.3才新增的功能,这个功能是在“数据源”界面操作的。
    使用表扩展功能,需要你传入一个表和处理表数据的代码(支持Python、R等),然后Tableau和对应的扩展工具(Tabpy、Rserve等)就会帮你把数据处理好,然后返回到输出表中。

    4.2 工作原理

    了解了二者的差异之后,回到终端。
    在终端提示的数据中,有一个东西引起了我的注意,def _user_script(tabpy, _arg1):
    image.png
    或许,完整的情况是:

    def _user_script(tabpy, _arg1):
     print(type(_arg1))
     print(_arg1)
     return _arg1
    
    • 1
    • 2
    • 3
    • 4

    如果有一点Python基础,应该能够明白,这是一个函数,也就是说我们在Tableau上敲的代码被封装到_user_script()函数中,所以脚本代码才可以使用return语句。
    在查看了Tableau Analytics Extensions API文档之后,我有一些猜测,或许不一定准确,但可以辅助理解相关的数据传输过程:
    Tableau将我传入的表单处理成字典({“列名1”:[“列值1”,“列值2”], “列名2”:[“列值1”,“列值2”]})格式,然后Tabpy进行Post请求时,Tableau将字典传递给_arg1参数,如果直接return arg1那就是直接将Tableau传递进来的数据再原封不动返回,结果输出表和输入表是一致的。
    注意:返回给Tableau的数据格式也必须是字典形式({“列名1”:[“列值1”,“列值2”], “列名2”:[“列值1”,“列值2”]})。

    4.3 更多可能性:自建表和调用API

    再进一步~~
    如果要实现处理后的结果数据,那就可以拿_arg1参数进行处理(如本文的3.2小结),处理完之后只要数据结构是Tableau要求的即可。
    或许你会想到,既然填写函数内容给tabpy处理,那我随便造一个表,或者从其他地方读取数据是不是也可以呢?答案是肯定的!
    比如说,我通过以下脚本进行应用,结果可以正常输出。

    import pandas as pd
    df = pd.DataFrame([i/2 for i in range(10)],columns=['x'])
    df['y2'] = df.x.apply(lambda x:x*x)
    df_return = df.to_dict(orient='list')  
    print(type(df_return))
    print(df_return)
    return df_return
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image.png
    这时候,_arg1是一个空字典{},因为没有表拖到表扩展程序下,也就是说没有输入表。

    也就是说,可以通过该功能,自行创建一个表单,当然还有更加大想象空间的内容:调用API
    有一些外部未入库数据,可以通过开放的API调取数据进行关联,打通数据孤岛。
    注意:需要考虑账户密码的安全性。

    4.4 一点吐槽:和Power BI

    最后,还是得吐槽一下!其实,在Python的支持方面,Tableau似乎有点拉胯,PowerBI通过Python和R绘图的功能老早就上线了,在画图区,选择Py便可链接Python扩展(下图一);也可以通过Python扩展拉取数据表等(下图二)。
    image.png
    image.png

    五、小结

    Table Extension-Python.png

    相关资源下载点此,免积分下载~~~
    image.png

    参考内容:
    甘正-Tableau 2022.3的Table Extension到底怎么用?
    Tableau Analytics Extensions API文档
    Tableau官方表扩展使用说明文档

  • 相关阅读:
    LA@二次型@标准化相关原理和方法
    Appium自动化测试基础 — Android模拟器(Genymotion)安装(一)
    获取URL中的参数
    谣言检测(SRD-PSCD)《Rumor Detection with Self-supervised Learning on Texts and Social Graph》
    Python学习第3天:变量与数据类型
    PlotNeuralNet resnet34和resnet18绘图
    监控易101:全方位解读运维的核心功能与特性
    TSRFormer: Table Structure Recognition with Transformers ----论文阅读
    Linux jprobe的使用和原理
    2022最新版-李宏毅机器学习深度学习课程-P26RNN-2
  • 原文地址:https://blog.csdn.net/qq_45476428/article/details/127722480