通过鼠标单击生成 2D 数据的工具

数据挖掘 数据 工具
2021-09-20 17:51:33

通常,当我学习新的机器学习方法或试验数据分析算法时,我需要生成一系列 2D 点。教师在上课或辅导课时也经常这样做。

在某些情况下,我只是创建一个函数,添加一些噪音,然后绘制它,但很多时候我希望我可以在图表上单击鼠标来生成点。例如,当我想在 x 和 y 之间生成相当复杂的关系时,想以编程方式生成点的正确公式很麻烦。

是否存在允许我使用鼠标生成数据点的工具,并可以选择导出为 CSV(或其他简单格式)?

例如,我目前正在学习如何使用互信息和熵作为变量之间依赖关系的度量。我想看看当我有明显依赖但没有线性关系的数据时会发生什么,所以我画了这张图片:

非线性相关

现在我只需要一种将点的坐标导出到 CSV 的方法。我意识到这是一个简单的程序,我可以编写自己的程序,但肯定有人已经这样做并创建了一个工具来做到这一点?它可以是网站、.exe、Python 源代码或任何其他应用程序。

4个回答

我最近发现了这个网站:https ://guoguibing.github.io/librec/datagen.html

输出点列表和每个点的颜色 ID(类)。

截屏: 数据生成截图

在 R 中:

首先设置一个空白图,其中包含您需要的任何 x 和 y 比例限制:

plot(NA, xlim=c(11,20),ylim=c(10,99))

然后单击单击单击鼠标按钮 1 并以鼠标按钮 2 结束(可能):

pts = data.frame(locator(type="p"))

然后另存为 CSV 文件:

write.csv(pts,"pts.csv",row.names=FALSE)

生产:

"x","y"
20.9461142167608,54.0921852908633
11.6463003491398,24.5409354249845
14.4239385175408,44.1769632963908
14.7755382856928,29.5957544809901
14.7931182741004,62.8409105801038

我找到了一个简单的 Python 解决方案,改编自https://stackoverflow.com/q/25521120/1265192

如果需要,这也适用于 Jupyter Notebook。

import numpy as np
import matplotlib.pyplot as plt

%matplotlib qt

fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111)
ax.set_xlim(0,800)
ax.set_ylim(0,600)

plt.grid(True)

coords = []

def onclick(event):
    x, y = event.xdata, event.ydata
    
    print(f'{x:0.1f},{y:0.1f}')

    global coords
    coords.append((x, y))

    ax.scatter([x], [y], c='b', s=150)
    plt.draw()
    
cid = fig.canvas.mpl_connect('button_press_event', onclick)

fig.show()

坐标存储在coords屏幕上并打印到屏幕上(但有 1 个小数位)。可以将坐标保存到文件中,但我只需将打印的坐标复制/粘贴到我想要的任何位置。

只是更新其他答案。

你可以使用这个网站: https ://guoguibing.github.io/librec/datagen.html

使其成为数据框:

points = pd.read_csv('/content/pontos.csv', sep='\n', delimiter=',', names=['x','y','class'])

在此处输入图像描述