如何将一个大型表格数据分割成更小、相关的表格?(不是数据库问题)

4
我希望能以易懂的方式描述这个问题。我无法开始解决这个谜题,尽管我(大部分)理解它。我不确定从哪里开始,真的希望有人能指导我朝正确的方向前进。
我有一个大型数据表格。它描述了对象之间的关系。假设Y轴上有编号为1-1000的项目,而X轴也有编号为1-1000的项目。如果Y轴上的项目#234与X轴上的项目#791相关,则在行和列交叉的表中会有一个标记。在一些行业中,这被称为真值表。可以一眼看出系统中有多少项相互关联。表中的标记可以帮助识别趋势和模式。
以下是关于表格性质的其他有用信息:
  • 每个轴上每个项目的关系数(r)的完整范围可以为1 <= r <= axisTotal。
  • X轴和Y轴将共享公共项目,但每个轴也将具有另一个轴没有的项目。
  • 每个项目在每个轴上只存在一次。它可以在X和Y上,但每个轴上只会出现一次。
  • 每个轴上的项目总数很可能不相等。每个轴可以有50到数千个项目。
最终结果是这将是一个需要打印的报告。我们已经成功地打印了一张11英寸X 17英寸纸上有大约100-150个项目的表格。如果超过这个数量,它就会变得太小而无法阅读。
我正在尝试将超大表格拆分为较小的表格,但相关点需要保持在一起。如果我获取X轴上的1-100项,则需要获取它们与Y轴上关联的每个项目。
我生成了许多这些表格,虽然关系数可以是任意的,但我从未见过一个项目与所有其他项目有关。因此,在实际应用中,范围更像是1 <= r <=(10%* axisTotal)。如果一个项目的关系超过了这个范围,它可以分成多个表格,但这并不是最优的选择。
归根结底,我认为我们和我们的客户会很高兴,如果一个1000x1000项的表格被分成8到10个打印页面的更小的相关表格。
任何指导都将是极大的帮助!谢谢。
---编辑--- 值得注意的另一件事是,表中没有空行或列。每个x和y轴上的项目都至少与对面轴上的1个项目相关。

---编辑--- 这里是我描述的一个小真值表的示例:Example Truth Table。每一行和每一列都至少有一个关系。

---编辑--- 2011年5月18日 说实话,我在这个项目上进展很顺利,但被拉走了几周。所以在我回到这个问题之前还需要一点时间。但这是我必须尽快解决的问题。

---编辑--- 2011年7月11日 糟糕。看来我现在无法解决这个问题了。我真的很希望能够解决这个问题。通过讨论,我们决定将真值表作为Excel电子表格的附加资源呈现在主要报告中。Excel 2007及以上版本可以处理数千列,完全足够。此外,我们添加了一些VBA代码,允许查看者双击列标题。这样做会将行减少到只有存在交互的行,并删除空列。通过这种方式,他们可以根据所需查看的项目看到一个小的子表,并在需要时打印它。


1
看起来你正在寻找一种聚类算法,可以将相关的事物分组到更易管理的表中。我对此了解不多,除了建议搜索“机器学习”和“聚类分析”等短语并尝试弄清楚你需要了解什么之外,我无法提供更多建议。 - btilly
@btilly,感谢你给这个问题命名,在维基百科上我找到了一些关于聚类的资料。我正在研究它。如果我想出了解决我的问题的算法,我会在这里发布它。 - jwatts1980
2个回答

1

这不是一个答案,我只是想尝试更好地可视化您的数据。它看起来有点像这样吗?

        Alice  Bob  Charlie ... Zelda
Shoes     X            X
Hats            X                 X
Gloves                 X
...
Pants           X

编辑

是否需要以表格形式显示数据?还是只需列出每个项目?例如:

  • Alice
    • 鞋子
  • Bob
    • 帽子
    • 裤子
  • Charlie
    • 鞋子
    • 手套
  • Zelda
    • 帽子

或者另一种方式:

  • 鞋子
    • Alice
    • Charlie
  • 帽子
    • Bob
    • Zelda
  • 手套
    • Charlie
  • 裤子
    • Bob

