欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > Tableau 合集2:Table Extension通过python做词云图

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

日期:2023-09-22 16:58

一、前言

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

二、配置环境

2.1 下载安装Tableau 2022.3

Tableau 2022.3版本 下载链接点此

2.2 安装Tabpy

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

pip install tabpy

2.3 测试连接

**一定要打开Tabpy才可以连接!**打开方式如下,在命令提示符或终端输入tabpy回车即可。
这个跟通过终端调出jupyter notebook类似,打开之后,每一步操作都会在命令提示符或终端打印出来。

主机名:127.0.0.1或localhost
端口:9004

三、数据准备和处理

3.1 准备数据

3.1.1 源数据获取

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

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

3.1.2 脚本测试

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

print(type(_arg1))
print(_arg1)
return _arg1

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

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

3.1.3 错误代码03D52C7A处理

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

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

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

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 resultdf_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

3.3 可视化

这时候可以在工作表查看一下分词后的可视化结果。

3.4 补充:扩展多表

关掉表扩展程序界面(下图红框提示内容),返回上一级。

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

四、拓展

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):

def _user_script(tabpy, _arg1):print(type(_arg1))print(_arg1)return _arg1

如果有一点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

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

4.4 一点吐槽:和Power BI

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

五、小结

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

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

关灯