我添加了一个 Python 脚本作为 Tableau 计算字段的一部分,Tableau 似乎一次将一行数据传递到计算字段,而不是整个列表(对于 _arg1
和_arg2
)。我已经设置了 TabPy 并与本地主机建立了连接等。我可以运行“hello world!”输入脚本没有错误。我试图遵循一些简单的 DBSCAN tutorial(s)我在网上找到了自己的数据集。我在 Tableau 中有一个二维散点图,我尝试使用图中的 2 个轴对数据点进行聚类。这是我现在使用的计算字段的代码。
SCRIPT_STR(
"from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
import string
def int_to_string(val):
if val == -2:
return 'NaN'
elif val == -1:
return 'Outlier'
else:
return string.ascii_lowercase[val]
eps=1
min_samples=10
ids = range(len(_arg1))
X = np.column_stack([_arg1, _arg2])
X = pd.DataFrame(X, index=ids, columns=['x', 'y'])
X.dropna(how='any', inplace=True)
X_scale = StandardScaler().fit_transform(X)
labels = DBSCAN(eps=eps, n_jobs=-1,
min_samples=min_samples).fit_predict(X_scale)
result = pd.Series(index=X.index)
result.loc[X.index] = labels
result.fillna(-2, inplace=True)
result = result.apply(int_to_string)
return list(result)",
avg([Var1]), avg([Var2])
)
它比教程更复杂,因为我的数据集有 NaN 值,我正在尝试使用 pandas 代码处理这些值。
真正的问题是 X
DataFrame 的大小似乎只有 1 行。我知道实际数据并非如此;在 Tableau 中,散点图上显示了 1000 个数据点。我知道它只有 1 行数据,因为我从 Tableau 收到以下错误(我认为当一行数据恰好有空值时会发生此错误)...
...因为我在脚本中添加了一段 pickle 语句,将 X
DataFrame 导出到文件,当我在 Python 中打开该 pickle 对象时,它显示 DataFrame 有一个形状(1, 2); 1 行 2 列
Var1
和 Var2
不是聚合字段,因此取平均值不应将它们减少为单个值。
以前有人遇到过这种情况吗?可能导致此问题的 Tableau 脚本代码有什么问题?或者我做错了什么?
最佳答案
要一次发送所有数据,您应该更改脚本计算的寻址设置。假设您将计算放在行上,然后右键单击它,选择编辑表计算,然后选择特定维度并检查其中的每个维度
关于python - Tableau Python脚本仅处理一行数据......它应该是1000's,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46310927/