编辑2

好的,我制作了一个更大的真值表,希望能更好地理解您想要如何分割事物:

   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 1 x   x     x                             x
 2   x x     x             x         x     x
 3 x               x             x             x
 4         x             x     x
 5   x           x                 x
 6               x             x           x
 7   x             x             x
 8         x               x               x

为了论证,假设每页只能容纳4行(因为我早上不想打一个巨大的表格),所以我们将其分成两页。首先,显示每一行很重要,对吧?其次,需要显示从未有值的列吗?例如,在此表格中,YZ在第1到8行中从未有过值,它们可以从报告中排除掉吗?还是它们仍然需要在那里?第三,行的顺序重要吗?

如果完全空白的列不重要,那么我们可以从上面的表格中删除10列,并将其压缩为:

   A B C E F H I L M O P Q R U V W
 1 x   x   x                 x
 2   x x   x       x       x x
 3 x           x       x         x
 4       x       x   x
 5   x       x           x
 6           x       x       x
 7   x         x       x
 8       x         x         x

如果行顺序不重要,您可以通过采用最佳行排列(不一定在此处显示)进一步压缩它。下面的两个表格已经被压缩到11列和10列:

  A B C F H I M P Q R U
1 x   x x             x
2   x x x     x     x x
5   x     x       x
7   x       x   x

  A E H I L M O P U W
3 x     x       x   x
4   x     x   x
6     x       x   x
8   x       x     x

我这样做是不是完全走错了方向?这些都只是为了帮助我更好地理解您的数据和输出要求而提出的问题。

另外,说真的,是否有获取更大的打印机/绘图仪的选项?还有,是否可以生成PDF并使用Acrobat的打印平铺选项?


一般的要求是它必须是表格形式的。真值表是我们所针对行业中表示关系的常用方法。真值表是一个更大报告的一部分,其中包括了一个视图,可以将各个项目进行细分。 - jwatts1980
@jwatts1980 我在上面添加了一些更多的问题。 - Chris Haas
@Chris Haas 对于你的新示例,看起来相当不错。它还说明了这种方法固有的一些弱点,即多个列在两个表中都重复出现。 "完美" 的情况应该是列和行都不重复,但我认为在许多情况下这在数学上可能是不可能的。 也就是说,我认为目标应该是尽量减少重复。 如果有选择的话,对于我所代表的数据,重复行比重复列更好。 - jwatts1980
@Chris Haas 我在我的问题中添加了一个关于表格性质的编辑。在“超级表格”中不会有空行或空列。每个轴上的每个项目都将与另一个轴上的至少1个项目相关联。 - jwatts1980
@Chris Haas 关于大型打印机和平铺的问题...这些都是我们讨论过的选项。我们甚至尝试过平铺页面,但我们觉得最终结果并不理想。如果只能在平铺和没有表格之间选择,那么有表格会更好。但我们认为,将“超级表格”拆分成较小的表格需要付出更多努力,这比长期获取绘图仪更好。此外,我们希望为客户提供尽可能方便的服务,翻阅一小堆纸张似乎比展开一张巨大的纸张更好。 - jwatts1980

0

去年我在计算生物学 PLoS 期刊(www.ploscompbiol.org)上读到了一篇与您的问题相关的文章。

简而言之,它描述了一种新的方法,当我们已经有一组蛋白质和关于它们一对一相互作用的表格数据时,我们想将它们分组,使得组内交互和两个组之间的交互要么最大化,要么(这是创新的想法)最小化。

如果我们用黑色表示高交互,白色表示低交互来绘制起始数据表格,它看起来像是随机的灰色。在计算和重新排列完成后(因此将分组项放置在彼此附近),结果表格看起来更像是黑白正交区域。

文章:蛋白质相互作用网络——不仅仅是模块,其中还提到了其他旧技术来对这种数据进行分组。


哇,那篇文章相当厚实。我查看了一些参考资料,但还没有找到我需要的内容。如果其他途径都无法解决问题,我会深入研究这个方向。 - jwatts1980

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接