我有一个大约 3M 行的数据集。我只有 2 个类别(类别 - 2:1 的比例)。现在我想可视化(散点图)它的分布来理解数据是否可以线性分离(为了选择模型类型)。我已经尝试过这个并且情节是不可理解的。可视化此数据集的最佳方法是什么?
可视化大量数据的最佳方法
数据挖掘
熊猫
matplotlib
海运
2021-09-16 03:16:41
2个回答
我有三个建议可能会有所帮助。
- 减小点大小
- 使点高度透明
- 对点进行下采样
由于您没有提供任何样本数据,我将使用一些随机数据来说明。
## The purpose of S1 is to intermix the two classes at random
S1 = sample(3000000)
x = c(rnorm(2000000, 0, 1), rnorm(1000000, 3,1))[S1]
y = c(rnorm(2000000, 0, 1), rnorm(1000000, 3,1))[S1]
z = c(rep(1,2000000), rep(2,1000000))[S1]
plot(x,y, pch=20, col=rainbow(3)[z])
没有任何调整的基础情节不是很好。让我们应用建议 1 和 2。
plot(x,y, pch=20, cex=0.4, col=rainbow(3, alpha=0.01)[z])
减小点大小并使点高度透明会有所帮助。这可以更好地了解两个分布之间的重叠。
如果我们下采样,我们不需要那么高的透明度。
## The purpose of S2 is to downsample the data
S2 = sample(3000000, 100000)
plot(x[S2],y[S2], pch=20, cex=0.4, col=rainbow(3, alpha=0.1)[z[S2]])
这给出了一个不同的视图,它提供了对两个分布的相似但不相同的理解。
这些不是魔术,但我认为它们很有帮助。
假设您使用的是 Python,datashader则创建该模块是为了有效地显示大量点。
但是,我建议改用该hvplot软件包,因为它包含datashader支持并提供pandas兼容的 API。
# import modules
import pandas as pd
import hvplot.pandas
# read your data into dataframe (or whatever source).
df = pd.read_csv('large_file.csv')
# plot using hvplot; normally df.plot
df.hvplot.scatter('x_column', 'y_column', datashade=True')
datashader实际上会创建一系列图像,并且仅将数据显示为所需的分辨率,而不会过度绘图。当你放大它时,它会用精致的细节更新视图。
笔记
如果您正在读取比 RAM 数据集更大的数据,您可能也需要检查一下dask。


