【发布时间】:2017-09-27 04:09:21
【问题描述】:
我正在添加一个 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-api