假设我有一个大约一百万个单词的数据库,我想直观地了解一个特定的、非常罕见的单词是如何在这些数据中分布的。我的目标是能够清楚地看到这个词是否倾向于聚集在一起,或者它是否相对均匀分布。什么是可视化的一些好方法?
例如,我看到了一些看起来很有用的东西。它基本上是一个带状(长矩形),其中某物的每个实例都由一条非常细的红色垂直线表示。问题是我不知道这些叫什么,因此我不知道如何在 R 中制作这样的东西。
任何帮助找到正确的 R 函数,或任何其他关于可视化此类数据的好方法的建议,将不胜感激。
假设我有一个大约一百万个单词的数据库,我想直观地了解一个特定的、非常罕见的单词是如何在这些数据中分布的。我的目标是能够清楚地看到这个词是否倾向于聚集在一起,或者它是否相对均匀分布。什么是可视化的一些好方法?
例如,我看到了一些看起来很有用的东西。它基本上是一个带状(长矩形),其中某物的每个实例都由一条非常细的红色垂直线表示。问题是我不知道这些叫什么,因此我不知道如何在 R 中制作这样的东西。
任何帮助找到正确的 R 函数,或任何其他关于可视化此类数据的好方法的建议,将不胜感激。
使用 1200 dpi 打印机为每个单词使用最细的线条(一个像素),您的一百万个单词的绘图仍将接近 20 米长!
也许密度图会更有帮助。
让我们在这里取一个导数(差异),因此您无需使用位置,而是直接使用您想要的东西:距离。
说单词 FOO 在文本中出现 30 次。计算每个连续出现的 FOO 之间的距离(其他单词的数量),创建一个包含 29 个距离的向量。然后选择你的图:直方图、密度、xy 和 log x 等。
这不会向您显示集群的位置,但它确实显示了集群。
虽然 Whiber 原则上是正确的,但您仍然可能会看到一些东西,因为您的单词非常罕见,并且您只想要一个单词的情节。一些非常不常见的东西可能只出现 30 次,可能不超过 500 次。假设您将单词转换为一百万长的单词向量。您可以使用基本的 R 命令轻松构建绘图。我们将向量称为“单词”,将稀有项目称为“wretch”。
n <- length(words)
plot(1:n, integer(n), type = 'n', xlab = 'index of word', ylab = '', main = 'instances of wretch', yaxt = 'n', frame.plot = TRUE)
wretch <- which(words %in% 'wretch')
abline(v = wretch, col = 'red', lwd = 0.2)
如果您需要考虑单词的变体,可以使用 grep 命令更改分配 wretch 的行。此外,abline 命令中的 lwd 可以根据单词的频率设置得更粗或更细。如果您最终绘制 400 个实例,0.2 将正常工作。
我尝试了一些此类数据的密度图。我导入了大约 50,000 字的莎士比亚,在上面的代码中找到模式对我来说比在密度图中更容易。我使用了一个非常常见的词,它的出现频率比平均频率(“to”)高 200 倍,而且这些图看起来还不错。我想你会用 1e6 个单词的罕见实例制作一个像这样的精美图表。
我不知道这对您的情况是否有用,但在生物信息学中,我经常觉得需要可视化给定数据集中基因计数的分布。这绝对没有你的数据集那么大,但我认为大多数大型数据集都可以遵循该策略。
一个典型的策略是使用层次聚类(或任何其他聚类过程)找到预定数量的聚类。一旦你有了这些簇,你就可以从这些簇中的每一个中采样一个基因。假设基因是集群的代表,可视化基因的计数(以密度图、直方图、qq 图等形式)相当于可视化集群的行为。您可以对所有集群执行相同的操作。
基本上,您将庞大的数据集简化为集群,然后可视化这些集群的代表,假设“平均而言”集群的行为将“或多或少”保持不变。
警告:此方法对很多东西高度敏感,少数是,聚类方法,您选择多少个聚类等。
我相信如果单词的数量相当大(比如说50)将是相当困难的。正如 whuber 恰当地指出的那样,这几乎是不可能的。